From ea0b86d023787b8c5ba7809423cd39c2521366dd Mon Sep 17 00:00:00 2001 From: DrKLO Date: Thu, 13 Nov 2014 01:16:59 +0300 Subject: [PATCH] More Android L design --- .../org/telegram/android/ImageReceiver.java | 22 +- .../ui/Adapters/ContactsActivityAdapter.java | 12 +- .../org/telegram/ui/Cells/DialogCell.java | 4 +- .../java/org/telegram/ui/Cells/EmptyCell.java | 8 + .../java/org/telegram/ui/Cells/TextCell.java | 2 + .../ui/Cells/TextDetailSettingsCell.java | 4 +- .../java/org/telegram/ui/Cells/UserCell.java | 354 +++----- .../java/org/telegram/ui/ChatActivity.java | 30 +- .../org/telegram/ui/ChatProfileActivity.java | 776 ----------------- .../org/telegram/ui/ContactsActivity.java | 6 +- .../org/telegram/ui/GroupCreateActivity.java | 430 +++------- .../telegram/ui/GroupCreateFinalActivity.java | 8 +- .../java/org/telegram/ui/LaunchActivity.java | 4 +- .../java/org/telegram/ui/ProfileActivity.java | 805 +++++++++++++++--- .../org/telegram/ui/SettingsActivity.java | 108 ++- .../ui/SettingsBlockedUsersActivity.java | 92 +- .../ui/Views/ActionBar/ActionBar.java | 9 +- .../ui/Views/ActionBar/ActionBarMenuItem.java | 4 +- .../org/telegram/ui/Views/AvatarDrawable.java | 24 +- .../res/layout-ar/chat_profile_add_row.xml | 34 - .../layout-ar/chat_profile_avatar_layout.xml | 78 -- .../res/layout-ar/group_create_layout.xml | 68 -- .../layout-ar/settings_row_button_layout.xml | 8 + .../user_profile_leftright_row_layout.xml | 35 - .../main/res/layout/chat_profile_add_row.xml | 33 - .../res/layout/chat_profile_avatar_layout.xml | 74 -- .../main/res/layout/group_create_layout.xml | 65 -- .../layout/settings_blocked_users_layout.xml | 44 - .../res/layout/settings_logout_button.xml | 24 - .../res/layout/settings_row_button_layout.xml | 8 + .../settings_unblock_info_row_layout.xml | 14 - .../user_profile_leftright_row_layout.xml | 36 - TMessagesProj/src/main/res/values/strings.xml | 6 +- 33 files changed, 1208 insertions(+), 2021 deletions(-) delete mode 100644 TMessagesProj/src/main/java/org/telegram/ui/ChatProfileActivity.java delete mode 100644 TMessagesProj/src/main/res/layout-ar/chat_profile_add_row.xml delete mode 100644 TMessagesProj/src/main/res/layout-ar/chat_profile_avatar_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout-ar/group_create_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout-ar/user_profile_leftright_row_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_profile_add_row.xml delete mode 100644 TMessagesProj/src/main/res/layout/chat_profile_avatar_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/group_create_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/settings_blocked_users_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/settings_logout_button.xml delete mode 100644 TMessagesProj/src/main/res/layout/settings_unblock_info_row_layout.xml delete mode 100644 TMessagesProj/src/main/res/layout/user_profile_leftright_row_layout.xml diff --git a/TMessagesProj/src/main/java/org/telegram/android/ImageReceiver.java b/TMessagesProj/src/main/java/org/telegram/android/ImageReceiver.java index f7a28cf1..36aeb355 100644 --- a/TMessagesProj/src/main/java/org/telegram/android/ImageReceiver.java +++ b/TMessagesProj/src/main/java/org/telegram/android/ImageReceiver.java @@ -225,11 +225,13 @@ public class ImageReceiver { if (bitmapDrawable != null) { if (bitmapShader != null) { drawRegion.set(imageX, imageY, imageX + imageW, imageY + imageH); - roundRect.set(drawRegion); - shaderMatrix.reset(); - shaderMatrix.setRectToRect(bitmapRect, roundRect, Matrix.ScaleToFit.FILL); - bitmapShader.setLocalMatrix(shaderMatrix); - canvas.drawRoundRect(roundRect, roundRadius, roundRadius, roundPaint); + if (isVisible) { + roundRect.set(drawRegion); + shaderMatrix.reset(); + shaderMatrix.setRectToRect(bitmapRect, roundRect, Matrix.ScaleToFit.FILL); + bitmapShader.setLocalMatrix(shaderMatrix); + canvas.drawRoundRect(roundRect, roundRadius, roundRadius, roundPaint); + } } else { int bitmapW = bitmapDrawable.getIntrinsicWidth(); int bitmapH = bitmapDrawable.getIntrinsicHeight(); @@ -412,10 +414,12 @@ public class ImageReceiver { public void setRoundRadius(int value) { roundRadius = value; if (roundRadius != 0) { - roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - roundRect = new RectF(); - shaderMatrix = new Matrix(); - bitmapRect = new RectF(); + if (roundPaint == null) { + roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + roundRect = new RectF(); + shaderMatrix = new Matrix(); + bitmapRect = new RectF(); + } } else { roundPaint = null; roundRect = null; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivityAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivityAdapter.java index 6030b4ec..b995cf24 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivityAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivityAdapter.java @@ -18,6 +18,7 @@ import org.telegram.messenger.TLRPC; import org.telegram.android.ContactsController; import org.telegram.android.MessagesController; import org.telegram.messenger.R; +import org.telegram.ui.AnimationCompat.ViewProxy; import org.telegram.ui.Cells.DividerCell; import org.telegram.ui.Cells.GreySectionCell; import org.telegram.ui.Cells.LetterSectionCell; @@ -28,6 +29,7 @@ import java.util.ArrayList; import java.util.HashMap; public class ContactsActivityAdapter extends BaseSectionsAdapter { + private Context mContext; private boolean onlyUsers; private boolean needPhonebook; @@ -203,18 +205,18 @@ public class ContactsActivityAdapter extends BaseSectionsAdapter { } } else if (type == 0) { if (convertView == null) { - convertView = new UserCell(mContext); - convertView.setPadding(AndroidUtilities.dp(LocaleController.isRTL ? 16 : 54), 0, 0, 0); + convertView = new UserCell(mContext, 58); + ((UserCell) convertView).setStatusColors(0xffa8a8a8, 0xff3b84c0); } ArrayList arr = ContactsController.getInstance().usersSectionsDict.get(ContactsController.getInstance().sortedUsersSectionsArray.get(section - (onlyUsers ? 0 : 1))); TLRPC.User user = MessagesController.getInstance().getUser(arr.get(position).user_id); - ((UserCell)convertView).setData(user, null, null); + ((UserCell)convertView).setData(user, null, null, 0); if (ignoreUsers != null) { if (ignoreUsers.containsKey(user.id)) { - ((UserCell)convertView).drawAlpha = 0.5f; + ViewProxy.setAlpha(convertView, 0.5f); } else { - ((UserCell)convertView).drawAlpha = 1.0f; + ViewProxy.setAlpha(convertView, 1.0f); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java index 9b44bf64..9c385265 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java @@ -702,8 +702,6 @@ public class DialogCell extends BaseCell { canvas.restore(); } - avatarImage.draw(canvas); - if (useSeparator) { if (LocaleController.isRTL) { canvas.drawLine(0, getMeasuredHeight() - 1, getMeasuredWidth() - AndroidUtilities.dp(72), getMeasuredHeight() - 1, linePaint); @@ -711,5 +709,7 @@ public class DialogCell extends BaseCell { canvas.drawLine(AndroidUtilities.dp(72), getMeasuredHeight() - 1, getMeasuredWidth(), getMeasuredHeight() - 1, linePaint); } } + + avatarImage.draw(canvas); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/EmptyCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/EmptyCell.java index 828e5927..0454b426 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/EmptyCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/EmptyCell.java @@ -17,11 +17,19 @@ public class EmptyCell extends FrameLayout { int cellHeight; + public EmptyCell(Context context) { + this(context, 8); + } + public EmptyCell(Context context, int height) { super(context); cellHeight = height; } + public void setHeight(int height) { + cellHeight = height; + } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(cellHeight), MeasureSpec.EXACTLY)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java index f51b48ba..729a0528 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextCell.java @@ -10,6 +10,7 @@ package org.telegram.ui.Cells; import android.content.Context; import android.graphics.drawable.Drawable; +import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; import android.widget.FrameLayout; @@ -35,6 +36,7 @@ public class TextCell extends FrameLayout { textView.setLines(1); textView.setMaxLines(1); textView.setSingleLine(true); + textView.setEllipsize(TextUtils.TruncateAt.END); textView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); addView(textView); LayoutParams layoutParams = (LayoutParams) textView.getLayoutParams(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextDetailSettingsCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextDetailSettingsCell.java index c2eba3bf..2c844aac 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextDetailSettingsCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/TextDetailSettingsCell.java @@ -25,6 +25,7 @@ public class TextDetailSettingsCell extends FrameLayout { private TextView valueTextView; private static Paint paint; private boolean needDivider; + private boolean multiline; public TextDetailSettingsCell(Context context) { super(context); @@ -73,7 +74,7 @@ public class TextDetailSettingsCell extends FrameLayout { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (valueTextView.getMaxLines() == 1) { + if (!multiline) { super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY)); } else { super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); @@ -81,6 +82,7 @@ public class TextDetailSettingsCell extends FrameLayout { } public void setMultilineDetail(boolean value) { + multiline = value; if (value) { valueTextView.setLines(0); valueTextView.setMaxLines(0); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java index 58511431..795e80d1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java @@ -1,302 +1,214 @@ /* - * This is the source code of Telegram for Android v. 1.3.x. + * This is the source code of Telegram for Android v. 1.7.x. * It is licensed under GNU GPL v. 2 or later. * You should have received a copy of the license in this archive (see LICENSE). * - * Copyright Nikolai Kudashov, 2013. + * Copyright Nikolai Kudashov, 2013-2014. */ package org.telegram.ui.Cells; import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.text.Layout; -import android.text.StaticLayout; -import android.text.TextPaint; import android.text.TextUtils; +import android.util.TypedValue; +import android.view.Gravity; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; import org.telegram.android.AndroidUtilities; -import org.telegram.PhoneFormat.PhoneFormat; import org.telegram.android.ContactsController; import org.telegram.android.LocaleController; -import org.telegram.messenger.TLRPC; -import org.telegram.messenger.ConnectionsManager; import org.telegram.android.MessagesController; +import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.R; +import org.telegram.messenger.TLRPC; import org.telegram.messenger.UserConfig; -import org.telegram.android.ImageReceiver; import org.telegram.ui.Views.AvatarDrawable; +import org.telegram.ui.Views.BackupImageView; -public class UserCell extends BaseCell { - private static TextPaint namePaint; - private static TextPaint onlinePaint; - private static TextPaint offlinePaint; - private static Paint linePaint; +public class UserCell extends FrameLayout { + + private BackupImageView avatarImageView; + private TextView nameTextView; + private TextView statusTextView; + private ImageView imageView; + + private AvatarDrawable avatarDrawable; + private TLRPC.User currentUser = null; private CharSequence currentName; - private ImageReceiver avatarImage; - private AvatarDrawable avatarDrawable; - private CharSequence subLabel; - - private TLRPC.User user = null; + private CharSequence currrntStatus; + private int currentDrawable; private String lastName = null; private int lastStatus = 0; private TLRPC.FileLocation lastAvatar = null; - public boolean useSeparator = false; - public float drawAlpha = 1; + private int statusColor = 0xffa8a8a8; + private int statusOnlineColor = 0xff3b84c0; - private int nameLeft; - private int nameTop; - private StaticLayout nameLayout; - - private int onlineLeft; - private int onlineTop = AndroidUtilities.dp(36); - private StaticLayout onlineLayout; - - public UserCell(Context context) { + public UserCell(Context context, int padding) { super(context); - init(); - avatarImage = new ImageReceiver(this); - avatarImage.setRoundRadius(AndroidUtilities.dp(24)); + + avatarImageView = new BackupImageView(context); + avatarImageView.imageReceiver.setRoundRadius(AndroidUtilities.dp(24)); + addView(avatarImageView); + LayoutParams layoutParams = (LayoutParams) avatarImageView.getLayoutParams(); + layoutParams.width = AndroidUtilities.dp(48); + layoutParams.height = AndroidUtilities.dp(48); + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(7 + padding); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(7 + padding) : 0; + layoutParams.topMargin = AndroidUtilities.dp(8); + avatarImageView.setLayoutParams(layoutParams); avatarDrawable = new AvatarDrawable(); + + nameTextView = new TextView(context); + nameTextView.setTextColor(0xff000000); + nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17); + nameTextView.setLines(1); + nameTextView.setMaxLines(1); + nameTextView.setSingleLine(true); + nameTextView.setEllipsize(TextUtils.TruncateAt.END); + nameTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); + addView(nameTextView); + layoutParams = (LayoutParams) nameTextView.getLayoutParams(); + layoutParams.width = LayoutParams.WRAP_CONTENT; + layoutParams.height = LayoutParams.WRAP_CONTENT; + layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : (68 + padding)); + layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? (68 + padding) : 16); + layoutParams.topMargin = AndroidUtilities.dp(10.5f); + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + nameTextView.setLayoutParams(layoutParams); + + statusTextView = new TextView(context); + statusTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + statusTextView.setLines(1); + statusTextView.setMaxLines(1); + statusTextView.setSingleLine(true); + statusTextView.setEllipsize(TextUtils.TruncateAt.END); + statusTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL); + addView(statusTextView); + layoutParams = (LayoutParams) statusTextView.getLayoutParams(); + layoutParams.width = LayoutParams.WRAP_CONTENT; + layoutParams.height = LayoutParams.WRAP_CONTENT; + layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : (68 + padding)); + layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? (68 + padding) : 16); + layoutParams.topMargin = AndroidUtilities.dp(33.5f); + layoutParams.gravity = LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT; + statusTextView.setLayoutParams(layoutParams); + + imageView = new ImageView(context); + imageView.setScaleType(ImageView.ScaleType.CENTER); + addView(imageView); + layoutParams = (LayoutParams) imageView.getLayoutParams(); + layoutParams.width = LayoutParams.WRAP_CONTENT; + layoutParams.height = LayoutParams.WRAP_CONTENT; + layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 16); + layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : 0); + layoutParams.gravity = (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.CENTER_VERTICAL; + imageView.setLayoutParams(layoutParams); } - private void init() { - if (namePaint == null) { - namePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); - namePaint.setTextSize(AndroidUtilities.dp(18)); - namePaint.setColor(0xff222222); - - onlinePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); - onlinePaint.setTextSize(AndroidUtilities.dp(15)); - onlinePaint.setColor(0xff316f9f); - - offlinePaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); - offlinePaint.setTextSize(AndroidUtilities.dp(15)); - offlinePaint.setColor(0xff999999); - - linePaint = new Paint(); - linePaint.setColor(0xffdcdcdc); + public void setData(TLRPC.User user, CharSequence name, CharSequence status, int resId) { + if (user == null) { + currrntStatus = null; + currentName = null; + currentUser = null; + nameTextView.setText(""); + statusTextView.setText(""); + avatarImageView.setImageDrawable(null); + return; } - } - - public void setData(TLRPC.User u, CharSequence n, CharSequence s) { - currentName = n; - user = u; - subLabel = s; + currrntStatus = status; + currentName = name; + currentUser = user; + currentDrawable = resId; update(0); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - if (avatarImage != null) { - avatarImage.clearImage(); - lastAvatar = null; - } + lastAvatar = null; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec) - getPaddingRight(), AndroidUtilities.dp(64)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64), MeasureSpec.EXACTLY)); } - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - if (user == null) { - super.onLayout(changed, left, top, right, bottom); - return; - } - if (changed) { - buildLayout(); - } - } - - public void buildLayout() { - int paddingLeft = getPaddingLeft(); - int paddingRight = getPaddingRight(); - - onlineLeft = nameLeft = AndroidUtilities.dp(LocaleController.isRTL ? 11 : 72) + paddingLeft; - int avatarLeft = paddingLeft + (LocaleController.isRTL ? (getMeasuredWidth() - AndroidUtilities.dp(61)) : AndroidUtilities.dp(11)); - int nameWidth = getMeasuredWidth() - nameLeft - AndroidUtilities.dp(LocaleController.isRTL ? 72 : 14); - int avatarTop = AndroidUtilities.dp(8); - - CharSequence nameString = ""; - if (currentName != null) { - nameString = currentName; - } else { - String nameString2 = ""; - if (user != null) { - nameString2 = ContactsController.formatName(user.first_name, user.last_name); - } - nameString = nameString2.replace("\n", " "); - } - if (nameString.length() == 0) { - if (user != null && user.phone != null && user.phone.length() != 0) { - nameString = PhoneFormat.getInstance().format("+" + user.phone); - } else { - nameString = LocaleController.getString("HiddenName", R.string.HiddenName); - } - } - CharSequence nameStringFinal = TextUtils.ellipsize(nameString, namePaint, nameWidth - AndroidUtilities.dp(12), TextUtils.TruncateAt.END); - nameLayout = new StaticLayout(nameStringFinal, namePaint, nameWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); - - CharSequence onlineString = ""; - TextPaint currentOnlinePaint = offlinePaint; - if (subLabel != null) { - onlineString = subLabel; - } else { - onlineString = LocaleController.formatUserStatus(user); - if (user != null && (user.id == UserConfig.getClientUserId() || user.status != null && user.status.expires > ConnectionsManager.getInstance().getCurrentTime())) { - currentOnlinePaint = onlinePaint; - onlineString = LocaleController.getString("Online", R.string.Online); - } - } - - CharSequence onlineStringFinal = TextUtils.ellipsize(onlineString, currentOnlinePaint, nameWidth - AndroidUtilities.dp(12), TextUtils.TruncateAt.END); - onlineLayout = new StaticLayout(onlineStringFinal, currentOnlinePaint, nameWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); - nameTop = AndroidUtilities.dp(12); - - avatarImage.setImageCoords(avatarLeft, avatarTop, AndroidUtilities.dp(48), AndroidUtilities.dp(48)); - - double widthpx = 0; - float left = 0; - if (LocaleController.isRTL) { - if (nameLayout.getLineCount() > 0) { - left = nameLayout.getLineLeft(0); - if (left == 0) { - widthpx = Math.ceil(nameLayout.getLineWidth(0)); - if (widthpx < nameWidth) { - nameLeft += (nameWidth - widthpx); - } - } - } - if (onlineLayout != null && onlineLayout.getLineCount() > 0) { - left = onlineLayout.getLineLeft(0); - if (left == 0) { - widthpx = Math.ceil(onlineLayout.getLineWidth(0)); - if (widthpx < nameWidth) { - onlineLeft += (nameWidth - widthpx); - } - } - } - } else { - if (nameLayout.getLineCount() > 0) { - left = nameLayout.getLineRight(0); - if (left == nameWidth) { - widthpx = Math.ceil(nameLayout.getLineWidth(0)); - if (widthpx < nameWidth) { - nameLeft -= (nameWidth - widthpx); - } - } - } - if (onlineLayout != null && onlineLayout.getLineCount() > 0) { - left = onlineLayout.getLineRight(0); - if (left == nameWidth) { - widthpx = Math.ceil(onlineLayout.getLineWidth(0)); - if (widthpx < nameWidth) { - onlineLeft -= (nameWidth - widthpx); - } - } - } - } + public void setStatusColors(int color, int onlineColor) { + statusColor = color; + statusOnlineColor = onlineColor; } public void update(int mask) { + if (currentUser == null) { + return; + } TLRPC.FileLocation photo = null; - if (user != null) { - if (user.photo != null) { - photo = user.photo.photo_small; - } - avatarDrawable.setInfo(user); - } else { - avatarDrawable.setInfo(0, null, null, false); + if (currentUser.photo != null) { + photo = currentUser.photo.photo_small; } if (mask != 0) { boolean continueUpdate = false; - if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 && user != null) { + if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0) { if (lastAvatar != null && photo == null || lastAvatar == null && photo != null && lastAvatar != null && photo != null && (lastAvatar.volume_id != photo.volume_id || lastAvatar.local_id != photo.local_id)) { continueUpdate = true; } } - if (!continueUpdate && (mask & MessagesController.UPDATE_MASK_STATUS) != 0 && user != null) { + if (!continueUpdate && (mask & MessagesController.UPDATE_MASK_STATUS) != 0) { int newStatus = 0; - if (user.status != null) { - newStatus = user.status.expires; + if (currentUser.status != null) { + newStatus = currentUser.status.expires; } if (newStatus != lastStatus) { continueUpdate = true; } } - if (!continueUpdate && (mask & MessagesController.UPDATE_MASK_NAME) != 0 && user != null) { - String newName = null; - if (user != null) { - newName = user.first_name + user.last_name; - } + if (!continueUpdate && (mask & MessagesController.UPDATE_MASK_NAME) != 0) { + String newName = currentUser.first_name + currentUser.last_name; if (newName == null || !newName.equals(lastName)) { continueUpdate = true; } } - if (!continueUpdate) { return; } } - if (user != null) { - if (user.status != null) { - lastStatus = user.status.expires; - } else { - lastStatus = 0; - } - lastName = user.first_name + user.last_name; - } - - lastAvatar = photo; - avatarImage.setImage(photo, "50_50", avatarDrawable, false); - - if (getMeasuredWidth() != 0 || getMeasuredHeight() != 0) { - buildLayout(); + avatarDrawable.setInfo(currentUser); + if (currentUser.status != null) { + lastStatus = currentUser.status.expires; } else { - requestLayout(); + lastStatus = 0; } - postInvalidate(); - } + lastName = currentUser.first_name + currentUser.last_name; + lastAvatar = photo; - @Override - protected void onDraw(Canvas canvas) { - if (user == null) { - return; + if (currentName != null) { + nameTextView.setText(currentName); + } else { + nameTextView.setText(ContactsController.formatName(currentUser.first_name, currentUser.last_name)); } - - if (useSeparator) { - if (LocaleController.isRTL) { - canvas.drawLine(0, getMeasuredHeight() - 1, getMeasuredWidth() - AndroidUtilities.dp(72), getMeasuredHeight() - 1, linePaint); + if (currrntStatus != null) { + statusTextView.setText(currrntStatus); + statusTextView.setTextColor(statusColor); + } else { + if (currentUser.id == UserConfig.getClientUserId() || currentUser.status != null && currentUser.status.expires > ConnectionsManager.getInstance().getCurrentTime()) { + statusTextView.setText(LocaleController.getString("Online", R.string.Online)); + statusTextView.setTextColor(statusOnlineColor); } else { - canvas.drawLine(AndroidUtilities.dp(72), getMeasuredHeight() - 1, getMeasuredWidth(), getMeasuredHeight() - 1, linePaint); + statusTextView.setText(LocaleController.formatUserStatus(currentUser)); + statusTextView.setTextColor(statusColor); } } - if (drawAlpha != 1) { - canvas.saveLayerAlpha(0, 0, canvas.getWidth(), canvas.getHeight(), (int)(255 * drawAlpha), Canvas.HAS_ALPHA_LAYER_SAVE_FLAG); - } - - canvas.save(); - canvas.translate(nameLeft, nameTop); - nameLayout.draw(canvas); - canvas.restore(); - - if (onlineLayout != null) { - canvas.save(); - canvas.translate(onlineLeft, onlineTop); - onlineLayout.draw(canvas); - canvas.restore(); - } - - avatarImage.draw(canvas); + imageView.setVisibility(currentDrawable == 0 ? GONE : VISIBLE); + imageView.setImageResource(currentDrawable); + avatarImageView.setImage(photo, "50_50", avatarDrawable); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index 5442af07..f6286ab7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -570,7 +570,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } Bundle args = new Bundle(); args.putInt("chat_id", currentChat.id); - ChatProfileActivity fragment = new ChatProfileActivity(args); + ProfileActivity fragment = new ProfileActivity(args); fragment.setChatInfo(info); presentFragment(fragment); } @@ -1196,9 +1196,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not checkAndUpdateAvatar(); } - private void updateOnlineCount() { + private int updateOnlineCount() { if (info == null) { - return; + return 0; } onlineCount = 0; int currentTime = ConnectionsManager.getInstance().getCurrentTime(); @@ -1208,6 +1208,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not onlineCount++; } } + return onlineCount; } private int getMessageType(MessageObject messageObject) { @@ -1865,15 +1866,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not updateTitle(); } boolean updateSubtitle = false; - if ((updateMask & MessagesController.UPDATE_MASK_CHAT_MEMBERS) != 0) { - updateSubtitle = true; - updateOnlineCount(); - } - if ((updateMask & MessagesController.UPDATE_MASK_STATUS) != 0) { - updateSubtitle = true; - } - if (updateSubtitle) { - updateSubtitle(); + if ((updateMask & MessagesController.UPDATE_MASK_CHAT_MEMBERS) != 0 || (updateMask & MessagesController.UPDATE_MASK_STATUS) != 0) { + if (currentChat != null) { + int lastCount = onlineCount; + if (lastCount != updateOnlineCount()) { + updateSubtitle = true; + } + } else { + updateSubtitle = true; + } } if ((updateMask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (updateMask & MessagesController.UPDATE_MASK_CHAT_AVATAR) != 0 || (updateMask & MessagesController.UPDATE_MASK_NAME) != 0) { checkAndUpdateAvatar(); @@ -1882,9 +1883,12 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if ((updateMask & MessagesController.UPDATE_MASK_USER_PRINT) != 0) { CharSequence printString = MessagesController.getInstance().printingStrings.get(dialog_id); if (lastPrintString != null && printString == null || lastPrintString == null && printString != null || lastPrintString != null && printString != null && !lastPrintString.equals(printString)) { - updateSubtitle(); + updateSubtitle = true; } } + if (updateSubtitle) { + updateSubtitle(); + } if ((updateMask & MessagesController.UPDATE_MASK_USER_PHONE) != 0) { updateContactStatus(); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatProfileActivity.java deleted file mode 100644 index bb9ad4bd..00000000 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatProfileActivity.java +++ /dev/null @@ -1,776 +0,0 @@ -/* - * This is the source code of Telegram for Android v. 1.3.2. - * It is licensed under GNU GPL v. 2 or later. - * You should have received a copy of the license in this archive (see LICENSE). - * - * Copyright Nikolai Kudashov, 2013. - */ - -package org.telegram.ui; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Typeface; -import android.os.Bundle; -import android.text.Html; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ImageButton; -import android.widget.ListView; -import android.widget.TextView; - -import org.telegram.android.AndroidUtilities; -import org.telegram.android.LocaleController; -import org.telegram.android.MessagesStorage; -import org.telegram.messenger.TLRPC; -import org.telegram.messenger.ConnectionsManager; -import org.telegram.messenger.FileLog; -import org.telegram.android.MessagesController; -import org.telegram.android.NotificationCenter; -import org.telegram.messenger.R; -import org.telegram.messenger.UserConfig; -import org.telegram.messenger.Utilities; -import org.telegram.android.MessageObject; -import org.telegram.ui.Adapters.BaseFragmentAdapter; -import org.telegram.ui.Cells.UserCell; -import org.telegram.ui.Views.ActionBar.ActionBar; -import org.telegram.ui.Views.ActionBar.ActionBarMenu; -import org.telegram.ui.Views.AvatarDrawable; -import org.telegram.ui.Views.AvatarUpdater; -import org.telegram.ui.Views.BackupImageView; -import org.telegram.ui.Views.ActionBar.BaseFragment; -import org.telegram.ui.Views.SettingsSectionLayout; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.concurrent.Semaphore; - -public class ChatProfileActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, ContactsActivity.ContactsActivityDelegate, PhotoViewer.PhotoViewerProvider { - private ListView listView; - private ListAdapter listViewAdapter; - private int chat_id; - private String selectedPhone; - private TLRPC.ChatParticipants info; - private TLRPC.TL_chatParticipant selectedUser; - private AvatarUpdater avatarUpdater = new AvatarUpdater(); - private int totalMediaCount = -1; - private int onlineCount = -1; - private ArrayList sortedUsers = new ArrayList(); - private TLRPC.Chat currentChat; - - private int avatarRow; - private int settingsSectionRow; - private int settingsNotificationsRow; - private int sharedMediaSectionRow; - private int sharedMediaRow; - private int membersSectionRow; - private int membersEndRow; - private int addMemberRow; - private int leaveGroupRow; - private int rowCount = 0; - - private static final int done_button = 1; - - public ChatProfileActivity(Bundle args) { - super(args); - } - - @Override - public boolean onFragmentCreate() { - super.onFragmentCreate(); - - chat_id = getArguments().getInt("chat_id", 0); - currentChat = MessagesController.getInstance().getChat(chat_id); - if (currentChat == null) { - final Semaphore semaphore = new Semaphore(0); - MessagesStorage.getInstance().getStorageQueue().postRunnable(new Runnable() { - @Override - public void run() { - currentChat = MessagesStorage.getInstance().getChat(chat_id); - semaphore.release(); - } - }); - try { - semaphore.acquire(); - } catch (Exception e) { - FileLog.e("tmessages", e); - } - if (currentChat != null) { - MessagesController.getInstance().putChat(currentChat, true); - } else { - return false; - } - } - - NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.chatInfoDidLoaded); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.mediaCountDidLoaded); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeChats); - - updateOnlineCount(); - if (chat_id > 0) { - MessagesController.getInstance().getMediaCount(-chat_id, classGuid, true); - } - avatarUpdater.delegate = new AvatarUpdater.AvatarUpdaterDelegate() { - @Override - public void didUploadedPhoto(TLRPC.InputFile file, TLRPC.PhotoSize small, TLRPC.PhotoSize big) { - if (chat_id != 0) { - MessagesController.getInstance().changeChatAvatar(chat_id, file); - } - } - }; - avatarUpdater.parentFragment = this; - - updateRowsIds(); - - return true; - } - - private void updateRowsIds() { - rowCount = 0; - avatarRow = rowCount++; - if (chat_id > 0) { - settingsSectionRow = rowCount++; - settingsNotificationsRow = rowCount++; - sharedMediaSectionRow = rowCount++; - sharedMediaRow = rowCount++; - } - if (info != null && !(info instanceof TLRPC.TL_chatParticipantsForbidden)) { - membersSectionRow = rowCount++; - rowCount += info.participants.size(); - membersEndRow = rowCount; - int maxCount = chat_id > 0 ? MessagesController.getInstance().maxGroupCount : MessagesController.getInstance().maxBroadcastCount; - if (info.participants.size() < maxCount) { - addMemberRow = rowCount++; - } else { - addMemberRow = -1; - } - } else { - membersEndRow = -1; - addMemberRow = -1; - membersSectionRow = -1; - } - if (chat_id > 0) { - leaveGroupRow = rowCount++; - } - } - - @Override - public void onFragmentDestroy() { - super.onFragmentDestroy(); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateInterfaces); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.chatInfoDidLoaded); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.mediaCountDidLoaded); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); - avatarUpdater.clear(); - } - - public View createView(LayoutInflater inflater, ViewGroup container) { - if (fragmentView == null) { - actionBar.setBackButtonImage(R.drawable.ic_ab_back); - actionBar.setBackOverlay(R.layout.updating_state_layout); - if (chat_id > 0) { - actionBar.setTitle(LocaleController.getString("GroupInfo", R.string.GroupInfo)); - } else { - actionBar.setTitle(LocaleController.getString("BroadcastList", R.string.BroadcastList)); - } - actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { - @Override - public void onItemClick(int id) { - if (id == -1) { - finishFragment(); - } else if (id == done_button) { - openAddMenu(); - } - } - }); - ActionBarMenu menu = actionBar.createMenu(); - View item = menu.addItemResource(done_button, R.layout.group_profile_add_member_layout); - TextView textView = (TextView)item.findViewById(R.id.done_button); - if (textView != null) { - if (chat_id > 0) { - textView.setText(LocaleController.getString("AddMember", R.string.AddMember)); - } else { - textView.setText(LocaleController.getString("AddRecipient", R.string.AddRecipient)); - } - } - - fragmentView = inflater.inflate(R.layout.chat_profile_layout, container, false); - - listView = (ListView)fragmentView.findViewById(R.id.listView); - listView.setAdapter(listViewAdapter = new ListAdapter(getParentActivity())); - listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { - @Override - public boolean onItemLongClick(AdapterView adapterView, View view, int i, long l) { - if (i > membersSectionRow && i < membersEndRow) { - if (getParentActivity() == null) { - return false; - } - - TLRPC.TL_chatParticipant user = info.participants.get(sortedUsers.get(i - membersSectionRow - 1)); - if (user.user_id == UserConfig.getClientUserId()) { - return false; - } - if (info.admin_id != UserConfig.getClientUserId() && user.inviter_id != UserConfig.getClientUserId()) { - return false; - } - selectedUser = user; - - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - CharSequence[] items = new CharSequence[] {chat_id > 0 ? LocaleController.getString("KickFromGroup", R.string.KickFromGroup) : LocaleController.getString("KickFromBroadcast", R.string.KickFromBroadcast)}; - - builder.setItems(items, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - if (i == 0) { - kickUser(selectedUser); - } - } - }); - showAlertDialog(builder); - - return true; - } - return false; - } - }); - - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, final int i, long l) { - if (i == sharedMediaRow) { - Bundle args = new Bundle(); - args.putLong("dialog_id", -chat_id); - presentFragment(new MediaActivity(args)); - } else if (i == addMemberRow) { - openAddMenu(); - } else if (i > membersSectionRow && i < membersEndRow) { - int user_id = info.participants.get(sortedUsers.get(i - membersSectionRow - 1)).user_id; - if (user_id == UserConfig.getClientUserId()) { - return; - } - Bundle args = new Bundle(); - args.putInt("user_id", user_id); - presentFragment(new ProfileActivity(args)); - } else if (i == settingsNotificationsRow) { - Bundle args = new Bundle(); - args.putLong("dialog_id", -chat_id); - presentFragment(new ProfileNotificationsActivity(args)); - } - } - }); - } else { - ViewGroup parent = (ViewGroup)fragmentView.getParent(); - if (parent != null) { - parent.removeView(fragmentView); - } - } - return fragmentView; - } - - @Override - public void didSelectContact(TLRPC.User user, String param) { - MessagesController.getInstance().addUserToChat(chat_id, user, info, param != null ? Utilities.parseInt(param) : 0); - } - - @Override - public void onActivityResultFragment(int requestCode, int resultCode, Intent data) { - avatarUpdater.onActivityResult(requestCode, resultCode, data); - } - - @Override - public void saveSelfArgs(Bundle args) { - if (avatarUpdater != null && avatarUpdater.currentPicturePath != null) { - args.putString("path", avatarUpdater.currentPicturePath); - } - } - - @Override - public void restoreSelfArgs(Bundle args) { - MessagesController.getInstance().loadChatInfo(chat_id, null); - if (avatarUpdater != null) { - avatarUpdater.currentPicturePath = args.getString("path"); - } - } - - @Override - public PhotoViewer.PlaceProviderObject getPlaceForPhoto(MessageObject messageObject, TLRPC.FileLocation fileLocation, int index) { - if (fileLocation == null) { - return null; - } - TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); - if (chat != null && chat.photo != null && chat.photo.photo_big != null) { - TLRPC.FileLocation photoBig = chat.photo.photo_big; - if (photoBig.local_id == fileLocation.local_id && photoBig.volume_id == fileLocation.volume_id && photoBig.dc_id == fileLocation.dc_id) { - int count = listView.getChildCount(); - for (int a = 0; a < count; a++) { - View view = listView.getChildAt(a); - BackupImageView avatarImage = (BackupImageView)view.findViewById(R.id.settings_avatar_image); - if (avatarImage != null) { - int coords[] = new int[2]; - avatarImage.getLocationInWindow(coords); - PhotoViewer.PlaceProviderObject object = new PhotoViewer.PlaceProviderObject(); - object.viewX = coords[0]; - object.viewY = coords[1] - AndroidUtilities.statusBarHeight; - object.parentView = listView; - object.imageReceiver = avatarImage.imageReceiver; - object.thumb = object.imageReceiver.getBitmap(); - object.size = -1; - return object; - } - } - } - } - return null; - } - - @Override - public void willSwitchFromPhoto(MessageObject messageObject, TLRPC.FileLocation fileLocation, int index) { } - - @Override - public void willHidePhotoViewer() { } - - @Override - public boolean isPhotoChecked(int index) { return false; } - - @Override - public void setPhotoChecked(int index) { } - - @Override - public void cancelButtonPressed() { } - - @Override - public void sendButtonPressed(int index) { } - - @Override - public int getSelectedCount() { return 0; } - - public void didReceivedNotification(int id, Object... args) { - if (id == NotificationCenter.updateInterfaces) { - int mask = (Integer)args[0]; - if ((mask & MessagesController.UPDATE_MASK_CHAT_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_CHAT_NAME) != 0 || (mask & MessagesController.UPDATE_MASK_CHAT_MEMBERS) != 0 || (mask & MessagesController.UPDATE_MASK_STATUS) != 0) { - updateOnlineCount(); - } - if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_NAME) != 0 || (mask & MessagesController.UPDATE_MASK_STATUS) != 0) { - updateVisibleRows(mask); - } - } else if (id == NotificationCenter.chatInfoDidLoaded) { - int chatId = (Integer)args[0]; - if (chatId == chat_id) { - info = (TLRPC.ChatParticipants)args[1]; - updateOnlineCount(); - updateRowsIds(); - if (listViewAdapter != null) { - listViewAdapter.notifyDataSetChanged(); - } - } - } else if (id == NotificationCenter.mediaCountDidLoaded) { - long uid = (Long)args[0]; - int lower_part = (int)uid; - if (lower_part < 0 && chat_id == -lower_part) { - totalMediaCount = (Integer)args[1]; - if (listView != null) { - listView.invalidateViews(); - } - } - } else if (id == NotificationCenter.closeChats) { - removeSelfFromStack(); - } - } - - @Override - public void onResume() { - super.onResume(); - if (listViewAdapter != null) { - listViewAdapter.notifyDataSetChanged(); - } - } - - public void setChatInfo(TLRPC.ChatParticipants chatParticipants) { - info = chatParticipants; - } - - private void updateVisibleRows(int mask) { - if (listView == null) { - return; - } - int count = listView.getChildCount(); - for (int a = 0; a < count; a++) { - View child = listView.getChildAt(a); - if (child instanceof UserCell) { - ((UserCell) child).update(mask); - } - } - } - - private void updateOnlineCount() { - if (info == null) { - return; - } - onlineCount = 0; - int currentTime = ConnectionsManager.getInstance().getCurrentTime(); - sortedUsers.clear(); - int i = 0; - for (TLRPC.TL_chatParticipant participant : info.participants) { - TLRPC.User user = MessagesController.getInstance().getUser(participant.user_id); - if (user != null && user.status != null && (user.status.expires > currentTime || user.id == UserConfig.getClientUserId()) && user.status.expires > 10000) { - onlineCount++; - } - sortedUsers.add(i); - i++; - } - - Collections.sort(sortedUsers, new Comparator() { - @Override - public int compare(Integer lhs, Integer rhs) { - TLRPC.User user1 = MessagesController.getInstance().getUser(info.participants.get(rhs).user_id); - TLRPC.User user2 = MessagesController.getInstance().getUser(info.participants.get(lhs).user_id); - Integer status1 = 0; - Integer status2 = 0; - if (user1 != null && user1.status != null) { - if (user1.id == UserConfig.getClientUserId()) { - status1 = ConnectionsManager.getInstance().getCurrentTime() + 50000; - } else { - status1 = user1.status.expires; - } - } - if (user2 != null && user2.status != null) { - if (user2.id == UserConfig.getClientUserId()) { - status2 = ConnectionsManager.getInstance().getCurrentTime() + 50000; - } else { - status2 = user2.status.expires; - } - } - return status1.compareTo(status2); - } - }); - - if (listView != null) { - listView.invalidateViews(); - } - } - - private void processPhotoMenu(int action) { - if (action == 0) { - TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); - if (chat.photo != null && chat.photo.photo_big != null) { - PhotoViewer.getInstance().setParentActivity(getParentActivity()); - PhotoViewer.getInstance().openPhoto(chat.photo.photo_big, this); - } - } else if (action == 1) { - avatarUpdater.openCamera(); - } else if (action == 2) { - avatarUpdater.openGallery(); - } else if (action == 3) { - MessagesController.getInstance().changeChatAvatar(chat_id, null); - } - } - - private void openAddMenu() { - Bundle args = new Bundle(); - args.putBoolean("onlyUsers", true); - args.putBoolean("destroyAfterSelect", true); - args.putBoolean("returnAsResult", true); - //args.putBoolean("allowUsernameSearch", false); - if (chat_id > 0) { - args.putString("selectAlertString", LocaleController.getString("AddToTheGroup", R.string.AddToTheGroup)); - } - ContactsActivity fragment = new ContactsActivity(args); - fragment.setDelegate(this); - if (info != null) { - HashMap users = new HashMap(); - for (TLRPC.TL_chatParticipant p : info.participants) { - users.put(p.user_id, null); - } - fragment.setIgnoreUsers(users); - } - presentFragment(fragment); - } - - private void kickUser(TLRPC.TL_chatParticipant user) { - if (user != null) { - MessagesController.getInstance().deleteUserFromChat(chat_id, MessagesController.getInstance().getUser(user.user_id), info); - } else { - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); - NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); - MessagesController.getInstance().deleteUserFromChat(chat_id, MessagesController.getInstance().getUser(UserConfig.getClientUserId()), info); - MessagesController.getInstance().deleteDialog(-chat_id, 0, false); - finishFragment(); - } - } - - private class ListAdapter extends BaseFragmentAdapter { - private Context mContext; - - public ListAdapter(Context context) { - mContext = context; - } - - @Override - public boolean areAllItemsEnabled() { - return false; - } - - @Override - public boolean isEnabled(int i) { - return i == settingsNotificationsRow || i == sharedMediaRow || i == addMemberRow || i > membersSectionRow && i < membersEndRow; - } - - @Override - public int getCount() { - return rowCount; - } - - @Override - public Object getItem(int i) { - return null; - } - - @Override - public long getItemId(int i) { - return i; - } - - @Override - public boolean hasStableIds() { - return false; - } - - @Override - public View getView(int i, View view, ViewGroup viewGroup) { - int type = getItemViewType(i); - if (type == 0) { - BackupImageView avatarImage; - TextView onlineText; - TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); - if (view == null) { - LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = li.inflate(R.layout.chat_profile_avatar_layout, viewGroup, false); - onlineText = (TextView)view.findViewById(R.id.settings_online); - - ImageButton button = (ImageButton)view.findViewById(R.id.settings_edit_name); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Bundle args = new Bundle(); - args.putInt("chat_id", chat_id); - presentFragment(new ChatProfileChangeNameActivity(args)); - } - }); - - final ImageButton button2 = (ImageButton)view.findViewById(R.id.settings_change_avatar_button); - if (chat_id > 0) { - button2.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (getParentActivity() == null) { - return; - } - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - CharSequence[] items; - int type; - TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); - if (chat.photo == null || chat.photo.photo_big == null || chat.photo instanceof TLRPC.TL_chatPhotoEmpty) { - items = new CharSequence[]{LocaleController.getString("FromCamera", R.string.FromCamera), LocaleController.getString("FromGalley", R.string.FromGalley)}; - type = 0; - } else { - items = new CharSequence[]{LocaleController.getString("OpenPhoto", R.string.OpenPhoto), LocaleController.getString("FromCamera", R.string.FromCamera), LocaleController.getString("FromGalley", R.string.FromGalley), LocaleController.getString("DeletePhoto", R.string.DeletePhoto)}; - type = 1; - } - - final int arg0 = type; - builder.setItems(items, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - int action = 0; - if (arg0 == 1) { - if (i == 0) { - action = 0; - } else if (i == 1) { - action = 1; - } else if (i == 2) { - action = 2; - } else if (i == 3) { - action = 3; - } - } else if (arg0 == 0) { - if (i == 0) { - action = 1; - } else if (i == 1) { - action = 2; - } - } - processPhotoMenu(action); - } - }); - showAlertDialog(builder); - } - }); - } else { - button2.setVisibility(View.GONE); - } - } else { - onlineText = (TextView)view.findViewById(R.id.settings_online); - } - avatarImage = (BackupImageView)view.findViewById(R.id.settings_avatar_image); - avatarImage.processDetach = false; - TextView textView = (TextView)view.findViewById(R.id.settings_name); - Typeface typeface = AndroidUtilities.getTypeface("fonts/rmedium.ttf"); - textView.setTypeface(typeface); - - textView.setText(chat.title); - - int count = chat.participants_count; - if (info != null) { - count = info.participants.size(); - } - - if (count != 0 && onlineCount > 1) { - onlineText.setText(Html.fromHtml(String.format("%s, %s", LocaleController.formatPluralString("Members", count), LocaleController.formatPluralString("Online", onlineCount)))); - } else { - onlineText.setText(LocaleController.formatPluralString("Members", count)); - } - - TLRPC.FileLocation photo = null; - TLRPC.FileLocation photoBig = null; - if (chat.photo != null) { - photo = chat.photo.photo_small; - photoBig = chat.photo.photo_big; - } - avatarImage.setImage(photo, "50_50", new AvatarDrawable(chat)); - avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false); - return view; - } else if (type == 1) { - if (view == null) { - view = new SettingsSectionLayout(mContext); - } - if (i == settingsSectionRow) { - ((SettingsSectionLayout) view).setText(LocaleController.getString("SETTINGS", R.string.SETTINGS)); - } else if (i == sharedMediaSectionRow) { - - } else if (i == membersSectionRow) { - TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); - int count = chat.participants_count; - if (info != null) { - count = info.participants.size(); - } - ((SettingsSectionLayout) view).setText(LocaleController.formatPluralString("Members", count).toUpperCase()); - } - } else if (type == 2) { - if (view == null) { - LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = li.inflate(R.layout.user_profile_leftright_row_layout, viewGroup, false); - } - TextView textView = (TextView)view.findViewById(R.id.settings_row_text); - TextView detailTextView = (TextView)view.findViewById(R.id.settings_row_text_detail); - View divider = view.findViewById(R.id.settings_row_divider); - if (i == sharedMediaRow) { - textView.setText(LocaleController.getString("SharedMedia", R.string.SharedMedia)); - if (totalMediaCount == -1) { - detailTextView.setText(LocaleController.getString("Loading", R.string.Loading)); - } else { - detailTextView.setText(String.format("%d", totalMediaCount)); - } - divider.setVisibility(View.INVISIBLE); - } - } else if (type == 3) { - TLRPC.TL_chatParticipant part = info.participants.get(sortedUsers.get(i - membersSectionRow - 1)); - TLRPC.User user = MessagesController.getInstance().getUser(part.user_id); - - if (view == null) { - view = new UserCell(mContext); - ((UserCell)view).useSeparator = true; - } - - ((UserCell)view).setData(user, null, null); - } else if (type == 4) { - if (view == null) { - LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = li.inflate(R.layout.chat_profile_add_row, viewGroup, false); - TextView textView = (TextView)view.findViewById(R.id.messages_list_row_name); - if (chat_id > 0) { - textView.setText(LocaleController.getString("AddMember", R.string.AddMember)); - } else { - textView.setText(LocaleController.getString("AddRecipient", R.string.AddRecipient)); - View divider = view.findViewById(R.id.settings_row_divider); - divider.setVisibility(View.INVISIBLE); - } - } - } else if (type == 5) { - if (view == null) { - LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = li.inflate(R.layout.settings_logout_button, viewGroup, false); - TextView textView = (TextView)view.findViewById(R.id.settings_row_text); - textView.setText(LocaleController.getString("DeleteAndExit", R.string.DeleteAndExit)); - textView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (getParentActivity() == null) { - return; - } - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); - builder.setMessage(LocaleController.getString("AreYouSureDeleteAndExit", R.string.AreYouSureDeleteAndExit)); - builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - kickUser(null); - } - }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - showAlertDialog(builder); - } - }); - } - } else if (type == 6) { - if (view == null) { - LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = li.inflate(R.layout.settings_row_button_layout, viewGroup, false); - } - TextView textView = (TextView)view.findViewById(R.id.settings_row_text); - View divider = view.findViewById(R.id.settings_row_divider); - if (i == settingsNotificationsRow) { - textView.setText(LocaleController.getString("NotificationsAndSounds", R.string.NotificationsAndSounds)); - divider.setVisibility(View.INVISIBLE); - } - } - return view; - } - - @Override - public int getItemViewType(int i) { - if (i == avatarRow) { - return 0; - } else if (i == settingsSectionRow || i == sharedMediaSectionRow || i == membersSectionRow) { - return 1; - } else if (i == sharedMediaRow) { - return 2; - } else if (i == addMemberRow) { - return 4; - } else if (i == leaveGroupRow) { - return 5; - } else if (i > membersSectionRow && i < membersEndRow) { - return 3; - } else if (i == settingsNotificationsRow) { - return 6; - } - return 0; - } - - @Override - public int getViewTypeCount() { - return 7; - } - - @Override - public boolean isEmpty() { - return false; - } - } -} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java index 1b128d87..5e415490 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java @@ -119,11 +119,7 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setBackOverlay(R.layout.updating_state_layout); - if (destroyAfterSelect) { - actionBar.setTitle(LocaleController.getString("SelectContact", R.string.SelectContact)); - } else { - actionBar.setTitle(LocaleController.getString("Contacts", R.string.Contacts)); - } + actionBar.setTitle(destroyAfterSelect ? LocaleController.getString("SelectContact", R.string.SelectContact) : LocaleController.getString("Contacts", R.string.Contacts)); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateActivity.java index 8a1dc8c2..71b3f184 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateActivity.java @@ -9,7 +9,6 @@ package org.telegram.ui; import android.app.Activity; -import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; @@ -23,6 +22,8 @@ import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.TextWatcher; import android.text.style.ImageSpan; +import android.util.TypedValue; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -30,38 +31,34 @@ import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.EditText; -import android.widget.ImageView; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; import android.widget.TextView; import org.telegram.android.AndroidUtilities; import org.telegram.PhoneFormat.PhoneFormat; import org.telegram.android.LocaleController; import org.telegram.messenger.TLRPC; -import org.telegram.messenger.ConnectionsManager; import org.telegram.android.ContactsController; import org.telegram.messenger.FileLog; import org.telegram.android.MessagesController; import org.telegram.android.NotificationCenter; import org.telegram.messenger.R; -import org.telegram.messenger.UserConfig; -import org.telegram.messenger.Utilities; +import org.telegram.ui.Adapters.BaseSectionsAdapter; +import org.telegram.ui.Adapters.ContactsActivityAdapter; +import org.telegram.ui.Adapters.ContactsActivitySearchAdapter; import org.telegram.ui.Views.ActionBar.ActionBar; import org.telegram.ui.Views.ActionBar.ActionBarMenu; -import org.telegram.ui.Views.AvatarDrawable; -import org.telegram.ui.Views.BackupImageView; import org.telegram.ui.Views.ActionBar.BaseFragment; -import org.telegram.ui.Views.PinnedHeaderListView; -import org.telegram.ui.Views.SectionedBaseAdapter; -import org.telegram.ui.Views.SettingsSectionLayout; +import org.telegram.ui.Views.SectionsListView; import java.util.ArrayList; import java.util.HashMap; -import java.util.Timer; -import java.util.TimerTask; public class GroupCreateActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { - public static class XImageSpan extends ImageSpan { + public class XImageSpan extends ImageSpan { public int uid; public XImageSpan(Drawable d, int verticalAlignment) { @@ -75,7 +72,6 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen } int sz = super.getSize(paint, text, start, end, fm); - int offset = AndroidUtilities.dp(6); int w = (fm.bottom - fm.top) / 2; fm.top = -w - offset; @@ -83,30 +79,25 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen fm.ascent = -w - offset; fm.leading = 0; fm.descent = w - offset; - return sz; } } - private SectionedBaseAdapter listViewAdapter; - private PinnedHeaderListView listView; + private BaseSectionsAdapter listViewAdapter; private TextView emptyTextView; private EditText userSelectEditText; + private SectionsListView listView; + private ContactsActivitySearchAdapter searchListViewAdapter; + + private int beforeChangeIndex; + private int maxCount = 200; private boolean ignoreChange = false; private boolean isBroadcast = false; - private int maxCount = 200; - - private HashMap selectedContacts = new HashMap(); - private ArrayList allSpans = new ArrayList(); - private boolean searchWas; private boolean searching; - private Timer searchTimer; - public ArrayList searchResult; - public ArrayList searchResultNames; - private CharSequence changeString; - private int beforeChangeIndex; + private HashMap selectedContacts = new HashMap(); + private ArrayList allSpans = new ArrayList(); private final static int done_button = 1; @@ -139,13 +130,12 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen @Override public View createView(LayoutInflater inflater, ViewGroup container) { if (fragmentView == null) { + searching = false; + searchWas = false; + actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setBackOverlay(R.layout.updating_state_layout); - if (isBroadcast) { - actionBar.setTitle(LocaleController.getString("NewBroadcastList", R.string.NewBroadcastList)); - } else { - actionBar.setTitle(LocaleController.getString("NewGroup", R.string.NewGroup)); - } + actionBar.setTitle(isBroadcast ? LocaleController.getString("NewBroadcastList", R.string.NewBroadcastList) : LocaleController.getString("NewGroup", R.string.NewGroup)); actionBar.setSubtitle(LocaleController.formatString("MembersCount", R.string.MembersCount, selectedContacts.size(), maxCount)); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @@ -165,26 +155,99 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen } } }); - ActionBarMenu menu = actionBar.createMenu(); View doneItem = menu.addItemResource(done_button, R.layout.group_create_done_layout); TextView doneTextView = (TextView)doneItem.findViewById(R.id.done_button); doneTextView.setText(LocaleController.getString("Next", R.string.Next)); - searching = false; - searchWas = false; + searchListViewAdapter = new ContactsActivitySearchAdapter(getParentActivity(), null, false); + listViewAdapter = new ContactsActivityAdapter(getParentActivity(), true, false, null); - fragmentView = inflater.inflate(R.layout.group_create_layout, container, false); + /* - emptyTextView = (TextView)fragmentView.findViewById(R.id.searchEmptyView); + + + + + + + + + ------------RTL---------- END + + + + + + */ + + fragmentView = new LinearLayout(getParentActivity()); + LinearLayout linearLayout = (LinearLayout) fragmentView; + linearLayout.setOrientation(LinearLayout.VERTICAL); + + emptyTextView = new TextView(getParentActivity()); + emptyTextView.setTextColor(0xff808080); + emptyTextView.setTextSize(24); + emptyTextView.setGravity(Gravity.CENTER); + emptyTextView.setVisibility(View.INVISIBLE); emptyTextView.setText(LocaleController.getString("NoContacts", R.string.NoContacts)); + linearLayout.addView(emptyTextView); + LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) emptyTextView.getLayoutParams(); + layoutParams.width = LinearLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = LinearLayout.LayoutParams.MATCH_PARENT; + layoutParams.gravity = Gravity.TOP; + emptyTextView.setLayoutParams(layoutParams); emptyTextView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); - userSelectEditText = (EditText)fragmentView.findViewById(R.id.bubble_input_text); + + FrameLayout frameLayout = new FrameLayout(getParentActivity()); + linearLayout.addView(frameLayout); + layoutParams = (LinearLayout.LayoutParams) frameLayout.getLayoutParams(); + layoutParams.width = LinearLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT; + layoutParams.gravity = Gravity.TOP; + frameLayout.setLayoutParams(layoutParams); + + userSelectEditText = new EditText(getParentActivity()); + userSelectEditText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + frameLayout.addView(userSelectEditText); + userSelectEditText.setHint(LocaleController.getString("SendMessageTo", R.string.SendMessageTo)); if (Build.VERSION.SDK_INT >= 11) { userSelectEditText.setTextIsSelectable(false); @@ -256,11 +319,23 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen } }); - listView = (PinnedHeaderListView)fragmentView.findViewById(R.id.listView); + listView = new SectionsListView(getParentActivity()); listView.setEmptyView(emptyTextView); listView.setVerticalScrollBarEnabled(false); - - listView.setAdapter(listViewAdapter = new ListAdapter(getParentActivity())); + listView.setDivider(null); + listView.setDividerHeight(0); + listView.setFastScrollEnabled(true); + listView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); + listView.setAdapter(listViewAdapter); + if (Build.VERSION.SDK_INT >= 11) { + listView.setFastScrollAlwaysVisible(true); + listView.setVerticalScrollbarPosition(LocaleController.isRTL ? ListView.SCROLLBAR_POSITION_LEFT : ListView.SCROLLBAR_POSITION_RIGHT); + } + ((FrameLayout) fragmentView).addView(listView); + layoutParams = (LinearLayout.LayoutParams) listView.getLayoutParams(); + layoutParams.width = LinearLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = LinearLayout.LayoutParams.MATCH_PARENT; + listView.setLayoutParams(layoutParams); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { @@ -315,7 +390,6 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen } } }); - listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { @@ -337,6 +411,29 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen return fragmentView; } + @Override + public void didReceivedNotification(int id, Object... args) { + if (id == NotificationCenter.contactsDidLoaded) { + if (listViewAdapter != null) { + listViewAdapter.notifyDataSetChanged(); + } + } else if (id == NotificationCenter.updateInterfaces) { + int mask = (Integer)args[0]; + if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_NAME) != 0 || (mask & MessagesController.UPDATE_MASK_STATUS) != 0) { + if (listView != null) { + listView.invalidateViews(); + } + } + } else if (id == NotificationCenter.chatDidCreated) { + AndroidUtilities.runOnUIThread(new Runnable() { + @Override + public void run() { + removeSelfFromStack(); + } + }); + } + } + public XImageSpan createAndPutChipForUser(TLRPC.User user) { LayoutInflater lf = (LayoutInflater)ApplicationLoader.applicationContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); View textView = lf.inflate(R.layout.group_create_bubble, null); @@ -374,253 +471,4 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen userSelectEditText.setSelection(ssb.length()); return span; } - - public void searchDialogs(final String query) { - if (query == null) { - searchResult = null; - searchResultNames = null; - } else { - try { - if (searchTimer != null) { - searchTimer.cancel(); - } - } catch (Exception e) { - FileLog.e("tmessages", e); - } - searchTimer = new Timer(); - searchTimer.schedule(new TimerTask() { - @Override - public void run() { - try { - searchTimer.cancel(); - searchTimer = null; - } catch (Exception e) { - FileLog.e("tmessages", e); - } - processSearch(query); - } - }, 100, 300); - } - } - - private void processSearch(final String query) { - AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - final ArrayList contactsCopy = new ArrayList(); - contactsCopy.addAll(ContactsController.getInstance().contacts); - Utilities.searchQueue.postRunnable(new Runnable() { - @Override - public void run() { - if (query.length() == 0) { - updateSearchResults(new ArrayList(), new ArrayList()); - return; - } - long time = System.currentTimeMillis(); - ArrayList resultArray = new ArrayList(); - ArrayList resultArrayNames = new ArrayList(); - String q = query.toLowerCase(); - - for (TLRPC.TL_contact contact : contactsCopy) { - TLRPC.User user = MessagesController.getInstance().getUser(contact.user_id); - if (user.first_name.toLowerCase().startsWith(q) || user.last_name.toLowerCase().startsWith(q)) { - if (user.id == UserConfig.getClientUserId()) { - continue; - } - resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q)); - resultArray.add(user); - } - } - - updateSearchResults(resultArray, resultArrayNames); - } - }); - } - }); - } - - private void updateSearchResults(final ArrayList users, final ArrayList names) { - AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - searchResult = users; - searchResultNames = names; - listViewAdapter.notifyDataSetChanged(); - } - }); - } - - @Override - public void didReceivedNotification(int id, Object... args) { - if (id == NotificationCenter.contactsDidLoaded) { - if (listViewAdapter != null) { - listViewAdapter.notifyDataSetChanged(); - } - } else if (id == NotificationCenter.updateInterfaces) { - int mask = (Integer)args[0]; - if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_NAME) != 0 || (mask & MessagesController.UPDATE_MASK_STATUS) != 0) { - if (listView != null) { - listView.invalidateViews(); - } - } - } else if (id == NotificationCenter.chatDidCreated) { - AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - removeSelfFromStack(); - } - }); - } - } - - private class ListAdapter extends SectionedBaseAdapter { - private Context mContext; - - public ListAdapter(Context context) { - mContext = context; - } - - @Override - public Object getItem(int section, int position) { - return null; - } - - @Override - public long getItemId(int section, int position) { - return 0; - } - - @Override - public int getSectionCount() { - if (searching && searchWas) { - return searchResult == null || searchResult.isEmpty() ? 0 : 1; - } - return ContactsController.getInstance().sortedUsersSectionsArray.size(); - } - - @Override - public int getCountForSection(int section) { - if (searching && searchWas) { - return searchResult == null ? 0 : searchResult.size(); - } - ArrayList arr = ContactsController.getInstance().usersSectionsDict.get(ContactsController.getInstance().sortedUsersSectionsArray.get(section)); - return arr.size(); - } - - @Override - public View getItemView(int section, int position, View convertView, ViewGroup parent) { - TLRPC.User user; - int size; - - if (searchWas && searching) { - user = MessagesController.getInstance().getUser(searchResult.get(position).id); - size = searchResult.size(); - } else { - ArrayList arr = ContactsController.getInstance().usersSectionsDict.get(ContactsController.getInstance().sortedUsersSectionsArray.get(section)); - user = MessagesController.getInstance().getUser(arr.get(position).user_id); - size = arr.size(); - } - - if (convertView == null) { - LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - convertView = li.inflate(R.layout.group_create_row_layout, parent, false); - } - ContactListRowHolder holder = (ContactListRowHolder)convertView.getTag(); - if (holder == null) { - holder = new ContactListRowHolder(convertView); - convertView.setTag(holder); - } - - ImageView checkButton = (ImageView)convertView.findViewById(R.id.settings_row_check_button); - if (selectedContacts.containsKey(user.id)) { - checkButton.setImageResource(R.drawable.btn_check_on_holo_light); - } else { - checkButton.setImageResource(R.drawable.btn_check_off_holo_light); - } - - View divider = convertView.findViewById(R.id.settings_row_divider); - if (position == size - 1) { - divider.setVisibility(View.INVISIBLE); - } else { - divider.setVisibility(View.VISIBLE); - } - - if (searchWas && searching) { - holder.nameTextView.setText(searchResultNames.get(position)); - } else { - String name = ContactsController.formatName(user.first_name, user.last_name); - if (name.length() == 0) { - if (user.phone != null && user.phone.length() != 0) { - name = PhoneFormat.getInstance().format("+" + user.phone); - } else { - name = LocaleController.getString("HiddenName", R.string.HiddenName); - } - } - holder.nameTextView.setText(name); - } - - TLRPC.FileLocation photo = null; - if (user.photo != null) { - photo = user.photo.photo_small; - } - holder.avatarDrawable.setInfo(user.id, user.first_name, user.last_name, false); - holder.avatarImage.setImage(photo, "50_50", holder.avatarDrawable); - - holder.messageTextView.setText(LocaleController.formatUserStatus(user)); - if (user.status != null && user.status.expires > ConnectionsManager.getInstance().getCurrentTime()) { - holder.messageTextView.setTextColor(0xff548ab6); - } else { - holder.messageTextView.setTextColor(0xff808080); - } - - return convertView; - } - - @Override - public int getItemViewType(int section, int position) { - return 0; - } - - @Override - public int getItemViewTypeCount() { - return 1; - } - - @Override - public int getSectionHeaderViewType(int section) { - return 0; - } - - @Override - public int getSectionHeaderViewTypeCount() { - return 1; - } - - @Override - public View getSectionHeaderView(int section, View convertView, ViewGroup parent) { - if (convertView == null) { - convertView = new SettingsSectionLayout(mContext); - convertView.setBackgroundColor(0xffffffff); - } - if (searching && searchWas) { - ((SettingsSectionLayout) convertView).setText(LocaleController.getString("AllContacts", R.string.AllContacts)); - } else { - ((SettingsSectionLayout) convertView).setText(ContactsController.getInstance().sortedUsersSectionsArray.get(section)); - } - return convertView; - } - } - - public static class ContactListRowHolder { - public BackupImageView avatarImage; - public TextView messageTextView; - public TextView nameTextView; - public AvatarDrawable avatarDrawable = new AvatarDrawable(); - - public ContactListRowHolder(View view) { - messageTextView = (TextView)view.findViewById(R.id.messages_list_row_message); - nameTextView = (TextView)view.findViewById(R.id.messages_list_row_name); - avatarImage = (BackupImageView)view.findViewById(R.id.messages_list_row_avatar); - } - } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateFinalActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateFinalActivity.java index 7e482fc6..8187925c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateFinalActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateFinalActivity.java @@ -389,14 +389,10 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati @Override public View getItemView(int section, int position, View convertView, ViewGroup parent) { TLRPC.User user = MessagesController.getInstance().getUser(selectedContacts.get(position)); - if (convertView == null) { - convertView = new UserCell(mContext); + convertView = new UserCell(mContext, 1); } - - ((UserCell)convertView).setData(user, null, null); - ((UserCell) convertView).useSeparator = position != selectedContacts.size() - 1; - + ((UserCell) convertView).setData(user, null, null, 0); return convertView; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 48a45a74..f10eabec 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -355,7 +355,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } } else if (fragmentName.equals("chat_profile")) { if (args != null) { - ChatProfileActivity profile = new ChatProfileActivity(args); + ProfileActivity profile = new ProfileActivity(args); if (actionBarLayout.addFragmentToStack(profile)) { profile.restoreSelfArgs(savedInstanceState); } @@ -1009,7 +1009,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa outState.putString("fragment", "group"); } else if (lastFragment instanceof SettingsWallpapersActivity) { outState.putString("fragment", "wallpapers"); - } else if (lastFragment instanceof ChatProfileActivity && args != null) { + } else if (lastFragment instanceof ProfileActivity && ((ProfileActivity) lastFragment).isChat() && args != null) { outState.putBundle("args", args); outState.putString("fragment", "chat_profile"); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java index faa04f45..223eb110 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java @@ -16,12 +16,15 @@ import android.content.res.Configuration; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.text.Html; +import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.FrameLayout; import android.widget.ImageView; @@ -31,7 +34,9 @@ import android.widget.TextView; import org.telegram.android.AndroidUtilities; import org.telegram.PhoneFormat.PhoneFormat; import org.telegram.android.LocaleController; +import org.telegram.android.MessagesStorage; import org.telegram.android.SendMessagesHelper; +import org.telegram.messenger.ConnectionsManager; import org.telegram.messenger.TLRPC; import org.telegram.android.ContactsController; import org.telegram.messenger.FileLog; @@ -39,22 +44,33 @@ import org.telegram.android.MessagesController; import org.telegram.android.NotificationCenter; import org.telegram.messenger.R; import org.telegram.android.MessageObject; +import org.telegram.messenger.UserConfig; +import org.telegram.messenger.Utilities; import org.telegram.ui.Adapters.BaseFragmentAdapter; +import org.telegram.ui.AnimationCompat.ViewProxy; import org.telegram.ui.Cells.DividerCell; import org.telegram.ui.Cells.EmptyCell; +import org.telegram.ui.Cells.ShadowSectionCell; import org.telegram.ui.Cells.TextCell; import org.telegram.ui.Cells.TextDetailCell; +import org.telegram.ui.Cells.UserCell; import org.telegram.ui.Views.ActionBar.ActionBar; import org.telegram.ui.Views.ActionBar.ActionBarMenu; import org.telegram.ui.Views.ActionBar.ActionBarMenuItem; import org.telegram.ui.Views.AvatarDrawable; +import org.telegram.ui.Views.AvatarUpdater; import org.telegram.ui.Views.BackupImageView; import org.telegram.ui.Views.ActionBar.BaseFragment; import org.telegram.ui.Views.IdenticonDrawable; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.concurrent.Semaphore; public class ProfileActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, MessagesActivity.MessagesActivityDelegate, PhotoViewer.PhotoViewerProvider { + private ListView listView; private ListAdapter listAdapter; private BackupImageView avatarImage; @@ -63,19 +79,35 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private ImageView writeButton; private int user_id; - private int totalMediaCount = -1; - private boolean creatingChat = false; + private int chat_id; private long dialog_id; + private boolean creatingChat; + private boolean userBlocked; + + private AvatarUpdater avatarUpdater; + private TLRPC.ChatParticipants info; + private TLRPC.TL_chatParticipant selectedUser; + private int onlineCount = -1; + private ArrayList sortedUsers; + private TLRPC.EncryptedChat currentEncryptedChat; - private boolean userBlocked = false; + private TLRPC.Chat currentChat; + + private int totalMediaCount = -1; private final static int add_contact = 1; private final static int block_contact = 2; private final static int share_contact = 3; private final static int edit_contact = 4; private final static int delete_contact = 5; + private final static int add_member = 6; + private final static int leave_group = 7; + private final static int edit_name = 8; + private int overscrollRow; private int emptyRow; + private int emptyRowChat; + private int emptyRowChat2; private int phoneRow; private int usernameRow; private int settingsTimerRow; @@ -84,6 +116,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private int sharedMediaRow; private int startSecretChatRow; private int sectionRow; + private int membersSectionRow; + private int membersEndRow; private int rowCount = 0; public ProfileActivity(Bundle args) { @@ -93,23 +127,73 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. @Override public boolean onFragmentCreate() { user_id = arguments.getInt("user_id", 0); - dialog_id = arguments.getLong("dialog_id", 0); - if (dialog_id != 0) { - currentEncryptedChat = MessagesController.getInstance().getEncryptedChat((int)(dialog_id >> 32)); - } - updateRowsIds(); - if (MessagesController.getInstance().getUser(user_id) == null) { + chat_id = getArguments().getInt("chat_id", 0); + if (user_id != 0) { + dialog_id = arguments.getLong("dialog_id", 0); + if (dialog_id != 0) { + currentEncryptedChat = MessagesController.getInstance().getEncryptedChat((int) (dialog_id >> 32)); + } + if (MessagesController.getInstance().getUser(user_id) == null) { + return false; + } + NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.encryptedChatCreated); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.encryptedChatUpdated); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.blockedUsersDidLoaded); + userBlocked = MessagesController.getInstance().blockedUsers.contains(user_id); + + MessagesController.getInstance().loadFullUser(MessagesController.getInstance().getUser(user_id), classGuid); + } else if (chat_id != 0) { + currentChat = MessagesController.getInstance().getChat(chat_id); + if (currentChat == null) { + final Semaphore semaphore = new Semaphore(0); + MessagesStorage.getInstance().getStorageQueue().postRunnable(new Runnable() { + @Override + public void run() { + currentChat = MessagesStorage.getInstance().getChat(chat_id); + semaphore.release(); + } + }); + try { + semaphore.acquire(); + } catch (Exception e) { + FileLog.e("tmessages", e); + } + if (currentChat != null) { + MessagesController.getInstance().putChat(currentChat, true); + } else { + return false; + } + } + + + NotificationCenter.getInstance().addObserver(this, NotificationCenter.chatInfoDidLoaded); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeChats); + + sortedUsers = new ArrayList(); + updateOnlineCount(); + if (chat_id > 0) { + MessagesController.getInstance().getMediaCount(-chat_id, classGuid, true); + } + + avatarUpdater = new AvatarUpdater(); + avatarUpdater.delegate = new AvatarUpdater.AvatarUpdaterDelegate() { + @Override + public void didUploadedPhoto(TLRPC.InputFile file, TLRPC.PhotoSize small, TLRPC.PhotoSize big) { + if (chat_id != 0) { + MessagesController.getInstance().changeChatAvatar(chat_id, file); + } + } + }; + avatarUpdater.parentFragment = this; + } else { return false; } - NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.mediaCountDidLoaded); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.encryptedChatCreated); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.encryptedChatUpdated); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.blockedUsersDidLoaded); - userBlocked = MessagesController.getInstance().blockedUsers.contains(user_id); - MessagesController.getInstance().loadFullUser(MessagesController.getInstance().getUser(user_id), classGuid); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.mediaCountDidLoaded); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces); + updateRowsIds(); return true; } @@ -117,27 +201,35 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. @Override public void onFragmentDestroy() { super.onFragmentDestroy(); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateInterfaces); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.contactsDidLoaded); NotificationCenter.getInstance().removeObserver(this, NotificationCenter.mediaCountDidLoaded); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.encryptedChatCreated); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.encryptedChatUpdated); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.blockedUsersDidLoaded); - - MessagesController.getInstance().cancelLoadFullUser(user_id); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateInterfaces); + if (user_id != 0) { + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.contactsDidLoaded); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.encryptedChatCreated); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.encryptedChatUpdated); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.blockedUsersDidLoaded); + MessagesController.getInstance().cancelLoadFullUser(user_id); + } else if (chat_id != 0) { + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.chatInfoDidLoaded); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); + avatarUpdater.clear(); + } } @Override public View createView(LayoutInflater inflater, ViewGroup container) { if (fragmentView == null) { - actionBar.setBackgroundColor(AvatarDrawable.getProfileBackColorForId(user_id)); - actionBar.setItemsBackground(AvatarDrawable.getButtonColorForId(user_id)); + actionBar.setBackgroundColor(AvatarDrawable.getProfileBackColorForId(user_id != 0 ? user_id : chat_id)); + actionBar.setItemsBackground(AvatarDrawable.getButtonColorForId(user_id != 0 ? user_id : chat_id)); actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setBackOverlay(R.layout.updating_state_layout); - actionBar.setExtraHeight(AndroidUtilities.dp(88)); + actionBar.setExtraHeight(AndroidUtilities.dp(88), false); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override public void onItemClick(final int id) { + if (getParentActivity() == null) { + return; + } if (id == -1) { finishFragment(); } else if (id == block_contact) { @@ -194,6 +286,46 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. }); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); showAlertDialog(builder); + } else if (id == add_member) { + Bundle args = new Bundle(); + args.putBoolean("onlyUsers", true); + args.putBoolean("destroyAfterSelect", true); + args.putBoolean("returnAsResult", true); + //args.putBoolean("allowUsernameSearch", false); + if (chat_id > 0) { + args.putString("selectAlertString", LocaleController.getString("AddToTheGroup", R.string.AddToTheGroup)); + } + ContactsActivity fragment = new ContactsActivity(args); + fragment.setDelegate(new ContactsActivity.ContactsActivityDelegate() { + @Override + public void didSelectContact(TLRPC.User user, String param) { + MessagesController.getInstance().addUserToChat(chat_id, user, info, param != null ? Utilities.parseInt(param) : 0); + } + }); + if (info != null) { + HashMap users = new HashMap(); + for (TLRPC.TL_chatParticipant p : info.participants) { + users.put(p.user_id, null); + } + fragment.setIgnoreUsers(users); + } + presentFragment(fragment); + } else if (id == leave_group) { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setMessage(LocaleController.getString("AreYouSureDeleteAndExit", R.string.AreYouSureDeleteAndExit)); + builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + kickUser(null); + } + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + showAlertDialog(builder); + } else if (id == edit_name) { + Bundle args = new Bundle(); + args.putInt("chat_id", chat_id); + presentFragment(new ChatProfileChangeNameActivity(args)); } } }); @@ -204,7 +336,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. fragmentView = new FrameLayout(getParentActivity()); FrameLayout frameLayout = (FrameLayout) fragmentView; - frameLayout.addView(actionBar); avatarImage = new BackupImageView(getParentActivity()); avatarImage.imageReceiver.setRoundRadius(AndroidUtilities.dp(30)); @@ -221,10 +352,18 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. avatarImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - TLRPC.User user = MessagesController.getInstance().getUser(user_id); - if (user.photo != null && user.photo.photo_big != null) { - PhotoViewer.getInstance().setParentActivity(getParentActivity()); - PhotoViewer.getInstance().openPhoto(user.photo.photo_big, ProfileActivity.this); + if (user_id != 0) { + TLRPC.User user = MessagesController.getInstance().getUser(user_id); + if (user.photo != null && user.photo.photo_big != null) { + PhotoViewer.getInstance().setParentActivity(getParentActivity()); + PhotoViewer.getInstance().openPhoto(user.photo.photo_big, ProfileActivity.this); + } + } else if (chat_id != 0) { + TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); + if (chat.photo != null && chat.photo.photo_big != null) { + PhotoViewer.getInstance().setParentActivity(getParentActivity()); + PhotoViewer.getInstance().openPhoto(chat.photo.photo_big, ProfileActivity.this); + } } } }); @@ -235,6 +374,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. nameTextView.setLines(1); nameTextView.setMaxLines(1); nameTextView.setSingleLine(true); + nameTextView.setEllipsize(TextUtils.TruncateAt.END); nameTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT)); nameTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); actionBar.addView(nameTextView); @@ -248,11 +388,12 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. nameTextView.setLayoutParams(layoutParams); onlineTextView = new TextView(getParentActivity()); - onlineTextView.setTextColor(AvatarDrawable.getProfileTextColorForId(user_id)); + onlineTextView.setTextColor(AvatarDrawable.getProfileTextColorForId(user_id != 0 ? user_id : chat_id)); onlineTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); onlineTextView.setLines(1); onlineTextView.setMaxLines(1); onlineTextView.setSingleLine(true); + onlineTextView.setEllipsize(TextUtils.TruncateAt.END); onlineTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT)); actionBar.addView(onlineTextView); layoutParams = (FrameLayout.LayoutParams) onlineTextView.getLayoutParams(); @@ -265,10 +406,12 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. onlineTextView.setLayoutParams(layoutParams); listView = new ListView(getParentActivity()); + listView.setDrawingCacheEnabled(false); + listView.setDrawingCacheBackgroundColor(0); listView.setDivider(null); listView.setDividerHeight(0); listView.setVerticalScrollBarEnabled(false); - AndroidUtilities.setListViewEdgeEffectColor(listView, AvatarDrawable.getProfileBackColorForId(user_id)); + AndroidUtilities.setListViewEdgeEffectColor(listView, AvatarDrawable.getProfileBackColorForId(user_id != 0 ? user_id : chat_id)); frameLayout.addView(listView); layoutParams = (FrameLayout.LayoutParams) listView.getLayoutParams(); layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; @@ -285,10 +428,10 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } if (i == sharedMediaRow) { Bundle args = new Bundle(); - if (dialog_id != 0) { - args.putLong("dialog_id", dialog_id); + if (user_id != 0) { + args.putLong("dialog_id", dialog_id != 0 ? dialog_id : user_id); } else { - args.putLong("dialog_id", user_id); + args.putLong("dialog_id", -chat_id); } presentFragment(new MediaActivity(args)); } else if (i == settingsKeyRow) { @@ -302,7 +445,11 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. showAlertDialog(AndroidUtilities.buildTTLAlert(getParentActivity(), currentEncryptedChat)); } else if (i == settingsNotificationsRow) { Bundle args = new Bundle(); - args.putLong("dialog_id", dialog_id == 0 ? user_id : dialog_id); + if (user_id != 0) { + args.putLong("dialog_id", dialog_id == 0 ? user_id : dialog_id); + } else if (chat_id != 0) { + args.putLong("dialog_id", -chat_id); + } presentFragment(new ProfileNotificationsActivity(args)); } else if (i == startSecretChatRow) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); @@ -348,40 +495,147 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } }); showAlertDialog(builder); + } else if (i > emptyRowChat2 && i < membersEndRow) { + int user_id = info.participants.get(sortedUsers.get(i - emptyRowChat2 - 1)).user_id; + if (user_id == UserConfig.getClientUserId()) { + return; + } + Bundle args = new Bundle(); + args.putInt("user_id", user_id); + presentFragment(new ProfileActivity(args)); } } }); + if (chat_id != 0) { + listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView adapterView, View view, int i, long l) { + if (i > emptyRowChat2 && i < membersEndRow) { + if (getParentActivity() == null) { + return false; + } + + TLRPC.TL_chatParticipant user = info.participants.get(sortedUsers.get(i - emptyRowChat2 - 1)); + if (user.user_id == UserConfig.getClientUserId()) { + return false; + } + if (info.admin_id != UserConfig.getClientUserId() && user.inviter_id != UserConfig.getClientUserId()) { + return false; + } + selectedUser = user; + + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + CharSequence[] items = new CharSequence[]{chat_id > 0 ? LocaleController.getString("KickFromGroup", R.string.KickFromGroup) : LocaleController.getString("KickFromBroadcast", R.string.KickFromBroadcast)}; + + builder.setItems(items, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + if (i == 0) { + kickUser(selectedUser); + } + } + }); + showAlertDialog(builder); + + return true; + } + return false; + } + }); + } if (dialog_id != 0) { MessagesController.getInstance().getMediaCount(dialog_id, classGuid, true); } else { MessagesController.getInstance().getMediaCount(user_id, classGuid, true); } - writeButton = new ImageView(getParentActivity()); - writeButton.setImageResource(R.drawable.floating_user_states); - frameLayout.addView(writeButton); - layoutParams = (FrameLayout.LayoutParams) writeButton.getLayoutParams(); - layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; - layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT; - layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : 0); - layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 16); - layoutParams.gravity = (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT); - writeButton.setLayoutParams(layoutParams); - writeButton.setOnClickListener(new View.OnClickListener() { + frameLayout.addView(actionBar); + + if (user_id != 0 || chat_id >= 0) { + writeButton = new ImageView(getParentActivity()); + if (user_id != 0) { + writeButton.setImageResource(R.drawable.floating_user_states); + } else if (chat_id != 0) { + writeButton.setImageResource(R.drawable.floating_group_states); + } + frameLayout.addView(writeButton); + layoutParams = (FrameLayout.LayoutParams) writeButton.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? 16 : 0); + layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? 0 : 16); + layoutParams.gravity = (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT); + writeButton.setLayoutParams(layoutParams); + writeButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (getParentActivity() == null) { + return; + } + if (user_id != 0) { + TLRPC.User user = MessagesController.getInstance().getUser(user_id); + if (user == null || user instanceof TLRPC.TL_userEmpty) { + return; + } + NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); + Bundle args = new Bundle(); + args.putInt("user_id", user_id); + presentFragment(new ChatActivity(args), true); + } else if (chat_id != 0) { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + CharSequence[] items; + TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); + if (chat.photo == null || chat.photo.photo_big == null || chat.photo instanceof TLRPC.TL_chatPhotoEmpty) { + items = new CharSequence[]{LocaleController.getString("FromCamera", R.string.FromCamera), LocaleController.getString("FromGalley", R.string.FromGalley)}; + } else { + items = new CharSequence[]{LocaleController.getString("FromCamera", R.string.FromCamera), LocaleController.getString("FromGalley", R.string.FromGalley), LocaleController.getString("DeletePhoto", R.string.DeletePhoto)}; + } + + builder.setItems(items, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + int action = 0; + if (i == 0) { + avatarUpdater.openCamera(); + } else if (i == 1) { + avatarUpdater.openGallery(); + } else if (i == 3) { + MessagesController.getInstance().changeChatAvatar(chat_id, null); + } + } + }); + showAlertDialog(builder); + } + } + }); + } + + listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override - public void onClick(View v) { - TLRPC.User user = MessagesController.getInstance().getUser(user_id); - if (user == null || user instanceof TLRPC.TL_userEmpty) { + public void onScrollStateChanged(AbsListView view, int scrollState) { + + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + if (totalItemCount == 0) { return; } - NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); - Bundle args = new Bundle(); - args.putInt("user_id", user_id); - presentFragment(new ChatActivity(args), true); + int height = 0; + View child = view.getChildAt(0); + if (child != null) { + if (firstVisibleItem == 0) { + height = AndroidUtilities.dp(88) + child.getTop(); + } + if (actionBar.getExtraHeight() != height) { + actionBar.setExtraHeight(height, true); + needLayout(); + } + } } }); - updateUserData(); + updateProfileData(); } else { ViewGroup parent = (ViewGroup)fragmentView.getParent(); if (parent != null) { @@ -391,6 +645,85 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. return fragmentView; } + @Override + public void saveSelfArgs(Bundle args) { + if (chat_id != 0) { + if (avatarUpdater != null && avatarUpdater.currentPicturePath != null) { + args.putString("path", avatarUpdater.currentPicturePath); + } + } + } + + @Override + public void restoreSelfArgs(Bundle args) { + if (chat_id != 0) { + MessagesController.getInstance().loadChatInfo(chat_id, null); + if (avatarUpdater != null) { + avatarUpdater.currentPicturePath = args.getString("path"); + } + } + } + + @Override + public void onActivityResultFragment(int requestCode, int resultCode, Intent data) { + if (chat_id != 0) { + avatarUpdater.onActivityResult(requestCode, resultCode, data); + } + } + + private void needLayout() { + FrameLayout.LayoutParams layoutParams; + if (listView != null) { + layoutParams = (FrameLayout.LayoutParams) listView.getLayoutParams(); + layoutParams.topMargin = (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0) + AndroidUtilities.getCurrentActionBarHeight(); + listView.setLayoutParams(layoutParams); + } + + if (avatarImage != null) { + float diff = actionBar.getExtraHeight() / (float)AndroidUtilities.dp(88); + float diffm = 1.0f - diff; + + int avatarSize = 42 + (int)(18 * diff); + int avatarX = 17 + (int)(47 * diffm); + int avatarY = AndroidUtilities.dp(22) - (int)((AndroidUtilities.dp(22) - (AndroidUtilities.getCurrentActionBarHeight() - AndroidUtilities.dp(42)) / 2) * (1.0f - diff)); + int nameX = 97 + (int)(21 * diffm); + int nameEndX = 16 + (int)(32 * diffm); + float nameFontSize = 20 - 2 * diffm; + int nameY = avatarY + AndroidUtilities.dp(29 - 10 * diffm); + int statusY = avatarY + AndroidUtilities.dp(8 - 7 * diffm); + + if (writeButton != null) { + layoutParams = (FrameLayout.LayoutParams) writeButton.getLayoutParams(); + layoutParams.topMargin = (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0) + AndroidUtilities.getCurrentActionBarHeight() + actionBar.getExtraHeight() - AndroidUtilities.dp(29.5f); + writeButton.setLayoutParams(layoutParams); + ViewProxy.setAlpha(writeButton, diff); + writeButton.setVisibility(diff == 0 ? View.GONE : View.VISIBLE); + } + + avatarImage.imageReceiver.setRoundRadius(AndroidUtilities.dp(avatarSize / 2)); + layoutParams = (FrameLayout.LayoutParams) avatarImage.getLayoutParams(); + layoutParams.width = AndroidUtilities.dp(avatarSize); + layoutParams.height = AndroidUtilities.dp(avatarSize); + layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(avatarX); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(avatarX) : 0; + layoutParams.bottomMargin = avatarY; + avatarImage.setLayoutParams(layoutParams); + + nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, nameFontSize); + layoutParams = (FrameLayout.LayoutParams) nameTextView.getLayoutParams(); + layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? nameEndX : nameX); + layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? nameX : nameEndX); + layoutParams.bottomMargin = nameY; + nameTextView.setLayoutParams(layoutParams); + + layoutParams = (FrameLayout.LayoutParams) onlineTextView.getLayoutParams(); + layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? nameEndX : nameX); + layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? nameX : nameEndX); + layoutParams.bottomMargin = statusY; + onlineTextView.setLayoutParams(layoutParams); + } + } + private void fixLayout() { if (fragmentView == null) { return; @@ -399,12 +732,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. @Override public boolean onPreDraw() { if (fragmentView != null) { - ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) listView.getLayoutParams(); - layoutParams.topMargin = actionBar.getHeight(); - listView.setLayoutParams(layoutParams); - layoutParams = (ViewGroup.MarginLayoutParams) writeButton.getLayoutParams(); - layoutParams.topMargin = actionBar.getHeight() - AndroidUtilities.dp(29.5f); - writeButton.setLayoutParams(layoutParams); + needLayout(); fragmentView.getViewTreeObserver().removeOnPreDrawListener(this); } return false; @@ -423,20 +751,47 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. return false; } + @Override public void didReceivedNotification(int id, final Object... args) { if (id == NotificationCenter.updateInterfaces) { int mask = (Integer)args[0]; - if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_NAME) != 0) { - updateUserData(); + if (user_id != 0) { + if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_NAME) != 0) { + updateProfileData(); + } + } else if (chat_id != 0) { + if ((mask & MessagesController.UPDATE_MASK_CHAT_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_CHAT_NAME) != 0 || (mask & MessagesController.UPDATE_MASK_CHAT_MEMBERS) != 0 || (mask & MessagesController.UPDATE_MASK_STATUS) != 0) { + updateOnlineCount(); + updateProfileData(); + } + if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_NAME) != 0 || (mask & MessagesController.UPDATE_MASK_STATUS) != 0) { + int count = listView.getChildCount(); + for (int a = 0; a < count; a++) { + View child = listView.getChildAt(a); + if (child instanceof UserCell) { + ((UserCell) child).update(mask); + } + } + } } } else if (id == NotificationCenter.contactsDidLoaded) { createActionBarMenu(); } else if (id == NotificationCenter.mediaCountDidLoaded) { long uid = (Long)args[0]; - if (uid > 0 && user_id == uid && dialog_id == 0 || dialog_id != 0 && dialog_id == uid) { - totalMediaCount = (Integer)args[1]; - if (listView != null) { - listView.invalidateViews(); + if (user_id != 0) { + if (uid > 0 && user_id == uid && dialog_id == 0 || dialog_id != 0 && dialog_id == uid) { + totalMediaCount = (Integer) args[1]; + if (listView != null) { + listView.invalidateViews(); + } + } + } else if (chat_id != 0) { + int lower_part = (int)uid; + if (lower_part < 0 && chat_id == -lower_part) { + totalMediaCount = (Integer)args[1]; + if (listView != null) { + listView.invalidateViews(); + } } } } else if (id == NotificationCenter.encryptedChatCreated) { @@ -467,6 +822,18 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (oldValue != userBlocked) { createActionBarMenu(); } + } else if (id == NotificationCenter.chatInfoDidLoaded) { + int chatId = (Integer)args[0]; + if (chatId == chat_id) { + info = (TLRPC.ChatParticipants)args[1]; + updateOnlineCount(); + updateRowsIds(); + if (listAdapter != null) { + listAdapter.notifyDataSetChanged(); + } + } + } else if (id == NotificationCenter.closeChats) { + removeSelfFromStack(); } } @@ -484,22 +851,33 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (fileLocation == null) { return null; } - TLRPC.User user = MessagesController.getInstance().getUser(user_id); - if (user != null && user.photo != null && user.photo.photo_big != null) { - TLRPC.FileLocation photoBig = user.photo.photo_big; - if (photoBig.local_id == fileLocation.local_id && photoBig.volume_id == fileLocation.volume_id && photoBig.dc_id == fileLocation.dc_id) { - int coords[] = new int[2]; - avatarImage.getLocationInWindow(coords); - PhotoViewer.PlaceProviderObject object = new PhotoViewer.PlaceProviderObject(); - object.viewX = coords[0]; - object.viewY = coords[1] - AndroidUtilities.statusBarHeight; - object.parentView = avatarImage; - object.imageReceiver = avatarImage.imageReceiver; - object.user_id = user_id; - object.thumb = object.imageReceiver.getBitmap(); - object.size = -1; - return object; + + TLRPC.FileLocation photoBig = null; + if (user_id != 0) { + TLRPC.User user = MessagesController.getInstance().getUser(user_id); + if (user != null && user.photo != null && user.photo.photo_big != null) { + photoBig = user.photo.photo_big; } + } else if (chat_id != 0) { + TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); + if (chat != null && chat.photo != null && chat.photo.photo_big != null) { + photoBig = chat.photo.photo_big; + } + } + + + if (photoBig != null && photoBig.local_id == fileLocation.local_id && photoBig.volume_id == fileLocation.volume_id && photoBig.dc_id == fileLocation.dc_id) { + int coords[] = new int[2]; + avatarImage.getLocationInWindow(coords); + PhotoViewer.PlaceProviderObject object = new PhotoViewer.PlaceProviderObject(); + object.viewX = coords[0]; + object.viewY = coords[1] - AndroidUtilities.statusBarHeight; + object.parentView = avatarImage; + object.imageReceiver = avatarImage.imageReceiver; + object.user_id = user_id; + object.thumb = object.imageReceiver.getBitmap(); + object.size = -1; + return object; } return null; } @@ -525,73 +903,199 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. @Override public int getSelectedCount() { return 0; } - private void updateRowsIds() { - rowCount = 0; - emptyRow = rowCount++; - phoneRow = rowCount++; - TLRPC.User user = MessagesController.getInstance().getUser(user_id); - if (user != null && user.username != null && user.username.length() > 0) { - usernameRow = rowCount++; - } else { - usernameRow = -1; + private void updateOnlineCount() { + if (info == null) { + return; } - sectionRow = rowCount++; - settingsNotificationsRow = rowCount++; - sharedMediaRow = rowCount++; - if (currentEncryptedChat instanceof TLRPC.TL_encryptedChat) { - settingsTimerRow = rowCount++; - settingsKeyRow = rowCount++; - } else { - settingsTimerRow = -1; - settingsKeyRow = -1; + onlineCount = 0; + int currentTime = ConnectionsManager.getInstance().getCurrentTime(); + sortedUsers.clear(); + int i = 0; + for (TLRPC.TL_chatParticipant participant : info.participants) { + TLRPC.User user = MessagesController.getInstance().getUser(participant.user_id); + if (user != null && user.status != null && (user.status.expires > currentTime || user.id == UserConfig.getClientUserId()) && user.status.expires > 10000) { + onlineCount++; + } + sortedUsers.add(i); + i++; } - if (currentEncryptedChat == null) { - startSecretChatRow = rowCount++; - } else { - startSecretChatRow = -1; + + Collections.sort(sortedUsers, new Comparator() { + @Override + public int compare(Integer lhs, Integer rhs) { + TLRPC.User user1 = MessagesController.getInstance().getUser(info.participants.get(rhs).user_id); + TLRPC.User user2 = MessagesController.getInstance().getUser(info.participants.get(lhs).user_id); + Integer status1 = 0; + Integer status2 = 0; + if (user1 != null && user1.status != null) { + if (user1.id == UserConfig.getClientUserId()) { + status1 = ConnectionsManager.getInstance().getCurrentTime() + 50000; + } else { + status1 = user1.status.expires; + } + } + if (user2 != null && user2.status != null) { + if (user2.id == UserConfig.getClientUserId()) { + status2 = ConnectionsManager.getInstance().getCurrentTime() + 50000; + } else { + status2 = user2.status.expires; + } + } + return status1.compareTo(status2); + } + }); + + if (listView != null) { + listView.invalidateViews(); } } - private void updateUserData() { - TLRPC.User user = MessagesController.getInstance().getUser(user_id); - TLRPC.FileLocation photo = null; - TLRPC.FileLocation photoBig = null; - if (user.photo != null) { - photo = user.photo.photo_small; - photoBig = user.photo.photo_big; + public void setChatInfo(TLRPC.ChatParticipants chatParticipants) { + info = chatParticipants; + } + + private void kickUser(TLRPC.TL_chatParticipant user) { + if (user != null) { + MessagesController.getInstance().deleteUserFromChat(chat_id, MessagesController.getInstance().getUser(user.user_id), info); + } else { + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats); + NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats); + MessagesController.getInstance().deleteUserFromChat(chat_id, MessagesController.getInstance().getUser(UserConfig.getClientUserId()), info); + MessagesController.getInstance().deleteDialog(-chat_id, 0, false); + finishFragment(); } - avatarImage.setImage(photo, "50_50", new AvatarDrawable(user, true)); - avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false); + } - nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); - onlineTextView.setText(LocaleController.formatUserStatus(user)); + public boolean isChat() { + return chat_id != 0; + } - avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false); + private void updateRowsIds() { + rowCount = 0; + overscrollRow = rowCount++; + if (user_id != 0) { + emptyRow = rowCount++; + phoneRow = rowCount++; + TLRPC.User user = MessagesController.getInstance().getUser(user_id); + if (user != null && user.username != null && user.username.length() > 0) { + usernameRow = rowCount++; + } else { + usernameRow = -1; + } + sectionRow = rowCount++; + settingsNotificationsRow = rowCount++; + sharedMediaRow = rowCount++; + if (currentEncryptedChat instanceof TLRPC.TL_encryptedChat) { + settingsTimerRow = rowCount++; + settingsKeyRow = rowCount++; + } else { + settingsTimerRow = -1; + settingsKeyRow = -1; + } + if (currentEncryptedChat == null) { + startSecretChatRow = rowCount++; + } else { + startSecretChatRow = -1; + } + } else if (chat_id != 0) { + if (chat_id > 0) { + emptyRow = rowCount++; + settingsNotificationsRow = rowCount++; + sharedMediaRow = rowCount++; + emptyRowChat = rowCount++; + membersSectionRow = rowCount++; + } + if (info != null && !(info instanceof TLRPC.TL_chatParticipantsForbidden)) { + emptyRowChat2 = rowCount++; + rowCount += info.participants.size(); + membersEndRow = rowCount; + int maxCount = chat_id > 0 ? MessagesController.getInstance().maxGroupCount : MessagesController.getInstance().maxBroadcastCount; + } else { + membersEndRow = -1; + membersSectionRow = -1; + emptyRowChat2 = -1; + } + } + } + + private void updateProfileData() { + if (user_id != 0) { + TLRPC.User user = MessagesController.getInstance().getUser(user_id); + TLRPC.FileLocation photo = null; + TLRPC.FileLocation photoBig = null; + if (user.photo != null) { + photo = user.photo.photo_small; + photoBig = user.photo.photo_big; + } + avatarImage.setImage(photo, "50_50", new AvatarDrawable(user, true)); + + nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); + onlineTextView.setText(LocaleController.formatUserStatus(user)); + + avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false); + } else if (chat_id != 0) { + TLRPC.Chat chat = MessagesController.getInstance().getChat(chat_id); + if (chat != null) { + currentChat = chat; + } + nameTextView.setText(chat.title); + + int count = chat.participants_count; + if (info != null) { + count = info.participants.size(); + } + + if (count != 0 && onlineCount > 1) { + onlineTextView.setText(Html.fromHtml(String.format("%s, %s", LocaleController.formatPluralString("Members", count), LocaleController.formatPluralString("Online", onlineCount)))); + } else { + onlineTextView.setText(LocaleController.formatPluralString("Members", count)); + } + + TLRPC.FileLocation photo = null; + TLRPC.FileLocation photoBig = null; + if (chat.photo != null) { + photo = chat.photo.photo_small; + photoBig = chat.photo.photo_big; + } + avatarImage.setImage(photo, "50_50", new AvatarDrawable(chat)); + avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false); + } } private void createActionBarMenu() { ActionBarMenu menu = actionBar.createMenu(); menu.clearItems(); - if (ContactsController.getInstance().contactsDict.get(user_id) == null) { - TLRPC.User user = MessagesController.getInstance().getUser(user_id); - if (user == null) { - return; - } - ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_other); - if (user.phone != null && user.phone.length() != 0) { - item.addSubItem(add_contact, LocaleController.getString("AddContact", R.string.AddContact), 0); + if (user_id != 0) { + if (ContactsController.getInstance().contactsDict.get(user_id) == null) { + TLRPC.User user = MessagesController.getInstance().getUser(user_id); + if (user == null) { + return; + } + ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_other); + if (user.phone != null && user.phone.length() != 0) { + item.addSubItem(add_contact, LocaleController.getString("AddContact", R.string.AddContact), 0); + item.addSubItem(share_contact, LocaleController.getString("ShareContact", R.string.ShareContact), 0); + item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); + } else { + item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); + } + } else { + ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_other); item.addSubItem(share_contact, LocaleController.getString("ShareContact", R.string.ShareContact), 0); item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); - } else { - item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); + item.addSubItem(edit_contact, LocaleController.getString("EditContact", R.string.EditContact), 0); + item.addSubItem(delete_contact, LocaleController.getString("DeleteContact", R.string.DeleteContact), 0); } - } else { + } else if (chat_id != 0) { ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_other); - item.addSubItem(share_contact, LocaleController.getString("ShareContact", R.string.ShareContact), 0); - item.addSubItem(block_contact, !userBlocked ? LocaleController.getString("BlockContact", R.string.BlockContact) : LocaleController.getString("Unblock", R.string.Unblock), 0); - item.addSubItem(edit_contact, LocaleController.getString("EditContact", R.string.EditContact), 0); - item.addSubItem(delete_contact, LocaleController.getString("DeleteContact", R.string.DeleteContact), 0); + item.addSubItem(edit_name, LocaleController.getString("EditName", R.string.EditName), 0); + if (chat_id > 0) { + item.addSubItem(add_member, LocaleController.getString("AddMember", R.string.AddMember), 0); + item.addSubItem(leave_group, LocaleController.getString("DeleteAndExit", R.string.DeleteAndExit), 0); + } else { + item.addSubItem(add_member, LocaleController.getString("AddRecipient", R.string.AddRecipient), 0); + } } } @@ -639,7 +1143,12 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. @Override public boolean isEnabled(int i) { - return i == phoneRow || i == settingsTimerRow || i == settingsKeyRow || i == settingsNotificationsRow || i == sharedMediaRow || i == startSecretChatRow; + if (user_id != 0) { + return i == phoneRow || i == settingsTimerRow || i == settingsKeyRow || i == settingsNotificationsRow || i == sharedMediaRow || i == startSecretChatRow; + } else if (chat_id != 0) { + return i == settingsNotificationsRow || i == sharedMediaRow || i > emptyRowChat2 && i < membersEndRow; + } + return false; } @Override @@ -667,7 +1176,14 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. int type = getItemViewType(i); if (type == 0) { if (view == null) { - view = new EmptyCell(mContext, 36); + view = new EmptyCell(mContext); + } + if (i == overscrollRow) { + ((EmptyCell) view).setHeight(88); + } else if (i == emptyRowChat || i == emptyRowChat2) { + ((EmptyCell) view).setHeight(8); + } else { + ((EmptyCell) view).setHeight(36); } } else if (type == 1) { if (view == null) { @@ -733,13 +1249,24 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. identiconDrawable.setBytes(encryptedChat.auth_key); textCell.setTextAndValueDrawable(LocaleController.getString("EncryptionKey", R.string.EncryptionKey), identiconDrawable); } + } else if (type == 4) { + if (view == null) { + view = new UserCell(mContext, 61); + } + + TLRPC.TL_chatParticipant part = info.participants.get(sortedUsers.get(i - emptyRowChat2 - 1)); + ((UserCell)view).setData(MessagesController.getInstance().getUser(part.user_id), null, null, i == emptyRowChat2 + 1 ? R.drawable.menu_newgroup : 0); + } else if (type == 5) { + if (view == null) { + view = new ShadowSectionCell(mContext); + } } return view; } @Override public int getItemViewType(int i) { - if (i == emptyRow) { + if (i == emptyRow || i == overscrollRow || i == emptyRowChat || i == emptyRowChat2) { return 0; } else if (i == sectionRow) { return 1; @@ -747,13 +1274,17 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. return 2; } else if (i == sharedMediaRow || i == settingsTimerRow || i == settingsNotificationsRow || i == startSecretChatRow || i == settingsKeyRow) { return 3; + } else if (i > emptyRowChat2 && i < membersEndRow) { + return 4; + } else if (i == membersSectionRow) { + return 5; } return 0; } @Override public int getViewTypeCount() { - return 4; + return 6; } @Override diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SettingsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/SettingsActivity.java index 2d1ea6aa..9b573d9f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SettingsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SettingsActivity.java @@ -18,9 +18,11 @@ import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.res.Configuration; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.text.Html; import android.text.Spannable; +import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.util.Base64; import android.util.TypedValue; @@ -30,6 +32,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.FrameLayout; import android.widget.ImageView; @@ -58,6 +61,7 @@ import org.telegram.messenger.RPCRequest; import org.telegram.messenger.UserConfig; import org.telegram.android.MessageObject; import org.telegram.ui.Adapters.BaseFragmentAdapter; +import org.telegram.ui.AnimationCompat.ViewProxy; import org.telegram.ui.Cells.TextInfoCell; import org.telegram.ui.Cells.EmptyCell; import org.telegram.ui.Cells.HeaderCell; @@ -88,6 +92,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter private ImageView writeButton; private AvatarUpdater avatarUpdater = new AvatarUpdater(); + private int overscrollRow; private int emptyRow; private int numberSectionRow; private int numberRow; @@ -200,6 +205,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces); rowCount = 0; + overscrollRow = rowCount++; emptyRow = rowCount++; numberSectionRow = rowCount++; numberRow = rowCount++; @@ -261,7 +267,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter actionBar.setItemsBackground(AvatarDrawable.getButtonColorForId(5)); actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setBackOverlay(R.layout.updating_state_layout); - actionBar.setExtraHeight(AndroidUtilities.dp(88)); + actionBar.setExtraHeight(AndroidUtilities.dp(88), false); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override public void onItemClick(int id) { @@ -306,7 +312,6 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter fragmentView = new FrameLayout(getParentActivity()); FrameLayout frameLayout = (FrameLayout) fragmentView; - frameLayout.addView(actionBar); avatarImage = new BackupImageView(getParentActivity()); avatarImage.imageReceiver.setRoundRadius(AndroidUtilities.dp(30)); @@ -337,6 +342,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter nameTextView.setLines(1); nameTextView.setMaxLines(1); nameTextView.setSingleLine(true); + nameTextView.setEllipsize(TextUtils.TruncateAt.END); nameTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT)); nameTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); actionBar.addView(nameTextView); @@ -355,6 +361,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter onlineTextView.setLines(1); onlineTextView.setMaxLines(1); onlineTextView.setSingleLine(true); + onlineTextView.setEllipsize(TextUtils.TruncateAt.END); onlineTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT)); actionBar.addView(onlineTextView); layoutParams = (FrameLayout.LayoutParams) onlineTextView.getLayoutParams(); @@ -368,6 +375,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter listView = new ListView(getParentActivity()); listView.setDivider(null); + listView.setDrawingCacheEnabled(false); listView.setDividerHeight(0); listView.setVerticalScrollBarEnabled(false); AndroidUtilities.setListViewEdgeEffectColor(listView, AvatarDrawable.getProfileBackColorForId(5)); @@ -624,6 +632,8 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter } }); + frameLayout.addView(actionBar); + writeButton = new ImageView(getParentActivity()); writeButton.setImageResource(R.drawable.floating_group_states); frameLayout.addView(writeButton); @@ -676,6 +686,31 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter } }); + listView.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + if (totalItemCount == 0) { + return; + } + int height = 0; + View child = view.getChildAt(0); + if (child != null) { + if (firstVisibleItem == 0) { + height = AndroidUtilities.dp(88) + child.getTop(); + } + if (actionBar.getExtraHeight() != height) { + actionBar.setExtraHeight(height, true); + needLayout(); + } + } + } + }); + updateUserData(); } else { ViewGroup parent = (ViewGroup)fragmentView.getParent(); @@ -864,6 +899,57 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter fixLayout(); } + private void needLayout() { + FrameLayout.LayoutParams layoutParams; + if (listView != null) { + layoutParams = (FrameLayout.LayoutParams) listView.getLayoutParams(); + layoutParams.topMargin = (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0) + AndroidUtilities.getCurrentActionBarHeight(); + listView.setLayoutParams(layoutParams); + } + + if (avatarImage != null) { + float diff = actionBar.getExtraHeight() / (float)AndroidUtilities.dp(88); + float diffm = 1.0f - diff; + + int avatarSize = 42 + (int)(18 * diff); + int avatarX = 17 + (int)(47 * diffm); + int avatarY = AndroidUtilities.dp(22) - (int)((AndroidUtilities.dp(22) - (AndroidUtilities.getCurrentActionBarHeight() - AndroidUtilities.dp(42)) / 2) * (1.0f - diff)); + int nameX = 97 + (int)(21 * diffm); + int nameEndX = 16 + (int)(32 * diffm); + float nameFontSize = 20 - 2 * diffm; + int nameY = avatarY + AndroidUtilities.dp(29 - 10 * diffm); + int statusY = avatarY + AndroidUtilities.dp(8 - 7 * diffm); + + layoutParams = (FrameLayout.LayoutParams) writeButton.getLayoutParams(); + layoutParams.topMargin = (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0) + AndroidUtilities.getCurrentActionBarHeight() + actionBar.getExtraHeight() - AndroidUtilities.dp(29.5f); + writeButton.setLayoutParams(layoutParams); + ViewProxy.setAlpha(writeButton, diff); + writeButton.setVisibility(diff == 0 ? View.GONE : View.VISIBLE); + + avatarImage.imageReceiver.setRoundRadius(AndroidUtilities.dp(avatarSize / 2)); + layoutParams = (FrameLayout.LayoutParams) avatarImage.getLayoutParams(); + layoutParams.width = AndroidUtilities.dp(avatarSize); + layoutParams.height = AndroidUtilities.dp(avatarSize); + layoutParams.leftMargin = LocaleController.isRTL ? 0 : AndroidUtilities.dp(avatarX); + layoutParams.rightMargin = LocaleController.isRTL ? AndroidUtilities.dp(avatarX) : 0; + layoutParams.bottomMargin = avatarY; + avatarImage.setLayoutParams(layoutParams); + + nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, nameFontSize); + layoutParams = (FrameLayout.LayoutParams) nameTextView.getLayoutParams(); + layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? nameEndX : nameX); + layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? nameX : nameEndX); + layoutParams.bottomMargin = nameY; + nameTextView.setLayoutParams(layoutParams); + + layoutParams = (FrameLayout.LayoutParams) onlineTextView.getLayoutParams(); + layoutParams.leftMargin = AndroidUtilities.dp(LocaleController.isRTL ? nameEndX : nameX); + layoutParams.rightMargin = AndroidUtilities.dp(LocaleController.isRTL ? nameX : nameEndX); + layoutParams.bottomMargin = statusY; + onlineTextView.setLayoutParams(layoutParams); + } + } + private void fixLayout() { if (fragmentView == null) { return; @@ -872,12 +958,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter @Override public boolean onPreDraw() { if (fragmentView != null) { - ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) listView.getLayoutParams(); - layoutParams.topMargin = actionBar.getHeight(); - listView.setLayoutParams(layoutParams); - layoutParams = (ViewGroup.MarginLayoutParams) writeButton.getLayoutParams(); - layoutParams.topMargin = actionBar.getHeight() - AndroidUtilities.dp(29.5f); - writeButton.setLayoutParams(layoutParams); + needLayout(); fragmentView.getViewTreeObserver().removeOnPreDrawListener(this); } return false; @@ -897,7 +978,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false); nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); - onlineTextView.setText(LocaleController.formatUserStatus(user)); + onlineTextView.setText(LocaleController.getString("Online", R.string.Online)); avatarImage.imageReceiver.setVisible(!PhotoViewer.getInstance().isShowingImage(photoBig), false); } @@ -971,7 +1052,12 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter int type = getItemViewType(i); if (type == 0) { if (view == null) { - view = new EmptyCell(mContext, 16); + view = new EmptyCell(mContext); + } + if (i == overscrollRow) { + ((EmptyCell) view).setHeight(88); + } else { + ((EmptyCell) view).setHeight(16); } } else if (type == 1) { if (view == null) { @@ -1131,7 +1217,7 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter @Override public int getItemViewType(int i) { - if (i == emptyRow) { + if (i == emptyRow || i == overscrollRow) { return 0; } if (i == settingsSectionRow || i == supportSectionRow || i == messagesSectionRow || i == mediaDownloadSection || i == contactsSectionRow) { return 1; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SettingsBlockedUsersActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/SettingsBlockedUsersActivity.java index 66c458e1..b7504f7b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SettingsBlockedUsersActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SettingsBlockedUsersActivity.java @@ -11,13 +11,17 @@ package org.telegram.ui; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; +import android.os.Build; import android.os.Bundle; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; +import android.widget.FrameLayout; import android.widget.ListView; +import android.widget.ProgressBar; import android.widget.TextView; import org.telegram.PhoneFormat.PhoneFormat; @@ -27,6 +31,7 @@ import org.telegram.android.MessagesController; import org.telegram.android.NotificationCenter; import org.telegram.messenger.R; import org.telegram.ui.Adapters.BaseFragmentAdapter; +import org.telegram.ui.Cells.TextInfoCell; import org.telegram.ui.Cells.UserCell; import org.telegram.ui.Views.ActionBar.ActionBar; import org.telegram.ui.Views.ActionBar.ActionBarMenu; @@ -35,8 +40,8 @@ import org.telegram.ui.Views.ActionBar.BaseFragment; public class SettingsBlockedUsersActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, ContactsActivity.ContactsActivityDelegate { private ListView listView; private ListAdapter listViewAdapter; - private View progressView; - private TextView emptyView; + private FrameLayout progressView; + private TextView emptyTextView; private int selectedUserId; private final static int block_user = 1; @@ -83,27 +88,58 @@ public class SettingsBlockedUsersActivity extends BaseFragment implements Notifi ActionBarMenu menu = actionBar.createMenu(); menu.addItem(block_user, R.drawable.plus); - fragmentView = inflater.inflate(R.layout.settings_blocked_users_layout, container, false); - listViewAdapter = new ListAdapter(getParentActivity()); - listView = (ListView)fragmentView.findViewById(R.id.listView); - progressView = fragmentView.findViewById(R.id.progressLayout); - emptyView = (TextView)fragmentView.findViewById(R.id.searchEmptyView); - emptyView.setOnTouchListener(new View.OnTouchListener() { + fragmentView = new FrameLayout(getParentActivity()); + FrameLayout frameLayout = (FrameLayout) fragmentView; + + emptyTextView = new TextView(getParentActivity()); + emptyTextView.setTextColor(0xff808080); + emptyTextView.setTextSize(24); + emptyTextView.setGravity(Gravity.CENTER); + emptyTextView.setVisibility(View.INVISIBLE); + emptyTextView.setText(LocaleController.getString("NoBlocked", R.string.NoBlocked)); + frameLayout.addView(emptyTextView); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) emptyTextView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.gravity = Gravity.TOP; + emptyTextView.setLayoutParams(layoutParams); + emptyTextView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); - emptyView.setText(LocaleController.getString("NoBlocked", R.string.NoBlocked)); - if (MessagesController.getInstance().loadingBlockedUsers) { - progressView.setVisibility(View.VISIBLE); - emptyView.setVisibility(View.GONE); - listView.setEmptyView(null); - } else { - progressView.setVisibility(View.GONE); - listView.setEmptyView(emptyView); + + progressView = new FrameLayout(getParentActivity()); + frameLayout.addView(progressView); + layoutParams = (FrameLayout.LayoutParams) progressView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + progressView.setLayoutParams(layoutParams); + + ProgressBar progressBar = new ProgressBar(getParentActivity()); + progressView.addView(progressBar); + layoutParams = (FrameLayout.LayoutParams) progressView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT; + layoutParams.gravity = Gravity.CENTER; + progressView.setLayoutParams(layoutParams); + + listView = new ListView(getParentActivity()); + listView.setEmptyView(emptyTextView); + listView.setVerticalScrollBarEnabled(false); + listView.setDivider(null); + listView.setDividerHeight(0); + listView.setAdapter(listViewAdapter = new ListAdapter(getParentActivity())); + if (Build.VERSION.SDK_INT >= 11) { + listView.setVerticalScrollbarPosition(LocaleController.isRTL ? ListView.SCROLLBAR_POSITION_LEFT : ListView.SCROLLBAR_POSITION_RIGHT); } - listView.setAdapter(listViewAdapter); + frameLayout.addView(listView); + layoutParams = (FrameLayout.LayoutParams) listView.getLayoutParams(); + layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT; + layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; + listView.setLayoutParams(layoutParams); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { @@ -140,6 +176,15 @@ public class SettingsBlockedUsersActivity extends BaseFragment implements Notifi return true; } }); + + if (MessagesController.getInstance().loadingBlockedUsers) { + progressView.setVisibility(View.VISIBLE); + emptyTextView.setVisibility(View.GONE); + listView.setEmptyView(null); + } else { + progressView.setVisibility(View.GONE); + listView.setEmptyView(emptyTextView); + } } else { ViewGroup parent = (ViewGroup)fragmentView.getParent(); if (parent != null) { @@ -161,7 +206,7 @@ public class SettingsBlockedUsersActivity extends BaseFragment implements Notifi progressView.setVisibility(View.GONE); } if (listView != null && listView.getEmptyView() == null) { - listView.setEmptyView(emptyView); + listView.setEmptyView(emptyTextView); } if (listViewAdapter != null) { listViewAdapter.notifyDataSetChanged(); @@ -243,17 +288,14 @@ public class SettingsBlockedUsersActivity extends BaseFragment implements Notifi int type = getItemViewType(i); if (type == 0) { if (view == null) { - view = new UserCell(mContext); - ((UserCell)view).useSeparator = true; + view = new UserCell(mContext, 1); } TLRPC.User user = MessagesController.getInstance().getUser(MessagesController.getInstance().blockedUsers.get(i)); - ((UserCell)view).setData(user, null, user.phone != null && user.phone.length() != 0 ? PhoneFormat.getInstance().format("+" + user.phone) : LocaleController.getString("NumberUnknown", R.string.NumberUnknown)); + ((UserCell)view).setData(user, null, user.phone != null && user.phone.length() != 0 ? PhoneFormat.getInstance().format("+" + user.phone) : LocaleController.getString("NumberUnknown", R.string.NumberUnknown), 0); } else if (type == 1) { if (view == null) { - LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = li.inflate(R.layout.settings_unblock_info_row_layout, viewGroup, false); - TextView textView = (TextView)view.findViewById(R.id.info_text_view); - textView.setText(LocaleController.getString("UnblockText", R.string.UnblockText)); + view = new TextInfoCell(mContext); + ((TextInfoCell) view).setText(LocaleController.getString("UnblockText", R.string.UnblockText)); } } return view; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBar.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBar.java index 9dd5076e..1c18c4ef 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBar.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBar.java @@ -452,8 +452,15 @@ public class ActionBar extends FrameLayout { positionBackOverlay(getMeasuredWidth(), getMeasuredHeight()); } - public void setExtraHeight(int value) { + public void setExtraHeight(int value, boolean layout) { extraHeight = value; + if (layout) { + requestLayout(); + } + } + + public int getExtraHeight() { + return extraHeight; } private void positionBackOverlay(int widthMeasureSpec, int heightMeasureSpec) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarMenuItem.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarMenuItem.java index 3ca42deb..07136665 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarMenuItem.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarMenuItem.java @@ -31,7 +31,6 @@ import android.widget.TextView; import org.telegram.android.AndroidUtilities; import org.telegram.android.LocaleController; -import org.telegram.messenger.FileLog; import org.telegram.messenger.R; import java.lang.reflect.Field; @@ -186,7 +185,7 @@ public class ActionBarMenuItem extends ImageView { if (LocaleController.isRTL) { layoutParams.gravity = Gravity.RIGHT; } - layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT; + layoutParams.width = LinearLayout.LayoutParams.MATCH_PARENT; layoutParams.height = AndroidUtilities.dp(48); textView.setLayoutParams(layoutParams); textView.setOnClickListener(new OnClickListener() { @@ -389,7 +388,6 @@ public class ActionBarMenuItem extends ImageView { if (popupWindow != null && popupWindow.isShowing()) { int x = parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(); int y = -getMeasuredHeight(); - FileLog.e("tmessages", "x = " + x + " y = " + y); popupWindow.update(this, parentMenu.parentActionBar.getMeasuredWidth() - popupLayout.getMeasuredWidth() - getLeft() - parentMenu.getLeft(), -getMeasuredHeight(), -1, -1); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/AvatarDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/AvatarDrawable.java index d4419e56..6f4a76d2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Views/AvatarDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/AvatarDrawable.java @@ -21,6 +21,7 @@ import org.telegram.android.AndroidUtilities; import org.telegram.messenger.FileLog; import org.telegram.messenger.R; import org.telegram.messenger.TLRPC; +import org.telegram.ui.ApplicationLoader; public class AvatarDrawable extends Drawable { @@ -33,11 +34,14 @@ public class AvatarDrawable extends Drawable { private static int[] arrColorsButtons = {R.drawable.bar_selector_red, R.drawable.bar_selector_orange, R.drawable.bar_selector_yellow, R.drawable.bar_selector_green, R.drawable.bar_selector_cyan, R.drawable.bar_selector_blue, R.drawable.bar_selector_violet, R.drawable.bar_selector_pink}; + private static Drawable broadcastDrawable; + private int color; private StaticLayout textLayout; private float textWidth; private float textHeight; private boolean isProfile; + private boolean drawBrodcast; public AvatarDrawable() { super(); @@ -46,6 +50,8 @@ public class AvatarDrawable extends Drawable { namePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); namePaint.setColor(0xffffffff); namePaint.setTextSize(AndroidUtilities.dp(20)); + + broadcastDrawable = ApplicationLoader.applicationContext.getResources().getDrawable(R.drawable.broadcast_w); } } @@ -116,6 +122,8 @@ public class AvatarDrawable extends Drawable { color = arrColors[Math.abs(id) % arrColors.length]; } + drawBrodcast = isBroadcast; + String text = ""; if (firstName != null && firstName.length() > 0) { text += firstName.substring(0, 1); @@ -145,16 +153,22 @@ public class AvatarDrawable extends Drawable { if (bounds == null) { return; } - int size = bounds.right - bounds.left; + int size = bounds.width(); paint.setColor(color); - canvas.save(); canvas.translate(bounds.left, bounds.top); canvas.drawCircle(size / 2, size / 2, size / 2, paint); - if (textLayout != null) { - canvas.translate((size - textWidth) / 2, (size - textHeight) / 2); - textLayout.draw(canvas); + if (drawBrodcast && broadcastDrawable != null) { + int x = (size - broadcastDrawable.getIntrinsicWidth()) / 2; + int y = (size - broadcastDrawable.getIntrinsicHeight()) / 2; + broadcastDrawable.setBounds(x, y, x + broadcastDrawable.getIntrinsicWidth(), y + broadcastDrawable.getIntrinsicHeight()); + broadcastDrawable.draw(canvas); + } else { + if (textLayout != null) { + canvas.translate((size - textWidth) / 2, (size - textHeight) / 2); + textLayout.draw(canvas); + } } canvas.restore(); } diff --git a/TMessagesProj/src/main/res/layout-ar/chat_profile_add_row.xml b/TMessagesProj/src/main/res/layout-ar/chat_profile_add_row.xml deleted file mode 100644 index 64b2d333..00000000 --- a/TMessagesProj/src/main/res/layout-ar/chat_profile_add_row.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/TMessagesProj/src/main/res/layout-ar/chat_profile_avatar_layout.xml b/TMessagesProj/src/main/res/layout-ar/chat_profile_avatar_layout.xml deleted file mode 100644 index 5a1b3f9a..00000000 --- a/TMessagesProj/src/main/res/layout-ar/chat_profile_avatar_layout.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TMessagesProj/src/main/res/layout-ar/group_create_layout.xml b/TMessagesProj/src/main/res/layout-ar/group_create_layout.xml deleted file mode 100644 index 1de70d4f..00000000 --- a/TMessagesProj/src/main/res/layout-ar/group_create_layout.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/TMessagesProj/src/main/res/layout-ar/settings_row_button_layout.xml b/TMessagesProj/src/main/res/layout-ar/settings_row_button_layout.xml index 3f461669..587eb212 100644 --- a/TMessagesProj/src/main/res/layout-ar/settings_row_button_layout.xml +++ b/TMessagesProj/src/main/res/layout-ar/settings_row_button_layout.xml @@ -1,3 +1,11 @@ + + - - - - - - - - \ No newline at end of file diff --git a/TMessagesProj/src/main/res/layout/chat_profile_add_row.xml b/TMessagesProj/src/main/res/layout/chat_profile_add_row.xml deleted file mode 100644 index 7f061f50..00000000 --- a/TMessagesProj/src/main/res/layout/chat_profile_add_row.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/TMessagesProj/src/main/res/layout/chat_profile_avatar_layout.xml b/TMessagesProj/src/main/res/layout/chat_profile_avatar_layout.xml deleted file mode 100644 index 85f4a3d4..00000000 --- a/TMessagesProj/src/main/res/layout/chat_profile_avatar_layout.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TMessagesProj/src/main/res/layout/group_create_layout.xml b/TMessagesProj/src/main/res/layout/group_create_layout.xml deleted file mode 100644 index 763c3ea2..00000000 --- a/TMessagesProj/src/main/res/layout/group_create_layout.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/TMessagesProj/src/main/res/layout/settings_blocked_users_layout.xml b/TMessagesProj/src/main/res/layout/settings_blocked_users_layout.xml deleted file mode 100644 index dd610ae5..00000000 --- a/TMessagesProj/src/main/res/layout/settings_blocked_users_layout.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - diff --git a/TMessagesProj/src/main/res/layout/settings_logout_button.xml b/TMessagesProj/src/main/res/layout/settings_logout_button.xml deleted file mode 100644 index d51462dc..00000000 --- a/TMessagesProj/src/main/res/layout/settings_logout_button.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/TMessagesProj/src/main/res/layout/settings_row_button_layout.xml b/TMessagesProj/src/main/res/layout/settings_row_button_layout.xml index 20a9ee2e..7e0cbb3b 100644 --- a/TMessagesProj/src/main/res/layout/settings_row_button_layout.xml +++ b/TMessagesProj/src/main/res/layout/settings_row_button_layout.xml @@ -1,3 +1,11 @@ + + - - - - \ No newline at end of file diff --git a/TMessagesProj/src/main/res/layout/user_profile_leftright_row_layout.xml b/TMessagesProj/src/main/res/layout/user_profile_leftright_row_layout.xml deleted file mode 100644 index 9ac16a57..00000000 --- a/TMessagesProj/src/main/res/layout/user_profile_leftright_row_layout.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index a80f8313..370764c0 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -60,7 +60,7 @@ New Broadcast List Enter list name You created a broadcast list - Add Recipient + Add recipient Remove from broadcast list Select File @@ -240,7 +240,7 @@ Notifications and Sounds Blocked Users Save Incoming Photos - Log Out + Log out YOUR FIRST AND LAST NAME No sound Default @@ -285,7 +285,7 @@ When roaming No media Save to gallery - Edit Name + Edit name No shared media yet Cancel Download