Search in sources :

Example 6 with ChatMessageCell

use of org.telegram.ui.Cells.ChatMessageCell in project Telegram-FOSS by Telegram-FOSS-Team.

the class ChatListItemAnimator method groupWillChanged.

public void groupWillChanged(MessageObject.GroupedMessages groupedMessages) {
    if (groupedMessages == null) {
        return;
    }
    if (groupedMessages.messages.size() == 0) {
        groupedMessages.transitionParams.drawBackgroundForDeletedItems = true;
    } else {
        if (groupedMessages.transitionParams.top == 0 && groupedMessages.transitionParams.bottom == 0 && groupedMessages.transitionParams.left == 0 && groupedMessages.transitionParams.right == 0) {
            int n = recyclerListView.getChildCount();
            for (int i = 0; i < n; i++) {
                View child = recyclerListView.getChildAt(i);
                if (child instanceof ChatMessageCell) {
                    ChatMessageCell cell = (ChatMessageCell) child;
                    MessageObject messageObject = cell.getMessageObject();
                    if (cell.getTransitionParams().wasDraw && groupedMessages.messages.contains(messageObject)) {
                        groupedMessages.transitionParams.top = cell.getTop() + cell.getBackgroundDrawableTop();
                        groupedMessages.transitionParams.bottom = cell.getTop() + cell.getBackgroundDrawableBottom();
                        groupedMessages.transitionParams.left = cell.getLeft() + cell.getBackgroundDrawableLeft();
                        groupedMessages.transitionParams.right = cell.getLeft() + cell.getBackgroundDrawableRight();
                        groupedMessages.transitionParams.drawCaptionLayout = cell.hasCaptionLayout();
                        groupedMessages.transitionParams.pinnedTop = cell.isPinnedTop();
                        groupedMessages.transitionParams.pinnedBotton = cell.isPinnedBottom();
                        groupedMessages.transitionParams.isNewGroup = true;
                        break;
                    }
                }
            }
        }
        willChangedGroups.add(groupedMessages);
    }
}
Also used : ChatMessageCell(org.telegram.ui.Cells.ChatMessageCell) ChatGreetingsView(org.telegram.ui.Components.ChatGreetingsView) View(android.view.View) RecyclerListView(org.telegram.ui.Components.RecyclerListView) MessageObject(org.telegram.messenger.MessageObject)

Example 7 with ChatMessageCell

use of org.telegram.ui.Cells.ChatMessageCell in project Telegram-FOSS by Telegram-FOSS-Team.

the class ThemePreviewActivity method createView.

@SuppressLint("Recycle")
@Override
public View createView(Context context) {
    hasOwnBackground = true;
    if (AndroidUtilities.isTablet()) {
        actionBar.setOccupyStatusBar(false);
    }
    page1 = new FrameLayout(context);
    ActionBarMenu menu = actionBar.createMenu();
    final ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_search).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() {

        @Override
        public void onSearchExpand() {
        }

        @Override
        public boolean canCollapseSearch() {
            return true;
        }

        @Override
        public void onSearchCollapse() {
        }

        @Override
        public void onTextChanged(EditText editText) {
        }
    });
    item.setSearchFieldHint(LocaleController.getString("Search", R.string.Search));
    actionBar.setBackButtonDrawable(new MenuDrawable());
    actionBar.setAddToContainer(false);
    actionBar.setTitle(LocaleController.getString("ThemePreview", R.string.ThemePreview));
    page1 = new FrameLayout(context) {

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int widthSize = MeasureSpec.getSize(widthMeasureSpec);
            int heightSize = MeasureSpec.getSize(heightMeasureSpec);
            setMeasuredDimension(widthSize, heightSize);
            measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
            int actionBarHeight = actionBar.getMeasuredHeight();
            if (actionBar.getVisibility() == VISIBLE) {
                heightSize -= actionBarHeight;
            }
            FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) listView.getLayoutParams();
            layoutParams.topMargin = actionBarHeight;
            listView.measure(MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY));
            measureChildWithMargins(floatingButton, widthMeasureSpec, 0, heightMeasureSpec, 0);
        }

        @Override
        protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
            boolean result = super.drawChild(canvas, child, drawingTime);
            if (child == actionBar && parentLayout != null) {
                parentLayout.drawHeaderShadow(canvas, actionBar.getVisibility() == VISIBLE ? actionBar.getMeasuredHeight() : 0);
            }
            return result;
        }
    };
    page1.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
    page1.addView(actionBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
    listView = new RecyclerListView(context);
    listView.setVerticalScrollBarEnabled(true);
    listView.setItemAnimator(null);
    listView.setLayoutAnimation(null);
    listView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
    listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
    listView.setPadding(0, 0, 0, AndroidUtilities.dp(screenType != SCREEN_TYPE_PREVIEW ? 12 : 0));
    listView.setOnItemClickListener((view, position) -> {
    });
    page1.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP));
    floatingButton = new ImageView(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));
    floatingButton.setImageResource(R.drawable.floating_pencil);
    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));
            }
        });
    }
    page1.addView(floatingButton, LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.BOTTOM, LocaleController.isRTL ? 14 : 0, 0, LocaleController.isRTL ? 0 : 14, 14));
    dialogsAdapter = new DialogsAdapter(context);
    listView.setAdapter(dialogsAdapter);
    page2 = new FrameLayout(context) {

        private boolean ignoreLayout;

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int widthSize = MeasureSpec.getSize(widthMeasureSpec);
            int heightSize = MeasureSpec.getSize(heightMeasureSpec);
            setMeasuredDimension(widthSize, heightSize);
            if (dropDownContainer != null) {
                ignoreLayout = true;
                if (!AndroidUtilities.isTablet()) {
                    FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) dropDownContainer.getLayoutParams();
                    layoutParams.topMargin = (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0);
                    dropDownContainer.setLayoutParams(layoutParams);
                }
                if (!AndroidUtilities.isTablet() && ApplicationLoader.applicationContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                    dropDown.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
                } else {
                    dropDown.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
                }
                ignoreLayout = false;
            }
            measureChildWithMargins(actionBar2, widthMeasureSpec, 0, heightMeasureSpec, 0);
            int actionBarHeight = actionBar2.getMeasuredHeight();
            if (actionBar2.getVisibility() == VISIBLE) {
                heightSize -= actionBarHeight;
            }
            FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) listView2.getLayoutParams();
            layoutParams.topMargin = actionBarHeight;
            listView2.measure(MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(heightSize - layoutParams.bottomMargin, MeasureSpec.EXACTLY));
            layoutParams = (FrameLayout.LayoutParams) backgroundImage.getLayoutParams();
            layoutParams.topMargin = actionBarHeight;
            backgroundImage.measure(MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY));
            if (bottomOverlayChat != null) {
                measureChildWithMargins(bottomOverlayChat, widthMeasureSpec, 0, heightMeasureSpec, 0);
            }
            for (int a = 0; a < patternLayout.length; a++) {
                if (patternLayout[a] != null) {
                    measureChildWithMargins(patternLayout[a], widthMeasureSpec, 0, heightMeasureSpec, 0);
                }
            }
        }

        @Override
        protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
            boolean result = super.drawChild(canvas, child, drawingTime);
            if (child == actionBar2 && parentLayout != null) {
                parentLayout.drawHeaderShadow(canvas, actionBar2.getVisibility() == VISIBLE ? (int) (actionBar2.getMeasuredHeight() + actionBar2.getTranslationY()) : 0);
            }
            return result;
        }

        @Override
        public void requestLayout() {
            if (ignoreLayout) {
                return;
            }
            super.requestLayout();
        }
    };
    messagesAdapter = new MessagesAdapter(context);
    actionBar2 = createActionBar(context);
    if (AndroidUtilities.isTablet()) {
        actionBar2.setOccupyStatusBar(false);
    }
    actionBar2.setBackButtonDrawable(new BackDrawable(false));
    actionBar2.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {

        @Override
        public void onItemClick(int id) {
            if (id == -1) {
                if (checkDiscard()) {
                    cancelThemeApply(false);
                }
            } else if (id >= 1 && id <= 3) {
                selectColorType(id);
            } else if (id == 4) {
                if (removeBackgroundOverride) {
                    Theme.resetCustomWallpaper(false);
                }
                File path = accent.getPathToWallpaper();
                if (path != null) {
                    path.delete();
                }
                accent.patternSlug = selectedPattern != null ? selectedPattern.slug : "";
                accent.patternIntensity = currentIntensity;
                accent.patternMotion = isMotion;
                if ((int) accent.backgroundOverrideColor == 0) {
                    accent.backgroundOverrideColor = 0x100000000L;
                }
                if ((int) accent.backgroundGradientOverrideColor1 == 0) {
                    accent.backgroundGradientOverrideColor1 = 0x100000000L;
                }
                if ((int) accent.backgroundGradientOverrideColor2 == 0) {
                    accent.backgroundGradientOverrideColor2 = 0x100000000L;
                }
                if ((int) accent.backgroundGradientOverrideColor3 == 0) {
                    accent.backgroundGradientOverrideColor3 = 0x100000000L;
                }
                saveAccentWallpaper();
                NotificationCenter.getGlobalInstance().removeObserver(ThemePreviewActivity.this, NotificationCenter.wallpapersDidLoad);
                Theme.saveThemeAccents(applyingTheme, true, false, false, true);
                Theme.applyPreviousTheme();
                NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.needSetDayNightTheme, applyingTheme, nightTheme, null, -1);
                finishFragment();
            } else if (id == 5) {
                if (getParentActivity() == null) {
                    return;
                }
                String link;
                StringBuilder modes = new StringBuilder();
                if (isBlurred) {
                    modes.append("blur");
                }
                if (isMotion) {
                    if (modes.length() > 0) {
                        modes.append("+");
                    }
                    modes.append("motion");
                }
                if (currentWallpaper instanceof TLRPC.TL_wallPaper) {
                    TLRPC.TL_wallPaper wallPaper = (TLRPC.TL_wallPaper) currentWallpaper;
                    link = "https://" + MessagesController.getInstance(currentAccount).linkPrefix + "/bg/" + wallPaper.slug;
                    if (modes.length() > 0) {
                        link += "?mode=" + modes.toString();
                    }
                } else if (currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
                    WallpapersListActivity.ColorWallpaper colorWallpaper = new WallpapersListActivity.ColorWallpaper(selectedPattern != null ? selectedPattern.slug : Theme.COLOR_BACKGROUND_SLUG, backgroundColor, backgroundGradientColor1, backgroundGradientColor2, backgroundGradientColor3, backgroundRotation, currentIntensity, isMotion, null);
                    colorWallpaper.pattern = selectedPattern;
                    link = colorWallpaper.getUrl();
                } else {
                    if (BuildVars.DEBUG_PRIVATE_VERSION) {
                        Theme.ThemeAccent accent = Theme.getActiveTheme().getAccent(false);
                        if (accent != null) {
                            WallpapersListActivity.ColorWallpaper colorWallpaper = new WallpapersListActivity.ColorWallpaper(accent.patternSlug, (int) accent.backgroundOverrideColor, (int) accent.backgroundGradientOverrideColor1, (int) accent.backgroundGradientOverrideColor2, (int) accent.backgroundGradientOverrideColor3, accent.backgroundRotation, accent.patternIntensity, accent.patternMotion, null);
                            for (int a = 0, N = patterns.size(); a < N; a++) {
                                TLRPC.TL_wallPaper wallPaper = (TLRPC.TL_wallPaper) patterns.get(a);
                                if (wallPaper.pattern) {
                                    if (accent.patternSlug.equals(wallPaper.slug)) {
                                        colorWallpaper.pattern = wallPaper;
                                        break;
                                    }
                                }
                            }
                            link = colorWallpaper.getUrl();
                        } else {
                            return;
                        }
                    } else {
                        return;
                    }
                }
                showDialog(new ShareAlert(getParentActivity(), null, link, false, link, false) {

                    @Override
                    protected void onSend(LongSparseArray<TLRPC.Dialog> dids, int count) {
                        if (dids.size() == 1) {
                            undoView.showWithAction(dids.valueAt(0).id, UndoView.ACTION_SHARE_BACKGROUND, count);
                        } else {
                            undoView.showWithAction(0, UndoView.ACTION_SHARE_BACKGROUND, count, dids.size(), null, null);
                        }
                    }
                });
            }
        }
    });
    backgroundImage = new BackupImageView(context) {

        private Drawable background;

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            parallaxScale = parallaxEffect.getScale(getMeasuredWidth(), getMeasuredHeight());
            if (isMotion) {
                setScaleX(parallaxScale);
                setScaleY(parallaxScale);
            }
            if (radialProgress != null) {
                int size = AndroidUtilities.dp(44);
                int x = (getMeasuredWidth() - size) / 2;
                int y = (getMeasuredHeight() - size) / 2;
                radialProgress.setProgressRect(x, y, x + size, y + size);
            }
            progressVisible = screenType == SCREEN_TYPE_CHANGE_BACKGROUND && getMeasuredWidth() <= getMeasuredHeight();
        }

        @Override
        protected void onDraw(Canvas canvas) {
            if (background instanceof ColorDrawable || background instanceof GradientDrawable || background instanceof MotionBackgroundDrawable) {
                background.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight());
                background.draw(canvas);
            } else if (background instanceof BitmapDrawable) {
                BitmapDrawable bitmapDrawable = (BitmapDrawable) background;
                if (bitmapDrawable.getTileModeX() == Shader.TileMode.REPEAT) {
                    canvas.save();
                    float scale = 2.0f / AndroidUtilities.density;
                    canvas.scale(scale, scale);
                    background.setBounds(0, 0, (int) Math.ceil(getMeasuredWidth() / scale), (int) Math.ceil(getMeasuredHeight() / scale));
                    background.draw(canvas);
                    canvas.restore();
                } else {
                    int viewHeight = getMeasuredHeight();
                    float scaleX = (float) getMeasuredWidth() / (float) background.getIntrinsicWidth();
                    float scaleY = (float) (viewHeight) / (float) background.getIntrinsicHeight();
                    float scale = Math.max(scaleX, scaleY);
                    int width = (int) Math.ceil(background.getIntrinsicWidth() * scale * parallaxScale);
                    int height = (int) Math.ceil(background.getIntrinsicHeight() * scale * parallaxScale);
                    int x = (getMeasuredWidth() - width) / 2;
                    int y = (viewHeight - height) / 2;
                    background.setBounds(x, y, x + width, y + height);
                    background.draw(canvas);
                }
            }
            super.onDraw(canvas);
            if (progressVisible && radialProgress != null) {
                radialProgress.draw(canvas);
            }
        }

        @Override
        public Drawable getBackground() {
            return background;
        }

        @Override
        public void setBackground(Drawable drawable) {
            background = drawable;
        }

        @Override
        public void setAlpha(float alpha) {
            if (radialProgress != null) {
                radialProgress.setOverrideAlpha(alpha);
            }
        }
    };
    page2.addView(backgroundImage, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP, 0, 0, 0, 48));
    if (screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
        backgroundImage.getImageReceiver().setDelegate((imageReceiver, set, thumb, memCache) -> {
            if (!(currentWallpaper instanceof WallpapersListActivity.ColorWallpaper)) {
                Drawable dr = imageReceiver.getDrawable();
                if (set && dr != null) {
                    if (!Theme.hasThemeKey(Theme.key_chat_serviceBackground) || backgroundImage.getBackground() instanceof MotionBackgroundDrawable) {
                        Theme.applyChatServiceMessageColor(AndroidUtilities.calcDrawableColor(dr), dr);
                    }
                    listView2.invalidateViews();
                    if (backgroundButtonsContainer != null) {
                        for (int a = 0, N = backgroundButtonsContainer.getChildCount(); a < N; a++) {
                            backgroundButtonsContainer.getChildAt(a).invalidate();
                        }
                    }
                    if (messagesButtonsContainer != null) {
                        for (int a = 0, N = messagesButtonsContainer.getChildCount(); a < N; a++) {
                            messagesButtonsContainer.getChildAt(a).invalidate();
                        }
                    }
                    if (radialProgress != null) {
                        radialProgress.setColors(Theme.key_chat_serviceBackground, Theme.key_chat_serviceBackground, Theme.key_chat_serviceText, Theme.key_chat_serviceText);
                    }
                    if (!thumb && isBlurred && blurredBitmap == null) {
                        backgroundImage.getImageReceiver().setCrossfadeWithOldImage(false);
                        updateBlurred();
                        backgroundImage.getImageReceiver().setCrossfadeWithOldImage(true);
                    }
                }
            }
        });
    }
    if (messagesAdapter.showSecretMessages) {
        actionBar2.setTitle("Telegram Beta Chat");
        actionBar2.setSubtitle(LocaleController.formatPluralString("Members", 505));
    } else {
        if (screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
            actionBar2.setTitle(LocaleController.getString("BackgroundPreview", R.string.BackgroundPreview));
            if (BuildVars.DEBUG_PRIVATE_VERSION && Theme.getActiveTheme().getAccent(false) != null || currentWallpaper instanceof WallpapersListActivity.ColorWallpaper && !Theme.DEFAULT_BACKGROUND_SLUG.equals(((WallpapersListActivity.ColorWallpaper) currentWallpaper).slug) || currentWallpaper instanceof TLRPC.TL_wallPaper) {
                ActionBarMenu menu2 = actionBar2.createMenu();
                menu2.addItem(5, R.drawable.msg_share_filled);
            }
        } else if (screenType == SCREEN_TYPE_ACCENT_COLOR) {
            ActionBarMenu menu2 = actionBar2.createMenu();
            saveItem = menu2.addItem(4, LocaleController.getString("Save", R.string.Save).toUpperCase());
            dropDownContainer = new ActionBarMenuItem(context, menu2, 0, 0) {

                @Override
                public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
                    super.onInitializeAccessibilityNodeInfo(info);
                    info.setText(dropDown.getText());
                }
            };
            dropDownContainer.setSubMenuOpenSide(1);
            dropDownContainer.addSubItem(2, LocaleController.getString("ColorPickerBackground", R.string.ColorPickerBackground));
            dropDownContainer.addSubItem(1, LocaleController.getString("ColorPickerMainColor", R.string.ColorPickerMainColor));
            dropDownContainer.addSubItem(3, LocaleController.getString("ColorPickerMyMessages", R.string.ColorPickerMyMessages));
            dropDownContainer.setAllowCloseAnimation(false);
            dropDownContainer.setForceSmoothKeyboard(true);
            actionBar2.addView(dropDownContainer, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, AndroidUtilities.isTablet() ? 64 : 56, 0, 40, 0));
            dropDownContainer.setOnClickListener(view -> dropDownContainer.toggleSubMenu());
            dropDown = new TextView(context);
            dropDown.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
            dropDown.setGravity(Gravity.LEFT);
            dropDown.setSingleLine(true);
            dropDown.setLines(1);
            dropDown.setMaxLines(1);
            dropDown.setEllipsize(TextUtils.TruncateAt.END);
            dropDown.setTextColor(Theme.getColor(Theme.key_actionBarDefaultTitle));
            dropDown.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
            dropDown.setText(LocaleController.getString("ColorPickerMainColor", R.string.ColorPickerMainColor));
            Drawable dropDownDrawable = context.getResources().getDrawable(R.drawable.ic_arrow_drop_down).mutate();
            dropDownDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_actionBarDefaultTitle), PorterDuff.Mode.MULTIPLY));
            dropDown.setCompoundDrawablesWithIntrinsicBounds(null, null, dropDownDrawable, null);
            dropDown.setCompoundDrawablePadding(AndroidUtilities.dp(4));
            dropDown.setPadding(0, 0, AndroidUtilities.dp(10), 0);
            dropDownContainer.addView(dropDown, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 16, 0, 0, 1));
        } else {
            String name = applyingTheme.info != null ? applyingTheme.info.title : applyingTheme.getName();
            int index = name.lastIndexOf(".attheme");
            if (index >= 0) {
                name = name.substring(0, index);
            }
            actionBar2.setTitle(name);
            if (applyingTheme.info != null && applyingTheme.info.installs_count > 0) {
                actionBar2.setSubtitle(LocaleController.formatPluralString("ThemeInstallCount", applyingTheme.info.installs_count));
            } else {
                actionBar2.setSubtitle(LocaleController.formatDateOnline(System.currentTimeMillis() / 1000 - 60 * 60));
            }
        }
    }
    listView2 = new RecyclerListView(context) {

        @Override
        public boolean drawChild(Canvas canvas, View child, long drawingTime) {
            boolean result = super.drawChild(canvas, child, drawingTime);
            if (child instanceof ChatMessageCell) {
                ChatMessageCell chatMessageCell = (ChatMessageCell) child;
                MessageObject message = chatMessageCell.getMessageObject();
                ImageReceiver imageReceiver = chatMessageCell.getAvatarImage();
                if (imageReceiver != null) {
                    int top = child.getTop();
                    if (chatMessageCell.isPinnedBottom()) {
                        ViewHolder holder = listView2.getChildViewHolder(child);
                        if (holder != null) {
                            int p = holder.getAdapterPosition();
                            int nextPosition;
                            nextPosition = p - 1;
                            holder = listView2.findViewHolderForAdapterPosition(nextPosition);
                            if (holder != null) {
                                imageReceiver.setImageY(-AndroidUtilities.dp(1000));
                                imageReceiver.draw(canvas);
                                return result;
                            }
                        }
                    }
                    float tx = chatMessageCell.getTranslationX();
                    int y = child.getTop() + chatMessageCell.getLayoutHeight();
                    int maxY = listView2.getMeasuredHeight() - listView2.getPaddingBottom();
                    if (y > maxY) {
                        y = maxY;
                    }
                    if (chatMessageCell.isPinnedTop()) {
                        ViewHolder holder = listView2.getChildViewHolder(child);
                        if (holder != null) {
                            int tries = 0;
                            while (true) {
                                if (tries >= 20) {
                                    break;
                                }
                                tries++;
                                int p = holder.getAdapterPosition();
                                int prevPosition = p + 1;
                                holder = listView2.findViewHolderForAdapterPosition(prevPosition);
                                if (holder != null) {
                                    top = holder.itemView.getTop();
                                    if (y - AndroidUtilities.dp(48) < holder.itemView.getBottom()) {
                                        tx = Math.min(holder.itemView.getTranslationX(), tx);
                                    }
                                    if (holder.itemView instanceof ChatMessageCell) {
                                        ChatMessageCell cell = (ChatMessageCell) holder.itemView;
                                        if (!cell.isPinnedTop()) {
                                            break;
                                        }
                                    } else {
                                        break;
                                    }
                                } else {
                                    break;
                                }
                            }
                        }
                    }
                    if (y - AndroidUtilities.dp(48) < top) {
                        y = top + AndroidUtilities.dp(48);
                    }
                    if (tx != 0) {
                        canvas.save();
                        canvas.translate(tx, 0);
                    }
                    imageReceiver.setImageY(y - AndroidUtilities.dp(44));
                    imageReceiver.draw(canvas);
                    if (tx != 0) {
                        canvas.restore();
                    }
                }
            }
            return result;
        }

        @Override
        public void setTranslationY(float translationY) {
            super.setTranslationY(translationY);
            if (backgroundCheckBoxView != null) {
                for (int a = 0; a < backgroundCheckBoxView.length; a++) {
                    backgroundCheckBoxView[a].invalidate();
                }
            }
            if (messagesCheckBoxView != null) {
                for (int a = 0; a < messagesCheckBoxView.length; a++) {
                    messagesCheckBoxView[a].invalidate();
                }
            }
            if (backgroundPlayAnimationView != null) {
                backgroundPlayAnimationView.invalidate();
            }
            if (messagesPlayAnimationView != null) {
                messagesPlayAnimationView.invalidate();
            }
        }

        @Override
        protected void onChildPressed(View child, float x, float y, boolean pressed) {
            if (pressed && child instanceof ChatMessageCell) {
                ChatMessageCell messageCell = (ChatMessageCell) child;
                if (!messageCell.isInsideBackground(x, y)) {
                    return;
                }
            }
            super.onChildPressed(child, x, y, pressed);
        }

        @Override
        protected boolean allowSelectChildAtPosition(View child) {
            RecyclerView.ViewHolder holder = listView2.findContainingViewHolder(child);
            if (holder != null && holder.getItemViewType() == 2) {
                return false;
            }
            return super.allowSelectChildAtPosition(child);
        }

        @Override
        public boolean onTouchEvent(MotionEvent e) {
            checkMotionEvent(e);
            return super.onTouchEvent(e);
        }

        private void checkMotionEvent(MotionEvent e) {
            if (e.getAction() == MotionEvent.ACTION_UP) {
                if (!wasScroll && currentWallpaper instanceof WallpapersListActivity.ColorWallpaper && patternLayout[0].getVisibility() == View.VISIBLE) {
                    showPatternsView(0, false, true);
                }
                wasScroll = false;
            }
        }
    };
    DefaultItemAnimator itemAnimator = new DefaultItemAnimator() {

        @Override
        protected void onMoveAnimationUpdate(RecyclerView.ViewHolder holder) {
            listView2.invalidateViews();
        }
    };
    itemAnimator.setDelayAnimations(false);
    listView2.setItemAnimator(itemAnimator);
    listView2.setVerticalScrollBarEnabled(true);
    listView2.setOverScrollMode(RecyclerListView.OVER_SCROLL_NEVER);
    if (screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
        listView2.setPadding(0, AndroidUtilities.dp(4), 0, AndroidUtilities.dp(4 + 48));
    } else if (screenType == SCREEN_TYPE_ACCENT_COLOR) {
        listView2.setPadding(0, AndroidUtilities.dp(4), 0, AndroidUtilities.dp(16));
    } else {
        listView2.setPadding(0, AndroidUtilities.dp(4), 0, AndroidUtilities.dp(4));
    }
    listView2.setClipToPadding(false);
    listView2.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, true));
    listView2.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
    if (screenType == SCREEN_TYPE_ACCENT_COLOR) {
        page2.addView(listView2, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP, 0, 0, 0, 273));
        listView2.setOnItemClickListener((view, position, x, y) -> {
            if (view instanceof ChatMessageCell) {
                ChatMessageCell cell = (ChatMessageCell) view;
                if (cell.isInsideBackground(x, y)) {
                    if (cell.getMessageObject().isOutOwner()) {
                        selectColorType(3);
                    } else {
                        selectColorType(1);
                    }
                } else {
                    selectColorType(2);
                }
            }
        });
    } else {
        page2.addView(listView2, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP));
    }
    listView2.setOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            listView2.invalidateViews();
            wasScroll = true;
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                wasScroll = false;
            }
        }
    });
    page2.addView(actionBar2, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
    parallaxEffect = new WallpaperParallaxEffect(context);
    parallaxEffect.setCallback((offsetX, offsetY, angle) -> {
        if (!isMotion) {
            return;
        }
        Drawable background = backgroundImage.getBackground();
        float progress;
        if (motionAnimation != null) {
            progress = (backgroundImage.getScaleX() - 1.0f) / (parallaxScale - 1.0f);
        } else {
            progress = 1.0f;
        }
        backgroundImage.setTranslationX(offsetX * progress);
        backgroundImage.setTranslationY(offsetY * progress);
    });
    if (screenType == SCREEN_TYPE_ACCENT_COLOR || screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
        radialProgress = new RadialProgress2(backgroundImage);
        radialProgress.setColors(Theme.key_chat_serviceBackground, Theme.key_chat_serviceBackground, Theme.key_chat_serviceText, Theme.key_chat_serviceText);
        if (screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
            bottomOverlayChat = new FrameLayout(context) {

                @Override
                public 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);
                }
            };
            bottomOverlayChat.setWillNotDraw(false);
            bottomOverlayChat.setPadding(0, AndroidUtilities.dp(3), 0, 0);
            page2.addView(bottomOverlayChat, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 51, Gravity.BOTTOM));
            bottomOverlayChat.setOnClickListener(view -> {
                boolean done;
                boolean sameFile = false;
                Theme.ThemeInfo theme = Theme.getActiveTheme();
                String originalFileName = theme.generateWallpaperName(null, isBlurred);
                String fileName = isBlurred ? theme.generateWallpaperName(null, false) : originalFileName;
                File toFile = new File(ApplicationLoader.getFilesDirFixed(), originalFileName);
                if (currentWallpaper instanceof TLRPC.TL_wallPaper) {
                    if (originalBitmap != null) {
                        try {
                            FileOutputStream stream = new FileOutputStream(toFile);
                            originalBitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream);
                            stream.close();
                            done = true;
                        } catch (Exception e) {
                            done = false;
                            FileLog.e(e);
                        }
                    } else {
                        ImageReceiver imageReceiver = backgroundImage.getImageReceiver();
                        if (imageReceiver.hasNotThumb() || imageReceiver.hasStaticThumb()) {
                            Bitmap bitmap = imageReceiver.getBitmap();
                            try {
                                FileOutputStream stream = new FileOutputStream(toFile);
                                bitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream);
                                stream.close();
                                done = true;
                            } catch (Exception e) {
                                done = false;
                                FileLog.e(e);
                            }
                        } else {
                            done = false;
                        }
                    }
                    if (!done) {
                        TLRPC.TL_wallPaper wallPaper = (TLRPC.TL_wallPaper) currentWallpaper;
                        File f = FileLoader.getPathToAttach(wallPaper.document, true);
                        try {
                            done = AndroidUtilities.copyFile(f, toFile);
                        } catch (Exception e) {
                            done = false;
                            FileLog.e(e);
                        }
                    }
                } else if (currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
                    if (selectedPattern != null) {
                        try {
                            WallpapersListActivity.ColorWallpaper wallPaper = (WallpapersListActivity.ColorWallpaper) currentWallpaper;
                            Bitmap bitmap = backgroundImage.getImageReceiver().getBitmap();
                            @SuppressLint("DrawAllocation") Bitmap dst = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
                            Canvas canvas = new Canvas(dst);
                            if (backgroundGradientColor2 != 0) {
                            } else if (backgroundGradientColor1 != 0) {
                                GradientDrawable gradientDrawable = new GradientDrawable(BackgroundGradientDrawable.getGradientOrientation(backgroundRotation), new int[] { backgroundColor, backgroundGradientColor1 });
                                gradientDrawable.setBounds(0, 0, dst.getWidth(), dst.getHeight());
                                gradientDrawable.draw(canvas);
                            } else {
                                canvas.drawColor(backgroundColor);
                            }
                            Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
                            paint.setColorFilter(new PorterDuffColorFilter(patternColor, blendMode));
                            paint.setAlpha((int) (255 * Math.abs(currentIntensity)));
                            canvas.drawBitmap(bitmap, 0, 0, paint);
                            FileOutputStream stream = new FileOutputStream(toFile);
                            if (backgroundGradientColor2 != 0) {
                                dst.compress(Bitmap.CompressFormat.PNG, 100, stream);
                            } else {
                                dst.compress(Bitmap.CompressFormat.JPEG, 87, stream);
                            }
                            stream.close();
                            done = true;
                        } catch (Throwable e) {
                            FileLog.e(e);
                            done = false;
                        }
                    } else {
                        done = true;
                    }
                } else if (currentWallpaper instanceof WallpapersListActivity.FileWallpaper) {
                    WallpapersListActivity.FileWallpaper wallpaper = (WallpapersListActivity.FileWallpaper) currentWallpaper;
                    if (wallpaper.resId != 0 || Theme.THEME_BACKGROUND_SLUG.equals(wallpaper.slug)) {
                        done = true;
                    } else {
                        try {
                            File fromFile = wallpaper.originalPath != null ? wallpaper.originalPath : wallpaper.path;
                            if (sameFile = fromFile.equals(toFile)) {
                                done = true;
                            } else {
                                done = AndroidUtilities.copyFile(fromFile, toFile);
                            }
                        } catch (Exception e) {
                            done = false;
                            FileLog.e(e);
                        }
                    }
                } else if (currentWallpaper instanceof MediaController.SearchImage) {
                    MediaController.SearchImage wallpaper = (MediaController.SearchImage) currentWallpaper;
                    File f;
                    if (wallpaper.photo != null) {
                        TLRPC.PhotoSize image = FileLoader.getClosestPhotoSizeWithSize(wallpaper.photo.sizes, maxWallpaperSize, true);
                        f = FileLoader.getPathToAttach(image, true);
                    } else {
                        f = ImageLoader.getHttpFilePath(wallpaper.imageUrl, "jpg");
                    }
                    try {
                        done = AndroidUtilities.copyFile(f, toFile);
                    } catch (Exception e) {
                        done = false;
                        FileLog.e(e);
                    }
                } else {
                    done = false;
                }
                if (isBlurred) {
                    try {
                        File blurredFile = new File(ApplicationLoader.getFilesDirFixed(), fileName);
                        FileOutputStream stream = new FileOutputStream(blurredFile);
                        blurredBitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream);
                        stream.close();
                        done = true;
                    } catch (Throwable e) {
                        FileLog.e(e);
                        done = false;
                    }
                }
                String slug;
                int rotation = 45;
                int color = 0;
                int gradientColor1 = 0;
                int gradientColor2 = 0;
                int gradientColor3 = 0;
                File path = null;
                if (currentWallpaper instanceof TLRPC.TL_wallPaper) {
                    TLRPC.TL_wallPaper wallPaper = (TLRPC.TL_wallPaper) currentWallpaper;
                    slug = wallPaper.slug;
                } else if (currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
                    WallpapersListActivity.ColorWallpaper wallPaper = (WallpapersListActivity.ColorWallpaper) currentWallpaper;
                    if (Theme.DEFAULT_BACKGROUND_SLUG.equals(wallPaper.slug)) {
                        slug = Theme.DEFAULT_BACKGROUND_SLUG;
                        color = 0;
                    } else {
                        if (selectedPattern != null) {
                            slug = selectedPattern.slug;
                        } else {
                            slug = Theme.COLOR_BACKGROUND_SLUG;
                        }
                        color = backgroundColor;
                        gradientColor1 = backgroundGradientColor1;
                        gradientColor2 = backgroundGradientColor2;
                        gradientColor3 = backgroundGradientColor3;
                        rotation = backgroundRotation;
                    }
                } else if (currentWallpaper instanceof WallpapersListActivity.FileWallpaper) {
                    WallpapersListActivity.FileWallpaper wallPaper = (WallpapersListActivity.FileWallpaper) currentWallpaper;
                    slug = wallPaper.slug;
                    path = wallPaper.path;
                } else if (currentWallpaper instanceof MediaController.SearchImage) {
                    MediaController.SearchImage wallPaper = (MediaController.SearchImage) currentWallpaper;
                    if (wallPaper.photo != null) {
                        TLRPC.PhotoSize image = FileLoader.getClosestPhotoSizeWithSize(wallPaper.photo.sizes, maxWallpaperSize, true);
                        path = FileLoader.getPathToAttach(image, true);
                    } else {
                        path = ImageLoader.getHttpFilePath(wallPaper.imageUrl, "jpg");
                    }
                    slug = "";
                } else {
                    color = 0;
                    slug = Theme.DEFAULT_BACKGROUND_SLUG;
                }
                Theme.OverrideWallpaperInfo wallpaperInfo = new Theme.OverrideWallpaperInfo();
                wallpaperInfo.fileName = fileName;
                wallpaperInfo.originalFileName = originalFileName;
                wallpaperInfo.slug = slug;
                wallpaperInfo.isBlurred = isBlurred;
                wallpaperInfo.isMotion = isMotion;
                wallpaperInfo.color = color;
                wallpaperInfo.gradientColor1 = gradientColor1;
                wallpaperInfo.gradientColor2 = gradientColor2;
                wallpaperInfo.gradientColor3 = gradientColor3;
                wallpaperInfo.rotation = rotation;
                wallpaperInfo.intensity = currentIntensity;
                if (currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
                    WallpapersListActivity.ColorWallpaper colorWallpaper = (WallpapersListActivity.ColorWallpaper) currentWallpaper;
                    String slugStr;
                    if (!Theme.COLOR_BACKGROUND_SLUG.equals(slug) && !Theme.THEME_BACKGROUND_SLUG.equals(slug) && !Theme.DEFAULT_BACKGROUND_SLUG.equals(slug)) {
                        slugStr = slug;
                    } else {
                        slugStr = null;
                    }
                    float intensity = colorWallpaper.intensity;
                    if (intensity < 0 && !Theme.getActiveTheme().isDark()) {
                        intensity *= -1;
                    }
                    if (colorWallpaper.parentWallpaper != null && colorWallpaper.color == color && colorWallpaper.gradientColor1 == gradientColor1 && colorWallpaper.gradientColor2 == gradientColor2 && colorWallpaper.gradientColor3 == gradientColor3 && TextUtils.equals(colorWallpaper.slug, slugStr) && colorWallpaper.gradientRotation == rotation && (selectedPattern == null || Math.abs(intensity - currentIntensity) < 0.001f)) {
                        wallpaperInfo.wallpaperId = colorWallpaper.parentWallpaper.id;
                        wallpaperInfo.accessHash = colorWallpaper.parentWallpaper.access_hash;
                    }
                }
                MessagesController.getInstance(currentAccount).saveWallpaperToServer(path, wallpaperInfo, slug != null, 0);
                if (done) {
                    Theme.serviceMessageColorBackup = Theme.getColor(Theme.key_chat_serviceBackground);
                    if (Theme.THEME_BACKGROUND_SLUG.equals(wallpaperInfo.slug)) {
                        wallpaperInfo = null;
                    }
                    Theme.getActiveTheme().setOverrideWallpaper(wallpaperInfo);
                    Theme.reloadWallpaper();
                    if (!sameFile) {
                        ImageLoader.getInstance().removeImage(ImageLoader.getHttpFileName(toFile.getAbsolutePath()) + "@100_100");
                    }
                }
                if (delegate != null) {
                    delegate.didSetNewBackground();
                }
                finishFragment();
            });
            bottomOverlayChatText = new TextView(context);
            bottomOverlayChatText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
            bottomOverlayChatText.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
            bottomOverlayChatText.setTextColor(Theme.getColor(Theme.key_chat_fieldOverlayText));
            bottomOverlayChatText.setText(LocaleController.getString("SetBackground", R.string.SetBackground));
            bottomOverlayChat.addView(bottomOverlayChatText, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER));
        }
        Rect paddings = new Rect();
        sheetDrawable = context.getResources().getDrawable(R.drawable.sheet_shadow_round).mutate();
        sheetDrawable.getPadding(paddings);
        sheetDrawable.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhite), PorterDuff.Mode.MULTIPLY));
        TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
        textPaint.setTextSize(AndroidUtilities.dp(14));
        textPaint.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
        {
            int textsCount;
            if (screenType == SCREEN_TYPE_ACCENT_COLOR || currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
                textsCount = 3;
                if (currentWallpaper instanceof WallpapersListActivity.ColorWallpaper && Theme.DEFAULT_BACKGROUND_SLUG.equals(((WallpapersListActivity.ColorWallpaper) currentWallpaper).slug)) {
                    textsCount = 0;
                }
            } else {
                textsCount = 2;
                if (currentWallpaper instanceof WallpapersListActivity.FileWallpaper) {
                    WallpapersListActivity.FileWallpaper fileWallpaper = (WallpapersListActivity.FileWallpaper) currentWallpaper;
                    if (Theme.THEME_BACKGROUND_SLUG.equals(fileWallpaper.slug)) {
                        textsCount = 0;
                    }
                }
            }
            String[] texts = new String[textsCount];
            int[] textSizes = new int[textsCount];
            backgroundCheckBoxView = new WallpaperCheckBoxView[textsCount];
            int maxTextSize = 0;
            if (textsCount != 0) {
                backgroundButtonsContainer = new FrameLayout(context);
                if (screenType == SCREEN_TYPE_ACCENT_COLOR || currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
                    texts[0] = LocaleController.getString("BackgroundColors", R.string.BackgroundColors);
                    texts[1] = LocaleController.getString("BackgroundPattern", R.string.BackgroundPattern);
                    texts[2] = LocaleController.getString("BackgroundMotion", R.string.BackgroundMotion);
                } else {
                    texts[0] = LocaleController.getString("BackgroundBlurred", R.string.BackgroundBlurred);
                    texts[1] = LocaleController.getString("BackgroundMotion", R.string.BackgroundMotion);
                }
                for (int a = 0; a < texts.length; a++) {
                    textSizes[a] = (int) Math.ceil(textPaint.measureText(texts[a]));
                    maxTextSize = Math.max(maxTextSize, textSizes[a]);
                }
                backgroundPlayAnimationView = new FrameLayout(context) {

                    private RectF rect = new RectF();

                    @Override
                    protected void onDraw(Canvas canvas) {
                        rect.set(0, 0, getMeasuredWidth(), getMeasuredHeight());
                        Theme.applyServiceShaderMatrixForView(backgroundPlayAnimationView, backgroundImage);
                        canvas.drawRoundRect(rect, getMeasuredHeight() / 2, getMeasuredHeight() / 2, Theme.chat_actionBackgroundPaint);
                        if (Theme.hasGradientService()) {
                            canvas.drawRoundRect(rect, getMeasuredHeight() / 2, getMeasuredHeight() / 2, Theme.chat_actionBackgroundGradientDarkenPaint);
                        }
                    }
                };
                backgroundPlayAnimationView.setWillNotDraw(false);
                backgroundPlayAnimationView.setVisibility(backgroundGradientColor1 != 0 ? View.VISIBLE : View.INVISIBLE);
                backgroundPlayAnimationView.setScaleX(backgroundGradientColor1 != 0 ? 1.0f : 0.1f);
                backgroundPlayAnimationView.setScaleY(backgroundGradientColor1 != 0 ? 1.0f : 0.1f);
                backgroundPlayAnimationView.setAlpha(backgroundGradientColor1 != 0 ? 1.0f : 0.0f);
                backgroundPlayAnimationView.setTag(backgroundGradientColor1 != 0 ? 1 : null);
                backgroundButtonsContainer.addView(backgroundPlayAnimationView, LayoutHelper.createFrame(48, 48, Gravity.CENTER));
                backgroundPlayAnimationView.setOnClickListener(new View.OnClickListener() {

                    int rotation = 0;

                    @Override
                    public void onClick(View v) {
                        Drawable background = backgroundImage.getBackground();
                        backgroundPlayAnimationImageView.setRotation(rotation);
                        rotation -= 45;
                        backgroundPlayAnimationImageView.animate().rotationBy(-45).setDuration(300).setInterpolator(CubicBezierInterpolator.EASE_OUT).start();
                        if (background instanceof MotionBackgroundDrawable) {
                            MotionBackgroundDrawable motionBackgroundDrawable = (MotionBackgroundDrawable) background;
                            motionBackgroundDrawable.switchToNextPosition();
                        } else {
                            onColorsRotate();
                        }
                    }
                });
                backgroundPlayAnimationImageView = new ImageView(context);
                backgroundPlayAnimationImageView.setScaleType(ImageView.ScaleType.CENTER);
                backgroundPlayAnimationImageView.setImageResource(R.drawable.bg_rotate_large);
                backgroundPlayAnimationView.addView(backgroundPlayAnimationImageView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER));
            }
            for (int a = 0; a < textsCount; a++) {
                final int num = a;
                backgroundCheckBoxView[a] = new WallpaperCheckBoxView(context, screenType != SCREEN_TYPE_ACCENT_COLOR && !(currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) || a != 0, backgroundImage);
                backgroundCheckBoxView[a].setBackgroundColor(backgroundColor);
                backgroundCheckBoxView[a].setText(texts[a], textSizes[a], maxTextSize);
                if (screenType == SCREEN_TYPE_ACCENT_COLOR || currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
                    if (a == 1) {
                        backgroundCheckBoxView[a].setChecked(selectedPattern != null || accent != null && !TextUtils.isEmpty(accent.patternSlug), false);
                    } else if (a == 2) {
                        backgroundCheckBoxView[a].setChecked(isMotion, false);
                    }
                } else {
                    backgroundCheckBoxView[a].setChecked(a == 0 ? isBlurred : isMotion, false);
                }
                int width = maxTextSize + AndroidUtilities.dp(14 * 2 + 28);
                FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(width, ViewGroup.LayoutParams.WRAP_CONTENT);
                layoutParams.gravity = Gravity.CENTER;
                if (textsCount == 3) {
                    if (a == 0 || a == 2) {
                        layoutParams.leftMargin = width / 2 + AndroidUtilities.dp(10);
                    } else {
                        layoutParams.rightMargin = width / 2 + AndroidUtilities.dp(10);
                    }
                } else {
                    if (a == 1) {
                        layoutParams.leftMargin = width / 2 + AndroidUtilities.dp(10);
                    } else {
                        layoutParams.rightMargin = width / 2 + AndroidUtilities.dp(10);
                    }
                }
                backgroundButtonsContainer.addView(backgroundCheckBoxView[a], layoutParams);
                WallpaperCheckBoxView view = backgroundCheckBoxView[a];
                backgroundCheckBoxView[a].setOnClickListener(v -> {
                    if (backgroundButtonsContainer.getAlpha() != 1.0f || patternViewAnimation != null) {
                        return;
                    }
                    if ((screenType == SCREEN_TYPE_ACCENT_COLOR || currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) && num == 2) {
                        view.setChecked(!view.isChecked(), true);
                        isMotion = view.isChecked();
                        parallaxEffect.setEnabled(isMotion);
                        animateMotionChange();
                    } else if (num == 1 && (screenType == SCREEN_TYPE_ACCENT_COLOR || currentWallpaper instanceof WallpapersListActivity.ColorWallpaper)) {
                        if (backgroundCheckBoxView[1].isChecked()) {
                            lastSelectedPattern = selectedPattern;
                            backgroundImage.setImageDrawable(null);
                            selectedPattern = null;
                            isMotion = false;
                            updateButtonState(false, true);
                            animateMotionChange();
                            if (patternLayout[1].getVisibility() == View.VISIBLE) {
                                if (screenType == SCREEN_TYPE_ACCENT_COLOR) {
                                    showPatternsView(0, true, true);
                                } else {
                                    showPatternsView(num, patternLayout[num].getVisibility() != View.VISIBLE, true);
                                }
                            }
                        } else {
                            selectPattern(lastSelectedPattern != null ? -1 : 0);
                            if (screenType == SCREEN_TYPE_ACCENT_COLOR) {
                                showPatternsView(1, true, true);
                            } else {
                                showPatternsView(num, patternLayout[num].getVisibility() != View.VISIBLE, true);
                            }
                        }
                        backgroundCheckBoxView[1].setChecked(selectedPattern != null, true);
                        updateSelectedPattern(true);
                        patternsListView.invalidateViews();
                        updateMotionButton();
                    } else if (currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
                        showPatternsView(num, patternLayout[num].getVisibility() != View.VISIBLE, true);
                    } else if (screenType != SCREEN_TYPE_ACCENT_COLOR) {
                        view.setChecked(!view.isChecked(), true);
                        if (num == 0) {
                            isBlurred = view.isChecked();
                            if (isBlurred) {
                                backgroundImage.getImageReceiver().setForceCrossfade(true);
                            }
                            updateBlurred();
                        } else {
                            isMotion = view.isChecked();
                            parallaxEffect.setEnabled(isMotion);
                            animateMotionChange();
                        }
                    }
                });
                if (a == 2) {
                    backgroundCheckBoxView[a].setAlpha(0.0f);
                    backgroundCheckBoxView[a].setVisibility(View.INVISIBLE);
                }
            }
        }
        if (screenType == SCREEN_TYPE_ACCENT_COLOR) {
            String[] texts = new String[2];
            int[] textSizes = new int[2];
            messagesCheckBoxView = new WallpaperCheckBoxView[2];
            int maxTextSize = 0;
            messagesButtonsContainer = new FrameLayout(context);
            texts[0] = LocaleController.getString("BackgroundAnimate", R.string.BackgroundAnimate);
            texts[1] = LocaleController.getString("BackgroundColors", R.string.BackgroundColors);
            for (int a = 0; a < texts.length; a++) {
                textSizes[a] = (int) Math.ceil(textPaint.measureText(texts[a]));
                maxTextSize = Math.max(maxTextSize, textSizes[a]);
            }
            messagesPlayAnimationView = new FrameLayout(context) {

                private RectF rect = new RectF();

                @Override
                protected void onDraw(Canvas canvas) {
                    rect.set(0, 0, getMeasuredWidth(), getMeasuredHeight());
                    Theme.applyServiceShaderMatrixForView(messagesPlayAnimationView, backgroundImage);
                    canvas.drawRoundRect(rect, getMeasuredHeight() / 2, getMeasuredHeight() / 2, Theme.chat_actionBackgroundPaint);
                    if (Theme.hasGradientService()) {
                        canvas.drawRoundRect(rect, getMeasuredHeight() / 2, getMeasuredHeight() / 2, Theme.chat_actionBackgroundGradientDarkenPaint);
                    }
                }
            };
            messagesPlayAnimationView.setWillNotDraw(false);
            messagesPlayAnimationView.setVisibility(accent.myMessagesGradientAccentColor1 != 0 ? View.VISIBLE : View.INVISIBLE);
            messagesPlayAnimationView.setScaleX(accent.myMessagesGradientAccentColor1 != 0 ? 1.0f : 0.1f);
            messagesPlayAnimationView.setScaleY(accent.myMessagesGradientAccentColor1 != 0 ? 1.0f : 0.1f);
            messagesPlayAnimationView.setAlpha(accent.myMessagesGradientAccentColor1 != 0 ? 1.0f : 0.0f);
            messagesButtonsContainer.addView(messagesPlayAnimationView, LayoutHelper.createFrame(48, 48, Gravity.CENTER));
            messagesPlayAnimationView.setOnClickListener(new View.OnClickListener() {

                int rotation = 0;

                @Override
                public void onClick(View v) {
                    messagesPlayAnimationImageView.setRotation(rotation);
                    rotation -= 45;
                    messagesPlayAnimationImageView.animate().rotationBy(-45).setDuration(300).setInterpolator(CubicBezierInterpolator.EASE_OUT).start();
                    if (accent.myMessagesAnimated) {
                        if (msgOutDrawable.getMotionBackgroundDrawable() != null) {
                            msgOutDrawable.getMotionBackgroundDrawable().switchToNextPosition();
                        }
                    } else {
                        int temp;
                        if (accent.myMessagesGradientAccentColor3 != 0) {
                            temp = accent.myMessagesAccentColor != 0 ? accent.myMessagesAccentColor : accent.accentColor;
                            accent.myMessagesAccentColor = accent.myMessagesGradientAccentColor1;
                            accent.myMessagesGradientAccentColor1 = accent.myMessagesGradientAccentColor2;
                            accent.myMessagesGradientAccentColor2 = accent.myMessagesGradientAccentColor3;
                            accent.myMessagesGradientAccentColor3 = temp;
                        } else {
                            temp = accent.myMessagesAccentColor != 0 ? accent.myMessagesAccentColor : accent.accentColor;
                            accent.myMessagesAccentColor = accent.myMessagesGradientAccentColor1;
                            accent.myMessagesGradientAccentColor1 = accent.myMessagesGradientAccentColor2;
                            accent.myMessagesGradientAccentColor2 = temp;
                        }
                        colorPicker.setColor(accent.myMessagesGradientAccentColor3, 3);
                        colorPicker.setColor(accent.myMessagesGradientAccentColor2, 2);
                        colorPicker.setColor(accent.myMessagesGradientAccentColor1, 1);
                        colorPicker.setColor(accent.myMessagesAccentColor != 0 ? accent.myMessagesAccentColor : accent.accentColor, 0);
                        messagesCheckBoxView[1].setColor(0, accent.myMessagesAccentColor);
                        messagesCheckBoxView[1].setColor(1, accent.myMessagesGradientAccentColor1);
                        messagesCheckBoxView[1].setColor(2, accent.myMessagesGradientAccentColor2);
                        messagesCheckBoxView[1].setColor(3, accent.myMessagesGradientAccentColor3);
                        Theme.refreshThemeColors(true, true);
                        listView2.invalidateViews();
                    }
                }
            });
            messagesPlayAnimationImageView = new ImageView(context);
            messagesPlayAnimationImageView.setScaleType(ImageView.ScaleType.CENTER);
            messagesPlayAnimationImageView.setImageResource(R.drawable.bg_rotate_large);
            messagesPlayAnimationView.addView(messagesPlayAnimationImageView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER));
            for (int a = 0; a < 2; a++) {
                final int num = a;
                messagesCheckBoxView[a] = new WallpaperCheckBoxView(context, a == 0, backgroundImage);
                messagesCheckBoxView[a].setText(texts[a], textSizes[a], maxTextSize);
                if (a == 0) {
                    messagesCheckBoxView[a].setChecked(accent.myMessagesAnimated, false);
                }
                int width = maxTextSize + AndroidUtilities.dp(14 * 2 + 28);
                FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(width, ViewGroup.LayoutParams.WRAP_CONTENT);
                layoutParams.gravity = Gravity.CENTER;
                if (a == 1) {
                    layoutParams.leftMargin = width / 2 + AndroidUtilities.dp(10);
                } else {
                    layoutParams.rightMargin = width / 2 + AndroidUtilities.dp(10);
                }
                messagesButtonsContainer.addView(messagesCheckBoxView[a], layoutParams);
                WallpaperCheckBoxView view = messagesCheckBoxView[a];
                messagesCheckBoxView[a].setOnClickListener(v -> {
                    if (messagesButtonsContainer.getAlpha() != 1.0f) {
                        return;
                    }
                    if (num == 0) {
                        view.setChecked(!view.isChecked(), true);
                        accent.myMessagesAnimated = view.isChecked();
                        Theme.refreshThemeColors(true, true);
                        listView2.invalidateViews();
                    }
                });
            }
        }
        if (screenType == SCREEN_TYPE_ACCENT_COLOR || currentWallpaper instanceof WallpapersListActivity.ColorWallpaper) {
            isBlurred = false;
            for (int a = 0; a < 2; a++) {
                final int num = a;
                patternLayout[a] = new FrameLayout(context) {

                    @Override
                    public void onDraw(Canvas canvas) {
                        if (num == 0) {
                            sheetDrawable.setBounds(colorPicker.getLeft() - paddings.left, 0, colorPicker.getRight() + paddings.right, getMeasuredHeight());
                        } else {
                            sheetDrawable.setBounds(-paddings.left, 0, getMeasuredWidth() + paddings.right, getMeasuredHeight());
                        }
                        sheetDrawable.draw(canvas);
                    }
                };
                if (a == 1 || screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
                    patternLayout[a].setVisibility(View.INVISIBLE);
                }
                patternLayout[a].setWillNotDraw(false);
                FrameLayout.LayoutParams layoutParams;
                if (screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
                    layoutParams = LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, a == 0 ? 321 : 316, Gravity.LEFT | Gravity.BOTTOM);
                } else {
                    layoutParams = LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, a == 0 ? 273 : 316, Gravity.LEFT | Gravity.BOTTOM);
                }
                if (a == 0) {
                    layoutParams.height += AndroidUtilities.dp(12) + paddings.top;
                    patternLayout[a].setPadding(0, AndroidUtilities.dp(12) + paddings.top, 0, 0);
                }
                page2.addView(patternLayout[a], layoutParams);
                if (a == 1 || screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
                    patternsButtonsContainer[a] = new FrameLayout(context) {

                        @Override
                        public 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);
                        }
                    };
                    patternsButtonsContainer[a].setWillNotDraw(false);
                    patternsButtonsContainer[a].setPadding(0, AndroidUtilities.dp(3), 0, 0);
                    patternsButtonsContainer[a].setClickable(true);
                    patternLayout[a].addView(patternsButtonsContainer[a], LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 51, Gravity.BOTTOM));
                    patternsCancelButton[a] = new TextView(context);
                    patternsCancelButton[a].setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
                    patternsCancelButton[a].setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
                    patternsCancelButton[a].setTextColor(Theme.getColor(Theme.key_chat_fieldOverlayText));
                    patternsCancelButton[a].setText(LocaleController.getString("Cancel", R.string.Cancel).toUpperCase());
                    patternsCancelButton[a].setGravity(Gravity.CENTER);
                    patternsCancelButton[a].setPadding(AndroidUtilities.dp(21), 0, AndroidUtilities.dp(21), 0);
                    patternsCancelButton[a].setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 0));
                    patternsButtonsContainer[a].addView(patternsCancelButton[a], LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP));
                    patternsCancelButton[a].setOnClickListener(v -> {
                        if (patternViewAnimation != null) {
                            return;
                        }
                        if (num == 0) {
                            backgroundRotation = previousBackgroundRotation;
                            setBackgroundColor(previousBackgroundGradientColor3, 3, true, true);
                            setBackgroundColor(previousBackgroundGradientColor2, 2, true, true);
                            setBackgroundColor(previousBackgroundGradientColor1, 1, true, true);
                            setBackgroundColor(previousBackgroundColor, 0, true, true);
                        } else {
                            selectedPattern = previousSelectedPattern;
                            if (selectedPattern == null) {
                                backgroundImage.setImageDrawable(null);
                            } else {
                                backgroundImage.setImage(ImageLocation.getForDocument(selectedPattern.document), imageFilter, null, null, "jpg", selectedPattern.document.size, 1, selectedPattern);
                            }
                            backgroundCheckBoxView[1].setChecked(selectedPattern != null, false);
                            currentIntensity = previousIntensity;
                            intensitySeekBar.setProgress(currentIntensity);
                            backgroundImage.getImageReceiver().setAlpha(currentIntensity);
                            updateButtonState(false, true);
                            updateSelectedPattern(true);
                        }
                        if (screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
                            showPatternsView(num, false, true);
                        } else {
                            if (selectedPattern == null) {
                                if (isMotion) {
                                    isMotion = false;
                                    backgroundCheckBoxView[0].setChecked(false, true);
                                    animateMotionChange();
                                }
                                updateMotionButton();
                            }
                            showPatternsView(0, true, true);
                        }
                    });
                    patternsSaveButton[a] = new TextView(context);
                    patternsSaveButton[a].setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
                    patternsSaveButton[a].setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
                    patternsSaveButton[a].setTextColor(Theme.getColor(Theme.key_chat_fieldOverlayText));
                    patternsSaveButton[a].setText(LocaleController.getString("ApplyTheme", R.string.ApplyTheme).toUpperCase());
                    patternsSaveButton[a].setGravity(Gravity.CENTER);
                    patternsSaveButton[a].setPadding(AndroidUtilities.dp(21), 0, AndroidUtilities.dp(21), 0);
                    patternsSaveButton[a].setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_listSelector), 0));
                    patternsButtonsContainer[a].addView(patternsSaveButton[a], LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.RIGHT | Gravity.TOP));
                    patternsSaveButton[a].setOnClickListener(v -> {
                        if (patternViewAnimation != null) {
                            return;
                        }
                        if (screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
                            showPatternsView(num, false, true);
                        } else {
                            showPatternsView(0, true, true);
                        }
                    });
                }
                if (a == 1) {
                    TextView titleView = new TextView(context);
                    titleView.setLines(1);
                    titleView.setSingleLine(true);
                    titleView.setText(LocaleController.getString("BackgroundChoosePattern", R.string.BackgroundChoosePattern));
                    titleView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
                    titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
                    titleView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
                    titleView.setPadding(AndroidUtilities.dp(21), AndroidUtilities.dp(6), AndroidUtilities.dp(21), AndroidUtilities.dp(8));
                    titleView.setEllipsize(TextUtils.TruncateAt.MIDDLE);
                    titleView.setGravity(Gravity.CENTER_VERTICAL);
                    patternLayout[a].addView(titleView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.LEFT | Gravity.TOP, 0, 21, 0, 0));
                    patternsListView = new RecyclerListView(context) {

                        @Override
                        public boolean onTouchEvent(MotionEvent event) {
                            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                                getParent().requestDisallowInterceptTouchEvent(true);
                            }
                            return super.onTouchEvent(event);
                        }
                    };
                    patternsListView.setLayoutManager(patternsLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
                    patternsListView.setAdapter(patternsAdapter = new PatternsAdapter(context));
                    patternsListView.addItemDecoration(new RecyclerView.ItemDecoration() {

                        @Override
                        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                            int position = parent.getChildAdapterPosition(view);
                            outRect.left = AndroidUtilities.dp(12);
                            outRect.bottom = outRect.top = 0;
                            if (position == state.getItemCount() - 1) {
                                outRect.right = AndroidUtilities.dp(12);
                            }
                        }
                    });
                    patternLayout[a].addView(patternsListView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 100, Gravity.LEFT | Gravity.TOP, 0, 76, 0, 0));
                    patternsListView.setOnItemClickListener((view, position) -> {
                        boolean previousMotion = selectedPattern != null;
                        selectPattern(position);
                        if (previousMotion == (selectedPattern == null)) {
                            animateMotionChange();
                            updateMotionButton();
                        }
                        updateSelectedPattern(true);
                        backgroundCheckBoxView[1].setChecked(selectedPattern != null, true);
                        patternsListView.invalidateViews();
                        int left = view.getLeft();
                        int right = view.getRight();
                        int extra = AndroidUtilities.dp(52);
                        if (left - extra < 0) {
                            patternsListView.smoothScrollBy(left - extra, 0);
                        } else if (right + extra > patternsListView.getMeasuredWidth()) {
                            patternsListView.smoothScrollBy(right + extra - patternsListView.getMeasuredWidth(), 0);
                        }
                    });
                    intensityCell = new HeaderCell(context);
                    intensityCell.setText(LocaleController.getString("BackgroundIntensity", R.string.BackgroundIntensity));
                    patternLayout[a].addView(intensityCell, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 0, 175, 0, 0));
                    intensitySeekBar = new SeekBarView(context) {

                        @Override
                        public boolean onTouchEvent(MotionEvent event) {
                            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                                getParent().requestDisallowInterceptTouchEvent(true);
                            }
                            return super.onTouchEvent(event);
                        }
                    };
                    intensitySeekBar.setProgress(currentIntensity);
                    intensitySeekBar.setReportChanges(true);
                    intensitySeekBar.setDelegate(new SeekBarView.SeekBarViewDelegate() {

                        @Override
                        public void onSeekBarDrag(boolean stop, float progress) {
                            currentIntensity = progress;
                            backgroundImage.getImageReceiver().setAlpha(Math.abs(currentIntensity));
                            backgroundImage.invalidate();
                            patternsListView.invalidateViews();
                            if (currentIntensity >= 0) {
                                if (Build.VERSION.SDK_INT >= 29 && backgroundImage.getBackground() instanceof MotionBackgroundDrawable) {
                                    backgroundImage.getImageReceiver().setBlendMode(BlendMode.SOFT_LIGHT);
                                }
                                backgroundImage.getImageReceiver().setGradientBitmap(null);
                            } else {
                                if (Build.VERSION.SDK_INT >= 29) {
                                    backgroundImage.getImageReceiver().setBlendMode(null);
                                }
                                if (backgroundImage.getBackground() instanceof MotionBackgroundDrawable) {
                                    MotionBackgroundDrawable motionBackgroundDrawable = (MotionBackgroundDrawable) backgroundImage.getBackground();
                                    backgroundImage.getImageReceiver().setGradientBitmap(motionBackgroundDrawable.getBitmap());
                                }
                            }
                        }

                        @Override
                        public void onSeekBarPressed(boolean pressed) {
                        }
                    });
                    patternLayout[a].addView(intensitySeekBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 38, Gravity.TOP | Gravity.LEFT, 5, 211, 5, 0));
                } else {
                    colorPicker = new ColorPicker(context, editingTheme, new ColorPicker.ColorPickerDelegate() {

                        @Override
                        public void setColor(int color, int num, boolean applyNow) {
                            if (screenType == SCREEN_TYPE_CHANGE_BACKGROUND) {
                                setBackgroundColor(color, num, applyNow, true);
                            } else {
                                scheduleApplyColor(color, num, applyNow);
                            }
                        }

                        @Override
                        public void openThemeCreate(boolean share) {
                            if (share) {
                                if (accent.info == null) {
                                    finishFragment();
                                    MessagesController.getInstance(currentAccount).saveThemeToServer(accent.parentTheme, accent);
                                    NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.needShareTheme, accent.parentTheme, accent);
                                } else {
                                    String link = "https://" + MessagesController.getInstance(currentAccount).linkPrefix + "/addtheme/" + accent.info.slug;
                                    showDialog(new ShareAlert(getParentActivity(), null, link, false, link, false));
                                }
                            } else {
                                AlertsCreator.createThemeCreateDialog(ThemePreviewActivity.this, 1, null, null);
                            }
                        }

                        @Override
                        public void deleteTheme() {
                            if (getParentActivity() == null) {
                                return;
                            }
                            AlertDialog.Builder builder1 = new AlertDialog.Builder(getParentActivity());
                            builder1.setTitle(LocaleController.getString("DeleteThemeTitle", R.string.DeleteThemeTitle));
                            builder1.setMessage(LocaleController.getString("DeleteThemeAlert", R.string.DeleteThemeAlert));
                            builder1.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialogInterface, i) -> {
                                Theme.deleteThemeAccent(applyingTheme, accent, true);
                                Theme.applyPreviousTheme();
                                Theme.refreshThemeColors();
                                NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.needSetDayNightTheme, applyingTheme, nightTheme, null, -1);
                                finishFragment();
                            });
                            builder1.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                            AlertDialog alertDialog = builder1.create();
                            showDialog(alertDialog);
                            TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
                            if (button != null) {
                                button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
                            }
                        }

                        @Override
                        public void rotateColors() {
                            onColorsRotate();
                        }

                        @Override
                        public int getDefaultColor(int num) {
                            if (colorType == 3 && applyingTheme.firstAccentIsDefault && num == 0) {
                                Theme.ThemeAccent accent = applyingTheme.themeAccentsMap.get(Theme.DEFALT_THEME_ACCENT_ID);
                                return accent != null ? accent.myMessagesAccentColor : 0;
                            }
                            return 0;
                        }

                        @Override
                        public boolean hasChanges() {
                            return ThemePreviewActivity.this.hasChanges(colorType);
                        }
                    });
                    if (screenType == SCREEN_TYPE_ACCENT_COLOR) {
                        patternLayout[a].addView(colorPicker, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER_HORIZONTAL));
                        if (applyingTheme.isDark()) {
                            colorPicker.setMinBrightness(0.2f);
                        } else {
                            colorPicker.setMinBrightness(0.05f);
                            colorPicker.setMaxBrightness(0.8f);
                        }
                        int colorsCount = accent.accentColor2 != 0 ? 2 : 1;
                        colorPicker.setType(1, hasChanges(1), 2, colorsCount, false, 0, false);
                        colorPicker.setColor(accent.accentColor, 0);
                        if (accent.accentColor2 != 0) {
                            colorPicker.setColor(accent.accentColor2, 1);
                        }
                    } else {
                        patternLayout[a].addView(colorPicker, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER_HORIZONTAL, 0, 0, 0, 48));
                    }
                }
            }
        }
        updateButtonState(false, false);
        if (!backgroundImage.getImageReceiver().hasBitmapImage()) {
            page2.setBackgroundColor(0xff000000);
        }
        if (screenType != SCREEN_TYPE_ACCENT_COLOR && !(currentWallpaper instanceof WallpapersListActivity.ColorWallpaper)) {
            backgroundImage.getImageReceiver().setCrossfadeWithOldImage(true);
        }
    }
    listView2.setAdapter(messagesAdapter);
    frameLayout = new FrameLayout(context) {

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

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

        @Override
        protected void onDraw(Canvas canvas) {
            if (!AndroidUtilities.usingHardwareInput) {
                getLocationInWindow(loc);
                if (Build.VERSION.SDK_INT < 21 && !AndroidUtilities.isTablet()) {
                    loc[1] -= AndroidUtilities.statusBarHeight;
                }
                if (actionBar2.getTranslationY() != loc[1]) {
                    actionBar2.setTranslationY(-loc[1]);
                    page2.invalidate();
                }
                if (SystemClock.elapsedRealtime() < watchForKeyboardEndTime) {
                    invalidate();
                }
            }
        }
    };
    frameLayout.setWillNotDraw(false);
    fragmentView = frameLayout;
    frameLayout.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener = () -> {
        watchForKeyboardEndTime = SystemClock.elapsedRealtime() + 1500;
        frameLayout.invalidate();
    });
    viewPager = new ViewPager(context);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {
            dotsContainer.invalidate();
        }

        @Override
        public void onPageScrollStateChanged(int state) {
        }
    });
    viewPager.setAdapter(new PagerAdapter() {

        @Override
        public int getCount() {
            return screenType != SCREEN_TYPE_PREVIEW ? 1 : 2;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return object == view;
        }

        @Override
        public int getItemPosition(Object object) {
            return POSITION_UNCHANGED;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View view = position == 0 ? page2 : page1;
            container.addView(view);
            return view;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

        @Override
        public void unregisterDataSetObserver(DataSetObserver observer) {
            if (observer != null) {
                super.unregisterDataSetObserver(observer);
            }
        }
    });
    AndroidUtilities.setViewPagerEdgeEffectColor(viewPager, Theme.getColor(Theme.key_actionBarDefault));
    frameLayout.addView(viewPager, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP, 0, 0, 0, screenType == SCREEN_TYPE_PREVIEW ? 48 : 0));
    undoView = new UndoView(context, this);
    undoView.setAdditionalTranslationY(AndroidUtilities.dp(51));
    frameLayout.addView(undoView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT, 8, 0, 8, 8));
    if (screenType == SCREEN_TYPE_PREVIEW) {
        View shadow = new View(context);
        shadow.setBackgroundColor(Theme.getColor(Theme.key_dialogShadowLine));
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1, Gravity.LEFT | Gravity.BOTTOM);
        layoutParams.bottomMargin = AndroidUtilities.dp(48);
        frameLayout.addView(shadow, layoutParams);
        saveButtonsContainer = new FrameLayout(context);
        saveButtonsContainer.setBackgroundColor(getButtonsColor(Theme.key_windowBackgroundWhite));
        frameLayout.addView(saveButtonsContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.LEFT | Gravity.BOTTOM));
        dotsContainer = new View(context) {

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

            @Override
            protected void onDraw(Canvas canvas) {
                int selected = viewPager.getCurrentItem();
                paint.setColor(getButtonsColor(Theme.key_chat_fieldOverlayText));
                for (int a = 0; a < 2; a++) {
                    paint.setAlpha(a == selected ? 255 : 127);
                    canvas.drawCircle(AndroidUtilities.dp(3 + 15 * a), AndroidUtilities.dp(4), AndroidUtilities.dp(3), paint);
                }
            }
        };
        saveButtonsContainer.addView(dotsContainer, LayoutHelper.createFrame(22, 8, Gravity.CENTER));
        cancelButton = new TextView(context);
        cancelButton.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
        cancelButton.setTextColor(getButtonsColor(Theme.key_chat_fieldOverlayText));
        cancelButton.setGravity(Gravity.CENTER);
        cancelButton.setBackgroundDrawable(Theme.createSelectorDrawable(0x0f000000, 0));
        cancelButton.setPadding(AndroidUtilities.dp(29), 0, AndroidUtilities.dp(29), 0);
        cancelButton.setText(LocaleController.getString("Cancel", R.string.Cancel).toUpperCase());
        cancelButton.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
        saveButtonsContainer.addView(cancelButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT));
        cancelButton.setOnClickListener(v -> cancelThemeApply(false));
        doneButton = new TextView(context);
        doneButton.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
        doneButton.setTextColor(getButtonsColor(Theme.key_chat_fieldOverlayText));
        doneButton.setGravity(Gravity.CENTER);
        doneButton.setBackgroundDrawable(Theme.createSelectorDrawable(0x0f000000, 0));
        doneButton.setPadding(AndroidUtilities.dp(29), 0, AndroidUtilities.dp(29), 0);
        doneButton.setText(LocaleController.getString("ApplyTheme", R.string.ApplyTheme).toUpperCase());
        doneButton.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
        saveButtonsContainer.addView(doneButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.RIGHT));
        doneButton.setOnClickListener(v -> {
            Theme.ThemeInfo previousTheme = Theme.getPreviousTheme();
            if (previousTheme == null) {
                return;
            }
            Theme.ThemeAccent previousAccent;
            if (previousTheme != null && previousTheme.prevAccentId >= 0) {
                previousAccent = previousTheme.themeAccentsMap.get(previousTheme.prevAccentId);
            } else {
                previousAccent = previousTheme.getAccent(false);
            }
            if (accent != null) {
                saveAccentWallpaper();
                Theme.saveThemeAccents(applyingTheme, true, false, false, false);
                Theme.clearPreviousTheme();
                Theme.applyTheme(applyingTheme, nightTheme);
                parentLayout.rebuildAllFragmentViews(false, false);
            } else {
                parentLayout.rebuildAllFragmentViews(false, false);
                Theme.applyThemeFile(new File(applyingTheme.pathToFile), applyingTheme.name, applyingTheme.info, false);
                MessagesController.getInstance(applyingTheme.account).saveTheme(applyingTheme, null, false, false);
                SharedPreferences.Editor editor = ApplicationLoader.applicationContext.getSharedPreferences("themeconfig", Activity.MODE_PRIVATE).edit();
                editor.putString("lastDayTheme", applyingTheme.getKey());
                editor.commit();
            }
            finishFragment();
            if (screenType == SCREEN_TYPE_PREVIEW) {
                NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.didApplyNewTheme, previousTheme, previousAccent, deleteOnCancel);
            }
        });
    }
    if (screenType == SCREEN_TYPE_ACCENT_COLOR && !Theme.hasCustomWallpaper() && accent.backgroundOverrideColor != 0x100000000L) {
        selectColorType(2);
    }
    themeDescriptions = getThemeDescriptionsInternal();
    setCurrentImage(true);
    updatePlayAnimationView(false);
    if (showColor) {
        showPatternsView(0, true, false);
    }
    return fragmentView;
}
Also used : SvgHelper(org.telegram.messenger.SvgHelper) FrameLayout(android.widget.FrameLayout) ImageView(android.widget.ImageView) ColorDrawable(android.graphics.drawable.ColorDrawable) Drawable(android.graphics.drawable.Drawable) MediaActionDrawable(org.telegram.ui.Components.MediaActionDrawable) StateListAnimator(android.animation.StateListAnimator) Shader(android.graphics.Shader) Canvas(android.graphics.Canvas) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) UndoView(org.telegram.ui.Components.UndoView) AnimatorListenerAdapter(android.animation.AnimatorListenerAdapter) NotificationCenter(org.telegram.messenger.NotificationCenter) MenuDrawable(org.telegram.ui.ActionBar.MenuDrawable) Outline(android.graphics.Outline) TextPaint(android.text.TextPaint) HintView(org.telegram.ui.Components.HintView) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter) Paint(android.graphics.Paint) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) FileLoader(org.telegram.messenger.FileLoader) ViewPager(androidx.viewpager.widget.ViewPager) SystemClock(android.os.SystemClock) AlertsCreator(org.telegram.ui.Components.AlertsCreator) BackgroundGradientDrawable(org.telegram.ui.Components.BackgroundGradientDrawable) ArrayList(java.util.ArrayList) TLRPC(org.telegram.tgnet.TLRPC) GradientDrawable(android.graphics.drawable.GradientDrawable) ColorPicker(org.telegram.ui.Components.ColorPicker) DialogCell(org.telegram.ui.Cells.DialogCell) ActionBarMenu(org.telegram.ui.ActionBar.ActionBarMenu) R(org.telegram.messenger.R) FileOutputStream(java.io.FileOutputStream) TextUtils(android.text.TextUtils) File(java.io.File) Gravity(android.view.Gravity) SharedPreferences(android.content.SharedPreferences) TypedValue(android.util.TypedValue) MessagesStorage(org.telegram.messenger.MessagesStorage) Configuration(android.content.res.Configuration) WallpaperParallaxEffect(org.telegram.ui.Components.WallpaperParallaxEffect) AlertDialog(org.telegram.ui.ActionBar.AlertDialog) EditText(android.widget.EditText) ThemeDescription(org.telegram.ui.ActionBar.ThemeDescription) Rect(android.graphics.Rect) ActionBarMenuItem(org.telegram.ui.ActionBar.ActionBarMenuItem) RadialProgress2(org.telegram.ui.Components.RadialProgress2) WallpaperCheckBoxView(org.telegram.ui.Components.WallpaperCheckBoxView) AndroidUtilities(org.telegram.messenger.AndroidUtilities) CubicBezierInterpolator(org.telegram.ui.Components.CubicBezierInterpolator) Animator(android.animation.Animator) ApplicationLoader(org.telegram.messenger.ApplicationLoader) PatternCell(org.telegram.ui.Cells.PatternCell) MediaController(org.telegram.messenger.MediaController) View(android.view.View) ChatMessageCell(org.telegram.ui.Cells.ChatMessageCell) RecyclerView(androidx.recyclerview.widget.RecyclerView) DataSetObserver(android.database.DataSetObserver) RectF(android.graphics.RectF) ImageLoader(org.telegram.messenger.ImageLoader) Utilities(org.telegram.messenger.Utilities) ObjectAnimator(android.animation.ObjectAnimator) ImageLocation(org.telegram.messenger.ImageLocation) BaseFragment(org.telegram.ui.ActionBar.BaseFragment) BitmapDrawable(android.graphics.drawable.BitmapDrawable) ChatActionCell(org.telegram.ui.Cells.ChatActionCell) PorterDuff(android.graphics.PorterDuff) ConnectionsManager(org.telegram.tgnet.ConnectionsManager) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) ViewGroup(android.view.ViewGroup) ShareAlert(org.telegram.ui.Components.ShareAlert) DefaultItemAnimator(androidx.recyclerview.widget.DefaultItemAnimator) UserConfig(org.telegram.messenger.UserConfig) List(java.util.List) TextView(android.widget.TextView) MotionBackgroundDrawable(org.telegram.ui.Components.MotionBackgroundDrawable) Context(android.content.Context) AccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo) Theme(org.telegram.ui.ActionBar.Theme) PagerAdapter(androidx.viewpager.widget.PagerAdapter) ViewOutlineProvider(android.view.ViewOutlineProvider) LocaleController(org.telegram.messenger.LocaleController) HashMap(java.util.HashMap) HeaderCell(org.telegram.ui.Cells.HeaderCell) SuppressLint(android.annotation.SuppressLint) MotionEvent(android.view.MotionEvent) ActionBar(org.telegram.ui.ActionBar.ActionBar) 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) SeekBarView(org.telegram.ui.Components.SeekBarView) DownloadController(org.telegram.messenger.DownloadController) DialogInterface(android.content.DialogInterface) LongSparseArray(androidx.collection.LongSparseArray) BackupImageView(org.telegram.ui.Components.BackupImageView) LayoutHelper(org.telegram.ui.Components.LayoutHelper) FileLog(org.telegram.messenger.FileLog) MessagesController(org.telegram.messenger.MessagesController) BlendMode(android.graphics.BlendMode) Bitmap(android.graphics.Bitmap) ViewTreeObserver(android.view.ViewTreeObserver) Activity(android.app.Activity) ImageReceiver(org.telegram.messenger.ImageReceiver) RecyclerListView(org.telegram.ui.Components.RecyclerListView) LoadingCell(org.telegram.ui.Cells.LoadingCell) AlertDialog(org.telegram.ui.ActionBar.AlertDialog) HeaderCell(org.telegram.ui.Cells.HeaderCell) DefaultItemAnimator(androidx.recyclerview.widget.DefaultItemAnimator) EditText(android.widget.EditText) ActionBarMenuItem(org.telegram.ui.ActionBar.ActionBarMenuItem) Rect(android.graphics.Rect) MenuDrawable(org.telegram.ui.ActionBar.MenuDrawable) ColorDrawable(android.graphics.drawable.ColorDrawable) Drawable(android.graphics.drawable.Drawable) MediaActionDrawable(org.telegram.ui.Components.MediaActionDrawable) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) MenuDrawable(org.telegram.ui.ActionBar.MenuDrawable) BackgroundGradientDrawable(org.telegram.ui.Components.BackgroundGradientDrawable) GradientDrawable(android.graphics.drawable.GradientDrawable) BitmapDrawable(android.graphics.drawable.BitmapDrawable) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) MotionBackgroundDrawable(org.telegram.ui.Components.MotionBackgroundDrawable) BitmapDrawable(android.graphics.drawable.BitmapDrawable) SeekBarView(org.telegram.ui.Components.SeekBarView) ViewPager(androidx.viewpager.widget.ViewPager) MessageObject(org.telegram.messenger.MessageObject) ShareAlert(org.telegram.ui.Components.ShareAlert) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter) RecyclerListView(org.telegram.ui.Components.RecyclerListView) WallpaperCheckBoxView(org.telegram.ui.Components.WallpaperCheckBoxView) UndoView(org.telegram.ui.Components.UndoView) AccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo) SharedPreferences(android.content.SharedPreferences) Outline(android.graphics.Outline) ViewOutlineProvider(android.view.ViewOutlineProvider) RectF(android.graphics.RectF) ChatMessageCell(org.telegram.ui.Cells.ChatMessageCell) SuppressLint(android.annotation.SuppressLint) Theme(org.telegram.ui.ActionBar.Theme) RecyclerView(androidx.recyclerview.widget.RecyclerView) MediaController(org.telegram.messenger.MediaController) ColorPicker(org.telegram.ui.Components.ColorPicker) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) TLRPC(org.telegram.tgnet.TLRPC) PagerAdapter(androidx.viewpager.widget.PagerAdapter) ImageReceiver(org.telegram.messenger.ImageReceiver) RadialProgress2(org.telegram.ui.Components.RadialProgress2) AlertDialog(org.telegram.ui.ActionBar.AlertDialog) BackupImageView(org.telegram.ui.Components.BackupImageView) TextView(android.widget.TextView) ImageView(android.widget.ImageView) BackupImageView(org.telegram.ui.Components.BackupImageView) ActionBar(org.telegram.ui.ActionBar.ActionBar) WallpaperParallaxEffect(org.telegram.ui.Components.WallpaperParallaxEffect) Canvas(android.graphics.Canvas) MotionBackgroundDrawable(org.telegram.ui.Components.MotionBackgroundDrawable) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) ActionBarMenu(org.telegram.ui.ActionBar.ActionBarMenu) BackgroundGradientDrawable(org.telegram.ui.Components.BackgroundGradientDrawable) GradientDrawable(android.graphics.drawable.GradientDrawable) TextPaint(android.text.TextPaint) ColorDrawable(android.graphics.drawable.ColorDrawable) CombinedDrawable(org.telegram.ui.Components.CombinedDrawable) FileOutputStream(java.io.FileOutputStream) File(java.io.File) StateListAnimator(android.animation.StateListAnimator) BackDrawable(org.telegram.ui.ActionBar.BackDrawable) Bitmap(android.graphics.Bitmap) ViewGroup(android.view.ViewGroup) ImageView(android.widget.ImageView) UndoView(org.telegram.ui.Components.UndoView) HintView(org.telegram.ui.Components.HintView) WallpaperCheckBoxView(org.telegram.ui.Components.WallpaperCheckBoxView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) TextView(android.widget.TextView) SeekBarView(org.telegram.ui.Components.SeekBarView) BackupImageView(org.telegram.ui.Components.BackupImageView) RecyclerListView(org.telegram.ui.Components.RecyclerListView) DataSetObserver(android.database.DataSetObserver) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) SuppressLint(android.annotation.SuppressLint) MotionEvent(android.view.MotionEvent) FrameLayout(android.widget.FrameLayout) MessageObject(org.telegram.messenger.MessageObject) SuppressLint(android.annotation.SuppressLint)

Example 8 with ChatMessageCell

use of org.telegram.ui.Cells.ChatMessageCell in project Telegram-FOSS by Telegram-FOSS-Team.

the class EmojiAnimationsOverlay method draw.

public void draw(Canvas canvas) {
    if (!drawingObjects.isEmpty()) {
        for (int i = 0; i < drawingObjects.size(); i++) {
            DrawingObject drawingObject = drawingObjects.get(i);
            drawingObject.viewFound = false;
            for (int k = 0; k < listView.getChildCount(); k++) {
                View child = listView.getChildAt(k);
                if (child instanceof ChatMessageCell) {
                    ChatMessageCell cell = (ChatMessageCell) child;
                    if (cell.getMessageObject().getId() == drawingObject.messageId) {
                        drawingObject.viewFound = true;
                        float viewX = listView.getX() + child.getX() + cell.getPhotoImage().getImageX();
                        float viewY = listView.getY() + child.getY() + cell.getPhotoImage().getImageY();
                        if (drawingObject.isOut) {
                            viewX += -cell.getPhotoImage().getImageWidth() * 2 + AndroidUtilities.dp(24);
                        } else {
                            viewX += -AndroidUtilities.dp(24);
                        }
                        viewY -= cell.getPhotoImage().getImageWidth();
                        drawingObject.lastX = viewX;
                        drawingObject.lastY = viewY;
                        drawingObject.lastW = cell.getPhotoImage().getImageWidth();
                        break;
                    }
                }
            }
            drawingObject.imageReceiver.setImageCoords(drawingObject.lastX + drawingObject.randomOffsetX, drawingObject.lastY + drawingObject.randomOffsetY, drawingObject.lastW * 3, drawingObject.lastW * 3);
            if (!drawingObject.isOut) {
                canvas.save();
                canvas.scale(-1f, 1, drawingObject.imageReceiver.getCenterX(), drawingObject.imageReceiver.getCenterY());
                drawingObject.imageReceiver.draw(canvas);
                canvas.restore();
            } else {
                drawingObject.imageReceiver.draw(canvas);
            }
            if (drawingObject.wasPlayed && drawingObject.imageReceiver.getLottieAnimation() != null && drawingObject.imageReceiver.getLottieAnimation().getCurrentFrame() == drawingObject.imageReceiver.getLottieAnimation().getFramesCount() - 2) {
                drawingObjects.remove(i);
                i--;
            } else if (drawingObject.imageReceiver.getLottieAnimation() != null && drawingObject.imageReceiver.getLottieAnimation().isRunning()) {
                drawingObject.wasPlayed = true;
            } else if (drawingObject.imageReceiver.getLottieAnimation() != null && !drawingObject.imageReceiver.getLottieAnimation().isRunning()) {
                drawingObject.imageReceiver.getLottieAnimation().setCurrentFrame(0, true);
                drawingObject.imageReceiver.getLottieAnimation().start();
            }
        }
        contentLayout.invalidate();
    }
}
Also used : ChatMessageCell(org.telegram.ui.Cells.ChatMessageCell) View(android.view.View) RecyclerListView(org.telegram.ui.Components.RecyclerListView)

Example 9 with ChatMessageCell

use of org.telegram.ui.Cells.ChatMessageCell in project Telegram-FOSS by Telegram-FOSS-Team.

the class EmojiAnimationsOverlay method findViewAndShowAnimation.

private void findViewAndShowAnimation(int messageId, int animation) {
    if (!attached) {
        return;
    }
    ChatMessageCell bestView = null;
    for (int i = 0; i < listView.getChildCount(); i++) {
        View child = listView.getChildAt(i);
        if (child instanceof ChatMessageCell) {
            ChatMessageCell cell = (ChatMessageCell) child;
            if (cell.getPhotoImage().hasNotThumb() && cell.getMessageObject().getStickerEmoji() != null) {
                if (cell.getMessageObject().getId() == messageId) {
                    bestView = cell;
                    break;
                }
            }
        }
    }
    if (bestView != null) {
        chatActivity.restartSticker(bestView);
        if (!EmojiData.hasEmojiSupportVibration(bestView.getMessageObject().getStickerEmoji())) {
            bestView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
        }
        showAnimationForCell(bestView, animation, false, true);
    }
}
Also used : ChatMessageCell(org.telegram.ui.Cells.ChatMessageCell) View(android.view.View) RecyclerListView(org.telegram.ui.Components.RecyclerListView)

Example 10 with ChatMessageCell

use of org.telegram.ui.Cells.ChatMessageCell in project Telegram-FOSS by Telegram-FOSS-Team.

the class ThemeActivity method setBubbleRadius.

private boolean setBubbleRadius(int size, boolean layout) {
    if (size != SharedConfig.bubbleRadius) {
        SharedConfig.bubbleRadius = size;
        SharedPreferences preferences = MessagesController.getGlobalMainSettings();
        SharedPreferences.Editor editor = preferences.edit();
        editor.putInt("bubbleRadius", SharedConfig.bubbleRadius);
        editor.commit();
        RecyclerView.ViewHolder holder = listView.findViewHolderForAdapterPosition(textSizeRow);
        if (holder != null && holder.itemView instanceof TextSizeCell) {
            TextSizeCell cell = (TextSizeCell) holder.itemView;
            ChatMessageCell[] cells = cell.messagesCell.getCells();
            for (int a = 0; a < cells.length; a++) {
                cells[a].getMessageObject().resetLayout();
                cells[a].requestLayout();
            }
            cell.invalidate();
        }
        holder = listView.findViewHolderForAdapterPosition(bubbleRadiusRow);
        if (holder != null && holder.itemView instanceof BubbleRadiusCell) {
            BubbleRadiusCell cell = (BubbleRadiusCell) holder.itemView;
            if (layout) {
                cell.requestLayout();
            } else {
                cell.invalidate();
            }
        }
        updateMenuItem();
        return true;
    }
    return false;
}
Also used : ChatMessageCell(org.telegram.ui.Cells.ChatMessageCell) SharedPreferences(android.content.SharedPreferences) RecyclerView(androidx.recyclerview.widget.RecyclerView) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint)

Aggregations

ChatMessageCell (org.telegram.ui.Cells.ChatMessageCell)50 View (android.view.View)36 RecyclerListView (org.telegram.ui.Components.RecyclerListView)36 MessageObject (org.telegram.messenger.MessageObject)33 Paint (android.graphics.Paint)32 RecyclerView (androidx.recyclerview.widget.RecyclerView)29 TextPaint (android.text.TextPaint)27 ChatGreetingsView (org.telegram.ui.Components.ChatGreetingsView)27 SuppressLint (android.annotation.SuppressLint)25 ImageView (android.widget.ImageView)25 TextView (android.widget.TextView)25 UndoView (org.telegram.ui.Components.UndoView)25 TextureView (android.view.TextureView)24 SimpleTextView (org.telegram.ui.ActionBar.SimpleTextView)24 PipRoundVideoView (org.telegram.ui.Components.PipRoundVideoView)24 RadialProgressView (org.telegram.ui.Components.RadialProgressView)24 TextSelectionHint (org.telegram.ui.Components.TextSelectionHint)24 BackupImageView (org.telegram.ui.Components.BackupImageView)21 HintView (org.telegram.ui.Components.HintView)21 HorizontalScrollView (android.widget.HorizontalScrollView)20