Search in sources :

Example 1 with RLottieImageView

use of org.telegram.ui.Components.RLottieImageView in project Telegram-FOSS by Telegram-FOSS-Team.

the class MessageStatisticActivity method createView.

@Override
public View createView(Context context) {
    actionBar.setBackButtonImage(R.drawable.ic_ab_back);
    fragmentView = new FrameLayout(context);
    fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray));
    FrameLayout frameLayout = (FrameLayout) fragmentView;
    emptyView = new EmptyTextProgressView(context);
    emptyView.setText(LocaleController.getString("NoResult", R.string.NoResult));
    emptyView.setVisibility(View.GONE);
    progressLayout = new LinearLayout(context);
    progressLayout.setOrientation(LinearLayout.VERTICAL);
    imageView = new RLottieImageView(context);
    imageView.setAutoRepeat(true);
    imageView.setAnimation(R.raw.statistic_preload, 120, 120);
    imageView.playAnimation();
    TextView loadingTitle = new TextView(context);
    loadingTitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
    loadingTitle.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
    loadingTitle.setTextColor(Theme.getColor(Theme.key_player_actionBarTitle));
    loadingTitle.setTag(Theme.key_player_actionBarTitle);
    loadingTitle.setText(LocaleController.getString("LoadingStats", R.string.LoadingStats));
    loadingTitle.setGravity(Gravity.CENTER_HORIZONTAL);
    TextView loadingSubtitle = new TextView(context);
    loadingSubtitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
    loadingSubtitle.setTextColor(Theme.getColor(Theme.key_player_actionBarSubtitle));
    loadingSubtitle.setTag(Theme.key_player_actionBarSubtitle);
    loadingSubtitle.setText(LocaleController.getString("LoadingStatsDescription", R.string.LoadingStatsDescription));
    loadingSubtitle.setGravity(Gravity.CENTER_HORIZONTAL);
    progressLayout.addView(imageView, LayoutHelper.createLinear(120, 120, Gravity.CENTER_HORIZONTAL, 0, 0, 0, 20));
    progressLayout.addView(loadingTitle, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 0, 0, 10));
    progressLayout.addView(loadingSubtitle, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL));
    progressLayout.setAlpha(0);
    frameLayout.addView(progressLayout, LayoutHelper.createFrame(240, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 0, 0, 30));
    listView = new RecyclerListView(context);
    listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
    ((SimpleItemAnimator) listView.getItemAnimator()).setSupportsChangeAnimations(false);
    listView.setAdapter(listViewAdapter = new ListAdapter(context));
    listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
    listView.setOnItemClickListener((view, position) -> {
        if (position >= startRow && position < endRow) {
            TLRPC.Message message = messages.get(position - startRow);
            long did = MessageObject.getDialogId(message);
            Bundle args = new Bundle();
            if (DialogObject.isUserDialog(did)) {
                args.putLong("user_id", did);
            } else {
                args.putLong("chat_id", -did);
            }
            args.putInt("message_id", message.id);
            args.putBoolean("need_remove_previous_same_chat_activity", false);
            if (getMessagesController().checkCanOpenChat(args, this)) {
                presentFragment(new ChatActivity(args));
            }
        }
    });
    listView.setOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
            int visibleItemCount = firstVisibleItem == RecyclerView.NO_POSITION ? 0 : Math.abs(layoutManager.findLastVisibleItemPosition() - firstVisibleItem) + 1;
            int totalItemCount = recyclerView.getAdapter().getItemCount();
            if (visibleItemCount > 0) {
                if (!endReached && !loading && !messages.isEmpty() && firstVisibleItem + visibleItemCount >= totalItemCount - 5 && statsLoaded) {
                    loadChats(100);
                }
            }
        }
    });
    emptyView.showTextView();
    listContainer = new FrameLayout(context);
    listContainer.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    listContainer.addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    listContainer.setVisibility(View.GONE);
    frameLayout.addView(listContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    AndroidUtilities.runOnUIThread(showProgressbar, 300);
    updateRows();
    listView.setEmptyView(emptyView);
    avatarContainer = new ChatAvatarContainer(context, null, false) {

        @Override
        protected void dispatchDraw(Canvas canvas) {
            super.dispatchDraw(canvas);
            thumbImage.setImageCoords(avatarContainer.getSubtitleTextView().getX(), avatarContainer.getSubtitleTextView().getY(), AndroidUtilities.dp(18), AndroidUtilities.dp(18));
            thumbImage.draw(canvas);
            if (drawPlay) {
                int x = (int) (thumbImage.getCenterX() - Theme.dialogs_playDrawable.getIntrinsicWidth() / 2);
                int y = (int) (thumbImage.getCenterY() - Theme.dialogs_playDrawable.getIntrinsicHeight() / 2);
                Theme.dialogs_playDrawable.setBounds(x, y, x + Theme.dialogs_playDrawable.getIntrinsicWidth(), y + Theme.dialogs_playDrawable.getIntrinsicHeight());
                Theme.dialogs_playDrawable.draw(canvas);
            }
        }

        @Override
        protected void onAttachedToWindow() {
            super.onAttachedToWindow();
            thumbImage.onAttachedToWindow();
        }

        @Override
        protected void onDetachedFromWindow() {
            super.onDetachedFromWindow();
            thumbImage.onDetachedFromWindow();
        }
    };
    thumbImage = new ImageReceiver();
    thumbImage.setParentView(avatarContainer);
    thumbImage.setRoundRadius(AndroidUtilities.dp(2));
    actionBar.addView(avatarContainer, 0, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, !inPreviewMode ? 56 : 0, 0, 40, 0));
    TLRPC.Chat chatLocal = getMessagesController().getChat(chatId);
    if (chatLocal != null) {
        avatarContainer.setChatAvatar(chatLocal);
        avatarContainer.setTitle(chatLocal.title);
    }
    boolean hasThumb = false;
    if (!messageObject.needDrawBluredPreview() && (messageObject.isPhoto() || messageObject.isNewGif() || messageObject.isVideo())) {
        String type = messageObject.isWebpage() ? messageObject.messageOwner.media.webpage.type : null;
        if (!("app".equals(type) || "profile".equals(type) || "article".equals(type) || type != null && type.startsWith("telegram_"))) {
            TLRPC.PhotoSize smallThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 40);
            TLRPC.PhotoSize bigThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, AndroidUtilities.getPhotoSize());
            if (smallThumb == bigThumb) {
                bigThumb = null;
            }
            if (smallThumb != null) {
                hasThumb = true;
                drawPlay = messageObject.isVideo();
                String fileName = FileLoader.getAttachFileName(bigThumb);
                if (messageObject.mediaExists || DownloadController.getInstance(currentAccount).canDownloadMedia(messageObject) || FileLoader.getInstance(currentAccount).isLoadingFile(fileName)) {
                    int size;
                    if (messageObject.type == MessageObject.TYPE_PHOTO) {
                        size = bigThumb != null ? bigThumb.size : 0;
                    } else {
                        size = 0;
                    }
                    thumbImage.setImage(ImageLocation.getForObject(bigThumb, messageObject.photoThumbsObject), "20_20", ImageLocation.getForObject(smallThumb, messageObject.photoThumbsObject), "20_20", size, null, messageObject, 0);
                } else {
                    thumbImage.setImage(null, null, ImageLocation.getForObject(smallThumb, messageObject.photoThumbsObject), "20_20", (Drawable) null, messageObject, 0);
                }
            }
        }
    }
    CharSequence message;
    if (!TextUtils.isEmpty(messageObject.caption)) {
        message = messageObject.caption;
    } else if (!TextUtils.isEmpty(messageObject.messageOwner.message)) {
        message = messageObject.messageText;
        if (message.length() > 150) {
            message = message.subSequence(0, 150);
        }
        message = Emoji.replaceEmoji(message, avatarContainer.getSubtitleTextView().getTextPaint().getFontMetricsInt(), AndroidUtilities.dp(17), false);
    } else {
        message = messageObject.messageText;
    }
    if (hasThumb) {
        SpannableStringBuilder builder = new SpannableStringBuilder(message);
        builder.insert(0, " ");
        builder.setSpan(new DialogCell.FixedWidthSpan(AndroidUtilities.dp(18 + 6)), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        avatarContainer.setSubtitle(builder);
    } else {
        avatarContainer.setSubtitle(messageObject.messageText);
    }
    actionBar.setBackButtonDrawable(new BackDrawable(false));
    actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {

        @Override
        public void onItemClick(final int id) {
            if (id == -1) {
                finishFragment();
            } else if (id == 1) {
                Bundle args = new Bundle();
                if (messageObject.messageOwner.fwd_from == null) {
                    args.putLong("chat_id", messageObject.getChatId());
                } else {
                    args.putLong("chat_id", -messageObject.getFromChatId());
                }
                presentFragment(new StatisticActivity(args));
            }
        }
    });
    avatarContainer.setTitleColors(Theme.getColor(Theme.key_player_actionBarTitle), Theme.getColor(Theme.key_player_actionBarSubtitle));
    avatarContainer.getSubtitleTextView().setLinkTextColor(Theme.getColor(Theme.key_player_actionBarSubtitle));
    actionBar.setItemsColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2), false);
    actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), false);
    actionBar.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
    avatarContainer.setOnClickListener(view -> {
        if (getParentLayout().fragmentsStack.size() > 1) {
            BaseFragment previousFragemnt = getParentLayout().fragmentsStack.get(getParentLayout().fragmentsStack.size() - 2);
            if (previousFragemnt instanceof ChatActivity && ((ChatActivity) previousFragemnt).getCurrentChat().id == chatId) {
                finishFragment();
                return;
            }
        }
        Bundle args = new Bundle();
        args.putLong("chat_id", chatId);
        args.putInt("message_id", messageId);
        args.putBoolean("need_remove_previous_same_chat_activity", false);
        ChatActivity a = new ChatActivity(args);
        presentFragment(a);
    });
    updateMenu();
    return fragmentView;
}
Also used : RLottieImageView(org.telegram.ui.Components.RLottieImageView) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) RecyclerListView(org.telegram.ui.Components.RecyclerListView) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) TLRPC(org.telegram.tgnet.TLRPC) BaseFragment(org.telegram.ui.ActionBar.BaseFragment) ImageReceiver(org.telegram.messenger.ImageReceiver) DialogCell(org.telegram.ui.Cells.DialogCell) TextView(android.widget.TextView) ActionBar(org.telegram.ui.ActionBar.ActionBar) SimpleItemAnimator(androidx.recyclerview.widget.SimpleItemAnimator) ChatAvatarContainer(org.telegram.ui.Components.ChatAvatarContainer) Bundle(android.os.Bundle) Canvas(android.graphics.Canvas) EmptyTextProgressView(org.telegram.ui.Components.EmptyTextProgressView) FrameLayout(android.widget.FrameLayout) RecyclerView(androidx.recyclerview.widget.RecyclerView) LinearLayout(android.widget.LinearLayout) SpannableStringBuilder(android.text.SpannableStringBuilder)

Example 2 with RLottieImageView

use of org.telegram.ui.Components.RLottieImageView in project Telegram-FOSS by Telegram-FOSS-Team.

the class ProfileActivity method createView.

@Override
public View createView(Context context) {
    Theme.createProfileResources(context);
    Theme.createChatResources(context, false);
    searchTransitionOffset = 0;
    searchTransitionProgress = 1f;
    searchMode = false;
    hasOwnBackground = true;
    extraHeight = AndroidUtilities.dp(88f);
    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) {
                TLRPC.User user = getMessagesController().getUser(userId);
                if (user == null) {
                    return;
                }
                if (!isBot || MessagesController.isSupportUser(user)) {
                    if (userBlocked) {
                        getMessagesController().unblockPeer(userId);
                        if (BulletinFactory.canShowBulletin(ProfileActivity.this)) {
                            BulletinFactory.createBanBulletin(ProfileActivity.this, false).show();
                        }
                    } else {
                        if (reportSpam) {
                            AlertsCreator.showBlockReportSpamAlert(ProfileActivity.this, userId, user, null, currentEncryptedChat, false, null, param -> {
                                if (param == 1) {
                                    getNotificationCenter().removeObserver(ProfileActivity.this, NotificationCenter.closeChats);
                                    getNotificationCenter().postNotificationName(NotificationCenter.closeChats);
                                    playProfileAnimation = 0;
                                    finishFragment();
                                } else {
                                    getNotificationCenter().postNotificationName(NotificationCenter.peerSettingsDidLoad, userId);
                                }
                            }, null);
                        } else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                            builder.setTitle(LocaleController.getString("BlockUser", R.string.BlockUser));
                            builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("AreYouSureBlockContact2", R.string.AreYouSureBlockContact2, ContactsController.formatName(user.first_name, user.last_name))));
                            builder.setPositiveButton(LocaleController.getString("BlockContact", R.string.BlockContact), (dialogInterface, i) -> {
                                getMessagesController().blockPeer(userId);
                                if (BulletinFactory.canShowBulletin(ProfileActivity.this)) {
                                    BulletinFactory.createBanBulletin(ProfileActivity.this, true).show();
                                }
                            });
                            builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                            AlertDialog dialog = builder.create();
                            showDialog(dialog);
                            TextView button = (TextView) dialog.getButton(DialogInterface.BUTTON_POSITIVE);
                            if (button != null) {
                                button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
                            }
                        }
                    }
                } else {
                    if (!userBlocked) {
                        getMessagesController().blockPeer(userId);
                    } else {
                        getMessagesController().unblockPeer(userId);
                        getSendMessagesHelper().sendMessage("/start", userId, null, null, null, false, null, null, null, true, 0, null);
                        finishFragment();
                    }
                }
            } else if (id == add_contact) {
                TLRPC.User user = getMessagesController().getUser(userId);
                Bundle args = new Bundle();
                args.putLong("user_id", user.id);
                args.putBoolean("addContact", true);
                presentFragment(new ContactAddActivity(args));
            } else if (id == share_contact) {
                Bundle args = new Bundle();
                args.putBoolean("onlySelect", true);
                args.putInt("dialogsType", 3);
                args.putString("selectAlertString", LocaleController.getString("SendContactToText", R.string.SendContactToText));
                args.putString("selectAlertStringGroup", LocaleController.getString("SendContactToGroupText", R.string.SendContactToGroupText));
                DialogsActivity fragment = new DialogsActivity(args);
                fragment.setDelegate(ProfileActivity.this);
                presentFragment(fragment);
            } else if (id == edit_contact) {
                Bundle args = new Bundle();
                args.putLong("user_id", userId);
                presentFragment(new ContactAddActivity(args));
            } else if (id == delete_contact) {
                final TLRPC.User user = getMessagesController().getUser(userId);
                if (user == null || getParentActivity() == null) {
                    return;
                }
                AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                builder.setTitle(LocaleController.getString("DeleteContact", R.string.DeleteContact));
                builder.setMessage(LocaleController.getString("AreYouSureDeleteContact", R.string.AreYouSureDeleteContact));
                builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface, i) -> {
                    ArrayList<TLRPC.User> arrayList = new ArrayList<>();
                    arrayList.add(user);
                    getContactsController().deleteContact(arrayList, true);
                });
                builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                AlertDialog dialog = builder.create();
                showDialog(dialog);
                TextView button = (TextView) dialog.getButton(DialogInterface.BUTTON_POSITIVE);
                if (button != null) {
                    button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
                }
            } else if (id == leave_group) {
                leaveChatPressed();
            } else if (id == edit_channel) {
                Bundle args = new Bundle();
                args.putLong("chat_id", chatId);
                ChatEditActivity fragment = new ChatEditActivity(args);
                fragment.setInfo(chatInfo);
                presentFragment(fragment);
            } else if (id == invite_to_group) {
                final TLRPC.User user = getMessagesController().getUser(userId);
                if (user == null) {
                    return;
                }
                Bundle args = new Bundle();
                args.putBoolean("onlySelect", true);
                args.putInt("dialogsType", 2);
                args.putString("addToGroupAlertString", LocaleController.formatString("AddToTheGroupAlertText", R.string.AddToTheGroupAlertText, UserObject.getUserName(user), "%1$s"));
                DialogsActivity fragment = new DialogsActivity(args);
                fragment.setDelegate((fragment1, dids, message, param) -> {
                    long did = dids.get(0);
                    Bundle args1 = new Bundle();
                    args1.putBoolean("scrollToTopOnResume", true);
                    args1.putLong("chat_id", -did);
                    if (!getMessagesController().checkCanOpenChat(args1, fragment1)) {
                        return;
                    }
                    getNotificationCenter().removeObserver(ProfileActivity.this, NotificationCenter.closeChats);
                    getNotificationCenter().postNotificationName(NotificationCenter.closeChats);
                    getMessagesController().addUserToChat(-did, user, 0, null, ProfileActivity.this, null);
                    presentFragment(new ChatActivity(args1), true);
                    removeSelfFromStack();
                });
                presentFragment(fragment);
            } else if (id == share) {
                try {
                    String text = null;
                    if (userId != 0) {
                        TLRPC.User user = getMessagesController().getUser(userId);
                        if (user == null) {
                            return;
                        }
                        if (botInfo != null && userInfo != null && !TextUtils.isEmpty(userInfo.about)) {
                            text = String.format("%s https://" + getMessagesController().linkPrefix + "/%s", userInfo.about, user.username);
                        } else {
                            text = String.format("https://" + getMessagesController().linkPrefix + "/%s", user.username);
                        }
                    } else if (chatId != 0) {
                        TLRPC.Chat chat = getMessagesController().getChat(chatId);
                        if (chat == null) {
                            return;
                        }
                        if (chatInfo != null && !TextUtils.isEmpty(chatInfo.about)) {
                            text = String.format("%s\nhttps://" + getMessagesController().linkPrefix + "/%s", chatInfo.about, chat.username);
                        } else {
                            text = String.format("https://" + getMessagesController().linkPrefix + "/%s", chat.username);
                        }
                    }
                    if (TextUtils.isEmpty(text)) {
                        return;
                    }
                    Intent intent = new Intent(Intent.ACTION_SEND);
                    intent.setType("text/plain");
                    intent.putExtra(Intent.EXTRA_TEXT, text);
                    startActivityForResult(Intent.createChooser(intent, LocaleController.getString("BotShare", R.string.BotShare)), 500);
                } catch (Exception e) {
                    FileLog.e(e);
                }
            } else if (id == add_shortcut) {
                try {
                    long did;
                    if (currentEncryptedChat != null) {
                        did = DialogObject.makeEncryptedDialogId(currentEncryptedChat.id);
                    } else if (userId != 0) {
                        did = userId;
                    } else if (chatId != 0) {
                        did = -chatId;
                    } else {
                        return;
                    }
                    getMediaDataController().installShortcut(did);
                } catch (Exception e) {
                    FileLog.e(e);
                }
            } else if (id == call_item || id == video_call_item) {
                if (userId != 0) {
                    TLRPC.User user = getMessagesController().getUser(userId);
                    if (user != null) {
                        VoIPHelper.startCall(user, id == video_call_item, userInfo != null && userInfo.video_calls_available, getParentActivity(), userInfo, getAccountInstance());
                    }
                } else if (chatId != 0) {
                    ChatObject.Call call = getMessagesController().getGroupCall(chatId, false);
                    if (call == null) {
                        VoIPHelper.showGroupCallAlert(ProfileActivity.this, currentChat, null, false, getAccountInstance());
                    } else {
                        VoIPHelper.startCall(currentChat, null, null, false, getParentActivity(), ProfileActivity.this, getAccountInstance());
                    }
                }
            } else if (id == search_members) {
                Bundle args = new Bundle();
                args.putLong("chat_id", chatId);
                args.putInt("type", ChatUsersActivity.TYPE_USERS);
                args.putBoolean("open_search", true);
                ChatUsersActivity fragment = new ChatUsersActivity(args);
                fragment.setInfo(chatInfo);
                presentFragment(fragment);
            } else if (id == add_member) {
                openAddMember();
            } else if (id == statistics) {
                TLRPC.Chat chat = getMessagesController().getChat(chatId);
                Bundle args = new Bundle();
                args.putLong("chat_id", chatId);
                args.putBoolean("is_megagroup", chat.megagroup);
                StatisticActivity fragment = new StatisticActivity(args);
                presentFragment(fragment);
            } else if (id == view_discussion) {
                openDiscussion();
            } else if (id == start_secret_chat) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                builder.setTitle(LocaleController.getString("AreYouSureSecretChatTitle", R.string.AreYouSureSecretChatTitle));
                builder.setMessage(LocaleController.getString("AreYouSureSecretChat", R.string.AreYouSureSecretChat));
                builder.setPositiveButton(LocaleController.getString("Start", R.string.Start), (dialogInterface, i) -> {
                    creatingChat = true;
                    getSecretChatHelper().startSecretChat(getParentActivity(), getMessagesController().getUser(userId));
                });
                builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                showDialog(builder.create());
            } else if (id == gallery_menu_save) {
                if (getParentActivity() == null) {
                    return;
                }
                if (Build.VERSION.SDK_INT >= 23 && (Build.VERSION.SDK_INT <= 28 || BuildVars.NO_SCOPED_STORAGE) && getParentActivity().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    getParentActivity().requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 4);
                    return;
                }
                ImageLocation location = avatarsViewPager.getImageLocation(avatarsViewPager.getRealPosition());
                if (location == null) {
                    return;
                }
                final boolean isVideo = location.imageType == FileLoader.IMAGE_TYPE_ANIMATION;
                File f = FileLoader.getPathToAttach(location.location, isVideo ? "mp4" : null, true);
                if (f.exists()) {
                    MediaController.saveFile(f.toString(), getParentActivity(), 0, null, null, () -> {
                        if (getParentActivity() == null) {
                            return;
                        }
                        BulletinFactory.createSaveToGalleryBulletin(ProfileActivity.this, isVideo, null).show();
                    });
                }
            } else if (id == edit_name) {
                presentFragment(new ChangeNameActivity());
            } else if (id == logout) {
                presentFragment(new LogoutActivity());
            } else if (id == set_as_main) {
                int position = avatarsViewPager.getRealPosition();
                TLRPC.Photo photo = avatarsViewPager.getPhoto(position);
                if (photo == null) {
                    return;
                }
                avatarsViewPager.startMovePhotoToBegin(position);
                TLRPC.TL_photos_updateProfilePhoto req = new TLRPC.TL_photos_updateProfilePhoto();
                req.id = new TLRPC.TL_inputPhoto();
                req.id.id = photo.id;
                req.id.access_hash = photo.access_hash;
                req.id.file_reference = photo.file_reference;
                UserConfig userConfig = getUserConfig();
                getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
                    avatarsViewPager.finishSettingMainPhoto();
                    if (response instanceof TLRPC.TL_photos_photo) {
                        TLRPC.TL_photos_photo photos_photo = (TLRPC.TL_photos_photo) response;
                        getMessagesController().putUsers(photos_photo.users, false);
                        TLRPC.User user = getMessagesController().getUser(userConfig.clientUserId);
                        if (photos_photo.photo instanceof TLRPC.TL_photo) {
                            avatarsViewPager.replaceFirstPhoto(photo, photos_photo.photo);
                            if (user != null) {
                                user.photo.photo_id = photos_photo.photo.id;
                                userConfig.setCurrentUser(user);
                                userConfig.saveConfig(true);
                            }
                        }
                    }
                }));
                undoView.showWithAction(userId, UndoView.ACTION_PROFILE_PHOTO_CHANGED, photo.video_sizes.isEmpty() ? null : 1);
                TLRPC.User user = getMessagesController().getUser(userConfig.clientUserId);
                TLRPC.PhotoSize bigSize = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, 800);
                if (user != null) {
                    TLRPC.PhotoSize smallSize = FileLoader.getClosestPhotoSizeWithSize(photo.sizes, 90);
                    user.photo.photo_id = photo.id;
                    user.photo.photo_small = smallSize.location;
                    user.photo.photo_big = bigSize.location;
                    userConfig.setCurrentUser(user);
                    userConfig.saveConfig(true);
                    NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.mainUserInfoChanged);
                    updateProfileData();
                }
                avatarsViewPager.commitMoveToBegin();
            } else if (id == edit_avatar) {
                int position = avatarsViewPager.getRealPosition();
                ImageLocation location = avatarsViewPager.getImageLocation(position);
                if (location == null) {
                    return;
                }
                File f = FileLoader.getPathToAttach(PhotoViewer.getFileLocation(location), PhotoViewer.getFileLocationExt(location), true);
                boolean isVideo = location.imageType == FileLoader.IMAGE_TYPE_ANIMATION;
                String thumb;
                if (isVideo) {
                    ImageLocation imageLocation = avatarsViewPager.getRealImageLocation(position);
                    thumb = FileLoader.getPathToAttach(PhotoViewer.getFileLocation(imageLocation), PhotoViewer.getFileLocationExt(imageLocation), true).getAbsolutePath();
                } else {
                    thumb = null;
                }
                imageUpdater.openPhotoForEdit(f.getAbsolutePath(), thumb, 0, isVideo);
            } else if (id == delete_avatar) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                ImageLocation location = avatarsViewPager.getImageLocation(avatarsViewPager.getRealPosition());
                if (location == null) {
                    return;
                }
                if (location.imageType == FileLoader.IMAGE_TYPE_ANIMATION) {
                    builder.setTitle(LocaleController.getString("AreYouSureDeleteVideoTitle", R.string.AreYouSureDeleteVideoTitle));
                    builder.setMessage(LocaleController.formatString("AreYouSureDeleteVideo", R.string.AreYouSureDeleteVideo));
                } else {
                    builder.setTitle(LocaleController.getString("AreYouSureDeletePhotoTitle", R.string.AreYouSureDeletePhotoTitle));
                    builder.setMessage(LocaleController.formatString("AreYouSureDeletePhoto", R.string.AreYouSureDeletePhoto));
                }
                builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface, i) -> {
                    int position = avatarsViewPager.getRealPosition();
                    TLRPC.Photo photo = avatarsViewPager.getPhoto(position);
                    if (avatarsViewPager.getRealCount() == 1) {
                        setForegroundImage(true);
                    }
                    if (photo == null || avatarsViewPager.getRealPosition() == 0) {
                        getMessagesController().deleteUserPhoto(null);
                    } else {
                        TLRPC.TL_inputPhoto inputPhoto = new TLRPC.TL_inputPhoto();
                        inputPhoto.id = photo.id;
                        inputPhoto.access_hash = photo.access_hash;
                        inputPhoto.file_reference = photo.file_reference;
                        if (inputPhoto.file_reference == null) {
                            inputPhoto.file_reference = new byte[0];
                        }
                        getMessagesController().deleteUserPhoto(inputPhoto);
                        getMessagesStorage().clearUserPhoto(userId, photo.id);
                    }
                    if (avatarsViewPager.removePhotoAtIndex(position)) {
                        avatarsViewPager.setVisibility(View.GONE);
                        avatarImage.setForegroundAlpha(1f);
                        avatarContainer.setVisibility(View.VISIBLE);
                        doNotSetForeground = true;
                        final View view = layoutManager.findViewByPosition(0);
                        if (view != null) {
                            listView.smoothScrollBy(0, view.getTop() - AndroidUtilities.dp(88), CubicBezierInterpolator.EASE_OUT_QUINT);
                        }
                    }
                });
                builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                AlertDialog alertDialog = builder.create();
                showDialog(alertDialog);
                TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
                if (button != null) {
                    button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
                }
            } else if (id == add_photo) {
                onWriteButtonClick();
            } else if (id == qr_button) {
                Bundle args = new Bundle();
                args.putLong("chat_id", chatId);
                args.putLong("user_id", userId);
                presentFragment(new QrActivity(args));
            }
        }
    });
    if (sharedMediaLayout != null) {
        sharedMediaLayout.onDestroy();
    }
    final long did;
    if (dialogId != 0) {
        did = dialogId;
    } else if (userId != 0) {
        did = userId;
    } else {
        did = -chatId;
    }
    ArrayList<Integer> users = chatInfo != null && chatInfo.participants != null && chatInfo.participants.participants.size() > 5 ? sortedUsers : null;
    sharedMediaLayout = new SharedMediaLayout(context, did, sharedMediaPreloader, userInfo != null ? userInfo.common_chats_count : 0, sortedUsers, chatInfo, users != null, this, this, SharedMediaLayout.VIEW_TYPE_PROFILE_ACTIVITY) {

        @Override
        protected void onSelectedTabChanged() {
            updateSelectedMediaTabText();
        }

        @Override
        protected boolean canShowSearchItem() {
            return mediaHeaderVisible;
        }

        @Override
        protected void onSearchStateChanged(boolean expanded) {
            if (SharedConfig.smoothKeyboard) {
                AndroidUtilities.removeAdjustResize(getParentActivity(), classGuid);
            }
            listView.stopScroll();
            avatarContainer2.setPivotY(avatarContainer.getPivotY() + avatarContainer.getMeasuredHeight() / 2f);
            avatarContainer2.setPivotX(avatarContainer2.getMeasuredWidth() / 2f);
            AndroidUtilities.updateViewVisibilityAnimated(avatarContainer2, !expanded, 0.95f, true);
            callItem.setVisibility(expanded || !callItemVisible ? GONE : INVISIBLE);
            videoCallItem.setVisibility(expanded || !videoCallItemVisible ? GONE : INVISIBLE);
            editItem.setVisibility(expanded || !editItemVisible ? GONE : INVISIBLE);
            otherItem.setVisibility(expanded ? GONE : INVISIBLE);
            if (qrItem != null) {
                qrItem.setVisibility(expanded ? GONE : INVISIBLE);
            }
        }

        @Override
        protected boolean onMemberClick(TLRPC.ChatParticipant participant, boolean isLong) {
            return ProfileActivity.this.onMemberClick(participant, isLong);
        }
    };
    sharedMediaLayout.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.MATCH_PARENT));
    ActionBarMenu menu = actionBar.createMenu();
    if (userId == getUserConfig().clientUserId) {
        qrItem = menu.addItem(qr_button, R.drawable.msg_qr_mini, getResourceProvider());
        qrItem.setVisibility(isQrNeedVisible() ? View.VISIBLE : View.GONE);
        qrItem.setContentDescription(LocaleController.getString("AuthAnotherClientScan", R.string.AuthAnotherClientScan));
    }
    if (imageUpdater != null) {
        searchItem = menu.addItem(search_button, R.drawable.ic_ab_search).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() {

            @Override
            public Animator getCustomToggleTransition() {
                searchMode = !searchMode;
                if (!searchMode) {
                    searchItem.clearFocusOnSearchView();
                }
                if (searchMode) {
                    searchItem.getSearchField().setText("");
                }
                return searchExpandTransition(searchMode);
            }

            @Override
            public void onTextChanged(EditText editText) {
                searchAdapter.search(editText.getText().toString().toLowerCase());
            }
        });
        searchItem.setContentDescription(LocaleController.getString("SearchInSettings", R.string.SearchInSettings));
        searchItem.setSearchFieldHint(LocaleController.getString("SearchInSettings", R.string.SearchInSettings));
        sharedMediaLayout.getSearchItem().setVisibility(View.GONE);
        if (expandPhoto) {
            searchItem.setVisibility(View.GONE);
        }
    }
    videoCallItem = menu.addItem(video_call_item, R.drawable.profile_video);
    videoCallItem.setContentDescription(LocaleController.getString("VideoCall", R.string.VideoCall));
    if (chatId != 0) {
        callItem = menu.addItem(call_item, R.drawable.msg_voicechat2);
        if (ChatObject.isChannelOrGiga(currentChat)) {
            callItem.setContentDescription(LocaleController.getString("VoipChannelVoiceChat", R.string.VoipChannelVoiceChat));
        } else {
            callItem.setContentDescription(LocaleController.getString("VoipGroupVoiceChat", R.string.VoipGroupVoiceChat));
        }
    } else {
        callItem = menu.addItem(call_item, R.drawable.ic_call);
        callItem.setContentDescription(LocaleController.getString("Call", R.string.Call));
    }
    editItem = menu.addItem(edit_channel, R.drawable.group_edit_profile);
    editItem.setContentDescription(LocaleController.getString("Edit", R.string.Edit));
    otherItem = menu.addItem(10, R.drawable.ic_ab_other);
    otherItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions));
    int scrollTo;
    int scrollToPosition = 0;
    Object writeButtonTag = null;
    if (listView != null && imageUpdater != null) {
        scrollTo = layoutManager.findFirstVisibleItemPosition();
        View topView = layoutManager.findViewByPosition(scrollTo);
        if (topView != null) {
            scrollToPosition = topView.getTop() - listView.getPaddingTop();
        } else {
            scrollTo = -1;
        }
        writeButtonTag = writeButton.getTag();
    } else {
        scrollTo = -1;
    }
    createActionBarMenu(false);
    listAdapter = new ListAdapter(context);
    searchAdapter = new SearchAdapter(context);
    avatarDrawable = new AvatarDrawable();
    avatarDrawable.setProfile(true);
    fragmentView = new NestedFrameLayout(context) {

        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            if (pinchToZoomHelper.isInOverlayMode()) {
                return pinchToZoomHelper.onTouchEvent(ev);
            }
            if (sharedMediaLayout != null && sharedMediaLayout.isInFastScroll() && sharedMediaLayout.isPinnedToTop()) {
                return sharedMediaLayout.dispatchFastScrollEvent(ev);
            }
            if (sharedMediaLayout != null && sharedMediaLayout.checkPinchToZoom(ev)) {
                return true;
            }
            return super.dispatchTouchEvent(ev);
        }

        private boolean ignoreLayout;

        private Paint grayPaint = new Paint();

        @Override
        public boolean hasOverlappingRendering() {
            return false;
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            final int actionBarHeight = ActionBar.getCurrentActionBarHeight() + (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0);
            if (listView != null) {
                FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) listView.getLayoutParams();
                if (layoutParams.topMargin != actionBarHeight) {
                    layoutParams.topMargin = actionBarHeight;
                }
            }
            if (searchListView != null) {
                FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) searchListView.getLayoutParams();
                if (layoutParams.topMargin != actionBarHeight) {
                    layoutParams.topMargin = actionBarHeight;
                }
            }
            int height = MeasureSpec.getSize(heightMeasureSpec);
            super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
            boolean changed = false;
            if (lastMeasuredContentWidth != getMeasuredWidth() || lastMeasuredContentHeight != getMeasuredHeight()) {
                changed = lastMeasuredContentWidth != 0 && lastMeasuredContentWidth != getMeasuredWidth();
                listContentHeight = 0;
                int count = listAdapter.getItemCount();
                lastMeasuredContentWidth = getMeasuredWidth();
                lastMeasuredContentHeight = getMeasuredHeight();
                int ws = MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY);
                int hs = MeasureSpec.makeMeasureSpec(listView.getMeasuredHeight(), MeasureSpec.UNSPECIFIED);
                positionToOffset.clear();
                for (int i = 0; i < count; i++) {
                    int type = listAdapter.getItemViewType(i);
                    positionToOffset.put(i, listContentHeight);
                    if (type == 13) {
                        listContentHeight += listView.getMeasuredHeight();
                    } else {
                        RecyclerView.ViewHolder holder = listAdapter.createViewHolder(null, type);
                        listAdapter.onBindViewHolder(holder, i);
                        holder.itemView.measure(ws, hs);
                        listContentHeight += holder.itemView.getMeasuredHeight();
                    }
                }
                if (emptyView != null) {
                    ((LayoutParams) emptyView.getLayoutParams()).topMargin = AndroidUtilities.dp(88) + AndroidUtilities.statusBarHeight;
                }
            }
            if (!fragmentOpened && (expandPhoto || openAnimationInProgress && playProfileAnimation == 2)) {
                ignoreLayout = true;
                if (expandPhoto) {
                    if (searchItem != null) {
                        searchItem.setAlpha(0.0f);
                        searchItem.setEnabled(false);
                        searchItem.setVisibility(GONE);
                    }
                    nameTextView[1].setTextColor(Color.WHITE);
                    onlineTextView[1].setTextColor(Color.argb(179, 255, 255, 255));
                    actionBar.setItemsBackgroundColor(Theme.ACTION_BAR_WHITE_SELECTOR_COLOR, false);
                    actionBar.setItemsColor(Color.WHITE, false);
                    overlaysView.setOverlaysVisible();
                    overlaysView.setAlphaValue(1.0f, false);
                    avatarImage.setForegroundAlpha(1.0f);
                    avatarContainer.setVisibility(View.GONE);
                    avatarsViewPager.resetCurrentItem();
                    avatarsViewPager.setVisibility(View.VISIBLE);
                    expandPhoto = false;
                }
                allowPullingDown = true;
                isPulledDown = true;
                if (otherItem != null) {
                    if (!getMessagesController().isChatNoForwards(currentChat)) {
                        otherItem.showSubItem(gallery_menu_save);
                    } else {
                        otherItem.hideSubItem(gallery_menu_save);
                    }
                    if (imageUpdater != null) {
                        otherItem.showSubItem(edit_avatar);
                        otherItem.showSubItem(delete_avatar);
                        otherItem.hideSubItem(logout);
                    }
                }
                currentExpanAnimatorFracture = 1.0f;
                int paddingTop;
                int paddingBottom;
                if (isInLandscapeMode) {
                    paddingTop = AndroidUtilities.dp(88f);
                    paddingBottom = 0;
                } else {
                    paddingTop = listView.getMeasuredWidth();
                    paddingBottom = Math.max(0, getMeasuredHeight() - (listContentHeight + AndroidUtilities.dp(88) + actionBarHeight));
                }
                if (banFromGroup != 0) {
                    paddingBottom += AndroidUtilities.dp(48);
                    listView.setBottomGlowOffset(AndroidUtilities.dp(48));
                } else {
                    listView.setBottomGlowOffset(0);
                }
                initialAnimationExtraHeight = paddingTop - actionBarHeight;
                layoutManager.scrollToPositionWithOffset(0, -actionBarHeight);
                listView.setPadding(0, paddingTop, 0, paddingBottom);
                measureChildWithMargins(listView, widthMeasureSpec, 0, heightMeasureSpec, 0);
                listView.layout(0, actionBarHeight, listView.getMeasuredWidth(), actionBarHeight + listView.getMeasuredHeight());
                ignoreLayout = false;
            } else if (fragmentOpened && !openAnimationInProgress && !firstLayout) {
                ignoreLayout = true;
                int paddingTop;
                int paddingBottom;
                if (isInLandscapeMode || AndroidUtilities.isTablet()) {
                    paddingTop = AndroidUtilities.dp(88f);
                    paddingBottom = 0;
                } else {
                    paddingTop = listView.getMeasuredWidth();
                    paddingBottom = Math.max(0, getMeasuredHeight() - (listContentHeight + AndroidUtilities.dp(88) + actionBarHeight));
                }
                if (banFromGroup != 0) {
                    paddingBottom += AndroidUtilities.dp(48);
                    listView.setBottomGlowOffset(AndroidUtilities.dp(48));
                } else {
                    listView.setBottomGlowOffset(0);
                }
                int currentPaddingTop = listView.getPaddingTop();
                View view = null;
                int pos = RecyclerView.NO_POSITION;
                for (int i = 0; i < listView.getChildCount(); i++) {
                    int p = listView.getChildAdapterPosition(listView.getChildAt(i));
                    if (p != RecyclerView.NO_POSITION) {
                        view = listView.getChildAt(i);
                        pos = p;
                        break;
                    }
                }
                if (view == null) {
                    view = listView.getChildAt(0);
                    if (view != null) {
                        RecyclerView.ViewHolder holder = listView.findContainingViewHolder(view);
                        pos = holder.getAdapterPosition();
                        if (pos == RecyclerView.NO_POSITION) {
                            pos = holder.getPosition();
                        }
                    }
                }
                int top = paddingTop;
                if (view != null) {
                    top = view.getTop();
                }
                boolean layout = false;
                if (actionBar.isSearchFieldVisible() && sharedMediaRow >= 0) {
                    layoutManager.scrollToPositionWithOffset(sharedMediaRow, -paddingTop);
                    layout = true;
                } else if (invalidateScroll || currentPaddingTop != paddingTop) {
                    if (savedScrollPosition >= 0) {
                        layoutManager.scrollToPositionWithOffset(savedScrollPosition, savedScrollOffset - paddingTop);
                    } else if ((!changed || !allowPullingDown) && view != null) {
                        if (pos == 0 && !allowPullingDown && top > AndroidUtilities.dp(88)) {
                            top = AndroidUtilities.dp(88);
                        }
                        layoutManager.scrollToPositionWithOffset(pos, top - paddingTop);
                        layout = true;
                    } else {
                        layoutManager.scrollToPositionWithOffset(0, AndroidUtilities.dp(88) - paddingTop);
                    }
                }
                if (currentPaddingTop != paddingTop || listView.getPaddingBottom() != paddingBottom) {
                    listView.setPadding(0, paddingTop, 0, paddingBottom);
                    layout = true;
                }
                if (layout) {
                    measureChildWithMargins(listView, widthMeasureSpec, 0, heightMeasureSpec, 0);
                    try {
                        listView.layout(0, actionBarHeight, listView.getMeasuredWidth(), actionBarHeight + listView.getMeasuredHeight());
                    } catch (Exception e) {
                        FileLog.e(e);
                    }
                }
                ignoreLayout = false;
            }
        }

        @Override
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            super.onLayout(changed, left, top, right, bottom);
            savedScrollPosition = -1;
            firstLayout = false;
            invalidateScroll = false;
            checkListViewScroll();
        }

        @Override
        public void requestLayout() {
            if (ignoreLayout) {
                return;
            }
            super.requestLayout();
        }

        private final ArrayList<View> sortedChildren = new ArrayList<>();

        private final Comparator<View> viewComparator = (view, view2) -> (int) (view.getY() - view2.getY());

        @Override
        protected void dispatchDraw(Canvas canvas) {
            whitePaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhite));
            if (listView.getVisibility() == VISIBLE) {
                grayPaint.setColor(Theme.getColor(Theme.key_windowBackgroundGray));
                if (transitionAnimationInProress) {
                    whitePaint.setAlpha((int) (255 * listView.getAlpha()));
                }
                if (transitionAnimationInProress) {
                    grayPaint.setAlpha((int) (255 * listView.getAlpha()));
                }
                int count = listView.getChildCount();
                sortedChildren.clear();
                boolean hasRemovingItems = false;
                for (int i = 0; i < count; i++) {
                    View child = listView.getChildAt(i);
                    if (listView.getChildAdapterPosition(child) != RecyclerView.NO_POSITION) {
                        sortedChildren.add(listView.getChildAt(i));
                    } else {
                        hasRemovingItems = true;
                    }
                }
                Collections.sort(sortedChildren, viewComparator);
                boolean hasBackground = false;
                float lastY = listView.getY();
                count = sortedChildren.size();
                if (!openAnimationInProgress && count > 0 && !hasRemovingItems) {
                    lastY += sortedChildren.get(0).getY();
                }
                float alpha = 1f;
                for (int i = 0; i < count; i++) {
                    View child = sortedChildren.get(i);
                    boolean currentHasBackground = child.getBackground() != null;
                    int currentY = (int) (listView.getY() + child.getY());
                    if (hasBackground == currentHasBackground) {
                        if (child.getAlpha() == 1f) {
                            alpha = 1f;
                        }
                        continue;
                    }
                    if (hasBackground) {
                        canvas.drawRect(listView.getX(), lastY, listView.getX() + listView.getMeasuredWidth(), currentY, grayPaint);
                    } else {
                        if (alpha != 1f) {
                            canvas.drawRect(listView.getX(), lastY, listView.getX() + listView.getMeasuredWidth(), currentY, grayPaint);
                            whitePaint.setAlpha((int) (255 * alpha));
                            canvas.drawRect(listView.getX(), lastY, listView.getX() + listView.getMeasuredWidth(), currentY, whitePaint);
                            whitePaint.setAlpha(255);
                        } else {
                            canvas.drawRect(listView.getX(), lastY, listView.getX() + listView.getMeasuredWidth(), currentY, whitePaint);
                        }
                    }
                    hasBackground = currentHasBackground;
                    lastY = currentY;
                    alpha = child.getAlpha();
                }
                if (hasBackground) {
                    canvas.drawRect(listView.getX(), lastY, listView.getX() + listView.getMeasuredWidth(), listView.getBottom(), grayPaint);
                } else {
                    if (alpha != 1f) {
                        canvas.drawRect(listView.getX(), lastY, listView.getX() + listView.getMeasuredWidth(), listView.getBottom(), grayPaint);
                        whitePaint.setAlpha((int) (255 * alpha));
                        canvas.drawRect(listView.getX(), lastY, listView.getX() + listView.getMeasuredWidth(), listView.getBottom(), whitePaint);
                        whitePaint.setAlpha(255);
                    } else {
                        canvas.drawRect(listView.getX(), lastY, listView.getX() + listView.getMeasuredWidth(), listView.getBottom(), whitePaint);
                    }
                }
            } else {
                int top = searchListView.getTop();
                canvas.drawRect(0, top + extraHeight + searchTransitionOffset, getMeasuredWidth(), top + getMeasuredHeight(), whitePaint);
            }
            super.dispatchDraw(canvas);
            if (profileTransitionInProgress && parentLayout.fragmentsStack.size() > 1) {
                BaseFragment fragment = parentLayout.fragmentsStack.get(parentLayout.fragmentsStack.size() - 2);
                if (fragment instanceof ChatActivity) {
                    ChatActivity chatActivity = (ChatActivity) fragment;
                    FragmentContextView fragmentContextView = chatActivity.getFragmentContextView();
                    if (fragmentContextView != null && fragmentContextView.isCallStyle()) {
                        float progress = extraHeight / AndroidUtilities.dpf2(fragmentContextView.getStyleHeight());
                        if (progress > 1f) {
                            progress = 1f;
                        }
                        canvas.save();
                        canvas.translate(fragmentContextView.getX(), fragmentContextView.getY());
                        fragmentContextView.setDrawOverlay(true);
                        fragmentContextView.setCollapseTransition(true, extraHeight, progress);
                        fragmentContextView.draw(canvas);
                        fragmentContextView.setCollapseTransition(false, extraHeight, progress);
                        fragmentContextView.setDrawOverlay(false);
                        canvas.restore();
                    }
                }
            }
            if (scrimPaint.getAlpha() > 0) {
                canvas.drawRect(0, 0, getWidth(), getHeight(), scrimPaint);
            }
            if (scrimView != null) {
                int c = canvas.save();
                canvas.translate(scrimView.getLeft(), scrimView.getTop());
                if (scrimView == actionBar.getBackButton()) {
                    int r = Math.max(scrimView.getMeasuredWidth(), scrimView.getMeasuredHeight()) / 2;
                    int wasAlpha = actionBarBackgroundPaint.getAlpha();
                    actionBarBackgroundPaint.setAlpha((int) (wasAlpha * (scrimPaint.getAlpha() / 255f) / 0.3f));
                    canvas.drawCircle(r, r, r * 0.8f, actionBarBackgroundPaint);
                    actionBarBackgroundPaint.setAlpha(wasAlpha);
                }
                scrimView.draw(canvas);
                canvas.restoreToCount(c);
            }
        }

        @Override
        protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
            if (pinchToZoomHelper.isInOverlayMode() && (child == avatarContainer2 || child == actionBar || child == writeButton)) {
                return true;
            }
            return super.drawChild(canvas, child, drawingTime);
        }
    };
    fragmentView.setWillNotDraw(false);
    FrameLayout frameLayout = (FrameLayout) fragmentView;
    listView = new RecyclerListView(context) {

        private VelocityTracker velocityTracker;

        @Override
        protected boolean canHighlightChildAt(View child, float x, float y) {
            return !(child instanceof AboutLinkCell);
        }

        @Override
        protected boolean allowSelectChildAtPosition(View child) {
            return child != sharedMediaLayout;
        }

        @Override
        public boolean hasOverlappingRendering() {
            return false;
        }

        @Override
        protected void requestChildOnScreen(View child, View focused) {
        }

        @Override
        public void invalidate() {
            super.invalidate();
            if (fragmentView != null) {
                fragmentView.invalidate();
            }
        }

        @Override
        public boolean onTouchEvent(MotionEvent e) {
            final int action = e.getAction();
            if (action == MotionEvent.ACTION_DOWN) {
                if (velocityTracker == null) {
                    velocityTracker = VelocityTracker.obtain();
                } else {
                    velocityTracker.clear();
                }
                velocityTracker.addMovement(e);
            } else if (action == MotionEvent.ACTION_MOVE) {
                if (velocityTracker != null) {
                    velocityTracker.addMovement(e);
                    velocityTracker.computeCurrentVelocity(1000);
                    listViewVelocityY = velocityTracker.getYVelocity(e.getPointerId(e.getActionIndex()));
                }
            } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
                if (velocityTracker != null) {
                    velocityTracker.recycle();
                    velocityTracker = null;
                }
            }
            final boolean result = super.onTouchEvent(e);
            if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
                if (allowPullingDown) {
                    final View view = layoutManager.findViewByPosition(0);
                    if (view != null) {
                        if (isPulledDown) {
                            final int actionBarHeight = ActionBar.getCurrentActionBarHeight() + (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0);
                            listView.smoothScrollBy(0, view.getTop() - listView.getMeasuredWidth() + actionBarHeight, CubicBezierInterpolator.EASE_OUT_QUINT);
                        } else {
                            listView.smoothScrollBy(0, view.getTop() - AndroidUtilities.dp(88), CubicBezierInterpolator.EASE_OUT_QUINT);
                        }
                    }
                }
            }
            return result;
        }

        @Override
        public boolean drawChild(Canvas canvas, View child, long drawingTime) {
            if (getItemAnimator().isRunning() && child.getBackground() == null && child.getTranslationY() != 0) {
                boolean useAlpha = listView.getChildAdapterPosition(child) == sharedMediaRow && child.getAlpha() != 1f;
                if (useAlpha) {
                    whitePaint.setAlpha((int) (255 * listView.getAlpha() * child.getAlpha()));
                }
                canvas.drawRect(listView.getX(), child.getY(), listView.getX() + listView.getMeasuredWidth(), child.getY() + child.getHeight(), whitePaint);
                if (useAlpha) {
                    whitePaint.setAlpha((int) (255 * listView.getAlpha()));
                }
            }
            return super.drawChild(canvas, child, drawingTime);
        }
    };
    listView.setVerticalScrollBarEnabled(false);
    DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator() {

        int animationIndex = -1;

        @Override
        protected void onAllAnimationsDone() {
            super.onAllAnimationsDone();
            getNotificationCenter().onAnimationFinish(animationIndex);
        }

        @Override
        public void runPendingAnimations() {
            boolean removalsPending = !mPendingRemovals.isEmpty();
            boolean movesPending = !mPendingMoves.isEmpty();
            boolean changesPending = !mPendingChanges.isEmpty();
            boolean additionsPending = !mPendingAdditions.isEmpty();
            if (removalsPending || movesPending || additionsPending || changesPending) {
                ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1f);
                valueAnimator.addUpdateListener(valueAnimator1 -> listView.invalidate());
                valueAnimator.setDuration(getMoveDuration());
                valueAnimator.start();
                animationIndex = getNotificationCenter().setAnimationInProgress(animationIndex, null);
            }
            super.runPendingAnimations();
        }

        @Override
        protected long getAddAnimationDelay(long removeDuration, long moveDuration, long changeDuration) {
            return 0;
        }

        @Override
        protected long getMoveAnimationDelay() {
            return 0;
        }

        @Override
        public long getMoveDuration() {
            return 220;
        }

        @Override
        public long getRemoveDuration() {
            return 220;
        }

        @Override
        public long getAddDuration() {
            return 220;
        }
    };
    listView.setItemAnimator(defaultItemAnimator);
    defaultItemAnimator.setSupportsChangeAnimations(false);
    defaultItemAnimator.setDelayAnimations(false);
    listView.setClipToPadding(false);
    listView.setHideIfEmpty(false);
    layoutManager = new LinearLayoutManager(context) {

        @Override
        public boolean supportsPredictiveItemAnimations() {
            return imageUpdater != null;
        }

        @Override
        public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
            final View view = layoutManager.findViewByPosition(0);
            if (view != null && !openingAvatar) {
                final int canScroll = view.getTop() - AndroidUtilities.dp(88);
                if (!allowPullingDown && canScroll > dy) {
                    dy = canScroll;
                    if (avatarsViewPager.hasImages() && avatarImage.getImageReceiver().hasNotThumb() && !isInLandscapeMode && !AndroidUtilities.isTablet()) {
                        allowPullingDown = avatarBig == null;
                    }
                } else if (allowPullingDown) {
                    if (dy >= canScroll) {
                        dy = canScroll;
                        allowPullingDown = false;
                    } else if (listView.getScrollState() == RecyclerListView.SCROLL_STATE_DRAGGING) {
                        if (!isPulledDown) {
                            dy /= 2;
                        }
                    }
                }
            }
            return super.scrollVerticallyBy(dy, recycler, state);
        }
    };
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    layoutManager.mIgnoreTopPadding = false;
    listView.setLayoutManager(layoutManager);
    listView.setGlowColor(0);
    listView.setAdapter(listAdapter);
    frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT));
    listView.setOnItemClickListener((view, position, x, y) -> {
        if (getParentActivity() == null) {
            return;
        }
        if (position == settingsKeyRow) {
            Bundle args = new Bundle();
            args.putInt("chat_id", DialogObject.getEncryptedChatId(dialogId));
            presentFragment(new IdenticonActivity(args));
        } else if (position == settingsTimerRow) {
            showDialog(AlertsCreator.createTTLAlert(getParentActivity(), currentEncryptedChat, null).create());
        } else if (position == notificationsRow) {
            if (LocaleController.isRTL && x <= AndroidUtilities.dp(76) || !LocaleController.isRTL && x >= view.getMeasuredWidth() - AndroidUtilities.dp(76)) {
                NotificationsCheckCell checkCell = (NotificationsCheckCell) view;
                boolean checked = !checkCell.isChecked();
                boolean defaultEnabled = getNotificationsController().isGlobalNotificationsEnabled(did);
                if (checked) {
                    SharedPreferences preferences = MessagesController.getNotificationsSettings(currentAccount);
                    SharedPreferences.Editor editor = preferences.edit();
                    if (defaultEnabled) {
                        editor.remove("notify2_" + did);
                    } else {
                        editor.putInt("notify2_" + did, 0);
                    }
                    getMessagesStorage().setDialogFlags(did, 0);
                    editor.commit();
                    TLRPC.Dialog dialog = getMessagesController().dialogs_dict.get(did);
                    if (dialog != null) {
                        dialog.notify_settings = new TLRPC.TL_peerNotifySettings();
                    }
                } else {
                    int untilTime = Integer.MAX_VALUE;
                    SharedPreferences preferences = MessagesController.getNotificationsSettings(currentAccount);
                    SharedPreferences.Editor editor = preferences.edit();
                    long flags;
                    if (!defaultEnabled) {
                        editor.remove("notify2_" + did);
                        flags = 0;
                    } else {
                        editor.putInt("notify2_" + did, 2);
                        flags = 1;
                    }
                    getNotificationsController().removeNotificationsForDialog(did);
                    getMessagesStorage().setDialogFlags(did, flags);
                    editor.commit();
                    TLRPC.Dialog dialog = getMessagesController().dialogs_dict.get(did);
                    if (dialog != null) {
                        dialog.notify_settings = new TLRPC.TL_peerNotifySettings();
                        if (defaultEnabled) {
                            dialog.notify_settings.mute_until = untilTime;
                        }
                    }
                }
                getNotificationsController().updateServerNotificationsSettings(did);
                checkCell.setChecked(checked);
                RecyclerListView.Holder holder = (RecyclerListView.Holder) listView.findViewHolderForPosition(notificationsRow);
                if (holder != null) {
                    listAdapter.onBindViewHolder(holder, notificationsRow);
                }
                return;
            }
            AlertsCreator.showCustomNotificationsDialog(ProfileActivity.this, did, -1, null, currentAccount, param -> listAdapter.notifyItemChanged(notificationsRow));
        } else if (position == unblockRow) {
            getMessagesController().unblockPeer(userId);
            if (BulletinFactory.canShowBulletin(ProfileActivity.this)) {
                BulletinFactory.createBanBulletin(ProfileActivity.this, false).show();
            }
        } else if (position == sendMessageRow) {
            onWriteButtonClick();
        } else if (position == reportRow) {
            AlertsCreator.createReportAlert(getParentActivity(), getDialogId(), 0, ProfileActivity.this, null);
        } else if (position >= membersStartRow && position < membersEndRow) {
            TLRPC.ChatParticipant participant;
            if (!sortedUsers.isEmpty()) {
                participant = chatInfo.participants.participants.get(sortedUsers.get(position - membersStartRow));
            } else {
                participant = chatInfo.participants.participants.get(position - membersStartRow);
            }
            onMemberClick(participant, false);
        } else if (position == addMemberRow) {
            openAddMember();
        } else if (position == usernameRow) {
            if (currentChat != null) {
                try {
                    Intent intent = new Intent(Intent.ACTION_SEND);
                    intent.setType("text/plain");
                    if (!TextUtils.isEmpty(chatInfo.about)) {
                        intent.putExtra(Intent.EXTRA_TEXT, currentChat.title + "\n" + chatInfo.about + "\nhttps://" + getMessagesController().linkPrefix + "/" + currentChat.username);
                    } else {
                        intent.putExtra(Intent.EXTRA_TEXT, currentChat.title + "\nhttps://" + getMessagesController().linkPrefix + "/" + currentChat.username);
                    }
                    getParentActivity().startActivityForResult(Intent.createChooser(intent, LocaleController.getString("BotShare", R.string.BotShare)), 500);
                } catch (Exception e) {
                    FileLog.e(e);
                }
            }
        } else if (position == locationRow) {
            if (chatInfo.location instanceof TLRPC.TL_channelLocation) {
                LocationActivity fragment = new LocationActivity(LocationActivity.LOCATION_TYPE_GROUP_VIEW);
                fragment.setChatLocation(chatId, (TLRPC.TL_channelLocation) chatInfo.location);
                presentFragment(fragment);
            }
        } else if (position == joinRow) {
            getMessagesController().addUserToChat(currentChat.id, getUserConfig().getCurrentUser(), 0, null, ProfileActivity.this, null);
            NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.closeSearchByActiveAction);
        } else if (position == subscribersRow) {
            Bundle args = new Bundle();
            args.putLong("chat_id", chatId);
            args.putInt("type", ChatUsersActivity.TYPE_USERS);
            ChatUsersActivity fragment = new ChatUsersActivity(args);
            fragment.setInfo(chatInfo);
            presentFragment(fragment);
        } else if (position == subscribersRequestsRow) {
            MemberRequestsActivity activity = new MemberRequestsActivity(chatId);
            presentFragment(activity);
        } else if (position == administratorsRow) {
            Bundle args = new Bundle();
            args.putLong("chat_id", chatId);
            args.putInt("type", ChatUsersActivity.TYPE_ADMIN);
            ChatUsersActivity fragment = new ChatUsersActivity(args);
            fragment.setInfo(chatInfo);
            presentFragment(fragment);
        } else if (position == blockedUsersRow) {
            Bundle args = new Bundle();
            args.putLong("chat_id", chatId);
            args.putInt("type", ChatUsersActivity.TYPE_BANNED);
            ChatUsersActivity fragment = new ChatUsersActivity(args);
            fragment.setInfo(chatInfo);
            presentFragment(fragment);
        } else if (position == notificationRow) {
            presentFragment(new NotificationsSettingsActivity());
        } else if (position == privacyRow) {
            presentFragment(new PrivacySettingsActivity());
        } else if (position == dataRow) {
            presentFragment(new DataSettingsActivity());
        } else if (position == chatRow) {
            presentFragment(new ThemeActivity(ThemeActivity.THEME_TYPE_BASIC));
        } else if (position == filtersRow) {
            presentFragment(new FiltersSetupActivity());
        } else if (position == devicesRow) {
            presentFragment(new SessionsActivity(0));
        } else if (position == questionRow) {
            showDialog(AlertsCreator.createSupportAlert(ProfileActivity.this));
        } else if (position == faqRow) {
            Browser.openUrl(getParentActivity(), LocaleController.getString("TelegramFaqUrl", R.string.TelegramFaqUrl));
        } else if (position == policyRow) {
            Browser.openUrl(getParentActivity(), LocaleController.getString("PrivacyPolicyUrl", R.string.PrivacyPolicyUrl));
        } else if (position == sendLogsRow) {
            sendLogs(false);
        } else if (position == sendLastLogsRow) {
            sendLogs(true);
        } else if (position == clearLogsRow) {
            FileLog.cleanupLogs();
        } else if (position == switchBackendRow) {
            if (getParentActivity() == null) {
                return;
            }
            AlertDialog.Builder builder1 = new AlertDialog.Builder(getParentActivity());
            builder1.setMessage(LocaleController.getString("AreYouSure", R.string.AreYouSure));
            builder1.setTitle(LocaleController.getString("AppName", R.string.AppName));
            builder1.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> {
                SharedConfig.pushAuthKey = null;
                SharedConfig.pushAuthKeyId = null;
                SharedConfig.saveConfig();
                getConnectionsManager().switchBackend(true);
            });
            builder1.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
            showDialog(builder1.create());
        } else if (position == languageRow) {
            presentFragment(new LanguageSelectActivity());
        } else if (position == setUsernameRow) {
            presentFragment(new ChangeUsernameActivity());
        } else if (position == bioRow) {
            if (userInfo != null) {
                presentFragment(new ChangeBioActivity());
            }
        } else if (position == numberRow) {
            presentFragment(new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_CHANGE_PHONE_NUMBER));
        } else if (position == setAvatarRow) {
            onWriteButtonClick();
        } else {
            processOnClickOrPress(position, view);
        }
    });
    listView.setOnItemLongClickListener(new RecyclerListView.OnItemLongClickListener() {

        private int pressCount = 0;

        @Override
        public boolean onItemClick(View view, int position) {
            if (position == versionRow) {
                pressCount++;
                if (pressCount >= 2 || BuildVars.DEBUG_PRIVATE_VERSION) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                    builder.setTitle(LocaleController.getString("DebugMenu", R.string.DebugMenu));
                    CharSequence[] items;
                    items = new CharSequence[] { LocaleController.getString("DebugMenuImportContacts", R.string.DebugMenuImportContacts), LocaleController.getString("DebugMenuReloadContacts", R.string.DebugMenuReloadContacts), LocaleController.getString("DebugMenuResetContacts", R.string.DebugMenuResetContacts), LocaleController.getString("DebugMenuResetDialogs", R.string.DebugMenuResetDialogs), BuildVars.DEBUG_VERSION ? null : (BuildVars.LOGS_ENABLED ? LocaleController.getString("DebugMenuDisableLogs", R.string.DebugMenuDisableLogs) : LocaleController.getString("DebugMenuEnableLogs", R.string.DebugMenuEnableLogs)), SharedConfig.inappCamera ? LocaleController.getString("DebugMenuDisableCamera", R.string.DebugMenuDisableCamera) : LocaleController.getString("DebugMenuEnableCamera", R.string.DebugMenuEnableCamera), LocaleController.getString("DebugMenuClearMediaCache", R.string.DebugMenuClearMediaCache), LocaleController.getString("DebugMenuCallSettings", R.string.DebugMenuCallSettings), null, BuildVars.DEBUG_PRIVATE_VERSION || BuildVars.isStandaloneApp() ? LocaleController.getString("DebugMenuCheckAppUpdate", R.string.DebugMenuCheckAppUpdate) : null, LocaleController.getString("DebugMenuReadAllDialogs", R.string.DebugMenuReadAllDialogs), SharedConfig.pauseMusicOnRecord ? LocaleController.getString("DebugMenuDisablePauseMusic", R.string.DebugMenuDisablePauseMusic) : LocaleController.getString("DebugMenuEnablePauseMusic", R.string.DebugMenuEnablePauseMusic), BuildVars.DEBUG_VERSION && !AndroidUtilities.isTablet() && Build.VERSION.SDK_INT >= 23 ? (SharedConfig.smoothKeyboard ? LocaleController.getString("DebugMenuDisableSmoothKeyboard", R.string.DebugMenuDisableSmoothKeyboard) : LocaleController.getString("DebugMenuEnableSmoothKeyboard", R.string.DebugMenuEnableSmoothKeyboard)) : null, BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.disableVoiceAudioEffects ? "Enable voip audio effects" : "Disable voip audio effects") : null, Build.VERSION.SDK_INT >= 21 ? (SharedConfig.noStatusBar ? "Show status bar background" : "Hide status bar background") : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Clean app update" : null, BuildVars.DEBUG_PRIVATE_VERSION ? "Reset suggestions" : null };
                    builder.setItems(items, (dialog, which) -> {
                        if (which == 0) {
                            getUserConfig().syncContacts = true;
                            getUserConfig().saveConfig(false);
                            getContactsController().forceImportContacts();
                        } else if (which == 1) {
                            getContactsController().loadContacts(false, 0);
                        } else if (which == 2) {
                            getContactsController().resetImportedContacts();
                        } else if (which == 3) {
                            getMessagesController().forceResetDialogs();
                        } else if (which == 4) {
                            BuildVars.LOGS_ENABLED = !BuildVars.LOGS_ENABLED;
                            SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("systemConfig", Context.MODE_PRIVATE);
                            sharedPreferences.edit().putBoolean("logsEnabled", BuildVars.LOGS_ENABLED).commit();
                            updateRowsIds();
                            listAdapter.notifyDataSetChanged();
                        } else if (which == 5) {
                            SharedConfig.toggleInappCamera();
                        } else if (which == 6) {
                            getMessagesStorage().clearSentMedia();
                            SharedConfig.setNoSoundHintShowed(false);
                            SharedPreferences.Editor editor = MessagesController.getGlobalMainSettings().edit();
                            editor.remove("archivehint").remove("proximityhint").remove("archivehint_l").remove("gifhint").remove("reminderhint").remove("soundHint").remove("themehint").remove("bganimationhint").remove("filterhint").commit();
                            MessagesController.getEmojiSettings(currentAccount).edit().remove("featured_hidden").commit();
                            SharedConfig.textSelectionHintShows = 0;
                            SharedConfig.lockRecordAudioVideoHint = 0;
                            SharedConfig.stickersReorderingHintUsed = false;
                            SharedConfig.forwardingOptionsHintShown = false;
                            SharedConfig.messageSeenHintCount = 3;
                            SharedConfig.emojiInteractionsHintCount = 3;
                            SharedConfig.dayNightThemeSwitchHintCount = 3;
                            SharedConfig.fastScrollHintCount = 3;
                            ChatThemeController.getInstance(currentAccount).clearCache();
                        } else if (which == 7) {
                            VoIPHelper.showCallDebugSettings(getParentActivity());
                        } else if (which == 8) {
                            SharedConfig.toggleRoundCamera16to9();
                        } else if (which == 9) {
                            ((LaunchActivity) getParentActivity()).checkAppUpdate(true);
                        } else if (which == 10) {
                            getMessagesStorage().readAllDialogs(-1);
                        } else if (which == 11) {
                            SharedConfig.togglePauseMusicOnRecord();
                        } else if (which == 12) {
                            SharedConfig.toggleSmoothKeyboard();
                            if (SharedConfig.smoothKeyboard && getParentActivity() != null) {
                                getParentActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
                            }
                        } else if (which == 13) {
                            SharedConfig.toggleDisableVoiceAudioEffects();
                        } else if (which == 14) {
                            SharedConfig.toggleNoStatusBar();
                            if (getParentActivity() != null && Build.VERSION.SDK_INT >= 21) {
                                if (SharedConfig.noStatusBar) {
                                    getParentActivity().getWindow().setStatusBarColor(0);
                                } else {
                                    getParentActivity().getWindow().setStatusBarColor(0x33000000);
                                }
                            }
                        } else if (which == 15) {
                            SharedConfig.pendingAppUpdate = null;
                            SharedConfig.saveConfig();
                            NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.appUpdateAvailable);
                        } else if (which == 16) {
                            Set<String> suggestions = getMessagesController().pendingSuggestions;
                            suggestions.add("VALIDATE_PHONE_NUMBER");
                            suggestions.add("VALIDATE_PASSWORD");
                            getNotificationCenter().postNotificationName(NotificationCenter.newSuggestionsAvailable);
                        }
                    });
                    builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                    showDialog(builder.create());
                } else {
                    try {
                        Toast.makeText(getParentActivity(), "¯\\_(ツ)_/¯", Toast.LENGTH_SHORT).show();
                    } catch (Exception e) {
                        FileLog.e(e);
                    }
                }
                return true;
            } else if (position >= membersStartRow && position < membersEndRow) {
                final TLRPC.ChatParticipant participant;
                if (!sortedUsers.isEmpty()) {
                    participant = visibleChatParticipants.get(sortedUsers.get(position - membersStartRow));
                } else {
                    participant = visibleChatParticipants.get(position - membersStartRow);
                }
                return onMemberClick(participant, true);
            } else {
                return processOnClickOrPress(position, view);
            }
        }
    });
    if (searchItem != null) {
        searchListView = new RecyclerListView(context);
        searchListView.setVerticalScrollBarEnabled(false);
        searchListView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
        searchListView.setGlowColor(Theme.getColor(Theme.key_avatar_backgroundActionBarBlue));
        searchListView.setAdapter(searchAdapter);
        searchListView.setItemAnimator(null);
        searchListView.setVisibility(View.GONE);
        searchListView.setLayoutAnimation(null);
        searchListView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
        frameLayout.addView(searchListView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT));
        searchListView.setOnItemClickListener((view, position) -> {
            if (position < 0) {
                return;
            }
            Object object = numberRow;
            boolean add = true;
            if (searchAdapter.searchWas) {
                if (position < searchAdapter.searchResults.size()) {
                    object = searchAdapter.searchResults.get(position);
                } else {
                    position -= searchAdapter.searchResults.size() + 1;
                    if (position >= 0 && position < searchAdapter.faqSearchResults.size()) {
                        object = searchAdapter.faqSearchResults.get(position);
                    }
                }
            } else {
                if (!searchAdapter.recentSearches.isEmpty()) {
                    position--;
                }
                if (position >= 0 && position < searchAdapter.recentSearches.size()) {
                    object = searchAdapter.recentSearches.get(position);
                } else {
                    position -= searchAdapter.recentSearches.size() + 1;
                    if (position >= 0 && position < searchAdapter.faqSearchArray.size()) {
                        object = searchAdapter.faqSearchArray.get(position);
                        add = false;
                    }
                }
            }
            if (object instanceof SearchAdapter.SearchResult) {
                SearchAdapter.SearchResult result = (SearchAdapter.SearchResult) object;
                result.open();
            } else if (object instanceof MessagesController.FaqSearchResult) {
                MessagesController.FaqSearchResult result = (MessagesController.FaqSearchResult) object;
                NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.openArticle, searchAdapter.faqWebPage, result.url);
            }
            if (add && object != null) {
                searchAdapter.addRecent(object);
            }
        });
        searchListView.setOnItemLongClickListener((view, position) -> {
            if (searchAdapter.isSearchWas() || searchAdapter.recentSearches.isEmpty()) {
                return false;
            }
            AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
            builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
            builder.setMessage(LocaleController.getString("ClearSearch", R.string.ClearSearch));
            builder.setPositiveButton(LocaleController.getString("ClearButton", R.string.ClearButton).toUpperCase(), (dialogInterface, i) -> searchAdapter.clearRecent());
            builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
            showDialog(builder.create());
            return true;
        });
        searchListView.setOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
                    AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
                }
            }
        });
        searchListView.setAnimateEmptyView(true, 1);
        emptyView = new StickerEmptyView(context, null, 1);
        emptyView.setAnimateLayoutChange(true);
        emptyView.subtitle.setVisibility(View.GONE);
        emptyView.setVisibility(View.GONE);
        frameLayout.addView(emptyView);
        searchAdapter.loadFaqWebPage();
    }
    if (banFromGroup != 0) {
        TLRPC.Chat chat = getMessagesController().getChat(banFromGroup);
        if (currentChannelParticipant == null) {
            TLRPC.TL_channels_getParticipant req = new TLRPC.TL_channels_getParticipant();
            req.channel = MessagesController.getInputChannel(chat);
            req.participant = getMessagesController().getInputPeer(userId);
            getConnectionsManager().sendRequest(req, (response, error) -> {
                if (response != null) {
                    AndroidUtilities.runOnUIThread(() -> currentChannelParticipant = ((TLRPC.TL_channels_channelParticipant) response).participant);
                }
            });
        }
        FrameLayout frameLayout1 = new FrameLayout(context) {

            @Override
            protected void onDraw(Canvas canvas) {
                int bottom = Theme.chat_composeShadowDrawable.getIntrinsicHeight();
                Theme.chat_composeShadowDrawable.setBounds(0, 0, getMeasuredWidth(), bottom);
                Theme.chat_composeShadowDrawable.draw(canvas);
                canvas.drawRect(0, bottom, getMeasuredWidth(), getMeasuredHeight(), Theme.chat_composeBackgroundPaint);
            }
        };
        frameLayout1.setWillNotDraw(false);
        frameLayout.addView(frameLayout1, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 51, Gravity.LEFT | Gravity.BOTTOM));
        frameLayout1.setOnClickListener(v -> {
            ChatRightsEditActivity fragment = new ChatRightsEditActivity(userId, banFromGroup, null, chat.default_banned_rights, currentChannelParticipant != null ? currentChannelParticipant.banned_rights : null, "", ChatRightsEditActivity.TYPE_BANNED, true, false);
            fragment.setDelegate(new ChatRightsEditActivity.ChatRightsEditActivityDelegate() {

                @Override
                public void didSetRights(int rights, TLRPC.TL_chatAdminRights rightsAdmin, TLRPC.TL_chatBannedRights rightsBanned, String rank) {
                    removeSelfFromStack();
                }

                @Override
                public void didChangeOwner(TLRPC.User user) {
                    undoView.showWithAction(-chatId, currentChat.megagroup ? UndoView.ACTION_OWNER_TRANSFERED_GROUP : UndoView.ACTION_OWNER_TRANSFERED_CHANNEL, user);
                }
            });
            presentFragment(fragment);
        });
        TextView textView = new TextView(context);
        textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteRedText));
        textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
        textView.setGravity(Gravity.CENTER);
        textView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
        textView.setText(LocaleController.getString("BanFromTheGroup", R.string.BanFromTheGroup));
        frameLayout1.addView(textView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 1, 0, 0));
        listView.setPadding(0, AndroidUtilities.dp(88), 0, AndroidUtilities.dp(48));
        listView.setBottomGlowOffset(AndroidUtilities.dp(48));
    } else {
        listView.setPadding(0, AndroidUtilities.dp(88), 0, 0);
    }
    topView = new TopView(context);
    topView.setBackgroundColor(Theme.getColor(Theme.key_avatar_backgroundActionBarBlue));
    frameLayout.addView(topView);
    avatarContainer = new FrameLayout(context);
    avatarContainer2 = new FrameLayout(context) {

        @Override
        protected void dispatchDraw(Canvas canvas) {
            super.dispatchDraw(canvas);
            if (transitionOnlineText != null) {
                canvas.save();
                canvas.translate(onlineTextView[0].getX(), onlineTextView[0].getY());
                canvas.saveLayerAlpha(0, 0, transitionOnlineText.getMeasuredWidth(), transitionOnlineText.getMeasuredHeight(), (int) (255 * (1f - animationProgress)), Canvas.ALL_SAVE_FLAG);
                transitionOnlineText.draw(canvas);
                canvas.restore();
                canvas.restore();
                invalidate();
            }
        }
    };
    AndroidUtilities.updateViewVisibilityAnimated(avatarContainer2, true, 1f, false);
    frameLayout.addView(avatarContainer2, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.START, 0, 0, 0, 0));
    avatarContainer.setPivotX(0);
    avatarContainer.setPivotY(0);
    avatarContainer2.addView(avatarContainer, LayoutHelper.createFrame(42, 42, Gravity.TOP | Gravity.LEFT, 64, 0, 0, 0));
    avatarImage = new AvatarImageView(context) {

        @Override
        public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
            super.onInitializeAccessibilityNodeInfo(info);
            if (getImageReceiver().hasNotThumb()) {
                info.setText(LocaleController.getString("AccDescrProfilePicture", R.string.AccDescrProfilePicture));
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    info.addAction(new AccessibilityNodeInfo.AccessibilityAction(AccessibilityNodeInfo.ACTION_CLICK, LocaleController.getString("Open", R.string.Open)));
                    info.addAction(new AccessibilityNodeInfo.AccessibilityAction(AccessibilityNodeInfo.ACTION_LONG_CLICK, LocaleController.getString("AccDescrOpenInPhotoViewer", R.string.AccDescrOpenInPhotoViewer)));
                }
            } else {
                info.setVisibleToUser(false);
            }
        }
    };
    avatarImage.getImageReceiver().setAllowDecodeSingleFrame(true);
    avatarImage.setRoundRadius(AndroidUtilities.dp(21));
    avatarImage.setPivotX(0);
    avatarImage.setPivotY(0);
    avatarContainer.addView(avatarImage, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    avatarImage.setOnClickListener(v -> {
        if (avatarBig != null) {
            return;
        }
        if (!AndroidUtilities.isTablet() && !isInLandscapeMode && avatarImage.getImageReceiver().hasNotThumb()) {
            openingAvatar = true;
            allowPullingDown = true;
            View child = null;
            for (int i = 0; i < listView.getChildCount(); i++) {
                if (listView.getChildAdapterPosition(listView.getChildAt(i)) == 0) {
                    child = listView.getChildAt(i);
                    break;
                }
            }
            if (child != null) {
                RecyclerView.ViewHolder holder = listView.findContainingViewHolder(child);
                if (holder != null) {
                    Integer offset = positionToOffset.get(holder.getAdapterPosition());
                    if (offset != null) {
                        listView.smoothScrollBy(0, -(offset + (listView.getPaddingTop() - child.getTop() - actionBar.getMeasuredHeight())), CubicBezierInterpolator.EASE_OUT_QUINT);
                        return;
                    }
                }
            }
        }
        openAvatar();
    });
    avatarImage.setOnLongClickListener(v -> {
        if (avatarBig != null) {
            return false;
        }
        openAvatar();
        return false;
    });
    avatarProgressView = new RadialProgressView(context) {

        private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

        {
            paint.setColor(0x55000000);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            if (avatarImage != null && avatarImage.getImageReceiver().hasNotThumb()) {
                paint.setAlpha((int) (0x55 * avatarImage.getImageReceiver().getCurrentAlpha()));
                canvas.drawCircle(getMeasuredWidth() / 2.0f, getMeasuredHeight() / 2.0f, getMeasuredWidth() / 2.0f, paint);
            }
            super.onDraw(canvas);
        }
    };
    avatarProgressView.setSize(AndroidUtilities.dp(26));
    avatarProgressView.setProgressColor(0xffffffff);
    avatarProgressView.setNoProgress(false);
    avatarContainer.addView(avatarProgressView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    timeItem = new ImageView(context);
    timeItem.setPadding(AndroidUtilities.dp(10), AndroidUtilities.dp(10), AndroidUtilities.dp(5), AndroidUtilities.dp(5));
    timeItem.setScaleType(ImageView.ScaleType.CENTER);
    timeItem.setAlpha(0.0f);
    timeItem.setImageDrawable(timerDrawable = new TimerDrawable(context));
    frameLayout.addView(timeItem, LayoutHelper.createFrame(34, 34, Gravity.TOP | Gravity.LEFT));
    updateTimeItem();
    showAvatarProgress(false, false);
    if (avatarsViewPager != null) {
        avatarsViewPager.onDestroy();
    }
    overlaysView = new OverlaysView(context);
    avatarsViewPager = new ProfileGalleryView(context, userId != 0 ? userId : -chatId, actionBar, listView, avatarImage, getClassGuid(), overlaysView);
    avatarsViewPager.setChatInfo(chatInfo);
    avatarContainer2.addView(avatarsViewPager);
    avatarContainer2.addView(overlaysView);
    avatarImage.setAvatarsViewPager(avatarsViewPager);
    avatarsViewPagerIndicatorView = new PagerIndicatorView(context);
    avatarContainer2.addView(avatarsViewPagerIndicatorView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    frameLayout.addView(actionBar);
    for (int a = 0; a < nameTextView.length; a++) {
        if (playProfileAnimation == 0 && a == 0) {
            continue;
        }
        nameTextView[a] = new SimpleTextView(context);
        if (a == 1) {
            nameTextView[a].setTextColor(Theme.getColor(Theme.key_profile_title));
        } else {
            nameTextView[a].setTextColor(Theme.getColor(Theme.key_actionBarDefaultTitle));
        }
        nameTextView[a].setTextSize(18);
        nameTextView[a].setGravity(Gravity.LEFT);
        nameTextView[a].setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
        nameTextView[a].setLeftDrawableTopPadding(-AndroidUtilities.dp(1.3f));
        nameTextView[a].setPivotX(0);
        nameTextView[a].setPivotY(0);
        nameTextView[a].setAlpha(a == 0 ? 0.0f : 1.0f);
        if (a == 1) {
            nameTextView[a].setScrollNonFitText(true);
            nameTextView[a].setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
        }
        int rightMargin = a == 0 ? (48 + ((callItemVisible && userId != 0) ? 48 : 0)) : 0;
        avatarContainer2.addView(nameTextView[a], LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 118, 0, rightMargin, 0));
    }
    for (int a = 0; a < onlineTextView.length; a++) {
        onlineTextView[a] = new SimpleTextView(context);
        onlineTextView[a].setTextColor(Theme.getColor(Theme.key_avatar_subtitleInProfileBlue));
        onlineTextView[a].setTextSize(14);
        onlineTextView[a].setGravity(Gravity.LEFT);
        onlineTextView[a].setAlpha(a == 0 || a == 2 ? 0.0f : 1.0f);
        if (a > 0) {
            onlineTextView[a].setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
        }
        avatarContainer2.addView(onlineTextView[a], LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 118, 0, a == 0 ? 48 : 8, 0));
    }
    mediaCounterTextView = new AudioPlayerAlert.ClippingTextViewSwitcher(context) {

        @Override
        protected TextView createTextView() {
            TextView textView = new TextView(context);
            textView.setTextColor(Theme.getColor(Theme.key_player_actionBarSubtitle));
            textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
            textView.setSingleLine(true);
            textView.setEllipsize(TextUtils.TruncateAt.END);
            textView.setGravity(Gravity.LEFT);
            return textView;
        }
    };
    mediaCounterTextView.setAlpha(0.0f);
    avatarContainer2.addView(mediaCounterTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 118, 0, 8, 0));
    updateProfileData();
    writeButton = new RLottieImageView(context);
    Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow_profile).mutate();
    shadowDrawable.setColorFilter(new PorterDuffColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY));
    CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_profile_actionBackground), Theme.getColor(Theme.key_profile_actionPressedBackground)), 0, 0);
    combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56));
    writeButton.setBackground(combinedDrawable);
    if (userId != 0) {
        if (imageUpdater != null) {
            cameraDrawable = new RLottieDrawable(R.raw.camera_outline, "" + R.raw.camera_outline, AndroidUtilities.dp(56), AndroidUtilities.dp(56), false, null);
            writeButton.setAnimation(cameraDrawable);
            writeButton.setContentDescription(LocaleController.getString("AccDescrChangeProfilePicture", R.string.AccDescrChangeProfilePicture));
            writeButton.setPadding(AndroidUtilities.dp(2), 0, 0, AndroidUtilities.dp(2));
        } else {
            writeButton.setImageResource(R.drawable.profile_newmsg);
            writeButton.setContentDescription(LocaleController.getString("AccDescrOpenChat", R.string.AccDescrOpenChat));
        }
    } else {
        writeButton.setImageResource(R.drawable.profile_discuss);
        writeButton.setContentDescription(LocaleController.getString("ViewDiscussion", R.string.ViewDiscussion));
    }
    writeButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_profile_actionIcon), PorterDuff.Mode.MULTIPLY));
    writeButton.setScaleType(ImageView.ScaleType.CENTER);
    frameLayout.addView(writeButton, LayoutHelper.createFrame(60, 60, Gravity.RIGHT | Gravity.TOP, 0, 0, 16, 0));
    writeButton.setOnClickListener(v -> {
        if (writeButton.getTag() != null) {
            return;
        }
        onWriteButtonClick();
    });
    needLayout(false);
    if (scrollTo != -1) {
        if (writeButtonTag != null) {
            writeButton.setTag(0);
            writeButton.setScaleX(0.2f);
            writeButton.setScaleY(0.2f);
            writeButton.setAlpha(0.0f);
        }
    }
    listView.setOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
                AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
            }
            if (openingAvatar && newState != RecyclerView.SCROLL_STATE_SETTLING) {
                openingAvatar = false;
            }
            if (searchItem != null) {
                scrolling = newState != RecyclerView.SCROLL_STATE_IDLE;
                searchItem.setEnabled(!scrolling && !isPulledDown);
            }
            sharedMediaLayout.scrollingByUser = listView.scrollingByUser;
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            if (fwdRestrictedHint != null) {
                fwdRestrictedHint.hide();
            }
            checkListViewScroll();
            if (participantsMap != null && !usersEndReached && layoutManager.findLastVisibleItemPosition() > membersEndRow - 8) {
                getChannelParticipants(false);
            }
            sharedMediaLayout.setPinnedToTop(sharedMediaLayout.getY() == 0);
        }
    });
    undoView = new UndoView(context);
    frameLayout.addView(undoView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT, 8, 0, 8, 8));
    expandAnimator = ValueAnimator.ofFloat(0f, 1f);
    expandAnimator.addUpdateListener(anim -> {
        final int newTop = ActionBar.getCurrentActionBarHeight() + (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0);
        final float value = AndroidUtilities.lerp(expandAnimatorValues, currentExpanAnimatorFracture = anim.getAnimatedFraction());
        avatarContainer.setScaleX(avatarScale);
        avatarContainer.setScaleY(avatarScale);
        avatarContainer.setTranslationX(AndroidUtilities.lerp(avatarX, 0f, value));
        avatarContainer.setTranslationY(AndroidUtilities.lerp((float) Math.ceil(avatarY), 0f, value));
        avatarImage.setRoundRadius((int) AndroidUtilities.lerp(AndroidUtilities.dpf2(21f), 0f, value));
        if (searchItem != null) {
            searchItem.setAlpha(1.0f - value);
            searchItem.setScaleY(1.0f - value);
            searchItem.setVisibility(View.VISIBLE);
            searchItem.setClickable(searchItem.getAlpha() > .5f);
            if (qrItem != null) {
                float translation = AndroidUtilities.dp(48) * value;
                // if (searchItem.getVisibility() == View.VISIBLE)
                // translation += AndroidUtilities.dp(48);
                qrItem.setTranslationX(translation);
                avatarsViewPagerIndicatorView.setTranslationX(translation - AndroidUtilities.dp(48));
            }
        }
        if (extraHeight > AndroidUtilities.dp(88f) && expandProgress < 0.33f) {
            refreshNameAndOnlineXY();
        }
        if (scamDrawable != null) {
            scamDrawable.setColor(ColorUtils.blendARGB(Theme.getColor(Theme.key_avatar_subtitleInProfileBlue), Color.argb(179, 255, 255, 255), value));
        }
        if (lockIconDrawable != null) {
            lockIconDrawable.setColorFilter(ColorUtils.blendARGB(Theme.getColor(Theme.key_chat_lockIcon), Color.WHITE, value), PorterDuff.Mode.MULTIPLY);
        }
        if (verifiedCrossfadeDrawable != null) {
            verifiedCrossfadeDrawable.setProgress(value);
        }
        final float k = AndroidUtilities.dpf2(8f);
        final float nameTextViewXEnd = AndroidUtilities.dpf2(16f) - nameTextView[1].getLeft();
        final float nameTextViewYEnd = newTop + extraHeight - AndroidUtilities.dpf2(38f) - nameTextView[1].getBottom();
        final float nameTextViewCx = k + nameX + (nameTextViewXEnd - nameX) / 2f;
        final float nameTextViewCy = k + nameY + (nameTextViewYEnd - nameY) / 2f;
        final float nameTextViewX = (1 - value) * (1 - value) * nameX + 2 * (1 - value) * value * nameTextViewCx + value * value * nameTextViewXEnd;
        final float nameTextViewY = (1 - value) * (1 - value) * nameY + 2 * (1 - value) * value * nameTextViewCy + value * value * nameTextViewYEnd;
        final float onlineTextViewXEnd = AndroidUtilities.dpf2(16f) - onlineTextView[1].getLeft();
        final float onlineTextViewYEnd = newTop + extraHeight - AndroidUtilities.dpf2(18f) - onlineTextView[1].getBottom();
        final float onlineTextViewCx = k + onlineX + (onlineTextViewXEnd - onlineX) / 2f;
        final float onlineTextViewCy = k + onlineY + (onlineTextViewYEnd - onlineY) / 2f;
        final float onlineTextViewX = (1 - value) * (1 - value) * onlineX + 2 * (1 - value) * value * onlineTextViewCx + value * value * onlineTextViewXEnd;
        final float onlineTextViewY = (1 - value) * (1 - value) * onlineY + 2 * (1 - value) * value * onlineTextViewCy + value * value * onlineTextViewYEnd;
        nameTextView[1].setTranslationX(nameTextViewX);
        nameTextView[1].setTranslationY(nameTextViewY);
        onlineTextView[1].setTranslationX(onlineTextViewX);
        onlineTextView[1].setTranslationY(onlineTextViewY);
        mediaCounterTextView.setTranslationX(onlineTextViewX);
        mediaCounterTextView.setTranslationY(onlineTextViewY);
        final Object onlineTextViewTag = onlineTextView[1].getTag();
        int statusColor;
        if (onlineTextViewTag instanceof String) {
            statusColor = Theme.getColor((String) onlineTextViewTag);
        } else {
            statusColor = Theme.getColor(Theme.key_avatar_subtitleInProfileBlue);
        }
        onlineTextView[1].setTextColor(ColorUtils.blendARGB(statusColor, Color.argb(179, 255, 255, 255), value));
        if (extraHeight > AndroidUtilities.dp(88f)) {
            nameTextView[1].setPivotY(AndroidUtilities.lerp(0, nameTextView[1].getMeasuredHeight(), value));
            nameTextView[1].setScaleX(AndroidUtilities.lerp(1.12f, 1.67f, value));
            nameTextView[1].setScaleY(AndroidUtilities.lerp(1.12f, 1.67f, value));
        }
        needLayoutText(Math.min(1f, extraHeight / AndroidUtilities.dp(88f)));
        nameTextView[1].setTextColor(ColorUtils.blendARGB(Theme.getColor(Theme.key_profile_title), Color.WHITE, value));
        actionBar.setItemsColor(ColorUtils.blendARGB(Theme.getColor(Theme.key_actionBarDefaultIcon), Color.WHITE, value), false);
        avatarImage.setForegroundAlpha(value);
        final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) avatarContainer.getLayoutParams();
        params.width = (int) AndroidUtilities.lerp(AndroidUtilities.dpf2(42f), listView.getMeasuredWidth() / avatarScale, value);
        params.height = (int) AndroidUtilities.lerp(AndroidUtilities.dpf2(42f), (extraHeight + newTop) / avatarScale, value);
        params.leftMargin = (int) AndroidUtilities.lerp(AndroidUtilities.dpf2(64f), 0f, value);
        avatarContainer.requestLayout();
    });
    expandAnimator.setInterpolator(CubicBezierInterpolator.EASE_BOTH);
    expandAnimator.addListener(new AnimatorListenerAdapter() {

        @Override
        public void onAnimationStart(Animator animation) {
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            actionBar.setItemsBackgroundColor(isPulledDown ? Theme.ACTION_BAR_WHITE_SELECTOR_COLOR : Theme.getColor(Theme.key_avatar_actionBarSelectorBlue), false);
            avatarImage.clearForeground();
            doNotSetForeground = false;
        }
    });
    updateRowsIds();
    updateSelectedMediaTabText();
    fwdRestrictedHint = new HintView(getParentActivity(), 9);
    fwdRestrictedHint.setAlpha(0);
    frameLayout.addView(fwdRestrictedHint, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 12, 0, 12, 0));
    sharedMediaLayout.setForwardRestrictedHint(fwdRestrictedHint);
    ViewGroup decorView;
    if (Build.VERSION.SDK_INT >= 21) {
        decorView = (ViewGroup) getParentActivity().getWindow().getDecorView();
    } else {
        decorView = frameLayout;
    }
    pinchToZoomHelper = new PinchToZoomHelper(decorView, frameLayout) {

        Paint statusBarPaint;

        @Override
        protected void invalidateViews() {
            super.invalidateViews();
            fragmentView.invalidate();
            for (int i = 0; i < avatarsViewPager.getChildCount(); i++) {
                avatarsViewPager.getChildAt(i).invalidate();
            }
            if (writeButton != null) {
                writeButton.invalidate();
            }
        }

        @Override
        protected void drawOverlays(Canvas canvas, float alpha, float parentOffsetX, float parentOffsetY, float clipTop, float clipBottom) {
            if (alpha > 0) {
                AndroidUtilities.rectTmp.set(0, 0, avatarsViewPager.getMeasuredWidth(), avatarsViewPager.getMeasuredHeight() + AndroidUtilities.dp(30));
                canvas.saveLayerAlpha(AndroidUtilities.rectTmp, (int) (255 * alpha), Canvas.ALL_SAVE_FLAG);
                avatarContainer2.draw(canvas);
                if (actionBar.getOccupyStatusBar()) {
                    if (statusBarPaint == null) {
                        statusBarPaint = new Paint();
                        statusBarPaint.setColor(ColorUtils.setAlphaComponent(Color.BLACK, (int) (255 * 0.2f)));
                    }
                    canvas.drawRect(actionBar.getX(), actionBar.getY(), actionBar.getX() + actionBar.getMeasuredWidth(), actionBar.getY() + AndroidUtilities.statusBarHeight, statusBarPaint);
                }
                canvas.save();
                canvas.translate(actionBar.getX(), actionBar.getY());
                actionBar.draw(canvas);
                canvas.restore();
                if (writeButton != null && writeButton.getVisibility() == View.VISIBLE && writeButton.getAlpha() > 0) {
                    canvas.save();
                    float s = 0.5f + 0.5f * alpha;
                    canvas.scale(s, s, writeButton.getX() + writeButton.getMeasuredWidth() / 2f, writeButton.getY() + writeButton.getMeasuredHeight() / 2f);
                    canvas.translate(writeButton.getX(), writeButton.getY());
                    writeButton.draw(canvas);
                    canvas.restore();
                }
                canvas.restore();
            }
        }

        @Override
        protected boolean zoomEnabled(View child, ImageReceiver receiver) {
            if (!super.zoomEnabled(child, receiver)) {
                return false;
            }
            return listView.getScrollState() != RecyclerView.SCROLL_STATE_DRAGGING;
        }
    };
    pinchToZoomHelper.setCallback(new PinchToZoomHelper.Callback() {

        @Override
        public void onZoomStarted(MessageObject messageObject) {
            listView.cancelClickRunnables(true);
            if (sharedMediaLayout != null && sharedMediaLayout.getCurrentListView() != null) {
                sharedMediaLayout.getCurrentListView().cancelClickRunnables(true);
            }
            Bitmap bitmap = pinchToZoomHelper.getPhotoImage() == null ? null : pinchToZoomHelper.getPhotoImage().getBitmap();
            if (bitmap != null) {
                topView.setBackgroundColor(ColorUtils.blendARGB(AndroidUtilities.calcBitmapColor(bitmap), Theme.getColor(Theme.key_windowBackgroundWhite), 0.1f));
            }
        }
    });
    avatarsViewPager.setPinchToZoomHelper(pinchToZoomHelper);
    scrimPaint.setAlpha(0);
    actionBarBackgroundPaint.setColor(Theme.getColor(Theme.key_listSelector));
    return fragmentView;
}
Also used : AlertDialog(org.telegram.ui.ActionBar.AlertDialog) Arrays(java.util.Arrays) Bundle(android.os.Bundle) BufferedInputStream(java.io.BufferedInputStream) SettingsSuggestionCell(org.telegram.ui.Cells.SettingsSuggestionCell) Uri(android.net.Uri) FrameLayout(android.widget.FrameLayout) ImageView(android.widget.ImageView) AnimatedFileDrawable(org.telegram.ui.Components.AnimatedFileDrawable) ColorDrawable(android.graphics.drawable.ColorDrawable) Drawable(android.graphics.drawable.Drawable) Property(android.util.Property) AvatarDrawable(org.telegram.ui.Components.AvatarDrawable) RadialProgressView(org.telegram.ui.Components.RadialProgressView) Manifest(android.Manifest) Keep(androidx.annotation.Keep) ChatThemeController(org.telegram.messenger.ChatThemeController) ProfileGalleryView(org.telegram.ui.Components.ProfileGalleryView) NotificationsCheckCell(org.telegram.ui.Cells.NotificationsCheckCell) Display(android.view.Display) Canvas(android.graphics.Canvas) ForegroundColorSpan(android.text.style.ForegroundColorSpan) ContextCompat(androidx.core.content.ContextCompat) NotificationsController(org.telegram.messenger.NotificationsController) ViewCompat(androidx.core.view.ViewCompat) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) BackButtonMenu(org.telegram.ui.Components.BackButtonMenu) UndoView(org.telegram.ui.Components.UndoView) AnimationProperties(org.telegram.ui.Components.AnimationProperties) Set(java.util.Set) AnimatorListenerAdapter(android.animation.AnimatorListenerAdapter) NotificationCenter(org.telegram.messenger.NotificationCenter) HapticFeedbackConstants(android.view.HapticFeedbackConstants) CountDownLatch(java.util.concurrent.CountDownLatch) TextPaint(android.text.TextPaint) HintView(org.telegram.ui.Components.HintView) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter) Paint(android.graphics.Paint) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) DividerCell(org.telegram.ui.Cells.DividerCell) StickerEmptyView(org.telegram.ui.Components.StickerEmptyView) FileLoader(org.telegram.messenger.FileLoader) ZipOutputStream(java.util.zip.ZipOutputStream) ViewPager(androidx.viewpager.widget.ViewPager) Dialog(android.app.Dialog) SystemClock(android.os.SystemClock) TimerDrawable(org.telegram.ui.Components.TimerDrawable) SettingsSearchCell(org.telegram.ui.Cells.SettingsSearchCell) AlertsCreator(org.telegram.ui.Components.AlertsCreator) TextInfoPrivacyCell(org.telegram.ui.Cells.TextInfoPrivacyCell) BufferedOutputStream(java.io.BufferedOutputStream) ArrayList(java.util.ArrayList) SpannableStringBuilder(android.text.SpannableStringBuilder) SharedMediaLayout(org.telegram.ui.Components.SharedMediaLayout) FragmentContextView(org.telegram.ui.Components.FragmentContextView) TLRPC(org.telegram.tgnet.TLRPC) GradientDrawable(android.graphics.drawable.GradientDrawable) Toast(android.widget.Toast) PhoneFormat(org.telegram.PhoneFormat.PhoneFormat) IdenticonDrawable(org.telegram.ui.Components.IdenticonDrawable) BuildConfig(org.telegram.messenger.BuildConfig) AccelerateInterpolator(android.view.animation.AccelerateInterpolator) LinkedHashSet(java.util.LinkedHashSet) SimpleTextView(org.telegram.ui.ActionBar.SimpleTextView) ActionBarMenu(org.telegram.ui.ActionBar.ActionBarMenu) UserCell(org.telegram.ui.Cells.UserCell) R(org.telegram.messenger.R) FileOutputStream(java.io.FileOutputStream) TextUtils(android.text.TextUtils) AboutLinkCell(org.telegram.ui.Cells.AboutLinkCell) File(java.io.File) Gravity(android.view.Gravity) UserObject(org.telegram.messenger.UserObject) SharedPreferences(android.content.SharedPreferences) TypedValue(android.util.TypedValue) ContactsController(org.telegram.messenger.ContactsController) GraySectionCell(org.telegram.ui.Cells.GraySectionCell) Configuration(android.content.res.Configuration) ColorUtils(androidx.core.graphics.ColorUtils) ChatObject(org.telegram.messenger.ChatObject) AlertDialog(org.telegram.ui.ActionBar.AlertDialog) AudioPlayerAlert(org.telegram.ui.Components.AudioPlayerAlert) VoIPHelper(org.telegram.ui.Components.voip.VoIPHelper) EditText(android.widget.EditText) ValueAnimator(android.animation.ValueAnimator) ThemeDescription(org.telegram.ui.ActionBar.ThemeDescription) Rect(android.graphics.Rect) ActionBarMenuItem(org.telegram.ui.ActionBar.ActionBarMenuItem) ImageUpdater(org.telegram.ui.Components.ImageUpdater) PackageManager(android.content.pm.PackageManager) WindowManager(android.view.WindowManager) AndroidUtilities(org.telegram.messenger.AndroidUtilities) CubicBezierInterpolator(org.telegram.ui.Components.CubicBezierInterpolator) CrossfadeDrawable(org.telegram.ui.Components.CrossfadeDrawable) Animator(android.animation.Animator) ShadowSectionCell(org.telegram.ui.Cells.ShadowSectionCell) ApplicationLoader(org.telegram.messenger.ApplicationLoader) TextCell(org.telegram.ui.Cells.TextCell) Locale(java.util.Locale) MediaController(org.telegram.messenger.MediaController) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) DataSetObserver(android.database.DataSetObserver) ZipEntry(java.util.zip.ZipEntry) RectF(android.graphics.RectF) ImageLoader(org.telegram.messenger.ImageLoader) Utilities(org.telegram.messenger.Utilities) DiffUtil(androidx.recyclerview.widget.DiffUtil) RLottieImageView(org.telegram.ui.Components.RLottieImageView) ObjectAnimator(android.animation.ObjectAnimator) ImageLocation(org.telegram.messenger.ImageLocation) BaseFragment(org.telegram.ui.ActionBar.BaseFragment) PorterDuff(android.graphics.PorterDuff) ConnectionsManager(org.telegram.tgnet.ConnectionsManager) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) ViewGroup(android.view.ViewGroup) DefaultItemAnimator(androidx.recyclerview.widget.DefaultItemAnimator) UserConfig(org.telegram.messenger.UserConfig) TextView(android.widget.TextView) ScamDrawable(org.telegram.ui.Components.ScamDrawable) FileProvider(androidx.core.content.FileProvider) DecelerateInterpolator(android.view.animation.DecelerateInterpolator) ActionBarPopupWindow(org.telegram.ui.ActionBar.ActionBarPopupWindow) Typeface(android.graphics.Typeface) NestedScrollingParentHelper(androidx.core.view.NestedScrollingParentHelper) Context(android.content.Context) AccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo) Spanned(android.text.Spanned) SparseIntArray(android.util.SparseIntArray) Theme(org.telegram.ui.ActionBar.Theme) TextDetailCell(org.telegram.ui.Cells.TextDetailCell) PagerAdapter(androidx.viewpager.widget.PagerAdapter) BulletinFactory(org.telegram.ui.Components.BulletinFactory) Intent(android.content.Intent) LocaleController(org.telegram.messenger.LocaleController) HashMap(java.util.HashMap) ActionBarLayout(org.telegram.ui.ActionBar.ActionBarLayout) HeaderCell(org.telegram.ui.Cells.HeaderCell) PackageInfo(android.content.pm.PackageInfo) HashSet(java.util.HashSet) VelocityTracker(android.view.VelocityTracker) MotionEvent(android.view.MotionEvent) NestedScrollingParent3(androidx.core.view.NestedScrollingParent3) ActionBar(org.telegram.ui.ActionBar.ActionBar) TLObject(org.telegram.tgnet.TLObject) AnimatorSet(android.animation.AnimatorSet) MessageObject(org.telegram.messenger.MessageObject) SharedConfig(org.telegram.messenger.SharedConfig) BuildVars(org.telegram.messenger.BuildVars) MediaDataController(org.telegram.messenger.MediaDataController) Build(android.os.Build) SerializedData(org.telegram.tgnet.SerializedData) DialogInterface(android.content.DialogInterface) Browser(org.telegram.messenger.browser.Browser) ChatAvatarContainer(org.telegram.ui.Components.ChatAvatarContainer) LongSparseArray(androidx.collection.LongSparseArray) DialogObject(org.telegram.messenger.DialogObject) BackupImageView(org.telegram.ui.Components.BackupImageView) Point(android.graphics.Point) LayoutHelper(org.telegram.ui.Components.LayoutHelper) FileInputStream(java.io.FileInputStream) FileLog(org.telegram.messenger.FileLog) MessagesController(org.telegram.messenger.MessagesController) Color(android.graphics.Color) Bitmap(android.graphics.Bitmap) ViewTreeObserver(android.view.ViewTreeObserver) Comparator(java.util.Comparator) ImageReceiver(org.telegram.messenger.ImageReceiver) Collections(java.util.Collections) RecyclerListView(org.telegram.ui.Components.RecyclerListView) RLottieDrawable(org.telegram.ui.Components.RLottieDrawable) ArrayList(java.util.ArrayList) AboutLinkCell(org.telegram.ui.Cells.AboutLinkCell) DefaultItemAnimator(androidx.recyclerview.widget.DefaultItemAnimator) EditText(android.widget.EditText) AnimatedFileDrawable(org.telegram.ui.Components.AnimatedFileDrawable) ColorDrawable(android.graphics.drawable.ColorDrawable) Drawable(android.graphics.drawable.Drawable) AvatarDrawable(org.telegram.ui.Components.AvatarDrawable) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) TimerDrawable(org.telegram.ui.Components.TimerDrawable) GradientDrawable(android.graphics.drawable.GradientDrawable) IdenticonDrawable(org.telegram.ui.Components.IdenticonDrawable) CrossfadeDrawable(org.telegram.ui.Components.CrossfadeDrawable) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) ScamDrawable(org.telegram.ui.Components.ScamDrawable) RLottieDrawable(org.telegram.ui.Components.RLottieDrawable) UserConfig(org.telegram.messenger.UserConfig) SimpleTextView(org.telegram.ui.ActionBar.SimpleTextView) UserObject(org.telegram.messenger.UserObject) ChatObject(org.telegram.messenger.ChatObject) TLObject(org.telegram.tgnet.TLObject) MessageObject(org.telegram.messenger.MessageObject) DialogObject(org.telegram.messenger.DialogObject) Set(java.util.Set) LinkedHashSet(java.util.LinkedHashSet) HashSet(java.util.HashSet) AnimatorSet(android.animation.AnimatorSet) ProfileGalleryView(org.telegram.ui.Components.ProfileGalleryView) MessagesController(org.telegram.messenger.MessagesController) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter) RecyclerListView(org.telegram.ui.Components.RecyclerListView) ImageLocation(org.telegram.messenger.ImageLocation) UndoView(org.telegram.ui.Components.UndoView) VelocityTracker(android.view.VelocityTracker) SharedPreferences(android.content.SharedPreferences) AccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo) Intent(android.content.Intent) ValueAnimator(android.animation.ValueAnimator) Animator(android.animation.Animator) ObjectAnimator(android.animation.ObjectAnimator) DefaultItemAnimator(androidx.recyclerview.widget.DefaultItemAnimator) RecyclerView(androidx.recyclerview.widget.RecyclerView) SpannableStringBuilder(android.text.SpannableStringBuilder) RLottieDrawable(org.telegram.ui.Components.RLottieDrawable) ValueAnimator(android.animation.ValueAnimator) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) TLRPC(org.telegram.tgnet.TLRPC) BaseFragment(org.telegram.ui.ActionBar.BaseFragment) ImageReceiver(org.telegram.messenger.ImageReceiver) SimpleTextView(org.telegram.ui.ActionBar.SimpleTextView) TextView(android.widget.TextView) ImageView(android.widget.ImageView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) BackupImageView(org.telegram.ui.Components.BackupImageView) ActionBar(org.telegram.ui.ActionBar.ActionBar) RadialProgressView(org.telegram.ui.Components.RadialProgressView) TimerDrawable(org.telegram.ui.Components.TimerDrawable) Canvas(android.graphics.Canvas) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) StickerEmptyView(org.telegram.ui.Components.StickerEmptyView) ActionBarMenu(org.telegram.ui.ActionBar.ActionBarMenu) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) File(java.io.File) AvatarDrawable(org.telegram.ui.Components.AvatarDrawable) SharedMediaLayout(org.telegram.ui.Components.SharedMediaLayout) RLottieImageView(org.telegram.ui.Components.RLottieImageView) AudioPlayerAlert(org.telegram.ui.Components.AudioPlayerAlert) Bitmap(android.graphics.Bitmap) AnimatorListenerAdapter(android.animation.AnimatorListenerAdapter) Bundle(android.os.Bundle) ViewGroup(android.view.ViewGroup) ImageView(android.widget.ImageView) RadialProgressView(org.telegram.ui.Components.RadialProgressView) ProfileGalleryView(org.telegram.ui.Components.ProfileGalleryView) UndoView(org.telegram.ui.Components.UndoView) HintView(org.telegram.ui.Components.HintView) StickerEmptyView(org.telegram.ui.Components.StickerEmptyView) FragmentContextView(org.telegram.ui.Components.FragmentContextView) SimpleTextView(org.telegram.ui.ActionBar.SimpleTextView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) TextView(android.widget.TextView) BackupImageView(org.telegram.ui.Components.BackupImageView) RecyclerListView(org.telegram.ui.Components.RecyclerListView) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) Point(android.graphics.Point) MotionEvent(android.view.MotionEvent) HintView(org.telegram.ui.Components.HintView) NotificationsCheckCell(org.telegram.ui.Cells.NotificationsCheckCell) FrameLayout(android.widget.FrameLayout) FragmentContextView(org.telegram.ui.Components.FragmentContextView) MessageObject(org.telegram.messenger.MessageObject)

Example 3 with RLottieImageView

use of org.telegram.ui.Components.RLottieImageView in project Telegram-FOSS by Telegram-FOSS-Team.

the class DialogsActivity method createView.

@Override
public View createView(final Context context) {
    searching = false;
    searchWas = false;
    pacmanAnimation = null;
    selectedDialogs.clear();
    maximumVelocity = ViewConfiguration.get(context).getScaledMaximumFlingVelocity();
    AndroidUtilities.runOnUIThread(() -> Theme.createChatResources(context, false));
    ActionBarMenu menu = actionBar.createMenu();
    if (!onlySelect && searchString == null && folderId == 0) {
        doneItem = new ActionBarMenuItem(context, null, Theme.getColor(Theme.key_actionBarDefaultSelector), Theme.getColor(Theme.key_actionBarDefaultIcon), true);
        doneItem.setText(LocaleController.getString("Done", R.string.Done).toUpperCase());
        actionBar.addView(doneItem, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.RIGHT, 0, 0, 10, 0));
        doneItem.setOnClickListener(v -> {
            filterTabsView.setIsEditing(false);
            showDoneItem(false);
        });
        doneItem.setAlpha(0.0f);
        doneItem.setVisibility(View.GONE);
        proxyDrawable = new ProxyDrawable(context);
        proxyItem = menu.addItem(2, proxyDrawable);
        proxyItem.setContentDescription(LocaleController.getString("ProxySettings", R.string.ProxySettings));
        passcodeDrawable = new RLottieDrawable(R.raw.passcode_lock_close, "passcode_lock_close", AndroidUtilities.dp(28), AndroidUtilities.dp(28), true, null);
        passcodeItem = menu.addItem(1, passcodeDrawable);
        passcodeItem.setContentDescription(LocaleController.getString("AccDescrPasscodeLock", R.string.AccDescrPasscodeLock));
        updatePasscodeButton();
        updateProxyButton(false);
    }
    searchItem = menu.addItem(0, R.drawable.ic_ab_search).setIsSearchField(true, true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() {

        @Override
        public void onSearchExpand() {
            searching = true;
            if (switchItem != null) {
                switchItem.setVisibility(View.GONE);
            }
            if (proxyItem != null && proxyItemVisible) {
                proxyItem.setVisibility(View.GONE);
            }
            if (viewPages[0] != null) {
                if (searchString != null) {
                    viewPages[0].listView.hide();
                    if (searchViewPager != null) {
                        searchViewPager.searchListView.show();
                    }
                }
                if (!onlySelect) {
                    floatingButtonContainer.setVisibility(View.GONE);
                }
            }
            setScrollY(0);
            updatePasscodeButton();
            actionBar.setBackButtonContentDescription(LocaleController.getString("AccDescrGoBack", R.string.AccDescrGoBack));
        }

        @Override
        public boolean canCollapseSearch() {
            if (switchItem != null) {
                switchItem.setVisibility(View.VISIBLE);
            }
            if (proxyItem != null && proxyItemVisible) {
                proxyItem.setVisibility(View.VISIBLE);
            }
            if (searchString != null) {
                finishFragment();
                return false;
            }
            return true;
        }

        @Override
        public void onSearchCollapse() {
            searching = false;
            searchWas = false;
            if (viewPages[0] != null) {
                viewPages[0].listView.setEmptyView(folderId == 0 ? viewPages[0].progressView : null);
                if (!onlySelect) {
                    floatingButtonContainer.setVisibility(View.VISIBLE);
                    floatingHidden = true;
                    floatingButtonTranslation = AndroidUtilities.dp(100);
                    floatingButtonHideProgress = 1f;
                    updateFloatingButtonOffset();
                }
                showSearch(false, true);
            }
            updatePasscodeButton();
            if (menuDrawable != null) {
                if (actionBar.getBackButton().getDrawable() != menuDrawable) {
                    actionBar.setBackButtonDrawable(menuDrawable);
                    menuDrawable.setRotation(0, true);
                }
                actionBar.setBackButtonContentDescription(LocaleController.getString("AccDescrOpenMenu", R.string.AccDescrOpenMenu));
            }
        }

        @Override
        public void onTextChanged(EditText editText) {
            String text = editText.getText().toString();
            if (text.length() != 0 || (searchViewPager.dialogsSearchAdapter != null && searchViewPager.dialogsSearchAdapter.hasRecentSearch()) || searchFiltersWasShowed) {
                searchWas = true;
                if (!searchIsShowed) {
                    showSearch(true, true);
                }
            }
            searchViewPager.onTextChanged(text);
        }

        @Override
        public void onSearchFilterCleared(FiltersView.MediaFilterData filterData) {
            if (!searchIsShowed) {
                return;
            }
            searchViewPager.removeSearchFilter(filterData);
            searchViewPager.onTextChanged(searchItem.getSearchField().getText().toString());
            updateFiltersView(true, null, null, false, true);
        }

        @Override
        public boolean canToggleSearch() {
            return !actionBar.isActionModeShowed() && databaseMigrationHint == null;
        }
    });
    searchItem.setSearchFieldHint(LocaleController.getString("Search", R.string.Search));
    searchItem.setContentDescription(LocaleController.getString("Search", R.string.Search));
    if (onlySelect) {
        actionBar.setBackButtonImage(R.drawable.ic_ab_back);
        if (initialDialogsType == 3 && selectAlertString == null) {
            actionBar.setTitle(LocaleController.getString("ForwardTo", R.string.ForwardTo));
        } else if (initialDialogsType == 10) {
            actionBar.setTitle(LocaleController.getString("SelectChats", R.string.SelectChats));
        } else {
            actionBar.setTitle(LocaleController.getString("SelectChat", R.string.SelectChat));
        }
        actionBar.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefault));
    } else {
        if (searchString != null || folderId != 0) {
            actionBar.setBackButtonDrawable(backDrawable = new BackDrawable(false));
        } else {
            actionBar.setBackButtonDrawable(menuDrawable = new MenuDrawable());
            actionBar.setBackButtonContentDescription(LocaleController.getString("AccDescrOpenMenu", R.string.AccDescrOpenMenu));
        }
        if (folderId != 0) {
            actionBar.setTitle(LocaleController.getString("ArchivedChats", R.string.ArchivedChats));
        } else {
            if (BuildVars.DEBUG_VERSION) {
                actionBar.setTitle("Telegram Beta");
            } else {
                actionBar.setTitle(LocaleController.getString("AppName", R.string.AppName));
            }
        }
        if (folderId == 0) {
            actionBar.setSupportsHolidayImage(true);
        }
    }
    if (!onlySelect) {
        actionBar.setAddToContainer(false);
        actionBar.setCastShadows(false);
        actionBar.setClipContent(true);
    }
    actionBar.setTitleActionRunnable(() -> {
        if (initialDialogsType != 10) {
            hideFloatingButton(false);
        }
        scrollToTop();
    });
    if (initialDialogsType == 0 && folderId == 0 && !onlySelect && TextUtils.isEmpty(searchString)) {
        scrimPaint = new Paint() {

            @Override
            public void setAlpha(int a) {
                super.setAlpha(a);
                if (fragmentView != null) {
                    fragmentView.invalidate();
                }
            }
        };
        filterTabsView = new FilterTabsView(context) {

            @Override
            public boolean onInterceptTouchEvent(MotionEvent ev) {
                getParent().requestDisallowInterceptTouchEvent(true);
                maybeStartTracking = false;
                return super.onInterceptTouchEvent(ev);
            }

            @Override
            public void setTranslationY(float translationY) {
                if (getTranslationY() != translationY) {
                    super.setTranslationY(translationY);
                    updateContextViewPosition();
                    if (fragmentView != null) {
                        fragmentView.invalidate();
                    }
                }
            }

            @Override
            protected void onLayout(boolean changed, int l, int t, int r, int b) {
                super.onLayout(changed, l, t, r, b);
                if (scrimView != null) {
                    scrimView.getLocationInWindow(scrimViewLocation);
                    fragmentView.invalidate();
                }
            }
        };
        filterTabsView.setVisibility(View.GONE);
        canShowFilterTabsView = false;
        filterTabsView.setDelegate(new FilterTabsView.FilterTabsViewDelegate() {

            private void showDeleteAlert(MessagesController.DialogFilter dialogFilter) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                builder.setTitle(LocaleController.getString("FilterDelete", R.string.FilterDelete));
                builder.setMessage(LocaleController.getString("FilterDeleteAlert", R.string.FilterDeleteAlert));
                builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialog2, which2) -> {
                    TLRPC.TL_messages_updateDialogFilter req = new TLRPC.TL_messages_updateDialogFilter();
                    req.id = dialogFilter.id;
                    getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
                    }));
                    // if (getMessagesController().dialogFilters.size() > 1) {
                    // filterTabsView.beginCrossfade();
                    // }
                    getMessagesController().removeFilter(dialogFilter);
                    getMessagesStorage().deleteDialogFilter(dialogFilter);
                // filterTabsView.commitCrossfade();
                });
                AlertDialog alertDialog = builder.create();
                showDialog(alertDialog);
                TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
                if (button != null) {
                    button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
                }
            }

            @Override
            public void onSamePageSelected() {
                scrollToTop();
            }

            @Override
            public void onPageReorder(int fromId, int toId) {
                for (int a = 0; a < viewPages.length; a++) {
                    if (viewPages[a].selectedType == fromId) {
                        viewPages[a].selectedType = toId;
                    } else if (viewPages[a].selectedType == toId) {
                        viewPages[a].selectedType = fromId;
                    }
                }
            }

            @Override
            public void onPageSelected(int id, boolean forward) {
                if (viewPages[0].selectedType == id) {
                    return;
                }
                ArrayList<MessagesController.DialogFilter> dialogFilters = getMessagesController().dialogFilters;
                if (id != Integer.MAX_VALUE && (id < 0 || id >= dialogFilters.size())) {
                    return;
                }
                if (parentLayout != null) {
                    parentLayout.getDrawerLayoutContainer().setAllowOpenDrawerBySwipe(id == filterTabsView.getFirstTabId() || SharedConfig.getChatSwipeAction(currentAccount) != SwipeGestureSettingsView.SWIPE_GESTURE_FOLDERS);
                }
                viewPages[1].selectedType = id;
                viewPages[1].setVisibility(View.VISIBLE);
                viewPages[1].setTranslationX(viewPages[0].getMeasuredWidth());
                showScrollbars(false);
                switchToCurrentSelectedMode(true);
                animatingForward = forward;
            }

            @Override
            public boolean canPerformActions() {
                return !searching;
            }

            @Override
            public void onPageScrolled(float progress) {
                if (progress == 1 && viewPages[1].getVisibility() != View.VISIBLE && !searching) {
                    return;
                }
                if (animatingForward) {
                    viewPages[0].setTranslationX(-progress * viewPages[0].getMeasuredWidth());
                    viewPages[1].setTranslationX(viewPages[0].getMeasuredWidth() - progress * viewPages[0].getMeasuredWidth());
                } else {
                    viewPages[0].setTranslationX(progress * viewPages[0].getMeasuredWidth());
                    viewPages[1].setTranslationX(progress * viewPages[0].getMeasuredWidth() - viewPages[0].getMeasuredWidth());
                }
                if (progress == 1) {
                    ViewPage tempPage = viewPages[0];
                    viewPages[0] = viewPages[1];
                    viewPages[1] = tempPage;
                    viewPages[1].setVisibility(View.GONE);
                    showScrollbars(true);
                    updateCounters(false);
                    checkListLoad(viewPages[0]);
                    viewPages[0].dialogsAdapter.resume();
                    viewPages[1].dialogsAdapter.pause();
                }
            }

            @Override
            public int getTabCounter(int tabId) {
                if (tabId == Integer.MAX_VALUE) {
                    return getMessagesStorage().getMainUnreadCount();
                }
                ArrayList<MessagesController.DialogFilter> dialogFilters = getMessagesController().dialogFilters;
                if (tabId < 0 || tabId >= dialogFilters.size()) {
                    return 0;
                }
                return getMessagesController().dialogFilters.get(tabId).unreadCount;
            }

            @Override
            public boolean didSelectTab(FilterTabsView.TabView tabView, boolean selected) {
                if (actionBar.isActionModeShowed()) {
                    return false;
                }
                if (scrimPopupWindow != null) {
                    scrimPopupWindow.dismiss();
                    scrimPopupWindow = null;
                    scrimPopupWindowItems = null;
                    return false;
                }
                Rect rect = new Rect();
                MessagesController.DialogFilter dialogFilter;
                if (tabView.getId() == Integer.MAX_VALUE) {
                    dialogFilter = null;
                } else {
                    dialogFilter = getMessagesController().dialogFilters.get(tabView.getId());
                }
                ActionBarPopupWindow.ActionBarPopupWindowLayout popupLayout = new ActionBarPopupWindow.ActionBarPopupWindowLayout(getParentActivity());
                popupLayout.setOnTouchListener(new View.OnTouchListener() {

                    private int[] pos = new int[2];

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
                            if (scrimPopupWindow != null && scrimPopupWindow.isShowing()) {
                                View contentView = scrimPopupWindow.getContentView();
                                contentView.getLocationInWindow(pos);
                                rect.set(pos[0], pos[1], pos[0] + contentView.getMeasuredWidth(), pos[1] + contentView.getMeasuredHeight());
                                if (!rect.contains((int) event.getX(), (int) event.getY())) {
                                    scrimPopupWindow.dismiss();
                                }
                            }
                        } else if (event.getActionMasked() == MotionEvent.ACTION_OUTSIDE) {
                            if (scrimPopupWindow != null && scrimPopupWindow.isShowing()) {
                                scrimPopupWindow.dismiss();
                            }
                        }
                        return false;
                    }
                });
                popupLayout.setDispatchKeyEventListener(keyEvent -> {
                    if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK && keyEvent.getRepeatCount() == 0 && scrimPopupWindow != null && scrimPopupWindow.isShowing()) {
                        scrimPopupWindow.dismiss();
                    }
                });
                Rect backgroundPaddings = new Rect();
                Drawable shadowDrawable = getParentActivity().getResources().getDrawable(R.drawable.popup_fixed_alert).mutate();
                shadowDrawable.getPadding(backgroundPaddings);
                popupLayout.setBackgroundDrawable(shadowDrawable);
                popupLayout.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground));
                LinearLayout linearLayout = new LinearLayout(getParentActivity());
                ScrollView scrollView;
                if (Build.VERSION.SDK_INT >= 21) {
                    scrollView = new ScrollView(getParentActivity(), null, 0, R.style.scrollbarShapeStyle) {

                        @Override
                        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
                            setMeasuredDimension(linearLayout.getMeasuredWidth(), getMeasuredHeight());
                        }
                    };
                } else {
                    scrollView = new ScrollView(getParentActivity());
                }
                scrollView.setClipToPadding(false);
                popupLayout.addView(scrollView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT));
                linearLayout.setMinimumWidth(AndroidUtilities.dp(200));
                linearLayout.setOrientation(LinearLayout.VERTICAL);
                scrimPopupWindowItems = new ActionBarMenuSubItem[3];
                for (int a = 0, N = (tabView.getId() == Integer.MAX_VALUE ? 2 : 3); a < N; a++) {
                    ActionBarMenuSubItem cell = new ActionBarMenuSubItem(getParentActivity(), a == 0, a == N - 1);
                    if (a == 0) {
                        if (getMessagesController().dialogFilters.size() <= 1) {
                            continue;
                        }
                        cell.setTextAndIcon(LocaleController.getString("FilterReorder", R.string.FilterReorder), R.drawable.tabs_reorder);
                    } else if (a == 1) {
                        if (N == 2) {
                            cell.setTextAndIcon(LocaleController.getString("FilterEditAll", R.string.FilterEditAll), R.drawable.msg_edit);
                        } else {
                            cell.setTextAndIcon(LocaleController.getString("FilterEdit", R.string.FilterEdit), R.drawable.msg_edit);
                        }
                    } else {
                        cell.setTextAndIcon(LocaleController.getString("FilterDeleteItem", R.string.FilterDeleteItem), R.drawable.msg_delete);
                    }
                    scrimPopupWindowItems[a] = cell;
                    linearLayout.addView(cell);
                    final int i = a;
                    cell.setOnClickListener(v1 -> {
                        if (i == 0) {
                            resetScroll();
                            filterTabsView.setIsEditing(true);
                            showDoneItem(true);
                        } else if (i == 1) {
                            if (N == 2) {
                                presentFragment(new FiltersSetupActivity());
                            } else {
                                presentFragment(new FilterCreateActivity(dialogFilter));
                            }
                        } else if (i == 2) {
                            showDeleteAlert(dialogFilter);
                        }
                        if (scrimPopupWindow != null) {
                            scrimPopupWindow.dismiss();
                        }
                    });
                }
                scrollView.addView(linearLayout, LayoutHelper.createScroll(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP));
                scrimPopupWindow = new ActionBarPopupWindow(popupLayout, LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT) {

                    @Override
                    public void dismiss() {
                        super.dismiss();
                        if (scrimPopupWindow != this) {
                            return;
                        }
                        scrimPopupWindow = null;
                        scrimPopupWindowItems = null;
                        if (scrimAnimatorSet != null) {
                            scrimAnimatorSet.cancel();
                            scrimAnimatorSet = null;
                        }
                        scrimAnimatorSet = new AnimatorSet();
                        ArrayList<Animator> animators = new ArrayList<>();
                        animators.add(ObjectAnimator.ofInt(scrimPaint, AnimationProperties.PAINT_ALPHA, 0));
                        scrimAnimatorSet.playTogether(animators);
                        scrimAnimatorSet.setDuration(220);
                        scrimAnimatorSet.addListener(new AnimatorListenerAdapter() {

                            @Override
                            public void onAnimationEnd(Animator animation) {
                                if (scrimView != null) {
                                    scrimView.setBackground(null);
                                    scrimView = null;
                                }
                                if (fragmentView != null) {
                                    fragmentView.invalidate();
                                }
                            }
                        });
                        scrimAnimatorSet.start();
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                            getParentActivity().getWindow().getDecorView().setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
                        }
                    }
                };
                tabView.setBackground(Theme.createRoundRectDrawable(AndroidUtilities.dp(6), Theme.getColor(Theme.key_actionBarDefault)));
                scrimPopupWindow.setDismissAnimationDuration(220);
                scrimPopupWindow.setOutsideTouchable(true);
                scrimPopupWindow.setClippingEnabled(true);
                scrimPopupWindow.setAnimationStyle(R.style.PopupContextAnimation);
                scrimPopupWindow.setFocusable(true);
                popupLayout.measure(View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST));
                scrimPopupWindow.setInputMethodMode(ActionBarPopupWindow.INPUT_METHOD_NOT_NEEDED);
                scrimPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED);
                scrimPopupWindow.getContentView().setFocusableInTouchMode(true);
                tabView.getLocationInWindow(scrimViewLocation);
                int popupX = scrimViewLocation[0] + backgroundPaddings.left - AndroidUtilities.dp(16);
                if (popupX < AndroidUtilities.dp(6)) {
                    popupX = AndroidUtilities.dp(6);
                } else if (popupX > fragmentView.getMeasuredWidth() - AndroidUtilities.dp(6) - popupLayout.getMeasuredWidth()) {
                    popupX = fragmentView.getMeasuredWidth() - AndroidUtilities.dp(6) - popupLayout.getMeasuredWidth();
                }
                int popupY = scrimViewLocation[1] + tabView.getMeasuredHeight() - AndroidUtilities.dp(12);
                scrimPopupWindow.showAtLocation(fragmentView, Gravity.LEFT | Gravity.TOP, popupX, popupY);
                scrimView = tabView;
                scrimViewSelected = selected;
                fragmentView.invalidate();
                if (scrimAnimatorSet != null) {
                    scrimAnimatorSet.cancel();
                }
                scrimAnimatorSet = new AnimatorSet();
                ArrayList<Animator> animators = new ArrayList<>();
                animators.add(ObjectAnimator.ofInt(scrimPaint, AnimationProperties.PAINT_ALPHA, 0, 50));
                scrimAnimatorSet.playTogether(animators);
                scrimAnimatorSet.setDuration(150);
                scrimAnimatorSet.start();
                return true;
            }

            @Override
            public boolean isTabMenuVisible() {
                return scrimPopupWindow != null && scrimPopupWindow.isShowing();
            }

            @Override
            public void onDeletePressed(int id) {
                showDeleteAlert(getMessagesController().dialogFilters.get(id));
            }
        });
    }
    if (allowSwitchAccount && UserConfig.getActivatedAccountsCount() > 1) {
        switchItem = menu.addItemWithWidth(1, 0, AndroidUtilities.dp(56));
        AvatarDrawable avatarDrawable = new AvatarDrawable();
        avatarDrawable.setTextSize(AndroidUtilities.dp(12));
        BackupImageView imageView = new BackupImageView(context);
        imageView.setRoundRadius(AndroidUtilities.dp(18));
        switchItem.addView(imageView, LayoutHelper.createFrame(36, 36, Gravity.CENTER));
        TLRPC.User user = getUserConfig().getCurrentUser();
        avatarDrawable.setInfo(user);
        imageView.getImageReceiver().setCurrentAccount(currentAccount);
        imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user);
        for (int a = 0; a < UserConfig.MAX_ACCOUNT_COUNT; a++) {
            TLRPC.User u = AccountInstance.getInstance(a).getUserConfig().getCurrentUser();
            if (u != null) {
                AccountSelectCell cell = new AccountSelectCell(context, false);
                cell.setAccount(a, true);
                switchItem.addSubItem(10 + a, cell, AndroidUtilities.dp(230), AndroidUtilities.dp(48));
            }
        }
    }
    actionBar.setAllowOverlayTitle(true);
    if (sideMenu != null) {
        sideMenu.setBackgroundColor(Theme.getColor(Theme.key_chats_menuBackground));
        sideMenu.setGlowColor(Theme.getColor(Theme.key_chats_menuBackground));
        sideMenu.getAdapter().notifyDataSetChanged();
    }
    createActionMode(null);
    ContentView contentView = new ContentView(context);
    fragmentView = contentView;
    int pagesCount = folderId == 0 && initialDialogsType == 0 && !onlySelect ? 2 : 1;
    viewPages = new ViewPage[pagesCount];
    for (int a = 0; a < pagesCount; a++) {
        final ViewPage viewPage = new ViewPage(context) {

            @Override
            public void setTranslationX(float translationX) {
                super.setTranslationX(translationX);
                if (tabsAnimationInProgress) {
                    if (viewPages[0] == this) {
                        float scrollProgress = Math.abs(viewPages[0].getTranslationX()) / (float) viewPages[0].getMeasuredWidth();
                        filterTabsView.selectTabWithId(viewPages[1].selectedType, scrollProgress);
                    }
                }
            }
        };
        contentView.addView(viewPage, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
        viewPage.dialogsType = initialDialogsType;
        viewPages[a] = viewPage;
        viewPage.progressView = new FlickerLoadingView(context);
        viewPage.progressView.setViewType(FlickerLoadingView.DIALOG_CELL_TYPE);
        viewPage.progressView.setVisibility(View.GONE);
        viewPage.addView(viewPage.progressView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER));
        viewPage.listView = new DialogsRecyclerView(context, viewPage);
        viewPage.listView.setAccessibilityEnabled(false);
        viewPage.listView.setAnimateEmptyView(true, 0);
        viewPage.listView.setClipToPadding(false);
        viewPage.listView.setPivotY(0);
        viewPage.dialogsItemAnimator = new DialogsItemAnimator(viewPage.listView) {

            @Override
            public void onRemoveStarting(RecyclerView.ViewHolder item) {
                super.onRemoveStarting(item);
                if (viewPage.layoutManager.findFirstVisibleItemPosition() == 0) {
                    View v = viewPage.layoutManager.findViewByPosition(0);
                    if (v != null) {
                        v.invalidate();
                    }
                    if (viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) {
                        viewPage.archivePullViewState = ARCHIVE_ITEM_STATE_SHOWED;
                    }
                    if (viewPage.pullForegroundDrawable != null) {
                        viewPage.pullForegroundDrawable.doNotShow();
                    }
                }
            }

            @Override
            public void onRemoveFinished(RecyclerView.ViewHolder item) {
                if (dialogRemoveFinished == 2) {
                    dialogRemoveFinished = 1;
                }
            }

            @Override
            public void onAddFinished(RecyclerView.ViewHolder item) {
                if (dialogInsertFinished == 2) {
                    dialogInsertFinished = 1;
                }
            }

            @Override
            public void onChangeFinished(RecyclerView.ViewHolder item, boolean oldItem) {
                if (dialogChangeFinished == 2) {
                    dialogChangeFinished = 1;
                }
            }

            @Override
            protected void onAllAnimationsDone() {
                if (dialogRemoveFinished == 1 || dialogInsertFinished == 1 || dialogChangeFinished == 1) {
                    onDialogAnimationFinished();
                }
            }
        };
        // viewPage.listView.setItemAnimator(viewPage.dialogsItemAnimator);
        viewPage.listView.setVerticalScrollBarEnabled(true);
        viewPage.listView.setInstantClick(true);
        viewPage.layoutManager = new LinearLayoutManager(context) {

            private boolean fixOffset;

            @Override
            public void scrollToPositionWithOffset(int position, int offset) {
                if (fixOffset) {
                    offset -= viewPage.listView.getPaddingTop();
                }
                super.scrollToPositionWithOffset(position, offset);
            }

            @Override
            public void prepareForDrop(@NonNull View view, @NonNull View target, int x, int y) {
                fixOffset = true;
                super.prepareForDrop(view, target, x, y);
                fixOffset = false;
            }

            @Override
            public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
                if (hasHiddenArchive() && position == 1) {
                    super.smoothScrollToPosition(recyclerView, state, position);
                } else {
                    LinearSmoothScrollerCustom linearSmoothScroller = new LinearSmoothScrollerCustom(recyclerView.getContext(), LinearSmoothScrollerCustom.POSITION_MIDDLE);
                    linearSmoothScroller.setTargetPosition(position);
                    startSmoothScroll(linearSmoothScroller);
                }
            }

            @Override
            public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
                if (viewPage.listView.fastScrollAnimationRunning) {
                    return 0;
                }
                boolean isDragging = viewPage.listView.getScrollState() == RecyclerView.SCROLL_STATE_DRAGGING;
                int measuredDy = dy;
                int pTop = viewPage.listView.getPaddingTop();
                if (viewPage.dialogsType == 0 && !onlySelect && folderId == 0 && dy < 0 && getMessagesController().hasHiddenArchive() && viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) {
                    viewPage.listView.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
                    int currentPosition = viewPage.layoutManager.findFirstVisibleItemPosition();
                    if (currentPosition == 0) {
                        View view = viewPage.layoutManager.findViewByPosition(currentPosition);
                        if (view != null && (view.getBottom() - pTop) <= AndroidUtilities.dp(1)) {
                            currentPosition = 1;
                        }
                    }
                    if (!isDragging) {
                        View view = viewPage.layoutManager.findViewByPosition(currentPosition);
                        if (view != null) {
                            int dialogHeight = AndroidUtilities.dp(SharedConfig.useThreeLinesLayout ? 78 : 72) + 1;
                            int canScrollDy = -(view.getTop() - pTop) + (currentPosition - 1) * dialogHeight;
                            int positiveDy = Math.abs(dy);
                            if (canScrollDy < positiveDy) {
                                measuredDy = -canScrollDy;
                            }
                        }
                    } else if (currentPosition == 0) {
                        View v = viewPage.layoutManager.findViewByPosition(currentPosition);
                        float k = 1f + ((v.getTop() - pTop) / (float) v.getMeasuredHeight());
                        if (k > 1f) {
                            k = 1f;
                        }
                        viewPage.listView.setOverScrollMode(View.OVER_SCROLL_NEVER);
                        measuredDy *= PullForegroundDrawable.startPullParallax - PullForegroundDrawable.endPullParallax * k;
                        if (measuredDy > -1) {
                            measuredDy = -1;
                        }
                        if (undoView[0].getVisibility() == View.VISIBLE) {
                            undoView[0].hide(true, 1);
                        }
                    }
                }
                if (viewPage.dialogsType == 0 && viewPage.listView.getViewOffset() != 0 && dy > 0 && isDragging) {
                    float ty = (int) viewPage.listView.getViewOffset();
                    ty -= dy;
                    if (ty < 0) {
                        measuredDy = (int) ty;
                        ty = 0;
                    } else {
                        measuredDy = 0;
                    }
                    viewPage.listView.setViewsOffset(ty);
                }
                if (viewPage.dialogsType == 0 && viewPage.archivePullViewState != ARCHIVE_ITEM_STATE_PINNED && hasHiddenArchive()) {
                    int usedDy = super.scrollVerticallyBy(measuredDy, recycler, state);
                    if (viewPage.pullForegroundDrawable != null) {
                        viewPage.pullForegroundDrawable.scrollDy = usedDy;
                    }
                    int currentPosition = viewPage.layoutManager.findFirstVisibleItemPosition();
                    View firstView = null;
                    if (currentPosition == 0) {
                        firstView = viewPage.layoutManager.findViewByPosition(currentPosition);
                    }
                    if (currentPosition == 0 && firstView != null && (firstView.getBottom() - pTop) >= AndroidUtilities.dp(4)) {
                        if (startArchivePullingTime == 0) {
                            startArchivePullingTime = System.currentTimeMillis();
                        }
                        if (viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) {
                            if (viewPage.pullForegroundDrawable != null) {
                                viewPage.pullForegroundDrawable.showHidden();
                            }
                        }
                        float k = 1f + ((firstView.getTop() - pTop) / (float) firstView.getMeasuredHeight());
                        if (k > 1f) {
                            k = 1f;
                        }
                        long pullingTime = System.currentTimeMillis() - startArchivePullingTime;
                        boolean canShowInternal = k > PullForegroundDrawable.SNAP_HEIGHT && pullingTime > PullForegroundDrawable.minPullingTime + 20;
                        if (canShowHiddenArchive != canShowInternal) {
                            canShowHiddenArchive = canShowInternal;
                            if (viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) {
                                viewPage.listView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
                                if (viewPage.pullForegroundDrawable != null) {
                                    viewPage.pullForegroundDrawable.colorize(canShowInternal);
                                }
                            }
                        }
                        if (viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN && measuredDy - usedDy != 0 && dy < 0 && isDragging) {
                            float ty;
                            float tk = (viewPage.listView.getViewOffset() / PullForegroundDrawable.getMaxOverscroll());
                            tk = 1f - tk;
                            ty = (viewPage.listView.getViewOffset() - dy * PullForegroundDrawable.startPullOverScroll * tk);
                            viewPage.listView.setViewsOffset(ty);
                        }
                        if (viewPage.pullForegroundDrawable != null) {
                            viewPage.pullForegroundDrawable.pullProgress = k;
                            viewPage.pullForegroundDrawable.setListView(viewPage.listView);
                        }
                    } else {
                        startArchivePullingTime = 0;
                        canShowHiddenArchive = false;
                        viewPage.archivePullViewState = ARCHIVE_ITEM_STATE_HIDDEN;
                        if (viewPage.pullForegroundDrawable != null) {
                            viewPage.pullForegroundDrawable.resetText();
                            viewPage.pullForegroundDrawable.pullProgress = 0f;
                            viewPage.pullForegroundDrawable.setListView(viewPage.listView);
                        }
                    }
                    if (firstView != null) {
                        firstView.invalidate();
                    }
                    return usedDy;
                }
                return super.scrollVerticallyBy(measuredDy, recycler, state);
            }

            @Override
            public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
                if (BuildVars.DEBUG_PRIVATE_VERSION) {
                    try {
                        super.onLayoutChildren(recycler, state);
                    } catch (IndexOutOfBoundsException e) {
                        throw new RuntimeException("Inconsistency detected. " + "dialogsListIsFrozen=" + dialogsListFrozen + " lastUpdateAction=" + debugLastUpdateAction);
                    }
                } else {
                    try {
                        super.onLayoutChildren(recycler, state);
                    } catch (IndexOutOfBoundsException e) {
                        FileLog.e(e);
                        AndroidUtilities.runOnUIThread(() -> viewPage.dialogsAdapter.notifyDataSetChanged());
                    }
                }
            }
        };
        viewPage.layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        viewPage.listView.setLayoutManager(viewPage.layoutManager);
        viewPage.listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
        viewPage.addView(viewPage.listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
        viewPage.listView.setOnItemClickListener((view, position) -> {
            if (initialDialogsType == 10) {
                onItemLongClick(view, position, 0, 0, viewPage.dialogsType, viewPage.dialogsAdapter);
                return;
            } else if ((initialDialogsType == 11 || initialDialogsType == 13) && position == 1) {
                Bundle args = new Bundle();
                args.putBoolean("forImport", true);
                long[] array = new long[] { getUserConfig().getClientUserId() };
                args.putLongArray("result", array);
                args.putInt("chatType", ChatObject.CHAT_TYPE_MEGAGROUP);
                String title = arguments.getString("importTitle");
                if (title != null) {
                    args.putString("title", title);
                }
                GroupCreateFinalActivity activity = new GroupCreateFinalActivity(args);
                activity.setDelegate(new GroupCreateFinalActivity.GroupCreateFinalActivityDelegate() {

                    @Override
                    public void didStartChatCreation() {
                    }

                    @Override
                    public void didFinishChatCreation(GroupCreateFinalActivity fragment, long chatId) {
                        ArrayList<Long> arrayList = new ArrayList<>();
                        arrayList.add(-chatId);
                        DialogsActivityDelegate dialogsActivityDelegate = delegate;
                        removeSelfFromStack();
                        dialogsActivityDelegate.didSelectDialogs(DialogsActivity.this, arrayList, null, true);
                    }

                    @Override
                    public void didFailChatCreation() {
                    }
                });
                presentFragment(activity);
                return;
            }
            onItemClick(view, position, viewPage.dialogsAdapter);
        });
        viewPage.listView.setOnItemLongClickListener(new RecyclerListView.OnItemLongClickListenerExtended() {

            @Override
            public boolean onItemClick(View view, int position, float x, float y) {
                if (filterTabsView != null && filterTabsView.getVisibility() == View.VISIBLE && filterTabsView.isEditing()) {
                    return false;
                }
                return onItemLongClick(view, position, x, y, viewPage.dialogsType, viewPage.dialogsAdapter);
            }

            @Override
            public void onLongClickRelease() {
                finishPreviewFragment();
            }

            @Override
            public void onMove(float dx, float dy) {
                movePreviewFragment(dy);
            }
        });
        viewPage.swipeController = new SwipeController(viewPage);
        viewPage.recyclerItemsEnterAnimator = new RecyclerItemsEnterAnimator(viewPage.listView, false);
        viewPage.itemTouchhelper = new ItemTouchHelper(viewPage.swipeController);
        viewPage.itemTouchhelper.attachToRecyclerView(viewPage.listView);
        viewPage.listView.setOnScrollListener(new RecyclerView.OnScrollListener() {

            private boolean wasManualScroll;

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
                    wasManualScroll = true;
                    scrollingManually = true;
                } else {
                    scrollingManually = false;
                }
                if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                    wasManualScroll = false;
                    disableActionBarScrolling = false;
                    if (waitingForScrollFinished) {
                        waitingForScrollFinished = false;
                        if (updatePullAfterScroll) {
                            viewPage.listView.updatePullState();
                            updatePullAfterScroll = false;
                        }
                        viewPage.dialogsAdapter.notifyDataSetChanged();
                    }
                    if (filterTabsView != null && filterTabsView.getVisibility() == View.VISIBLE && viewPages[0].listView == recyclerView) {
                        int scrollY = (int) -actionBar.getTranslationY();
                        int actionBarHeight = ActionBar.getCurrentActionBarHeight();
                        if (scrollY != 0 && scrollY != actionBarHeight) {
                            if (scrollY < actionBarHeight / 2) {
                                recyclerView.smoothScrollBy(0, -scrollY);
                            } else if (viewPages[0].listView.canScrollVertically(1)) {
                                recyclerView.smoothScrollBy(0, actionBarHeight - scrollY);
                            }
                        }
                    }
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                viewPage.dialogsItemAnimator.onListScroll(-dy);
                checkListLoad(viewPage);
                if (initialDialogsType != 10 && wasManualScroll && floatingButtonContainer.getVisibility() != View.GONE && recyclerView.getChildCount() > 0) {
                    int firstVisibleItem = viewPage.layoutManager.findFirstVisibleItemPosition();
                    if (firstVisibleItem != RecyclerView.NO_POSITION) {
                        RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(firstVisibleItem);
                        if (!hasHiddenArchive() || holder != null && holder.getAdapterPosition() != 0) {
                            int firstViewTop = 0;
                            if (holder != null) {
                                firstViewTop = holder.itemView.getTop();
                            }
                            boolean goingDown;
                            boolean changed = true;
                            if (prevPosition == firstVisibleItem) {
                                final int topDelta = prevTop - firstViewTop;
                                goingDown = firstViewTop < prevTop;
                                changed = Math.abs(topDelta) > 1;
                            } else {
                                goingDown = firstVisibleItem > prevPosition;
                            }
                            if (changed && scrollUpdated && (goingDown || scrollingManually)) {
                                hideFloatingButton(goingDown);
                            }
                            prevPosition = firstVisibleItem;
                            prevTop = firstViewTop;
                            scrollUpdated = true;
                        }
                    }
                }
                if (filterTabsView != null && filterTabsView.getVisibility() == View.VISIBLE && recyclerView == viewPages[0].listView && !searching && !actionBar.isActionModeShowed() && !disableActionBarScrolling && filterTabsViewIsVisible) {
                    if (dy > 0 && hasHiddenArchive() && viewPages[0].dialogsType == 0) {
                        View child = recyclerView.getChildAt(0);
                        if (child != null) {
                            RecyclerView.ViewHolder holder = recyclerView.getChildViewHolder(child);
                            if (holder.getAdapterPosition() == 0) {
                                int visiblePartAfterScroll = child.getMeasuredHeight() + (child.getTop() - recyclerView.getPaddingTop());
                                if (visiblePartAfterScroll + dy > 0) {
                                    if (visiblePartAfterScroll < 0) {
                                        dy = -visiblePartAfterScroll;
                                    } else {
                                        return;
                                    }
                                }
                            }
                        }
                    }
                    float currentTranslation = actionBar.getTranslationY();
                    float newTranslation = currentTranslation - dy;
                    if (newTranslation < -ActionBar.getCurrentActionBarHeight()) {
                        newTranslation = -ActionBar.getCurrentActionBarHeight();
                    } else if (newTranslation > 0) {
                        newTranslation = 0;
                    }
                    if (newTranslation != currentTranslation) {
                        setScrollY(newTranslation);
                    }
                }
            }
        });
        viewPage.archivePullViewState = SharedConfig.archiveHidden ? ARCHIVE_ITEM_STATE_HIDDEN : ARCHIVE_ITEM_STATE_PINNED;
        if (viewPage.pullForegroundDrawable == null && folderId == 0) {
            viewPage.pullForegroundDrawable = new PullForegroundDrawable(LocaleController.getString("AccSwipeForArchive", R.string.AccSwipeForArchive), LocaleController.getString("AccReleaseForArchive", R.string.AccReleaseForArchive)) {

                @Override
                protected float getViewOffset() {
                    return viewPage.listView.getViewOffset();
                }
            };
            if (hasHiddenArchive()) {
                viewPage.pullForegroundDrawable.showHidden();
            } else {
                viewPage.pullForegroundDrawable.doNotShow();
            }
            viewPage.pullForegroundDrawable.setWillDraw(viewPage.archivePullViewState != ARCHIVE_ITEM_STATE_PINNED);
        }
        viewPage.dialogsAdapter = new DialogsAdapter(this, context, viewPage.dialogsType, folderId, onlySelect, selectedDialogs, currentAccount) {

            @Override
            public void notifyDataSetChanged() {
                viewPage.lastItemsCount = getItemCount();
                try {
                    super.notifyDataSetChanged();
                } catch (Exception e) {
                    FileLog.e(e);
                }
            }
        };
        viewPage.dialogsAdapter.setForceShowEmptyCell(afterSignup);
        if (AndroidUtilities.isTablet() && openedDialogId != 0) {
            viewPage.dialogsAdapter.setOpenedDialogId(openedDialogId);
        }
        viewPage.dialogsAdapter.setArchivedPullDrawable(viewPage.pullForegroundDrawable);
        viewPage.listView.setAdapter(viewPage.dialogsAdapter);
        viewPage.listView.setEmptyView(folderId == 0 ? viewPage.progressView : null);
        viewPage.scrollHelper = new RecyclerAnimationScrollHelper(viewPage.listView, viewPage.layoutManager);
        if (a != 0) {
            viewPages[a].setVisibility(View.GONE);
        }
    }
    int type = 0;
    if (searchString != null) {
        type = 2;
    } else if (!onlySelect) {
        type = 1;
    }
    searchViewPager = new SearchViewPager(context, this, type, initialDialogsType, folderId, new SearchViewPager.ChatPreviewDelegate() {

        @Override
        public void startChatPreview(DialogCell cell) {
            showChatPreview(cell);
        }

        @Override
        public void move(float dy) {
            movePreviewFragment(dy);
        }

        @Override
        public void finish() {
            finishPreviewFragment();
        }
    });
    contentView.addView(searchViewPager);
    searchViewPager.dialogsSearchAdapter.setDelegate(new DialogsSearchAdapter.DialogsSearchAdapterDelegate() {

        @Override
        public void searchStateChanged(boolean search, boolean animated) {
            if (searchViewPager.emptyView.getVisibility() == View.VISIBLE) {
                animated = true;
            }
            if (searching && searchWas && searchViewPager.emptyView != null) {
                if (search || searchViewPager.dialogsSearchAdapter.getItemCount() != 0) {
                    searchViewPager.emptyView.showProgress(true, animated);
                } else {
                    searchViewPager.emptyView.showProgress(false, animated);
                }
            }
            if (search && searchViewPager.dialogsSearchAdapter.getItemCount() == 0) {
                searchViewPager.cancelEnterAnimation();
            }
        }

        @Override
        public void didPressedOnSubDialog(long did) {
            if (onlySelect) {
                if (!validateSlowModeDialog(did)) {
                    return;
                }
                if (!selectedDialogs.isEmpty()) {
                    boolean checked = addOrRemoveSelectedDialog(did, null);
                    findAndUpdateCheckBox(did, checked);
                    updateSelectedCount();
                    actionBar.closeSearchField();
                } else {
                    didSelectResult(did, true, false);
                }
            } else {
                Bundle args = new Bundle();
                if (DialogObject.isUserDialog(did)) {
                    args.putLong("user_id", did);
                } else {
                    args.putLong("chat_id", -did);
                }
                closeSearch();
                if (AndroidUtilities.isTablet() && viewPages != null) {
                    for (int a = 0; a < viewPages.length; a++) {
                        viewPages[a].dialogsAdapter.setOpenedDialogId(openedDialogId = did);
                    }
                    updateVisibleRows(MessagesController.UPDATE_MASK_SELECT_DIALOG);
                }
                if (searchString != null) {
                    if (getMessagesController().checkCanOpenChat(args, DialogsActivity.this)) {
                        getNotificationCenter().postNotificationName(NotificationCenter.closeChats);
                        presentFragment(new ChatActivity(args));
                    }
                } else {
                    if (getMessagesController().checkCanOpenChat(args, DialogsActivity.this)) {
                        presentFragment(new ChatActivity(args));
                    }
                }
            }
        }

        @Override
        public void needRemoveHint(long did) {
            if (getParentActivity() == null) {
                return;
            }
            TLRPC.User user = getMessagesController().getUser(did);
            if (user == null) {
                return;
            }
            AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
            builder.setTitle(LocaleController.getString("ChatHintsDeleteAlertTitle", R.string.ChatHintsDeleteAlertTitle));
            builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("ChatHintsDeleteAlert", R.string.ChatHintsDeleteAlert, ContactsController.formatName(user.first_name, user.last_name))));
            builder.setPositiveButton(LocaleController.getString("StickersRemove", R.string.StickersRemove), (dialogInterface, i) -> getMediaDataController().removePeer(did));
            builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
            AlertDialog dialog = builder.create();
            showDialog(dialog);
            TextView button = (TextView) dialog.getButton(DialogInterface.BUTTON_POSITIVE);
            if (button != null) {
                button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
            }
        }

        @Override
        public void needClearList() {
            AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
            builder.setTitle(LocaleController.getString("ClearSearchAlertTitle", R.string.ClearSearchAlertTitle));
            builder.setMessage(LocaleController.getString("ClearSearchAlert", R.string.ClearSearchAlert));
            builder.setPositiveButton(LocaleController.getString("ClearButton", R.string.ClearButton).toUpperCase(), (dialogInterface, i) -> {
                if (searchViewPager.dialogsSearchAdapter.isRecentSearchDisplayed()) {
                    searchViewPager.dialogsSearchAdapter.clearRecentSearch();
                } else {
                    searchViewPager.dialogsSearchAdapter.clearRecentHashtags();
                }
            });
            builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
            AlertDialog dialog = builder.create();
            showDialog(dialog);
            TextView button = (TextView) dialog.getButton(DialogInterface.BUTTON_POSITIVE);
            if (button != null) {
                button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
            }
        }

        @Override
        public void runResultsEnterAnimation() {
            if (searchViewPager != null) {
                searchViewPager.runResultsEnterAnimation();
            }
        }

        @Override
        public boolean isSelected(long dialogId) {
            return selectedDialogs.contains(dialogId);
        }
    });
    searchViewPager.searchListView.setOnItemClickListener((view, position) -> {
        if (initialDialogsType == 10) {
            onItemLongClick(view, position, 0, 0, -1, searchViewPager.dialogsSearchAdapter);
            return;
        }
        onItemClick(view, position, searchViewPager.dialogsSearchAdapter);
    });
    searchViewPager.searchListView.setOnItemLongClickListener(new RecyclerListView.OnItemLongClickListenerExtended() {

        @Override
        public boolean onItemClick(View view, int position, float x, float y) {
            return onItemLongClick(view, position, x, y, -1, searchViewPager.dialogsSearchAdapter);
        }

        @Override
        public void onLongClickRelease() {
            finishPreviewFragment();
        }

        @Override
        public void onMove(float dx, float dy) {
            movePreviewFragment(dy);
        }
    });
    searchViewPager.setFilteredSearchViewDelegate((showMediaFilters, users, dates, archive) -> DialogsActivity.this.updateFiltersView(showMediaFilters, users, dates, archive, true));
    searchViewPager.setVisibility(View.GONE);
    filtersView = new FiltersView(getParentActivity(), null);
    filtersView.setOnItemClickListener((view, position) -> {
        filtersView.cancelClickRunnables(true);
        addSearchFilter(filtersView.getFilterAt(position));
    });
    contentView.addView(filtersView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP));
    filtersView.setVisibility(View.GONE);
    floatingButtonContainer = new FrameLayout(context);
    floatingButtonContainer.setVisibility(onlySelect && initialDialogsType != 10 || folderId != 0 ? View.GONE : View.VISIBLE);
    contentView.addView(floatingButtonContainer, LayoutHelper.createFrame((Build.VERSION.SDK_INT >= 21 ? 56 : 60) + 20, (Build.VERSION.SDK_INT >= 21 ? 56 : 60) + 20, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.BOTTOM, LocaleController.isRTL ? 4 : 0, 0, LocaleController.isRTL ? 0 : 4, 0));
    floatingButtonContainer.setOnClickListener(v -> {
        if (initialDialogsType == 10) {
            if (delegate == null || selectedDialogs.isEmpty()) {
                return;
            }
            delegate.didSelectDialogs(DialogsActivity.this, selectedDialogs, null, false);
        } else {
            Bundle args = new Bundle();
            args.putBoolean("destroyAfterSelect", true);
            presentFragment(new ContactsActivity(args));
        }
    });
    floatingButton = new RLottieImageView(context);
    floatingButton.setScaleType(ImageView.ScaleType.CENTER);
    Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_chats_actionBackground), Theme.getColor(Theme.key_chats_actionPressedBackground));
    if (Build.VERSION.SDK_INT < 21) {
        Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow).mutate();
        shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY));
        CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0);
        combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56));
        drawable = combinedDrawable;
    }
    floatingButton.setBackgroundDrawable(drawable);
    floatingButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionIcon), PorterDuff.Mode.MULTIPLY));
    if (initialDialogsType == 10) {
        floatingButton.setImageResource(R.drawable.floating_check);
        floatingButtonContainer.setContentDescription(LocaleController.getString("Done", R.string.Done));
    } else {
        floatingButton.setAnimation(R.raw.write_contacts_fab_icon, 52, 52);
        floatingButtonContainer.setContentDescription(LocaleController.getString("NewMessageTitle", R.string.NewMessageTitle));
    }
    if (Build.VERSION.SDK_INT >= 21) {
        StateListAnimator animator = new StateListAnimator();
        animator.addState(new int[] { android.R.attr.state_pressed }, ObjectAnimator.ofFloat(floatingButton, View.TRANSLATION_Z, AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200));
        animator.addState(new int[] {}, ObjectAnimator.ofFloat(floatingButton, View.TRANSLATION_Z, AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200));
        floatingButton.setStateListAnimator(animator);
        floatingButton.setOutlineProvider(new ViewOutlineProvider() {

            @SuppressLint("NewApi")
            @Override
            public void getOutline(View view, Outline outline) {
                outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56));
            }
        });
    }
    floatingButtonContainer.addView(floatingButton, LayoutHelper.createFrame((Build.VERSION.SDK_INT >= 21 ? 56 : 60), (Build.VERSION.SDK_INT >= 21 ? 56 : 60), Gravity.LEFT | Gravity.TOP, 10, 6, 10, 0));
    searchTabsView = null;
    if (!onlySelect && initialDialogsType == 0) {
        fragmentLocationContextView = new FragmentContextView(context, this, true);
        fragmentLocationContextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 38, Gravity.TOP | Gravity.LEFT, 0, -36, 0, 0));
        contentView.addView(fragmentLocationContextView);
        fragmentContextView = new FragmentContextView(context, this, false) {

            @Override
            protected void playbackSpeedChanged(float value) {
                if (Math.abs(value - 1.0f) > 0.001f || Math.abs(value - 1.8f) > 0.001f) {
                    getUndoView().showWithAction(0, Math.abs(value - 1.0f) > 0.001f ? UndoView.ACTION_PLAYBACK_SPEED_ENABLED : UndoView.ACTION_PLAYBACK_SPEED_DISABLED, value, null, null);
                }
            }
        };
        fragmentContextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 38, Gravity.TOP | Gravity.LEFT, 0, -36, 0, 0));
        contentView.addView(fragmentContextView);
        fragmentContextView.setAdditionalContextView(fragmentLocationContextView);
        fragmentLocationContextView.setAdditionalContextView(fragmentContextView);
    } else if (initialDialogsType == 3) {
        if (commentView != null) {
            commentView.onDestroy();
        }
        commentView = new ChatActivityEnterView(getParentActivity(), contentView, null, false) {

            @Override
            public boolean dispatchTouchEvent(MotionEvent ev) {
                if (ev.getAction() == MotionEvent.ACTION_DOWN) {
                    AndroidUtilities.requestAdjustResize(getParentActivity(), classGuid);
                }
                return super.dispatchTouchEvent(ev);
            }
        };
        commentView.setAllowStickersAndGifs(false, false);
        commentView.setForceShowSendButton(true, false);
        commentView.setVisibility(View.GONE);
        commentView.getSendButton().setAlpha(0);
        contentView.addView(commentView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.BOTTOM));
        commentView.setDelegate(new ChatActivityEnterView.ChatActivityEnterViewDelegate() {

            @Override
            public void onMessageSend(CharSequence message, boolean notify, int scheduleDate) {
                if (delegate == null || selectedDialogs.isEmpty()) {
                    return;
                }
                delegate.didSelectDialogs(DialogsActivity.this, selectedDialogs, message, false);
            }

            @Override
            public void onSwitchRecordMode(boolean video) {
            }

            @Override
            public void onTextSelectionChanged(int start, int end) {
            }

            @Override
            public void onStickersExpandedChange() {
            }

            @Override
            public void onPreAudioVideoRecord() {
            }

            @Override
            public void onTextChanged(final CharSequence text, boolean bigChange) {
            }

            @Override
            public void onTextSpansChanged(CharSequence text) {
            }

            @Override
            public void needSendTyping() {
            }

            @Override
            public void onAttachButtonHidden() {
            }

            @Override
            public void onAttachButtonShow() {
            }

            @Override
            public void onMessageEditEnd(boolean loading) {
            }

            @Override
            public void onWindowSizeChanged(int size) {
            }

            @Override
            public void onStickersTab(boolean opened) {
            }

            @Override
            public void didPressAttachButton() {
            }

            @Override
            public void needStartRecordVideo(int state, boolean notify, int scheduleDate) {
            }

            @Override
            public void needChangeVideoPreviewState(int state, float seekProgress) {
            }

            @Override
            public void needStartRecordAudio(int state) {
            }

            @Override
            public void needShowMediaBanHint() {
            }

            @Override
            public void onUpdateSlowModeButton(View button, boolean show, CharSequence time) {
            }

            @Override
            public void onSendLongClick() {
            }

            @Override
            public void onAudioVideoInterfaceUpdated() {
            }
        });
        writeButtonContainer = new FrameLayout(context) {

            @Override
            public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
                super.onInitializeAccessibilityNodeInfo(info);
                info.setText(LocaleController.formatPluralString("AccDescrShareInChats", selectedDialogs.size()));
                info.setClassName(Button.class.getName());
                info.setLongClickable(true);
                info.setClickable(true);
            }
        };
        writeButtonContainer.setFocusable(true);
        writeButtonContainer.setFocusableInTouchMode(true);
        writeButtonContainer.setVisibility(View.INVISIBLE);
        writeButtonContainer.setScaleX(0.2f);
        writeButtonContainer.setScaleY(0.2f);
        writeButtonContainer.setAlpha(0.0f);
        contentView.addView(writeButtonContainer, LayoutHelper.createFrame(60, 60, Gravity.RIGHT | Gravity.BOTTOM, 0, 0, 6, 10));
        textPaint.setTextSize(AndroidUtilities.dp(12));
        textPaint.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
        selectedCountView = new View(context) {

            @Override
            protected void onDraw(Canvas canvas) {
                String text = String.format("%d", Math.max(1, selectedDialogs.size()));
                int textSize = (int) Math.ceil(textPaint.measureText(text));
                int size = Math.max(AndroidUtilities.dp(16) + textSize, AndroidUtilities.dp(24));
                int cx = getMeasuredWidth() / 2;
                int cy = getMeasuredHeight() / 2;
                textPaint.setColor(getThemedColor(Theme.key_dialogRoundCheckBoxCheck));
                paint.setColor(getThemedColor(Theme.isCurrentThemeDark() ? Theme.key_voipgroup_inviteMembersBackground : Theme.key_dialogBackground));
                rect.set(cx - size / 2, 0, cx + size / 2, getMeasuredHeight());
                canvas.drawRoundRect(rect, AndroidUtilities.dp(12), AndroidUtilities.dp(12), paint);
                paint.setColor(getThemedColor(Theme.key_dialogRoundCheckBox));
                rect.set(cx - size / 2 + AndroidUtilities.dp(2), AndroidUtilities.dp(2), cx + size / 2 - AndroidUtilities.dp(2), getMeasuredHeight() - AndroidUtilities.dp(2));
                canvas.drawRoundRect(rect, AndroidUtilities.dp(10), AndroidUtilities.dp(10), paint);
                canvas.drawText(text, cx - textSize / 2, AndroidUtilities.dp(16.2f), textPaint);
            }
        };
        selectedCountView.setAlpha(0.0f);
        selectedCountView.setScaleX(0.2f);
        selectedCountView.setScaleY(0.2f);
        contentView.addView(selectedCountView, LayoutHelper.createFrame(42, 24, Gravity.RIGHT | Gravity.BOTTOM, 0, 0, -8, 9));
        FrameLayout writeButtonBackground = new FrameLayout(context);
        Drawable writeButtonDrawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), getThemedColor(Theme.key_dialogFloatingButton), getThemedColor(Build.VERSION.SDK_INT >= 21 ? Theme.key_dialogFloatingButtonPressed : Theme.key_dialogFloatingButton));
        if (Build.VERSION.SDK_INT < 21) {
            Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow_profile).mutate();
            shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY));
            CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0);
            combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56));
            writeButtonDrawable = combinedDrawable;
        }
        writeButtonBackground.setBackgroundDrawable(writeButtonDrawable);
        writeButtonBackground.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            writeButtonBackground.setOutlineProvider(new ViewOutlineProvider() {

                @SuppressLint("NewApi")
                @Override
                public void getOutline(View view, Outline outline) {
                    outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56));
                }
            });
        }
        writeButtonBackground.setOnClickListener(v -> {
            if (delegate == null || selectedDialogs.isEmpty()) {
                return;
            }
            delegate.didSelectDialogs(DialogsActivity.this, selectedDialogs, commentView.getFieldText(), false);
        });
        writeButtonBackground.setOnLongClickListener(v -> {
            if (isNextButton) {
                return false;
            }
            onSendLongClick(writeButtonBackground);
            return true;
        });
        writeButton = new ImageView[2];
        for (int a = 0; a < 2; ++a) {
            writeButton[a] = new ImageView(context);
            writeButton[a].setImageResource(a == 1 ? R.drawable.actionbtn_next : R.drawable.attach_send);
            writeButton[a].setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_dialogFloatingIcon), PorterDuff.Mode.MULTIPLY));
            writeButton[a].setScaleType(ImageView.ScaleType.CENTER);
            writeButtonBackground.addView(writeButton[a], LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, Gravity.CENTER));
        }
        AndroidUtilities.updateViewVisibilityAnimated(writeButton[0], true, 0.5f, false);
        AndroidUtilities.updateViewVisibilityAnimated(writeButton[1], false, 0.5f, false);
        writeButtonContainer.addView(writeButtonBackground, LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, Gravity.LEFT | Gravity.TOP, Build.VERSION.SDK_INT >= 21 ? 2 : 0, 0, 0, 0));
    }
    if (filterTabsView != null) {
        contentView.addView(filterTabsView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 44));
    }
    if (!onlySelect) {
        final FrameLayout.LayoutParams layoutParams = LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT);
        if (inPreviewMode && Build.VERSION.SDK_INT >= 21) {
            layoutParams.topMargin = AndroidUtilities.statusBarHeight;
        }
        contentView.addView(actionBar, layoutParams);
    }
    if (searchString == null && initialDialogsType == 0) {
        updateLayout = new FrameLayout(context) {

            private Paint paint = new Paint();

            private Matrix matrix = new Matrix();

            private LinearGradient updateGradient;

            private int lastGradientWidth;

            @Override
            public void draw(Canvas canvas) {
                if (updateGradient != null) {
                    paint.setColor(0xffffffff);
                    paint.setShader(updateGradient);
                    updateGradient.setLocalMatrix(matrix);
                    canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);
                    updateLayoutIcon.setBackgroundGradientDrawable(updateGradient);
                    updateLayoutIcon.draw(canvas);
                }
                super.draw(canvas);
            }

            @Override
            protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
                int width = MeasureSpec.getSize(widthMeasureSpec);
                if (lastGradientWidth != width) {
                    updateGradient = new LinearGradient(0, 0, width, 0, new int[] { 0xff69BF72, 0xff53B3AD }, new float[] { 0.0f, 1.0f }, Shader.TileMode.CLAMP);
                    lastGradientWidth = width;
                }
                int x = (getMeasuredWidth() - updateTextView.getMeasuredWidth()) / 2;
                updateLayoutIcon.setProgressRect(x, AndroidUtilities.dp(13), x + AndroidUtilities.dp(22), AndroidUtilities.dp(13 + 22));
            }

            @Override
            public void setTranslationY(float translationY) {
                super.setTranslationY(translationY);
                additionalFloatingTranslation2 = AndroidUtilities.dp(48) - translationY;
                if (additionalFloatingTranslation2 < 0) {
                    additionalFloatingTranslation2 = 0;
                }
                if (!floatingHidden) {
                    updateFloatingButtonOffset();
                }
            }
        };
        updateLayout.setWillNotDraw(false);
        updateLayout.setVisibility(View.INVISIBLE);
        updateLayout.setTranslationY(AndroidUtilities.dp(48));
        if (Build.VERSION.SDK_INT >= 21) {
            updateLayout.setBackground(Theme.getSelectorDrawable(0x40ffffff, false));
        }
        contentView.addView(updateLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.LEFT | Gravity.BOTTOM));
        updateLayout.setOnClickListener(v -> {
            if (!SharedConfig.isAppUpdateAvailable()) {
                return;
            }
            AndroidUtilities.openForView(SharedConfig.pendingAppUpdate.document, true, getParentActivity());
        });
        updateLayoutIcon = new RadialProgress2(updateLayout);
        updateLayoutIcon.setColors(0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff);
        updateLayoutIcon.setCircleRadius(AndroidUtilities.dp(11));
        updateLayoutIcon.setAsMini();
        updateLayoutIcon.setIcon(MediaActionDrawable.ICON_UPDATE, true, false);
        updateTextView = new TextView(context);
        updateTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
        updateTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
        updateTextView.setText(LocaleController.getString("AppUpdateNow", R.string.AppUpdateNow).toUpperCase());
        updateTextView.setTextColor(0xffffffff);
        updateTextView.setPadding(AndroidUtilities.dp(30), 0, 0, 0);
        updateLayout.addView(updateTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 0, 0, 0));
    }
    for (int a = 0; a < 2; a++) {
        undoView[a] = new UndoView(context) {

            @Override
            public void setTranslationY(float translationY) {
                super.setTranslationY(translationY);
                if (this == undoView[0] && undoView[1].getVisibility() != VISIBLE) {
                    additionalFloatingTranslation = getMeasuredHeight() + AndroidUtilities.dp(8) - translationY;
                    if (additionalFloatingTranslation < 0) {
                        additionalFloatingTranslation = 0;
                    }
                    if (!floatingHidden) {
                        updateFloatingButtonOffset();
                    }
                }
            }

            @Override
            protected boolean canUndo() {
                for (int a = 0; a < viewPages.length; a++) {
                    if (viewPages[a].dialogsItemAnimator.isRunning()) {
                        return false;
                    }
                }
                return true;
            }

            @Override
            protected void onRemoveDialogAction(long currentDialogId, int action) {
                if (action == UndoView.ACTION_DELETE || action == UndoView.ACTION_DELETE_FEW) {
                    debugLastUpdateAction = 1;
                    setDialogsListFrozen(true);
                    if (frozenDialogsList != null) {
                        int selectedIndex = -1;
                        for (int i = 0; i < frozenDialogsList.size(); i++) {
                            if (frozenDialogsList.get(i).id == currentDialogId) {
                                selectedIndex = i;
                                break;
                            }
                        }
                        if (selectedIndex >= 0) {
                            TLRPC.Dialog dialog = frozenDialogsList.remove(selectedIndex);
                            viewPages[0].dialogsAdapter.notifyDataSetChanged();
                            int finalSelectedIndex = selectedIndex;
                            AndroidUtilities.runOnUIThread(() -> {
                                if (frozenDialogsList != null) {
                                    frozenDialogsList.add(finalSelectedIndex, dialog);
                                    viewPages[0].dialogsAdapter.notifyItemInserted(finalSelectedIndex);
                                    dialogInsertFinished = 2;
                                }
                            });
                        } else {
                            setDialogsListFrozen(false);
                        }
                    }
                }
            }
        };
        contentView.addView(undoView[a], LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT, 8, 0, 8, 8));
    }
    if (folderId != 0) {
        viewPages[0].listView.setGlowColor(Theme.getColor(Theme.key_actionBarDefaultArchived));
        actionBar.setTitleColor(Theme.getColor(Theme.key_actionBarDefaultArchivedTitle));
        actionBar.setItemsColor(Theme.getColor(Theme.key_actionBarDefaultArchivedIcon), false);
        actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultArchivedSelector), false);
        actionBar.setSearchTextColor(Theme.getColor(Theme.key_actionBarDefaultArchivedSearch), false);
        actionBar.setSearchTextColor(Theme.getColor(Theme.key_actionBarDefaultArchivedSearchPlaceholder), true);
    }
    if (!onlySelect && initialDialogsType == 0) {
        blurredView = new View(context) {

            @Override
            public void setAlpha(float alpha) {
                super.setAlpha(alpha);
                if (fragmentView != null) {
                    fragmentView.invalidate();
                }
            }
        };
        blurredView.setVisibility(View.GONE);
        contentView.addView(blurredView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    }
    actionBarDefaultPaint.setColor(Theme.getColor(folderId == 0 ? Theme.key_actionBarDefault : Theme.key_actionBarDefaultArchived));
    if (inPreviewMode) {
        final TLRPC.User currentUser = getUserConfig().getCurrentUser();
        avatarContainer = new ChatAvatarContainer(actionBar.getContext(), null, false);
        avatarContainer.setTitle(UserObject.getUserName(currentUser));
        avatarContainer.setSubtitle(LocaleController.formatUserStatus(currentAccount, currentUser));
        avatarContainer.setUserAvatar(currentUser, true);
        avatarContainer.setOccupyStatusBar(false);
        avatarContainer.setLeftPadding(AndroidUtilities.dp(10));
        actionBar.addView(avatarContainer, 0, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, 0, 0, 40, 0));
        floatingButton.setVisibility(View.INVISIBLE);
        actionBar.setOccupyStatusBar(false);
        actionBar.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefault));
        if (fragmentContextView != null) {
            contentView.removeView(fragmentContextView);
        }
        if (fragmentLocationContextView != null) {
            contentView.removeView(fragmentLocationContextView);
        }
    }
    searchIsShowed = false;
    updateFilterTabs(false, false);
    if (searchString != null) {
        showSearch(true, false);
        actionBar.openSearchField(searchString, false);
    } else if (initialSearchString != null) {
        showSearch(true, false);
        actionBar.openSearchField(initialSearchString, false);
        initialSearchString = null;
        if (filterTabsView != null) {
            filterTabsView.setTranslationY(-AndroidUtilities.dp(44));
        }
    } else {
        showSearch(false, false);
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        FilesMigrationService.checkBottomSheet(this);
    }
    updateMenuButton(false);
    return fragmentView;
}
Also used : AlertDialog(org.telegram.ui.ActionBar.AlertDialog) Bundle(android.os.Bundle) NonNull(androidx.annotation.NonNull) Uri(android.net.Uri) FrameLayout(android.widget.FrameLayout) ImageView(android.widget.ImageView) StickersAlert(org.telegram.ui.Components.StickersAlert) RecyclerAnimationScrollHelper(org.telegram.ui.Components.RecyclerAnimationScrollHelper) EditTextBoldCursor(org.telegram.ui.Components.EditTextBoldCursor) Drawable(android.graphics.drawable.Drawable) Bulletin(org.telegram.ui.Components.Bulletin) Property(android.util.Property) AvatarDrawable(org.telegram.ui.Components.AvatarDrawable) MediaActionDrawable(org.telegram.ui.Components.MediaActionDrawable) FilterTabsView(org.telegram.ui.Components.FilterTabsView) Manifest(android.Manifest) ActionBarMenuSubItem(org.telegram.ui.ActionBar.ActionBarMenuSubItem) StateListAnimator(android.animation.StateListAnimator) DrawerProfileCell(org.telegram.ui.Cells.DrawerProfileCell) PullForegroundDrawable(org.telegram.ui.Components.PullForegroundDrawable) Shader(android.graphics.Shader) Canvas(android.graphics.Canvas) TargetApi(android.annotation.TargetApi) NotificationsController(org.telegram.messenger.NotificationsController) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) Interpolator(android.view.animation.Interpolator) UndoView(org.telegram.ui.Components.UndoView) AnimationProperties(org.telegram.ui.Components.AnimationProperties) AnimatorListenerAdapter(android.animation.AnimatorListenerAdapter) NotificationCenter(org.telegram.messenger.NotificationCenter) MenuDrawable(org.telegram.ui.ActionBar.MenuDrawable) RecyclerItemsEnterAnimator(org.telegram.ui.Components.RecyclerItemsEnterAnimator) Outline(android.graphics.Outline) HapticFeedbackConstants(android.view.HapticFeedbackConstants) DialogsAdapter(org.telegram.ui.Adapters.DialogsAdapter) TextPaint(android.text.TextPaint) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter) Paint(android.graphics.Paint) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) DividerCell(org.telegram.ui.Cells.DividerCell) FileLoader(org.telegram.messenger.FileLoader) ViewParent(android.view.ViewParent) ViewPager(androidx.viewpager.widget.ViewPager) Dialog(android.app.Dialog) DialogsSearchAdapter(org.telegram.ui.Adapters.DialogsSearchAdapter) SwipeGestureSettingsView(org.telegram.ui.Components.SwipeGestureSettingsView) AlertsCreator(org.telegram.ui.Components.AlertsCreator) TextInfoPrivacyCell(org.telegram.ui.Cells.TextInfoPrivacyCell) ArrayList(java.util.ArrayList) ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper) FragmentContextView(org.telegram.ui.Components.FragmentContextView) TLRPC(org.telegram.tgnet.TLRPC) SizeNotifierFrameLayout(org.telegram.ui.Components.SizeNotifierFrameLayout) DialogsEmptyCell(org.telegram.ui.Cells.DialogsEmptyCell) FilesMigrationService(org.telegram.messenger.FilesMigrationService) DialogCell(org.telegram.ui.Cells.DialogCell) ProfileSearchCell(org.telegram.ui.Cells.ProfileSearchCell) JoinGroupAlert(org.telegram.ui.Components.JoinGroupAlert) SearchViewPager(org.telegram.ui.Components.SearchViewPager) ViewPagerFixed(org.telegram.ui.Components.ViewPagerFixed) LinearGradient(android.graphics.LinearGradient) ActionBarMenu(org.telegram.ui.ActionBar.ActionBarMenu) UserCell(org.telegram.ui.Cells.UserCell) R(org.telegram.messenger.R) BottomSheet(org.telegram.ui.ActionBar.BottomSheet) TextUtils(android.text.TextUtils) DialogsItemAnimator(org.telegram.ui.Components.DialogsItemAnimator) File(java.io.File) Gravity(android.view.Gravity) UserObject(org.telegram.messenger.UserObject) DrawerAddCell(org.telegram.ui.Cells.DrawerAddCell) SharedPreferences(android.content.SharedPreferences) TypedValue(android.util.TypedValue) ScrollView(android.widget.ScrollView) ContactsController(org.telegram.messenger.ContactsController) GraySectionCell(org.telegram.ui.Cells.GraySectionCell) Configuration(android.content.res.Configuration) ColorUtils(androidx.core.graphics.ColorUtils) ChatObject(org.telegram.messenger.ChatObject) AlertDialog(org.telegram.ui.ActionBar.AlertDialog) EditText(android.widget.EditText) ValueAnimator(android.animation.ValueAnimator) ThemeDescription(org.telegram.ui.ActionBar.ThemeDescription) FiltersView(org.telegram.ui.Adapters.FiltersView) Rect(android.graphics.Rect) LinearLayout(android.widget.LinearLayout) ActionBarMenuItem(org.telegram.ui.ActionBar.ActionBarMenuItem) RadialProgress2(org.telegram.ui.Components.RadialProgress2) PackageManager(android.content.pm.PackageManager) WindowManager(android.view.WindowManager) AccountInstance(org.telegram.messenger.AccountInstance) AndroidUtilities(org.telegram.messenger.AndroidUtilities) CubicBezierInterpolator(org.telegram.ui.Components.CubicBezierInterpolator) Animator(android.animation.Animator) AccelerateDecelerateInterpolator(android.view.animation.AccelerateDecelerateInterpolator) ViewConfiguration(android.view.ViewConfiguration) ShadowSectionCell(org.telegram.ui.Cells.ShadowSectionCell) ApplicationLoader(org.telegram.messenger.ApplicationLoader) PacmanAnimation(org.telegram.ui.Components.PacmanAnimation) TextCell(org.telegram.ui.Cells.TextCell) ArchiveHintInnerCell(org.telegram.ui.Cells.ArchiveHintInnerCell) View(android.view.View) Button(android.widget.Button) RecyclerView(androidx.recyclerview.widget.RecyclerView) Matrix(android.graphics.Matrix) RectF(android.graphics.RectF) ImageLoader(org.telegram.messenger.ImageLoader) DrawerUserCell(org.telegram.ui.Cells.DrawerUserCell) Utilities(org.telegram.messenger.Utilities) RLottieImageView(org.telegram.ui.Components.RLottieImageView) ObjectAnimator(android.animation.ObjectAnimator) ImageLocation(org.telegram.messenger.ImageLocation) BaseFragment(org.telegram.ui.ActionBar.BaseFragment) BitmapDrawable(android.graphics.drawable.BitmapDrawable) PorterDuff(android.graphics.PorterDuff) ConnectionsManager(org.telegram.tgnet.ConnectionsManager) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) ViewGroup(android.view.ViewGroup) StateSet(android.util.StateSet) UserConfig(org.telegram.messenger.UserConfig) TextView(android.widget.TextView) ChatActivityEnterView(org.telegram.ui.Components.ChatActivityEnterView) DecelerateInterpolator(android.view.animation.DecelerateInterpolator) ActionBarPopupWindow(org.telegram.ui.ActionBar.ActionBarPopupWindow) Context(android.content.Context) AccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo) KeyEvent(android.view.KeyEvent) Theme(org.telegram.ui.ActionBar.Theme) ViewOutlineProvider(android.view.ViewOutlineProvider) BulletinFactory(org.telegram.ui.Components.BulletinFactory) Intent(android.content.Intent) LocaleController(org.telegram.messenger.LocaleController) VelocityTracker(android.view.VelocityTracker) XiaomiUtilities(org.telegram.messenger.XiaomiUtilities) SuppressLint(android.annotation.SuppressLint) MotionEvent(android.view.MotionEvent) FiltersListBottomSheet(org.telegram.ui.Components.FiltersListBottomSheet) ActionBar(org.telegram.ui.ActionBar.ActionBar) LinearSmoothScrollerCustom(androidx.recyclerview.widget.LinearSmoothScrollerCustom) TLObject(org.telegram.tgnet.TLObject) HintDialogCell(org.telegram.ui.Cells.HintDialogCell) AnimatorSet(android.animation.AnimatorSet) MessageObject(org.telegram.messenger.MessageObject) SharedConfig(org.telegram.messenger.SharedConfig) BuildVars(org.telegram.messenger.BuildVars) MediaDataController(org.telegram.messenger.MediaDataController) Build(android.os.Build) DrawerActionCell(org.telegram.ui.Cells.DrawerActionCell) DialogInterface(android.content.DialogInterface) ChatAvatarContainer(org.telegram.ui.Components.ChatAvatarContainer) DialogObject(org.telegram.messenger.DialogObject) BackupImageView(org.telegram.ui.Components.BackupImageView) LayoutHelper(org.telegram.ui.Components.LayoutHelper) FileLog(org.telegram.messenger.FileLog) AccountSelectCell(org.telegram.ui.Cells.AccountSelectCell) FlickerLoadingView(org.telegram.ui.Components.FlickerLoadingView) MessagesController(org.telegram.messenger.MessagesController) Color(android.graphics.Color) NumberTextView(org.telegram.ui.Components.NumberTextView) HashtagSearchCell(org.telegram.ui.Cells.HashtagSearchCell) Bitmap(android.graphics.Bitmap) ViewTreeObserver(android.view.ViewTreeObserver) Vibrator(android.os.Vibrator) ProxyDrawable(org.telegram.ui.Components.ProxyDrawable) Activity(android.app.Activity) RecyclerListView(org.telegram.ui.Components.RecyclerListView) LoadingCell(org.telegram.ui.Cells.LoadingCell) RLottieDrawable(org.telegram.ui.Components.RLottieDrawable) ArrayList(java.util.ArrayList) ActionBarPopupWindow(org.telegram.ui.ActionBar.ActionBarPopupWindow) Matrix(android.graphics.Matrix) Button(android.widget.Button) AccountSelectCell(org.telegram.ui.Cells.AccountSelectCell) EditText(android.widget.EditText) ActionBarMenuItem(org.telegram.ui.ActionBar.ActionBarMenuItem) Rect(android.graphics.Rect) ChatAvatarContainer(org.telegram.ui.Components.ChatAvatarContainer) MenuDrawable(org.telegram.ui.ActionBar.MenuDrawable) Drawable(android.graphics.drawable.Drawable) AvatarDrawable(org.telegram.ui.Components.AvatarDrawable) MediaActionDrawable(org.telegram.ui.Components.MediaActionDrawable) PullForegroundDrawable(org.telegram.ui.Components.PullForegroundDrawable) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) MenuDrawable(org.telegram.ui.ActionBar.MenuDrawable) BitmapDrawable(android.graphics.drawable.BitmapDrawable) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) ProxyDrawable(org.telegram.ui.Components.ProxyDrawable) RLottieDrawable(org.telegram.ui.Components.RLottieDrawable) LinearGradient(android.graphics.LinearGradient) DialogsSearchAdapter(org.telegram.ui.Adapters.DialogsSearchAdapter) MessagesController(org.telegram.messenger.MessagesController) SearchViewPager(org.telegram.ui.Components.SearchViewPager) FiltersView(org.telegram.ui.Adapters.FiltersView) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter) RecyclerListView(org.telegram.ui.Components.RecyclerListView) ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper) UndoView(org.telegram.ui.Components.UndoView) DialogsAdapter(org.telegram.ui.Adapters.DialogsAdapter) FlickerLoadingView(org.telegram.ui.Components.FlickerLoadingView) AccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo) RecyclerAnimationScrollHelper(org.telegram.ui.Components.RecyclerAnimationScrollHelper) Outline(android.graphics.Outline) ViewOutlineProvider(android.view.ViewOutlineProvider) StateListAnimator(android.animation.StateListAnimator) RecyclerItemsEnterAnimator(org.telegram.ui.Components.RecyclerItemsEnterAnimator) DialogsItemAnimator(org.telegram.ui.Components.DialogsItemAnimator) ValueAnimator(android.animation.ValueAnimator) Animator(android.animation.Animator) ObjectAnimator(android.animation.ObjectAnimator) SuppressLint(android.annotation.SuppressLint) RecyclerView(androidx.recyclerview.widget.RecyclerView) RLottieDrawable(org.telegram.ui.Components.RLottieDrawable) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) TLRPC(org.telegram.tgnet.TLRPC) RadialProgress2(org.telegram.ui.Components.RadialProgress2) BackupImageView(org.telegram.ui.Components.BackupImageView) Dialog(android.app.Dialog) AlertDialog(org.telegram.ui.ActionBar.AlertDialog) TextView(android.widget.TextView) NumberTextView(org.telegram.ui.Components.NumberTextView) ImageView(android.widget.ImageView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) BackupImageView(org.telegram.ui.Components.BackupImageView) ProxyDrawable(org.telegram.ui.Components.ProxyDrawable) Canvas(android.graphics.Canvas) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) PullForegroundDrawable(org.telegram.ui.Components.PullForegroundDrawable) ActionBarMenu(org.telegram.ui.ActionBar.ActionBarMenu) RecyclerItemsEnterAnimator(org.telegram.ui.Components.RecyclerItemsEnterAnimator) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) AvatarDrawable(org.telegram.ui.Components.AvatarDrawable) FilterTabsView(org.telegram.ui.Components.FilterTabsView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) StateListAnimator(android.animation.StateListAnimator) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) AnimatorSet(android.animation.AnimatorSet) DialogsItemAnimator(org.telegram.ui.Components.DialogsItemAnimator) DialogCell(org.telegram.ui.Cells.DialogCell) HintDialogCell(org.telegram.ui.Cells.HintDialogCell) AnimatorListenerAdapter(android.animation.AnimatorListenerAdapter) ActionBarMenuSubItem(org.telegram.ui.ActionBar.ActionBarMenuSubItem) Bundle(android.os.Bundle) ImageView(android.widget.ImageView) FilterTabsView(org.telegram.ui.Components.FilterTabsView) UndoView(org.telegram.ui.Components.UndoView) SwipeGestureSettingsView(org.telegram.ui.Components.SwipeGestureSettingsView) FragmentContextView(org.telegram.ui.Components.FragmentContextView) ScrollView(android.widget.ScrollView) FiltersView(org.telegram.ui.Adapters.FiltersView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) TextView(android.widget.TextView) ChatActivityEnterView(org.telegram.ui.Components.ChatActivityEnterView) BackupImageView(org.telegram.ui.Components.BackupImageView) FlickerLoadingView(org.telegram.ui.Components.FlickerLoadingView) NumberTextView(org.telegram.ui.Components.NumberTextView) RecyclerListView(org.telegram.ui.Components.RecyclerListView) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) SuppressLint(android.annotation.SuppressLint) MotionEvent(android.view.MotionEvent) LinearSmoothScrollerCustom(androidx.recyclerview.widget.LinearSmoothScrollerCustom) ChatActivityEnterView(org.telegram.ui.Components.ChatActivityEnterView) ScrollView(android.widget.ScrollView) FrameLayout(android.widget.FrameLayout) SizeNotifierFrameLayout(org.telegram.ui.Components.SizeNotifierFrameLayout) FragmentContextView(org.telegram.ui.Components.FragmentContextView) LinearLayout(android.widget.LinearLayout)

Example 4 with RLottieImageView

use of org.telegram.ui.Components.RLottieImageView in project Telegram-FOSS by Telegram-FOSS-Team.

the class StatisticActivity method createView.

@Override
public View createView(Context context) {
    sharedUi = new BaseChartView.SharedUiComponents();
    FrameLayout frameLayout = new FrameLayout(context);
    fragmentView = frameLayout;
    recyclerListView = new RecyclerListView(context) {

        int lastH;

        @Override
        protected void onMeasure(int widthSpec, int heightSpec) {
            super.onMeasure(widthSpec, heightSpec);
            if (lastH != getMeasuredHeight() && adapter != null) {
                adapter.notifyDataSetChanged();
            }
            lastH = getMeasuredHeight();
        }
    };
    progressLayout = new LinearLayout(context);
    progressLayout.setOrientation(LinearLayout.VERTICAL);
    imageView = new RLottieImageView(context);
    imageView.setAutoRepeat(true);
    imageView.setAnimation(R.raw.statistic_preload, 120, 120);
    imageView.playAnimation();
    TextView loadingTitle = new TextView(context);
    loadingTitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
    loadingTitle.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
    loadingTitle.setTextColor(Theme.getColor(Theme.key_player_actionBarTitle));
    loadingTitle.setTag(Theme.key_player_actionBarTitle);
    loadingTitle.setText(LocaleController.getString("LoadingStats", R.string.LoadingStats));
    loadingTitle.setGravity(Gravity.CENTER_HORIZONTAL);
    TextView loadingSubtitle = new TextView(context);
    loadingSubtitle.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
    loadingSubtitle.setTextColor(Theme.getColor(Theme.key_player_actionBarSubtitle));
    loadingSubtitle.setTag(Theme.key_player_actionBarSubtitle);
    loadingSubtitle.setText(LocaleController.getString("LoadingStatsDescription", R.string.LoadingStatsDescription));
    loadingSubtitle.setGravity(Gravity.CENTER_HORIZONTAL);
    progressLayout.addView(imageView, LayoutHelper.createLinear(120, 120, Gravity.CENTER_HORIZONTAL, 0, 0, 0, 20));
    progressLayout.addView(loadingTitle, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL, 0, 0, 0, 10));
    progressLayout.addView(loadingSubtitle, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL));
    frameLayout.addView(progressLayout, LayoutHelper.createFrame(240, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 0, 0, 30));
    if (adapter == null) {
        adapter = new Adapter();
    }
    recyclerListView.setAdapter(adapter);
    layoutManager = new LinearLayoutManager(context);
    recyclerListView.setLayoutManager(layoutManager);
    animator = new DefaultItemAnimator() {

        @Override
        protected long getAddAnimationDelay(long removeDuration, long moveDuration, long changeDuration) {
            return removeDuration;
        }
    };
    recyclerListView.setItemAnimator(null);
    recyclerListView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
            if (recentPostsAll.size() != recentPostsLoaded.size()) {
                if (!messagesIsLoading && layoutManager.findLastVisibleItemPosition() > adapter.getItemCount() - 20) {
                    loadMessages();
                }
            }
        }
    });
    recyclerListView.setOnItemClickListener((view, position) -> {
        if (position >= adapter.recentPostsStartRow && position <= adapter.recentPostsEndRow) {
            MessageObject messageObject = recentPostsLoaded.get(position - adapter.recentPostsStartRow).message;
            MessageStatisticActivity activity = new MessageStatisticActivity(messageObject);
            presentFragment(activity);
        } else if (position >= adapter.topAdminsStartRow && position <= adapter.topAdminsEndRow) {
            int i = position - adapter.topAdminsStartRow;
            topAdmins.get(i).onClick(this);
        } else if (position >= adapter.topMembersStartRow && position <= adapter.topMembersEndRow) {
            int i = position - adapter.topMembersStartRow;
            topMembersVisible.get(i).onClick(this);
        } else if (position >= adapter.topInviterStartRow && position <= adapter.topInviterEndRow) {
            int i = position - adapter.topInviterStartRow;
            topInviters.get(i).onClick(this);
        } else if (position == adapter.expandTopMembersRow) {
            int newCount = topMembersAll.size() - topMembersVisible.size();
            int p = adapter.expandTopMembersRow;
            topMembersVisible.clear();
            topMembersVisible.addAll(topMembersAll);
            if (adapter != null) {
                adapter.update();
                recyclerListView.setItemAnimator(animator);
                adapter.notifyItemRangeInserted(p + 1, newCount);
                adapter.notifyItemRemoved(p);
            }
        }
    });
    recyclerListView.setOnItemLongClickListener((view, position) -> {
        if (position >= adapter.recentPostsStartRow && position <= adapter.recentPostsEndRow) {
            MessageObject messageObject = recentPostsLoaded.get(position - adapter.recentPostsStartRow).message;
            final ArrayList<String> items = new ArrayList<>();
            final ArrayList<Integer> actions = new ArrayList<>();
            final ArrayList<Integer> icons = new ArrayList<>();
            items.add(LocaleController.getString("ViewMessageStatistic", R.string.ViewMessageStatistic));
            actions.add(0);
            icons.add(R.drawable.msg_stats);
            items.add(LocaleController.getString("ViewMessage", R.string.ViewMessage));
            actions.add(1);
            icons.add(R.drawable.menu_chats);
            AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
            builder.setItems(items.toArray(new CharSequence[actions.size()]), AndroidUtilities.toIntArray(icons), (dialogInterface, i) -> {
                if (i == 0) {
                    MessageStatisticActivity activity = new MessageStatisticActivity(messageObject);
                    presentFragment(activity);
                } else if (i == 1) {
                    Bundle bundle = new Bundle();
                    bundle.putLong("chat_id", chat.id);
                    bundle.putInt("message_id", messageObject.getId());
                    bundle.putBoolean("need_remove_previous_same_chat_activity", false);
                    ChatActivity chatActivity = new ChatActivity(bundle);
                    presentFragment(chatActivity, false);
                }
            });
            showDialog(builder.create());
        } else if (position >= adapter.topAdminsStartRow && position <= adapter.topAdminsEndRow) {
            int i = position - adapter.topAdminsStartRow;
            topAdmins.get(i).onLongClick(chat, this, progressDialog);
            return true;
        } else if (position >= adapter.topMembersStartRow && position <= adapter.topMembersEndRow) {
            int i = position - adapter.topMembersStartRow;
            topMembersVisible.get(i).onLongClick(chat, this, progressDialog);
            return true;
        } else if (position >= adapter.topInviterStartRow && position <= adapter.topInviterEndRow) {
            int i = position - adapter.topInviterStartRow;
            topInviters.get(i).onLongClick(chat, this, progressDialog);
            return true;
        }
        return false;
    });
    frameLayout.addView(recyclerListView);
    avatarContainer = new ChatAvatarContainer(context, null, false);
    avatarContainer.setOccupyStatusBar(!AndroidUtilities.isTablet());
    actionBar.addView(avatarContainer, 0, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, !inPreviewMode ? 56 : 0, 0, 40, 0));
    TLRPC.Chat chatLocal = getMessagesController().getChat(chat.id);
    avatarContainer.setChatAvatar(chatLocal);
    avatarContainer.setTitle(chatLocal.title);
    avatarContainer.setSubtitle(LocaleController.getString("Statistics", R.string.Statistics));
    actionBar.setBackButtonDrawable(new BackDrawable(false));
    actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {

        @Override
        public void onItemClick(final int id) {
            if (id == -1) {
                finishFragment();
            }
        }
    });
    avatarContainer.setTitleColors(Theme.getColor(Theme.key_player_actionBarTitle), Theme.getColor(Theme.key_player_actionBarSubtitle));
    actionBar.setItemsColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2), false);
    actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), false);
    actionBar.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
    if (initialLoading) {
        progressLayout.setAlpha(0f);
        AndroidUtilities.runOnUIThread(showProgressbar, 500);
        progressLayout.setVisibility(View.VISIBLE);
        recyclerListView.setVisibility(View.GONE);
    } else {
        AndroidUtilities.cancelRunOnUIThread(showProgressbar);
        progressLayout.setVisibility(View.GONE);
        recyclerListView.setVisibility(View.VISIBLE);
    }
    diffUtilsCallback = new DiffUtilsCallback(adapter, layoutManager);
    return fragmentView;
}
Also used : AlertDialog(org.telegram.ui.ActionBar.AlertDialog) RLottieImageView(org.telegram.ui.Components.RLottieImageView) ArrayList(java.util.ArrayList) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) AnimatorListenerAdapter(android.animation.AnimatorListenerAdapter) RecyclerListView(org.telegram.ui.Components.RecyclerListView) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) DefaultItemAnimator(androidx.recyclerview.widget.DefaultItemAnimator) TLRPC(org.telegram.tgnet.TLRPC) TextView(android.widget.TextView) ActionBar(org.telegram.ui.ActionBar.ActionBar) ChatAvatarContainer(org.telegram.ui.Components.ChatAvatarContainer) Bundle(android.os.Bundle) SuppressLint(android.annotation.SuppressLint) BaseChartView(org.telegram.ui.Charts.BaseChartView) FrameLayout(android.widget.FrameLayout) RecyclerView(androidx.recyclerview.widget.RecyclerView) MessageObject(org.telegram.messenger.MessageObject) LinearLayout(android.widget.LinearLayout)

Example 5 with RLottieImageView

use of org.telegram.ui.Components.RLottieImageView in project Telegram-FOSS by Telegram-FOSS-Team.

the class QrActivity method createView.

@Override
public View createView(Context context) {
    homeTheme.loadPreviewColors(currentAccount);
    isCurrentThemeDark = Theme.getActiveTheme().isDark();
    actionBar.setAddToContainer(false);
    actionBar.setBackground(null);
    actionBar.setItemsColor(0xffffffff, false);
    FrameLayout rootLayout = new FrameLayout(context) {

        private boolean prevIsPortrait;

        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            super.dispatchTouchEvent(ev);
            return true;
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int width = MeasureSpec.getSize(widthMeasureSpec);
            int height = MeasureSpec.getSize(heightMeasureSpec);
            boolean isPortrait = width < height;
            avatarImageView.setVisibility(isPortrait ? View.VISIBLE : View.GONE);
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            if (isPortrait) {
                themeLayout.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
                qrView.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(260), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(330), MeasureSpec.EXACTLY));
            } else {
                themeLayout.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(256), MeasureSpec.EXACTLY), heightMeasureSpec);
                qrView.measure(MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(260), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(310), MeasureSpec.EXACTLY));
            }
            if (prevIsPortrait != isPortrait) {
                qrView.onSizeChanged(qrView.getMeasuredWidth(), qrView.getMeasuredHeight(), 0, 0);
            }
            prevIsPortrait = isPortrait;
        }

        @Override
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            boolean isPortrait = getWidth() < getHeight();
            backgroundView.layout(0, 0, getWidth(), getHeight());
            int themeLayoutHeight = 0;
            if (themeLayout.getVisibility() == View.VISIBLE) {
                themeLayoutHeight = themeLayout.getMeasuredHeight();
            }
            int qrLeft = isPortrait ? (getWidth() - qrView.getMeasuredWidth()) / 2 : (getWidth() - themeLayout.getMeasuredWidth() - qrView.getMeasuredWidth()) / 2;
            int qrTop = isPortrait ? (getHeight() - themeLayoutHeight - qrView.getMeasuredHeight() - AndroidUtilities.dp(48)) / 2 + AndroidUtilities.dp(48 + 4) : (getHeight() - qrView.getMeasuredHeight()) / 2;
            qrView.layout(qrLeft, qrTop, qrLeft + qrView.getMeasuredWidth(), qrTop + qrView.getMeasuredHeight());
            if (isPortrait) {
                int avatarLeft = (getWidth() - avatarImageView.getMeasuredWidth()) / 2;
                int avatarTop = qrTop - AndroidUtilities.dp(48);
                avatarImageView.layout(avatarLeft, avatarTop, avatarLeft + avatarImageView.getMeasuredWidth(), avatarTop + avatarImageView.getMeasuredHeight());
            }
            if (themeLayout.getVisibility() == View.VISIBLE) {
                if (isPortrait) {
                    int themeLayoutLeft = (getWidth() - themeLayout.getMeasuredWidth()) / 2;
                    themeLayout.layout(themeLayoutLeft, bottom - themeLayoutHeight, themeLayoutLeft + themeLayout.getMeasuredWidth(), bottom);
                } else {
                    int themeLayoutTop = (getHeight() - themeLayout.getMeasuredHeight()) / 2;
                    themeLayout.layout(right - themeLayout.getMeasuredWidth(), themeLayoutTop, right, themeLayoutTop + themeLayout.getMeasuredHeight());
                }
            }
            logoImageView.layout(qrLeft + logoRect.left, qrTop + logoRect.top, qrLeft + logoRect.right, qrTop + logoRect.bottom);
            int closeLeft = isPortrait ? AndroidUtilities.dp(14) : AndroidUtilities.dp(17);
            int closeTop = AndroidUtilities.statusBarHeight + (isPortrait ? AndroidUtilities.dp(10) : AndroidUtilities.dp(5));
            closeImageView.layout(closeLeft, closeTop, closeLeft + closeImageView.getMeasuredWidth(), closeTop + closeImageView.getMeasuredHeight());
        }
    };
    backgroundView = new View(context) {

        @Override
        protected void onDraw(Canvas canvas) {
            if (prevMotionDrawable != null) {
                prevMotionDrawable.setBounds(0, 0, getWidth(), getHeight());
            }
            currMotionDrawable.setBounds(0, 0, getWidth(), getHeight());
            if (prevMotionDrawable != null)
                prevMotionDrawable.drawBackground(canvas);
            currMotionDrawable.drawBackground(canvas);
            if (prevMotionDrawable != null)
                prevMotionDrawable.drawPattern(canvas);
            currMotionDrawable.drawPattern(canvas);
            super.onDraw(canvas);
        }
    };
    rootLayout.addView(backgroundView);
    AvatarDrawable avatarDrawable = null;
    String username = null;
    ImageLocation imageLocationSmall = null;
    ImageLocation imageLocation = null;
    if (userId != 0) {
        TLRPC.User user = getMessagesController().getUser(userId);
        if (user != null) {
            username = user.username;
            avatarDrawable = new AvatarDrawable(user);
            imageLocationSmall = ImageLocation.getForUser(user, ImageLocation.TYPE_SMALL);
            imageLocation = ImageLocation.getForUser(user, ImageLocation.TYPE_BIG);
        }
    } else if (chatId != 0) {
        TLRPC.Chat chat = getMessagesController().getChat(chatId);
        if (chat != null) {
            username = chat.username;
            avatarDrawable = new AvatarDrawable(chat);
            imageLocationSmall = ImageLocation.getForChat(chat, ImageLocation.TYPE_SMALL);
            imageLocation = ImageLocation.getForChat(chat, ImageLocation.TYPE_BIG);
        }
    }
    String link = "https://" + MessagesController.getInstance(currentAccount).linkPrefix + "/" + username;
    qrView = new QrView(context);
    qrView.setColors(0xFF71B654, 0xFF2C9077, 0xFF9ABB3E, 0xFF68B55E);
    qrView.setData(link, username);
    qrView.setCenterChangedListener((left, top, right, bottom) -> {
        logoRect.set(left, top, right, bottom);
        qrView.requestLayout();
    });
    rootLayout.addView(qrView);
    logoImageView = new RLottieImageView(context);
    logoImageView.setAutoRepeat(true);
    logoImageView.setAnimation(R.raw.qr_code_logo_2, 60, 60);
    logoImageView.playAnimation();
    rootLayout.addView(logoImageView);
    avatarImageView = new BackupImageView(context);
    avatarImageView.setRoundRadius(AndroidUtilities.dp(42));
    avatarImageView.setSize(AndroidUtilities.dp(84), AndroidUtilities.dp(84));
    rootLayout.addView(avatarImageView, LayoutHelper.createFrame(84, 84, Gravity.LEFT | Gravity.TOP));
    avatarImageView.setImage(imageLocation, "84_84", imageLocationSmall, "50_50", avatarDrawable, null, null, 0, null);
    closeImageView = new ImageView(context);
    closeImageView.setBackground(Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(34), 0x28000000, 0x28ffffff));
    closeImageView.setImageResource(R.drawable.ic_ab_back);
    closeImageView.setScaleType(ImageView.ScaleType.CENTER);
    closeImageView.setOnClickListener(v -> finishFragment());
    rootLayout.addView(closeImageView, LayoutHelper.createFrame(34, 34));
    emojiThemeIcon = Bitmap.createBitmap(AndroidUtilities.dp(32), AndroidUtilities.dp(32), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(emojiThemeIcon);
    AndroidUtilities.rectTmp.set(0f, 0f, emojiThemeIcon.getWidth(), emojiThemeIcon.getHeight());
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.WHITE);
    canvas.drawRoundRect(AndroidUtilities.rectTmp, AndroidUtilities.dp(5), AndroidUtilities.dp(5), paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
    Bitmap bitmap = BitmapFactory.decodeResource(ApplicationLoader.applicationContext.getResources(), R.drawable.msg_qr_mini);
    canvas.drawBitmap(bitmap, (emojiThemeIcon.getWidth() - bitmap.getWidth()) * 0.5f, (emojiThemeIcon.getHeight() - bitmap.getHeight()) * 0.5f, paint);
    canvas.setBitmap(null);
    themesViewController = new ThemeListViewController(this, getParentActivity().getWindow()) {

        @Override
        protected void setDarkTheme(boolean isDark) {
            super.setDarkTheme(isDark);
            isCurrentThemeDark = isDark;
            onItemSelected(currentTheme, selectedPosition, false);
        }
    };
    themeLayout = themesViewController.rootLayout;
    themesViewController.onCreate();
    themesViewController.setItemSelectedListener((theme, position) -> QrActivity.this.onItemSelected(theme, position, true));
    themesViewController.titleView.setText(LocaleController.getString("QrCode", R.string.QrCode));
    themesViewController.progressView.setViewType(FlickerLoadingView.QR_TYPE);
    themesViewController.shareButton.setOnClickListener(v -> {
        themesViewController.shareButton.setClickable(false);
        performShare();
    });
    rootLayout.addView(themeLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM));
    currMotionDrawable.setIndeterminateAnimation(true);
    fragmentView = rootLayout;
    onItemSelected(currentTheme, 0, false);
    if (cachedThemes == null || cachedThemes.isEmpty()) {
        ChatThemeController.requestAllChatThemes(new ResultCallback<List<EmojiThemes>>() {

            @Override
            public void onComplete(List<EmojiThemes> result) {
                onDataLoaded(result);
                cachedThemes = result;
            }

            @Override
            public void onError(TLRPC.TL_error error) {
                Toast.makeText(getParentActivity(), error.text, Toast.LENGTH_SHORT).show();
            }
        }, true);
    } else {
        onDataLoaded(cachedThemes);
    }
    prevSystemUiVisibility = getParentActivity().getWindow().getDecorView().getSystemUiVisibility();
    applyScreenSettings();
    return fragmentView;
}
Also used : RLottieImageView(org.telegram.ui.Components.RLottieImageView) ImageLocation(org.telegram.messenger.ImageLocation) TLRPC(org.telegram.tgnet.TLRPC) EmojiThemes(org.telegram.ui.ActionBar.EmojiThemes) Bitmap(android.graphics.Bitmap) BackupImageView(org.telegram.ui.Components.BackupImageView) List(java.util.List) ArrayList(java.util.ArrayList) ImageView(android.widget.ImageView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) BackupImageView(org.telegram.ui.Components.BackupImageView) Canvas(android.graphics.Canvas) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) RLottieImageView(org.telegram.ui.Components.RLottieImageView) ThemeSmallPreviewView(org.telegram.ui.Components.ThemeSmallPreviewView) TextView(android.widget.TextView) BackupImageView(org.telegram.ui.Components.BackupImageView) FlickerLoadingView(org.telegram.ui.Components.FlickerLoadingView) RecyclerListView(org.telegram.ui.Components.RecyclerListView) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) SuppressLint(android.annotation.SuppressLint) MotionEvent(android.view.MotionEvent) PorterDuffXfermode(android.graphics.PorterDuffXfermode) FrameLayout(android.widget.FrameLayout) AvatarDrawable(org.telegram.ui.Components.AvatarDrawable)

Aggregations

RLottieImageView (org.telegram.ui.Components.RLottieImageView)14 View (android.view.View)12 FrameLayout (android.widget.FrameLayout)12 ImageView (android.widget.ImageView)12 TextView (android.widget.TextView)11 Canvas (android.graphics.Canvas)10 Paint (android.graphics.Paint)10 ViewGroup (android.view.ViewGroup)10 TLRPC (org.telegram.tgnet.TLRPC)10 RecyclerListView (org.telegram.ui.Components.RecyclerListView)10 Bundle (android.os.Bundle)9 LinearLayout (android.widget.LinearLayout)9 RecyclerView (androidx.recyclerview.widget.RecyclerView)9 ArrayList (java.util.ArrayList)9 ActionBar (org.telegram.ui.ActionBar.ActionBar)9 BaseFragment (org.telegram.ui.ActionBar.BaseFragment)9 AnimatorListenerAdapter (android.animation.AnimatorListenerAdapter)8 AndroidUtilities (org.telegram.messenger.AndroidUtilities)8 AlertDialog (org.telegram.ui.ActionBar.AlertDialog)8 Animator (android.animation.Animator)7