use of org.telegram.ui.ActionBar.MenuDrawable in project Telegram-FOSS by Telegram-FOSS-Team.
the class SearchViewPager method showActionMode.
private void showActionMode(boolean show) {
if (isActionModeShowed == show) {
return;
}
if (show && parent.getActionBar().isActionModeShowed()) {
return;
}
if (show && !parent.getActionBar().actionModeIsExist(actionModeTag)) {
ActionBarMenu actionMode = parent.getActionBar().createActionMode(true, actionModeTag);
selectedMessagesCountTextView = new NumberTextView(actionMode.getContext());
selectedMessagesCountTextView.setTextSize(18);
selectedMessagesCountTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
selectedMessagesCountTextView.setTextColor(Theme.getColor(Theme.key_actionBarActionModeDefaultIcon));
actionMode.addView(selectedMessagesCountTextView, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT, 1.0f, 72, 0, 0, 0));
selectedMessagesCountTextView.setOnTouchListener((v, event) -> true);
gotoItem = actionMode.addItemWithWidth(gotoItemId, R.drawable.msg_message, AndroidUtilities.dp(54), LocaleController.getString("AccDescrGoToMessage", R.string.AccDescrGoToMessage));
forwardItem = actionMode.addItemWithWidth(forwardItemId, R.drawable.msg_forward, AndroidUtilities.dp(54), LocaleController.getString("Forward", R.string.Forward));
}
if (parent.getActionBar().getBackButton().getDrawable() instanceof MenuDrawable) {
parent.getActionBar().setBackButtonDrawable(new BackDrawable(false));
}
isActionModeShowed = show;
if (show) {
AndroidUtilities.hideKeyboard(parent.getParentActivity().getCurrentFocus());
parent.getActionBar().showActionMode();
selectedMessagesCountTextView.setNumber(selectedFiles.size(), false);
gotoItem.setVisibility(View.VISIBLE);
forwardItem.setVisibility(View.VISIBLE);
} else {
parent.getActionBar().hideActionMode();
selectedFiles.clear();
for (int i = 0; i < getChildCount(); i++) {
if (getChildAt(i) instanceof FilteredSearchView) {
((FilteredSearchView) getChildAt(i)).update();
}
}
if (noMediaFiltersSearchView != null) {
noMediaFiltersSearchView.update();
}
int n = viewsByType.size();
for (int i = 0; i < n; i++) {
View v = viewsByType.valueAt(i);
if (v instanceof FilteredSearchView) {
((FilteredSearchView) v).update();
}
}
}
}
use of org.telegram.ui.ActionBar.MenuDrawable 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;
}
use of org.telegram.ui.ActionBar.MenuDrawable in project Telegram-FOSS by Telegram-FOSS-Team.
the class DialogsActivity method createView.
@Override
public View createView(final Context context) {
searching = false;
searchWas = false;
pacmanAnimation = null;
selectedDialogs.clear();
maximumVelocity = ViewConfiguration.get(context).getScaledMaximumFlingVelocity();
AndroidUtilities.runOnUIThread(() -> Theme.createChatResources(context, false));
ActionBarMenu menu = actionBar.createMenu();
if (!onlySelect && searchString == null && folderId == 0) {
doneItem = new ActionBarMenuItem(context, null, Theme.getColor(Theme.key_actionBarDefaultSelector), Theme.getColor(Theme.key_actionBarDefaultIcon), true);
doneItem.setText(LocaleController.getString("Done", R.string.Done).toUpperCase());
actionBar.addView(doneItem, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.RIGHT, 0, 0, 10, 0));
doneItem.setOnClickListener(v -> {
filterTabsView.setIsEditing(false);
showDoneItem(false);
});
doneItem.setAlpha(0.0f);
doneItem.setVisibility(View.GONE);
proxyDrawable = new ProxyDrawable(context);
proxyItem = menu.addItem(2, proxyDrawable);
proxyItem.setContentDescription(LocaleController.getString("ProxySettings", R.string.ProxySettings));
passcodeDrawable = new RLottieDrawable(R.raw.passcode_lock_close, "passcode_lock_close", AndroidUtilities.dp(28), AndroidUtilities.dp(28), true, null);
passcodeItem = menu.addItem(1, passcodeDrawable);
passcodeItem.setContentDescription(LocaleController.getString("AccDescrPasscodeLock", R.string.AccDescrPasscodeLock));
updatePasscodeButton();
updateProxyButton(false);
}
searchItem = menu.addItem(0, R.drawable.ic_ab_search).setIsSearchField(true, true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() {
@Override
public void onSearchExpand() {
searching = true;
if (switchItem != null) {
switchItem.setVisibility(View.GONE);
}
if (proxyItem != null && proxyItemVisible) {
proxyItem.setVisibility(View.GONE);
}
if (viewPages[0] != null) {
if (searchString != null) {
viewPages[0].listView.hide();
if (searchViewPager != null) {
searchViewPager.searchListView.show();
}
}
if (!onlySelect) {
floatingButtonContainer.setVisibility(View.GONE);
}
}
setScrollY(0);
updatePasscodeButton();
actionBar.setBackButtonContentDescription(LocaleController.getString("AccDescrGoBack", R.string.AccDescrGoBack));
}
@Override
public boolean canCollapseSearch() {
if (switchItem != null) {
switchItem.setVisibility(View.VISIBLE);
}
if (proxyItem != null && proxyItemVisible) {
proxyItem.setVisibility(View.VISIBLE);
}
if (searchString != null) {
finishFragment();
return false;
}
return true;
}
@Override
public void onSearchCollapse() {
searching = false;
searchWas = false;
if (viewPages[0] != null) {
viewPages[0].listView.setEmptyView(folderId == 0 ? viewPages[0].progressView : null);
if (!onlySelect) {
floatingButtonContainer.setVisibility(View.VISIBLE);
floatingHidden = true;
floatingButtonTranslation = AndroidUtilities.dp(100);
floatingButtonHideProgress = 1f;
updateFloatingButtonOffset();
}
showSearch(false, true);
}
updatePasscodeButton();
if (menuDrawable != null) {
if (actionBar.getBackButton().getDrawable() != menuDrawable) {
actionBar.setBackButtonDrawable(menuDrawable);
menuDrawable.setRotation(0, true);
}
actionBar.setBackButtonContentDescription(LocaleController.getString("AccDescrOpenMenu", R.string.AccDescrOpenMenu));
}
}
@Override
public void onTextChanged(EditText editText) {
String text = editText.getText().toString();
if (text.length() != 0 || (searchViewPager.dialogsSearchAdapter != null && searchViewPager.dialogsSearchAdapter.hasRecentSearch()) || searchFiltersWasShowed) {
searchWas = true;
if (!searchIsShowed) {
showSearch(true, true);
}
}
searchViewPager.onTextChanged(text);
}
@Override
public void onSearchFilterCleared(FiltersView.MediaFilterData filterData) {
if (!searchIsShowed) {
return;
}
searchViewPager.removeSearchFilter(filterData);
searchViewPager.onTextChanged(searchItem.getSearchField().getText().toString());
updateFiltersView(true, null, null, false, true);
}
@Override
public boolean canToggleSearch() {
return !actionBar.isActionModeShowed() && databaseMigrationHint == null;
}
});
searchItem.setSearchFieldHint(LocaleController.getString("Search", R.string.Search));
searchItem.setContentDescription(LocaleController.getString("Search", R.string.Search));
if (onlySelect) {
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
if (initialDialogsType == 3 && selectAlertString == null) {
actionBar.setTitle(LocaleController.getString("ForwardTo", R.string.ForwardTo));
} else if (initialDialogsType == 10) {
actionBar.setTitle(LocaleController.getString("SelectChats", R.string.SelectChats));
} else {
actionBar.setTitle(LocaleController.getString("SelectChat", R.string.SelectChat));
}
actionBar.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefault));
} else {
if (searchString != null || folderId != 0) {
actionBar.setBackButtonDrawable(backDrawable = new BackDrawable(false));
} else {
actionBar.setBackButtonDrawable(menuDrawable = new MenuDrawable());
actionBar.setBackButtonContentDescription(LocaleController.getString("AccDescrOpenMenu", R.string.AccDescrOpenMenu));
}
if (folderId != 0) {
actionBar.setTitle(LocaleController.getString("ArchivedChats", R.string.ArchivedChats));
} else {
if (BuildVars.DEBUG_VERSION) {
actionBar.setTitle("Telegram Beta");
} else {
actionBar.setTitle(LocaleController.getString("AppName", R.string.AppName));
}
}
if (folderId == 0) {
actionBar.setSupportsHolidayImage(true);
}
}
if (!onlySelect) {
actionBar.setAddToContainer(false);
actionBar.setCastShadows(false);
actionBar.setClipContent(true);
}
actionBar.setTitleActionRunnable(() -> {
if (initialDialogsType != 10) {
hideFloatingButton(false);
}
scrollToTop();
});
if (initialDialogsType == 0 && folderId == 0 && !onlySelect && TextUtils.isEmpty(searchString)) {
scrimPaint = new Paint() {
@Override
public void setAlpha(int a) {
super.setAlpha(a);
if (fragmentView != null) {
fragmentView.invalidate();
}
}
};
filterTabsView = new FilterTabsView(context) {
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true);
maybeStartTracking = false;
return super.onInterceptTouchEvent(ev);
}
@Override
public void setTranslationY(float translationY) {
if (getTranslationY() != translationY) {
super.setTranslationY(translationY);
updateContextViewPosition();
if (fragmentView != null) {
fragmentView.invalidate();
}
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (scrimView != null) {
scrimView.getLocationInWindow(scrimViewLocation);
fragmentView.invalidate();
}
}
};
filterTabsView.setVisibility(View.GONE);
canShowFilterTabsView = false;
filterTabsView.setDelegate(new FilterTabsView.FilterTabsViewDelegate() {
private void showDeleteAlert(MessagesController.DialogFilter dialogFilter) {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("FilterDelete", R.string.FilterDelete));
builder.setMessage(LocaleController.getString("FilterDeleteAlert", R.string.FilterDeleteAlert));
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
builder.setPositiveButton(LocaleController.getString("Delete", R.string.Delete), (dialog2, which2) -> {
TLRPC.TL_messages_updateDialogFilter req = new TLRPC.TL_messages_updateDialogFilter();
req.id = dialogFilter.id;
getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
}));
// if (getMessagesController().dialogFilters.size() > 1) {
// filterTabsView.beginCrossfade();
// }
getMessagesController().removeFilter(dialogFilter);
getMessagesStorage().deleteDialogFilter(dialogFilter);
// filterTabsView.commitCrossfade();
});
AlertDialog alertDialog = builder.create();
showDialog(alertDialog);
TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
if (button != null) {
button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
}
}
@Override
public void onSamePageSelected() {
scrollToTop();
}
@Override
public void onPageReorder(int fromId, int toId) {
for (int a = 0; a < viewPages.length; a++) {
if (viewPages[a].selectedType == fromId) {
viewPages[a].selectedType = toId;
} else if (viewPages[a].selectedType == toId) {
viewPages[a].selectedType = fromId;
}
}
}
@Override
public void onPageSelected(int id, boolean forward) {
if (viewPages[0].selectedType == id) {
return;
}
ArrayList<MessagesController.DialogFilter> dialogFilters = getMessagesController().dialogFilters;
if (id != Integer.MAX_VALUE && (id < 0 || id >= dialogFilters.size())) {
return;
}
if (parentLayout != null) {
parentLayout.getDrawerLayoutContainer().setAllowOpenDrawerBySwipe(id == filterTabsView.getFirstTabId() || SharedConfig.getChatSwipeAction(currentAccount) != SwipeGestureSettingsView.SWIPE_GESTURE_FOLDERS);
}
viewPages[1].selectedType = id;
viewPages[1].setVisibility(View.VISIBLE);
viewPages[1].setTranslationX(viewPages[0].getMeasuredWidth());
showScrollbars(false);
switchToCurrentSelectedMode(true);
animatingForward = forward;
}
@Override
public boolean canPerformActions() {
return !searching;
}
@Override
public void onPageScrolled(float progress) {
if (progress == 1 && viewPages[1].getVisibility() != View.VISIBLE && !searching) {
return;
}
if (animatingForward) {
viewPages[0].setTranslationX(-progress * viewPages[0].getMeasuredWidth());
viewPages[1].setTranslationX(viewPages[0].getMeasuredWidth() - progress * viewPages[0].getMeasuredWidth());
} else {
viewPages[0].setTranslationX(progress * viewPages[0].getMeasuredWidth());
viewPages[1].setTranslationX(progress * viewPages[0].getMeasuredWidth() - viewPages[0].getMeasuredWidth());
}
if (progress == 1) {
ViewPage tempPage = viewPages[0];
viewPages[0] = viewPages[1];
viewPages[1] = tempPage;
viewPages[1].setVisibility(View.GONE);
showScrollbars(true);
updateCounters(false);
checkListLoad(viewPages[0]);
viewPages[0].dialogsAdapter.resume();
viewPages[1].dialogsAdapter.pause();
}
}
@Override
public int getTabCounter(int tabId) {
if (tabId == Integer.MAX_VALUE) {
return getMessagesStorage().getMainUnreadCount();
}
ArrayList<MessagesController.DialogFilter> dialogFilters = getMessagesController().dialogFilters;
if (tabId < 0 || tabId >= dialogFilters.size()) {
return 0;
}
return getMessagesController().dialogFilters.get(tabId).unreadCount;
}
@Override
public boolean didSelectTab(FilterTabsView.TabView tabView, boolean selected) {
if (actionBar.isActionModeShowed()) {
return false;
}
if (scrimPopupWindow != null) {
scrimPopupWindow.dismiss();
scrimPopupWindow = null;
scrimPopupWindowItems = null;
return false;
}
Rect rect = new Rect();
MessagesController.DialogFilter dialogFilter;
if (tabView.getId() == Integer.MAX_VALUE) {
dialogFilter = null;
} else {
dialogFilter = getMessagesController().dialogFilters.get(tabView.getId());
}
ActionBarPopupWindow.ActionBarPopupWindowLayout popupLayout = new ActionBarPopupWindow.ActionBarPopupWindowLayout(getParentActivity());
popupLayout.setOnTouchListener(new View.OnTouchListener() {
private int[] pos = new int[2];
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
if (scrimPopupWindow != null && scrimPopupWindow.isShowing()) {
View contentView = scrimPopupWindow.getContentView();
contentView.getLocationInWindow(pos);
rect.set(pos[0], pos[1], pos[0] + contentView.getMeasuredWidth(), pos[1] + contentView.getMeasuredHeight());
if (!rect.contains((int) event.getX(), (int) event.getY())) {
scrimPopupWindow.dismiss();
}
}
} else if (event.getActionMasked() == MotionEvent.ACTION_OUTSIDE) {
if (scrimPopupWindow != null && scrimPopupWindow.isShowing()) {
scrimPopupWindow.dismiss();
}
}
return false;
}
});
popupLayout.setDispatchKeyEventListener(keyEvent -> {
if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK && keyEvent.getRepeatCount() == 0 && scrimPopupWindow != null && scrimPopupWindow.isShowing()) {
scrimPopupWindow.dismiss();
}
});
Rect backgroundPaddings = new Rect();
Drawable shadowDrawable = getParentActivity().getResources().getDrawable(R.drawable.popup_fixed_alert).mutate();
shadowDrawable.getPadding(backgroundPaddings);
popupLayout.setBackgroundDrawable(shadowDrawable);
popupLayout.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground));
LinearLayout linearLayout = new LinearLayout(getParentActivity());
ScrollView scrollView;
if (Build.VERSION.SDK_INT >= 21) {
scrollView = new ScrollView(getParentActivity(), null, 0, R.style.scrollbarShapeStyle) {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(linearLayout.getMeasuredWidth(), getMeasuredHeight());
}
};
} else {
scrollView = new ScrollView(getParentActivity());
}
scrollView.setClipToPadding(false);
popupLayout.addView(scrollView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT));
linearLayout.setMinimumWidth(AndroidUtilities.dp(200));
linearLayout.setOrientation(LinearLayout.VERTICAL);
scrimPopupWindowItems = new ActionBarMenuSubItem[3];
for (int a = 0, N = (tabView.getId() == Integer.MAX_VALUE ? 2 : 3); a < N; a++) {
ActionBarMenuSubItem cell = new ActionBarMenuSubItem(getParentActivity(), a == 0, a == N - 1);
if (a == 0) {
if (getMessagesController().dialogFilters.size() <= 1) {
continue;
}
cell.setTextAndIcon(LocaleController.getString("FilterReorder", R.string.FilterReorder), R.drawable.tabs_reorder);
} else if (a == 1) {
if (N == 2) {
cell.setTextAndIcon(LocaleController.getString("FilterEditAll", R.string.FilterEditAll), R.drawable.msg_edit);
} else {
cell.setTextAndIcon(LocaleController.getString("FilterEdit", R.string.FilterEdit), R.drawable.msg_edit);
}
} else {
cell.setTextAndIcon(LocaleController.getString("FilterDeleteItem", R.string.FilterDeleteItem), R.drawable.msg_delete);
}
scrimPopupWindowItems[a] = cell;
linearLayout.addView(cell);
final int i = a;
cell.setOnClickListener(v1 -> {
if (i == 0) {
resetScroll();
filterTabsView.setIsEditing(true);
showDoneItem(true);
} else if (i == 1) {
if (N == 2) {
presentFragment(new FiltersSetupActivity());
} else {
presentFragment(new FilterCreateActivity(dialogFilter));
}
} else if (i == 2) {
showDeleteAlert(dialogFilter);
}
if (scrimPopupWindow != null) {
scrimPopupWindow.dismiss();
}
});
}
scrollView.addView(linearLayout, LayoutHelper.createScroll(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP));
scrimPopupWindow = new ActionBarPopupWindow(popupLayout, LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT) {
@Override
public void dismiss() {
super.dismiss();
if (scrimPopupWindow != this) {
return;
}
scrimPopupWindow = null;
scrimPopupWindowItems = null;
if (scrimAnimatorSet != null) {
scrimAnimatorSet.cancel();
scrimAnimatorSet = null;
}
scrimAnimatorSet = new AnimatorSet();
ArrayList<Animator> animators = new ArrayList<>();
animators.add(ObjectAnimator.ofInt(scrimPaint, AnimationProperties.PAINT_ALPHA, 0));
scrimAnimatorSet.playTogether(animators);
scrimAnimatorSet.setDuration(220);
scrimAnimatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
if (scrimView != null) {
scrimView.setBackground(null);
scrimView = null;
}
if (fragmentView != null) {
fragmentView.invalidate();
}
}
});
scrimAnimatorSet.start();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getParentActivity().getWindow().getDecorView().setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
}
}
};
tabView.setBackground(Theme.createRoundRectDrawable(AndroidUtilities.dp(6), Theme.getColor(Theme.key_actionBarDefault)));
scrimPopupWindow.setDismissAnimationDuration(220);
scrimPopupWindow.setOutsideTouchable(true);
scrimPopupWindow.setClippingEnabled(true);
scrimPopupWindow.setAnimationStyle(R.style.PopupContextAnimation);
scrimPopupWindow.setFocusable(true);
popupLayout.measure(View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST));
scrimPopupWindow.setInputMethodMode(ActionBarPopupWindow.INPUT_METHOD_NOT_NEEDED);
scrimPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED);
scrimPopupWindow.getContentView().setFocusableInTouchMode(true);
tabView.getLocationInWindow(scrimViewLocation);
int popupX = scrimViewLocation[0] + backgroundPaddings.left - AndroidUtilities.dp(16);
if (popupX < AndroidUtilities.dp(6)) {
popupX = AndroidUtilities.dp(6);
} else if (popupX > fragmentView.getMeasuredWidth() - AndroidUtilities.dp(6) - popupLayout.getMeasuredWidth()) {
popupX = fragmentView.getMeasuredWidth() - AndroidUtilities.dp(6) - popupLayout.getMeasuredWidth();
}
int popupY = scrimViewLocation[1] + tabView.getMeasuredHeight() - AndroidUtilities.dp(12);
scrimPopupWindow.showAtLocation(fragmentView, Gravity.LEFT | Gravity.TOP, popupX, popupY);
scrimView = tabView;
scrimViewSelected = selected;
fragmentView.invalidate();
if (scrimAnimatorSet != null) {
scrimAnimatorSet.cancel();
}
scrimAnimatorSet = new AnimatorSet();
ArrayList<Animator> animators = new ArrayList<>();
animators.add(ObjectAnimator.ofInt(scrimPaint, AnimationProperties.PAINT_ALPHA, 0, 50));
scrimAnimatorSet.playTogether(animators);
scrimAnimatorSet.setDuration(150);
scrimAnimatorSet.start();
return true;
}
@Override
public boolean isTabMenuVisible() {
return scrimPopupWindow != null && scrimPopupWindow.isShowing();
}
@Override
public void onDeletePressed(int id) {
showDeleteAlert(getMessagesController().dialogFilters.get(id));
}
});
}
if (allowSwitchAccount && UserConfig.getActivatedAccountsCount() > 1) {
switchItem = menu.addItemWithWidth(1, 0, AndroidUtilities.dp(56));
AvatarDrawable avatarDrawable = new AvatarDrawable();
avatarDrawable.setTextSize(AndroidUtilities.dp(12));
BackupImageView imageView = new BackupImageView(context);
imageView.setRoundRadius(AndroidUtilities.dp(18));
switchItem.addView(imageView, LayoutHelper.createFrame(36, 36, Gravity.CENTER));
TLRPC.User user = getUserConfig().getCurrentUser();
avatarDrawable.setInfo(user);
imageView.getImageReceiver().setCurrentAccount(currentAccount);
imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user);
for (int a = 0; a < UserConfig.MAX_ACCOUNT_COUNT; a++) {
TLRPC.User u = AccountInstance.getInstance(a).getUserConfig().getCurrentUser();
if (u != null) {
AccountSelectCell cell = new AccountSelectCell(context, false);
cell.setAccount(a, true);
switchItem.addSubItem(10 + a, cell, AndroidUtilities.dp(230), AndroidUtilities.dp(48));
}
}
}
actionBar.setAllowOverlayTitle(true);
if (sideMenu != null) {
sideMenu.setBackgroundColor(Theme.getColor(Theme.key_chats_menuBackground));
sideMenu.setGlowColor(Theme.getColor(Theme.key_chats_menuBackground));
sideMenu.getAdapter().notifyDataSetChanged();
}
createActionMode(null);
ContentView contentView = new ContentView(context);
fragmentView = contentView;
int pagesCount = folderId == 0 && initialDialogsType == 0 && !onlySelect ? 2 : 1;
viewPages = new ViewPage[pagesCount];
for (int a = 0; a < pagesCount; a++) {
final ViewPage viewPage = new ViewPage(context) {
@Override
public void setTranslationX(float translationX) {
super.setTranslationX(translationX);
if (tabsAnimationInProgress) {
if (viewPages[0] == this) {
float scrollProgress = Math.abs(viewPages[0].getTranslationX()) / (float) viewPages[0].getMeasuredWidth();
filterTabsView.selectTabWithId(viewPages[1].selectedType, scrollProgress);
}
}
}
};
contentView.addView(viewPage, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
viewPage.dialogsType = initialDialogsType;
viewPages[a] = viewPage;
viewPage.progressView = new FlickerLoadingView(context);
viewPage.progressView.setViewType(FlickerLoadingView.DIALOG_CELL_TYPE);
viewPage.progressView.setVisibility(View.GONE);
viewPage.addView(viewPage.progressView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER));
viewPage.listView = new DialogsRecyclerView(context, viewPage);
viewPage.listView.setAccessibilityEnabled(false);
viewPage.listView.setAnimateEmptyView(true, 0);
viewPage.listView.setClipToPadding(false);
viewPage.listView.setPivotY(0);
viewPage.dialogsItemAnimator = new DialogsItemAnimator(viewPage.listView) {
@Override
public void onRemoveStarting(RecyclerView.ViewHolder item) {
super.onRemoveStarting(item);
if (viewPage.layoutManager.findFirstVisibleItemPosition() == 0) {
View v = viewPage.layoutManager.findViewByPosition(0);
if (v != null) {
v.invalidate();
}
if (viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) {
viewPage.archivePullViewState = ARCHIVE_ITEM_STATE_SHOWED;
}
if (viewPage.pullForegroundDrawable != null) {
viewPage.pullForegroundDrawable.doNotShow();
}
}
}
@Override
public void onRemoveFinished(RecyclerView.ViewHolder item) {
if (dialogRemoveFinished == 2) {
dialogRemoveFinished = 1;
}
}
@Override
public void onAddFinished(RecyclerView.ViewHolder item) {
if (dialogInsertFinished == 2) {
dialogInsertFinished = 1;
}
}
@Override
public void onChangeFinished(RecyclerView.ViewHolder item, boolean oldItem) {
if (dialogChangeFinished == 2) {
dialogChangeFinished = 1;
}
}
@Override
protected void onAllAnimationsDone() {
if (dialogRemoveFinished == 1 || dialogInsertFinished == 1 || dialogChangeFinished == 1) {
onDialogAnimationFinished();
}
}
};
// viewPage.listView.setItemAnimator(viewPage.dialogsItemAnimator);
viewPage.listView.setVerticalScrollBarEnabled(true);
viewPage.listView.setInstantClick(true);
viewPage.layoutManager = new LinearLayoutManager(context) {
private boolean fixOffset;
@Override
public void scrollToPositionWithOffset(int position, int offset) {
if (fixOffset) {
offset -= viewPage.listView.getPaddingTop();
}
super.scrollToPositionWithOffset(position, offset);
}
@Override
public void prepareForDrop(@NonNull View view, @NonNull View target, int x, int y) {
fixOffset = true;
super.prepareForDrop(view, target, x, y);
fixOffset = false;
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
if (hasHiddenArchive() && position == 1) {
super.smoothScrollToPosition(recyclerView, state, position);
} else {
LinearSmoothScrollerCustom linearSmoothScroller = new LinearSmoothScrollerCustom(recyclerView.getContext(), LinearSmoothScrollerCustom.POSITION_MIDDLE);
linearSmoothScroller.setTargetPosition(position);
startSmoothScroll(linearSmoothScroller);
}
}
@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
if (viewPage.listView.fastScrollAnimationRunning) {
return 0;
}
boolean isDragging = viewPage.listView.getScrollState() == RecyclerView.SCROLL_STATE_DRAGGING;
int measuredDy = dy;
int pTop = viewPage.listView.getPaddingTop();
if (viewPage.dialogsType == 0 && !onlySelect && folderId == 0 && dy < 0 && getMessagesController().hasHiddenArchive() && viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) {
viewPage.listView.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
int currentPosition = viewPage.layoutManager.findFirstVisibleItemPosition();
if (currentPosition == 0) {
View view = viewPage.layoutManager.findViewByPosition(currentPosition);
if (view != null && (view.getBottom() - pTop) <= AndroidUtilities.dp(1)) {
currentPosition = 1;
}
}
if (!isDragging) {
View view = viewPage.layoutManager.findViewByPosition(currentPosition);
if (view != null) {
int dialogHeight = AndroidUtilities.dp(SharedConfig.useThreeLinesLayout ? 78 : 72) + 1;
int canScrollDy = -(view.getTop() - pTop) + (currentPosition - 1) * dialogHeight;
int positiveDy = Math.abs(dy);
if (canScrollDy < positiveDy) {
measuredDy = -canScrollDy;
}
}
} else if (currentPosition == 0) {
View v = viewPage.layoutManager.findViewByPosition(currentPosition);
float k = 1f + ((v.getTop() - pTop) / (float) v.getMeasuredHeight());
if (k > 1f) {
k = 1f;
}
viewPage.listView.setOverScrollMode(View.OVER_SCROLL_NEVER);
measuredDy *= PullForegroundDrawable.startPullParallax - PullForegroundDrawable.endPullParallax * k;
if (measuredDy > -1) {
measuredDy = -1;
}
if (undoView[0].getVisibility() == View.VISIBLE) {
undoView[0].hide(true, 1);
}
}
}
if (viewPage.dialogsType == 0 && viewPage.listView.getViewOffset() != 0 && dy > 0 && isDragging) {
float ty = (int) viewPage.listView.getViewOffset();
ty -= dy;
if (ty < 0) {
measuredDy = (int) ty;
ty = 0;
} else {
measuredDy = 0;
}
viewPage.listView.setViewsOffset(ty);
}
if (viewPage.dialogsType == 0 && viewPage.archivePullViewState != ARCHIVE_ITEM_STATE_PINNED && hasHiddenArchive()) {
int usedDy = super.scrollVerticallyBy(measuredDy, recycler, state);
if (viewPage.pullForegroundDrawable != null) {
viewPage.pullForegroundDrawable.scrollDy = usedDy;
}
int currentPosition = viewPage.layoutManager.findFirstVisibleItemPosition();
View firstView = null;
if (currentPosition == 0) {
firstView = viewPage.layoutManager.findViewByPosition(currentPosition);
}
if (currentPosition == 0 && firstView != null && (firstView.getBottom() - pTop) >= AndroidUtilities.dp(4)) {
if (startArchivePullingTime == 0) {
startArchivePullingTime = System.currentTimeMillis();
}
if (viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) {
if (viewPage.pullForegroundDrawable != null) {
viewPage.pullForegroundDrawable.showHidden();
}
}
float k = 1f + ((firstView.getTop() - pTop) / (float) firstView.getMeasuredHeight());
if (k > 1f) {
k = 1f;
}
long pullingTime = System.currentTimeMillis() - startArchivePullingTime;
boolean canShowInternal = k > PullForegroundDrawable.SNAP_HEIGHT && pullingTime > PullForegroundDrawable.minPullingTime + 20;
if (canShowHiddenArchive != canShowInternal) {
canShowHiddenArchive = canShowInternal;
if (viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN) {
viewPage.listView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
if (viewPage.pullForegroundDrawable != null) {
viewPage.pullForegroundDrawable.colorize(canShowInternal);
}
}
}
if (viewPage.archivePullViewState == ARCHIVE_ITEM_STATE_HIDDEN && measuredDy - usedDy != 0 && dy < 0 && isDragging) {
float ty;
float tk = (viewPage.listView.getViewOffset() / PullForegroundDrawable.getMaxOverscroll());
tk = 1f - tk;
ty = (viewPage.listView.getViewOffset() - dy * PullForegroundDrawable.startPullOverScroll * tk);
viewPage.listView.setViewsOffset(ty);
}
if (viewPage.pullForegroundDrawable != null) {
viewPage.pullForegroundDrawable.pullProgress = k;
viewPage.pullForegroundDrawable.setListView(viewPage.listView);
}
} else {
startArchivePullingTime = 0;
canShowHiddenArchive = false;
viewPage.archivePullViewState = ARCHIVE_ITEM_STATE_HIDDEN;
if (viewPage.pullForegroundDrawable != null) {
viewPage.pullForegroundDrawable.resetText();
viewPage.pullForegroundDrawable.pullProgress = 0f;
viewPage.pullForegroundDrawable.setListView(viewPage.listView);
}
}
if (firstView != null) {
firstView.invalidate();
}
return usedDy;
}
return super.scrollVerticallyBy(measuredDy, recycler, state);
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
if (BuildVars.DEBUG_PRIVATE_VERSION) {
try {
super.onLayoutChildren(recycler, state);
} catch (IndexOutOfBoundsException e) {
throw new RuntimeException("Inconsistency detected. " + "dialogsListIsFrozen=" + dialogsListFrozen + " lastUpdateAction=" + debugLastUpdateAction);
}
} else {
try {
super.onLayoutChildren(recycler, state);
} catch (IndexOutOfBoundsException e) {
FileLog.e(e);
AndroidUtilities.runOnUIThread(() -> viewPage.dialogsAdapter.notifyDataSetChanged());
}
}
}
};
viewPage.layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
viewPage.listView.setLayoutManager(viewPage.layoutManager);
viewPage.listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
viewPage.addView(viewPage.listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
viewPage.listView.setOnItemClickListener((view, position) -> {
if (initialDialogsType == 10) {
onItemLongClick(view, position, 0, 0, viewPage.dialogsType, viewPage.dialogsAdapter);
return;
} else if ((initialDialogsType == 11 || initialDialogsType == 13) && position == 1) {
Bundle args = new Bundle();
args.putBoolean("forImport", true);
long[] array = new long[] { getUserConfig().getClientUserId() };
args.putLongArray("result", array);
args.putInt("chatType", ChatObject.CHAT_TYPE_MEGAGROUP);
String title = arguments.getString("importTitle");
if (title != null) {
args.putString("title", title);
}
GroupCreateFinalActivity activity = new GroupCreateFinalActivity(args);
activity.setDelegate(new GroupCreateFinalActivity.GroupCreateFinalActivityDelegate() {
@Override
public void didStartChatCreation() {
}
@Override
public void didFinishChatCreation(GroupCreateFinalActivity fragment, long chatId) {
ArrayList<Long> arrayList = new ArrayList<>();
arrayList.add(-chatId);
DialogsActivityDelegate dialogsActivityDelegate = delegate;
removeSelfFromStack();
dialogsActivityDelegate.didSelectDialogs(DialogsActivity.this, arrayList, null, true);
}
@Override
public void didFailChatCreation() {
}
});
presentFragment(activity);
return;
}
onItemClick(view, position, viewPage.dialogsAdapter);
});
viewPage.listView.setOnItemLongClickListener(new RecyclerListView.OnItemLongClickListenerExtended() {
@Override
public boolean onItemClick(View view, int position, float x, float y) {
if (filterTabsView != null && filterTabsView.getVisibility() == View.VISIBLE && filterTabsView.isEditing()) {
return false;
}
return onItemLongClick(view, position, x, y, viewPage.dialogsType, viewPage.dialogsAdapter);
}
@Override
public void onLongClickRelease() {
finishPreviewFragment();
}
@Override
public void onMove(float dx, float dy) {
movePreviewFragment(dy);
}
});
viewPage.swipeController = new SwipeController(viewPage);
viewPage.recyclerItemsEnterAnimator = new RecyclerItemsEnterAnimator(viewPage.listView, false);
viewPage.itemTouchhelper = new ItemTouchHelper(viewPage.swipeController);
viewPage.itemTouchhelper.attachToRecyclerView(viewPage.listView);
viewPage.listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
private boolean wasManualScroll;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
wasManualScroll = true;
scrollingManually = true;
} else {
scrollingManually = false;
}
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
wasManualScroll = false;
disableActionBarScrolling = false;
if (waitingForScrollFinished) {
waitingForScrollFinished = false;
if (updatePullAfterScroll) {
viewPage.listView.updatePullState();
updatePullAfterScroll = false;
}
viewPage.dialogsAdapter.notifyDataSetChanged();
}
if (filterTabsView != null && filterTabsView.getVisibility() == View.VISIBLE && viewPages[0].listView == recyclerView) {
int scrollY = (int) -actionBar.getTranslationY();
int actionBarHeight = ActionBar.getCurrentActionBarHeight();
if (scrollY != 0 && scrollY != actionBarHeight) {
if (scrollY < actionBarHeight / 2) {
recyclerView.smoothScrollBy(0, -scrollY);
} else if (viewPages[0].listView.canScrollVertically(1)) {
recyclerView.smoothScrollBy(0, actionBarHeight - scrollY);
}
}
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
viewPage.dialogsItemAnimator.onListScroll(-dy);
checkListLoad(viewPage);
if (initialDialogsType != 10 && wasManualScroll && floatingButtonContainer.getVisibility() != View.GONE && recyclerView.getChildCount() > 0) {
int firstVisibleItem = viewPage.layoutManager.findFirstVisibleItemPosition();
if (firstVisibleItem != RecyclerView.NO_POSITION) {
RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(firstVisibleItem);
if (!hasHiddenArchive() || holder != null && holder.getAdapterPosition() != 0) {
int firstViewTop = 0;
if (holder != null) {
firstViewTop = holder.itemView.getTop();
}
boolean goingDown;
boolean changed = true;
if (prevPosition == firstVisibleItem) {
final int topDelta = prevTop - firstViewTop;
goingDown = firstViewTop < prevTop;
changed = Math.abs(topDelta) > 1;
} else {
goingDown = firstVisibleItem > prevPosition;
}
if (changed && scrollUpdated && (goingDown || scrollingManually)) {
hideFloatingButton(goingDown);
}
prevPosition = firstVisibleItem;
prevTop = firstViewTop;
scrollUpdated = true;
}
}
}
if (filterTabsView != null && filterTabsView.getVisibility() == View.VISIBLE && recyclerView == viewPages[0].listView && !searching && !actionBar.isActionModeShowed() && !disableActionBarScrolling && filterTabsViewIsVisible) {
if (dy > 0 && hasHiddenArchive() && viewPages[0].dialogsType == 0) {
View child = recyclerView.getChildAt(0);
if (child != null) {
RecyclerView.ViewHolder holder = recyclerView.getChildViewHolder(child);
if (holder.getAdapterPosition() == 0) {
int visiblePartAfterScroll = child.getMeasuredHeight() + (child.getTop() - recyclerView.getPaddingTop());
if (visiblePartAfterScroll + dy > 0) {
if (visiblePartAfterScroll < 0) {
dy = -visiblePartAfterScroll;
} else {
return;
}
}
}
}
}
float currentTranslation = actionBar.getTranslationY();
float newTranslation = currentTranslation - dy;
if (newTranslation < -ActionBar.getCurrentActionBarHeight()) {
newTranslation = -ActionBar.getCurrentActionBarHeight();
} else if (newTranslation > 0) {
newTranslation = 0;
}
if (newTranslation != currentTranslation) {
setScrollY(newTranslation);
}
}
}
});
viewPage.archivePullViewState = SharedConfig.archiveHidden ? ARCHIVE_ITEM_STATE_HIDDEN : ARCHIVE_ITEM_STATE_PINNED;
if (viewPage.pullForegroundDrawable == null && folderId == 0) {
viewPage.pullForegroundDrawable = new PullForegroundDrawable(LocaleController.getString("AccSwipeForArchive", R.string.AccSwipeForArchive), LocaleController.getString("AccReleaseForArchive", R.string.AccReleaseForArchive)) {
@Override
protected float getViewOffset() {
return viewPage.listView.getViewOffset();
}
};
if (hasHiddenArchive()) {
viewPage.pullForegroundDrawable.showHidden();
} else {
viewPage.pullForegroundDrawable.doNotShow();
}
viewPage.pullForegroundDrawable.setWillDraw(viewPage.archivePullViewState != ARCHIVE_ITEM_STATE_PINNED);
}
viewPage.dialogsAdapter = new DialogsAdapter(this, context, viewPage.dialogsType, folderId, onlySelect, selectedDialogs, currentAccount) {
@Override
public void notifyDataSetChanged() {
viewPage.lastItemsCount = getItemCount();
try {
super.notifyDataSetChanged();
} catch (Exception e) {
FileLog.e(e);
}
}
};
viewPage.dialogsAdapter.setForceShowEmptyCell(afterSignup);
if (AndroidUtilities.isTablet() && openedDialogId != 0) {
viewPage.dialogsAdapter.setOpenedDialogId(openedDialogId);
}
viewPage.dialogsAdapter.setArchivedPullDrawable(viewPage.pullForegroundDrawable);
viewPage.listView.setAdapter(viewPage.dialogsAdapter);
viewPage.listView.setEmptyView(folderId == 0 ? viewPage.progressView : null);
viewPage.scrollHelper = new RecyclerAnimationScrollHelper(viewPage.listView, viewPage.layoutManager);
if (a != 0) {
viewPages[a].setVisibility(View.GONE);
}
}
int type = 0;
if (searchString != null) {
type = 2;
} else if (!onlySelect) {
type = 1;
}
searchViewPager = new SearchViewPager(context, this, type, initialDialogsType, folderId, new SearchViewPager.ChatPreviewDelegate() {
@Override
public void startChatPreview(DialogCell cell) {
showChatPreview(cell);
}
@Override
public void move(float dy) {
movePreviewFragment(dy);
}
@Override
public void finish() {
finishPreviewFragment();
}
});
contentView.addView(searchViewPager);
searchViewPager.dialogsSearchAdapter.setDelegate(new DialogsSearchAdapter.DialogsSearchAdapterDelegate() {
@Override
public void searchStateChanged(boolean search, boolean animated) {
if (searchViewPager.emptyView.getVisibility() == View.VISIBLE) {
animated = true;
}
if (searching && searchWas && searchViewPager.emptyView != null) {
if (search || searchViewPager.dialogsSearchAdapter.getItemCount() != 0) {
searchViewPager.emptyView.showProgress(true, animated);
} else {
searchViewPager.emptyView.showProgress(false, animated);
}
}
if (search && searchViewPager.dialogsSearchAdapter.getItemCount() == 0) {
searchViewPager.cancelEnterAnimation();
}
}
@Override
public void didPressedOnSubDialog(long did) {
if (onlySelect) {
if (!validateSlowModeDialog(did)) {
return;
}
if (!selectedDialogs.isEmpty()) {
boolean checked = addOrRemoveSelectedDialog(did, null);
findAndUpdateCheckBox(did, checked);
updateSelectedCount();
actionBar.closeSearchField();
} else {
didSelectResult(did, true, false);
}
} else {
Bundle args = new Bundle();
if (DialogObject.isUserDialog(did)) {
args.putLong("user_id", did);
} else {
args.putLong("chat_id", -did);
}
closeSearch();
if (AndroidUtilities.isTablet() && viewPages != null) {
for (int a = 0; a < viewPages.length; a++) {
viewPages[a].dialogsAdapter.setOpenedDialogId(openedDialogId = did);
}
updateVisibleRows(MessagesController.UPDATE_MASK_SELECT_DIALOG);
}
if (searchString != null) {
if (getMessagesController().checkCanOpenChat(args, DialogsActivity.this)) {
getNotificationCenter().postNotificationName(NotificationCenter.closeChats);
presentFragment(new ChatActivity(args));
}
} else {
if (getMessagesController().checkCanOpenChat(args, DialogsActivity.this)) {
presentFragment(new ChatActivity(args));
}
}
}
}
@Override
public void needRemoveHint(long did) {
if (getParentActivity() == null) {
return;
}
TLRPC.User user = getMessagesController().getUser(did);
if (user == null) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("ChatHintsDeleteAlertTitle", R.string.ChatHintsDeleteAlertTitle));
builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("ChatHintsDeleteAlert", R.string.ChatHintsDeleteAlert, ContactsController.formatName(user.first_name, user.last_name))));
builder.setPositiveButton(LocaleController.getString("StickersRemove", R.string.StickersRemove), (dialogInterface, i) -> getMediaDataController().removePeer(did));
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
AlertDialog dialog = builder.create();
showDialog(dialog);
TextView button = (TextView) dialog.getButton(DialogInterface.BUTTON_POSITIVE);
if (button != null) {
button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
}
}
@Override
public void needClearList() {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("ClearSearchAlertTitle", R.string.ClearSearchAlertTitle));
builder.setMessage(LocaleController.getString("ClearSearchAlert", R.string.ClearSearchAlert));
builder.setPositiveButton(LocaleController.getString("ClearButton", R.string.ClearButton).toUpperCase(), (dialogInterface, i) -> {
if (searchViewPager.dialogsSearchAdapter.isRecentSearchDisplayed()) {
searchViewPager.dialogsSearchAdapter.clearRecentSearch();
} else {
searchViewPager.dialogsSearchAdapter.clearRecentHashtags();
}
});
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
AlertDialog dialog = builder.create();
showDialog(dialog);
TextView button = (TextView) dialog.getButton(DialogInterface.BUTTON_POSITIVE);
if (button != null) {
button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
}
}
@Override
public void runResultsEnterAnimation() {
if (searchViewPager != null) {
searchViewPager.runResultsEnterAnimation();
}
}
@Override
public boolean isSelected(long dialogId) {
return selectedDialogs.contains(dialogId);
}
});
searchViewPager.searchListView.setOnItemClickListener((view, position) -> {
if (initialDialogsType == 10) {
onItemLongClick(view, position, 0, 0, -1, searchViewPager.dialogsSearchAdapter);
return;
}
onItemClick(view, position, searchViewPager.dialogsSearchAdapter);
});
searchViewPager.searchListView.setOnItemLongClickListener(new RecyclerListView.OnItemLongClickListenerExtended() {
@Override
public boolean onItemClick(View view, int position, float x, float y) {
return onItemLongClick(view, position, x, y, -1, searchViewPager.dialogsSearchAdapter);
}
@Override
public void onLongClickRelease() {
finishPreviewFragment();
}
@Override
public void onMove(float dx, float dy) {
movePreviewFragment(dy);
}
});
searchViewPager.setFilteredSearchViewDelegate((showMediaFilters, users, dates, archive) -> DialogsActivity.this.updateFiltersView(showMediaFilters, users, dates, archive, true));
searchViewPager.setVisibility(View.GONE);
filtersView = new FiltersView(getParentActivity(), null);
filtersView.setOnItemClickListener((view, position) -> {
filtersView.cancelClickRunnables(true);
addSearchFilter(filtersView.getFilterAt(position));
});
contentView.addView(filtersView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP));
filtersView.setVisibility(View.GONE);
floatingButtonContainer = new FrameLayout(context);
floatingButtonContainer.setVisibility(onlySelect && initialDialogsType != 10 || folderId != 0 ? View.GONE : View.VISIBLE);
contentView.addView(floatingButtonContainer, LayoutHelper.createFrame((Build.VERSION.SDK_INT >= 21 ? 56 : 60) + 20, (Build.VERSION.SDK_INT >= 21 ? 56 : 60) + 20, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.BOTTOM, LocaleController.isRTL ? 4 : 0, 0, LocaleController.isRTL ? 0 : 4, 0));
floatingButtonContainer.setOnClickListener(v -> {
if (initialDialogsType == 10) {
if (delegate == null || selectedDialogs.isEmpty()) {
return;
}
delegate.didSelectDialogs(DialogsActivity.this, selectedDialogs, null, false);
} else {
Bundle args = new Bundle();
args.putBoolean("destroyAfterSelect", true);
presentFragment(new ContactsActivity(args));
}
});
floatingButton = new RLottieImageView(context);
floatingButton.setScaleType(ImageView.ScaleType.CENTER);
Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_chats_actionBackground), Theme.getColor(Theme.key_chats_actionPressedBackground));
if (Build.VERSION.SDK_INT < 21) {
Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow).mutate();
shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY));
CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0);
combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56));
drawable = combinedDrawable;
}
floatingButton.setBackgroundDrawable(drawable);
floatingButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_chats_actionIcon), PorterDuff.Mode.MULTIPLY));
if (initialDialogsType == 10) {
floatingButton.setImageResource(R.drawable.floating_check);
floatingButtonContainer.setContentDescription(LocaleController.getString("Done", R.string.Done));
} else {
floatingButton.setAnimation(R.raw.write_contacts_fab_icon, 52, 52);
floatingButtonContainer.setContentDescription(LocaleController.getString("NewMessageTitle", R.string.NewMessageTitle));
}
if (Build.VERSION.SDK_INT >= 21) {
StateListAnimator animator = new StateListAnimator();
animator.addState(new int[] { android.R.attr.state_pressed }, ObjectAnimator.ofFloat(floatingButton, View.TRANSLATION_Z, AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200));
animator.addState(new int[] {}, ObjectAnimator.ofFloat(floatingButton, View.TRANSLATION_Z, AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200));
floatingButton.setStateListAnimator(animator);
floatingButton.setOutlineProvider(new ViewOutlineProvider() {
@SuppressLint("NewApi")
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56));
}
});
}
floatingButtonContainer.addView(floatingButton, LayoutHelper.createFrame((Build.VERSION.SDK_INT >= 21 ? 56 : 60), (Build.VERSION.SDK_INT >= 21 ? 56 : 60), Gravity.LEFT | Gravity.TOP, 10, 6, 10, 0));
searchTabsView = null;
if (!onlySelect && initialDialogsType == 0) {
fragmentLocationContextView = new FragmentContextView(context, this, true);
fragmentLocationContextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 38, Gravity.TOP | Gravity.LEFT, 0, -36, 0, 0));
contentView.addView(fragmentLocationContextView);
fragmentContextView = new FragmentContextView(context, this, false) {
@Override
protected void playbackSpeedChanged(float value) {
if (Math.abs(value - 1.0f) > 0.001f || Math.abs(value - 1.8f) > 0.001f) {
getUndoView().showWithAction(0, Math.abs(value - 1.0f) > 0.001f ? UndoView.ACTION_PLAYBACK_SPEED_ENABLED : UndoView.ACTION_PLAYBACK_SPEED_DISABLED, value, null, null);
}
}
};
fragmentContextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 38, Gravity.TOP | Gravity.LEFT, 0, -36, 0, 0));
contentView.addView(fragmentContextView);
fragmentContextView.setAdditionalContextView(fragmentLocationContextView);
fragmentLocationContextView.setAdditionalContextView(fragmentContextView);
} else if (initialDialogsType == 3) {
if (commentView != null) {
commentView.onDestroy();
}
commentView = new ChatActivityEnterView(getParentActivity(), contentView, null, false) {
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
AndroidUtilities.requestAdjustResize(getParentActivity(), classGuid);
}
return super.dispatchTouchEvent(ev);
}
};
commentView.setAllowStickersAndGifs(false, false);
commentView.setForceShowSendButton(true, false);
commentView.setVisibility(View.GONE);
commentView.getSendButton().setAlpha(0);
contentView.addView(commentView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.BOTTOM));
commentView.setDelegate(new ChatActivityEnterView.ChatActivityEnterViewDelegate() {
@Override
public void onMessageSend(CharSequence message, boolean notify, int scheduleDate) {
if (delegate == null || selectedDialogs.isEmpty()) {
return;
}
delegate.didSelectDialogs(DialogsActivity.this, selectedDialogs, message, false);
}
@Override
public void onSwitchRecordMode(boolean video) {
}
@Override
public void onTextSelectionChanged(int start, int end) {
}
@Override
public void onStickersExpandedChange() {
}
@Override
public void onPreAudioVideoRecord() {
}
@Override
public void onTextChanged(final CharSequence text, boolean bigChange) {
}
@Override
public void onTextSpansChanged(CharSequence text) {
}
@Override
public void needSendTyping() {
}
@Override
public void onAttachButtonHidden() {
}
@Override
public void onAttachButtonShow() {
}
@Override
public void onMessageEditEnd(boolean loading) {
}
@Override
public void onWindowSizeChanged(int size) {
}
@Override
public void onStickersTab(boolean opened) {
}
@Override
public void didPressAttachButton() {
}
@Override
public void needStartRecordVideo(int state, boolean notify, int scheduleDate) {
}
@Override
public void needChangeVideoPreviewState(int state, float seekProgress) {
}
@Override
public void needStartRecordAudio(int state) {
}
@Override
public void needShowMediaBanHint() {
}
@Override
public void onUpdateSlowModeButton(View button, boolean show, CharSequence time) {
}
@Override
public void onSendLongClick() {
}
@Override
public void onAudioVideoInterfaceUpdated() {
}
});
writeButtonContainer = new FrameLayout(context) {
@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
info.setText(LocaleController.formatPluralString("AccDescrShareInChats", selectedDialogs.size()));
info.setClassName(Button.class.getName());
info.setLongClickable(true);
info.setClickable(true);
}
};
writeButtonContainer.setFocusable(true);
writeButtonContainer.setFocusableInTouchMode(true);
writeButtonContainer.setVisibility(View.INVISIBLE);
writeButtonContainer.setScaleX(0.2f);
writeButtonContainer.setScaleY(0.2f);
writeButtonContainer.setAlpha(0.0f);
contentView.addView(writeButtonContainer, LayoutHelper.createFrame(60, 60, Gravity.RIGHT | Gravity.BOTTOM, 0, 0, 6, 10));
textPaint.setTextSize(AndroidUtilities.dp(12));
textPaint.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
selectedCountView = new View(context) {
@Override
protected void onDraw(Canvas canvas) {
String text = String.format("%d", Math.max(1, selectedDialogs.size()));
int textSize = (int) Math.ceil(textPaint.measureText(text));
int size = Math.max(AndroidUtilities.dp(16) + textSize, AndroidUtilities.dp(24));
int cx = getMeasuredWidth() / 2;
int cy = getMeasuredHeight() / 2;
textPaint.setColor(getThemedColor(Theme.key_dialogRoundCheckBoxCheck));
paint.setColor(getThemedColor(Theme.isCurrentThemeDark() ? Theme.key_voipgroup_inviteMembersBackground : Theme.key_dialogBackground));
rect.set(cx - size / 2, 0, cx + size / 2, getMeasuredHeight());
canvas.drawRoundRect(rect, AndroidUtilities.dp(12), AndroidUtilities.dp(12), paint);
paint.setColor(getThemedColor(Theme.key_dialogRoundCheckBox));
rect.set(cx - size / 2 + AndroidUtilities.dp(2), AndroidUtilities.dp(2), cx + size / 2 - AndroidUtilities.dp(2), getMeasuredHeight() - AndroidUtilities.dp(2));
canvas.drawRoundRect(rect, AndroidUtilities.dp(10), AndroidUtilities.dp(10), paint);
canvas.drawText(text, cx - textSize / 2, AndroidUtilities.dp(16.2f), textPaint);
}
};
selectedCountView.setAlpha(0.0f);
selectedCountView.setScaleX(0.2f);
selectedCountView.setScaleY(0.2f);
contentView.addView(selectedCountView, LayoutHelper.createFrame(42, 24, Gravity.RIGHT | Gravity.BOTTOM, 0, 0, -8, 9));
FrameLayout writeButtonBackground = new FrameLayout(context);
Drawable writeButtonDrawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), getThemedColor(Theme.key_dialogFloatingButton), getThemedColor(Build.VERSION.SDK_INT >= 21 ? Theme.key_dialogFloatingButtonPressed : Theme.key_dialogFloatingButton));
if (Build.VERSION.SDK_INT < 21) {
Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow_profile).mutate();
shadowDrawable.setColorFilter(new PorterDuffColorFilter(0xff000000, PorterDuff.Mode.MULTIPLY));
CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, drawable, 0, 0);
combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56));
writeButtonDrawable = combinedDrawable;
}
writeButtonBackground.setBackgroundDrawable(writeButtonDrawable);
writeButtonBackground.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
writeButtonBackground.setOutlineProvider(new ViewOutlineProvider() {
@SuppressLint("NewApi")
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56));
}
});
}
writeButtonBackground.setOnClickListener(v -> {
if (delegate == null || selectedDialogs.isEmpty()) {
return;
}
delegate.didSelectDialogs(DialogsActivity.this, selectedDialogs, commentView.getFieldText(), false);
});
writeButtonBackground.setOnLongClickListener(v -> {
if (isNextButton) {
return false;
}
onSendLongClick(writeButtonBackground);
return true;
});
writeButton = new ImageView[2];
for (int a = 0; a < 2; ++a) {
writeButton[a] = new ImageView(context);
writeButton[a].setImageResource(a == 1 ? R.drawable.actionbtn_next : R.drawable.attach_send);
writeButton[a].setColorFilter(new PorterDuffColorFilter(getThemedColor(Theme.key_dialogFloatingIcon), PorterDuff.Mode.MULTIPLY));
writeButton[a].setScaleType(ImageView.ScaleType.CENTER);
writeButtonBackground.addView(writeButton[a], LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, Gravity.CENTER));
}
AndroidUtilities.updateViewVisibilityAnimated(writeButton[0], true, 0.5f, false);
AndroidUtilities.updateViewVisibilityAnimated(writeButton[1], false, 0.5f, false);
writeButtonContainer.addView(writeButtonBackground, LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, Gravity.LEFT | Gravity.TOP, Build.VERSION.SDK_INT >= 21 ? 2 : 0, 0, 0, 0));
}
if (filterTabsView != null) {
contentView.addView(filterTabsView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 44));
}
if (!onlySelect) {
final FrameLayout.LayoutParams layoutParams = LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT);
if (inPreviewMode && Build.VERSION.SDK_INT >= 21) {
layoutParams.topMargin = AndroidUtilities.statusBarHeight;
}
contentView.addView(actionBar, layoutParams);
}
if (searchString == null && initialDialogsType == 0) {
updateLayout = new FrameLayout(context) {
private Paint paint = new Paint();
private Matrix matrix = new Matrix();
private LinearGradient updateGradient;
private int lastGradientWidth;
@Override
public void draw(Canvas canvas) {
if (updateGradient != null) {
paint.setColor(0xffffffff);
paint.setShader(updateGradient);
updateGradient.setLocalMatrix(matrix);
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint);
updateLayoutIcon.setBackgroundGradientDrawable(updateGradient);
updateLayoutIcon.draw(canvas);
}
super.draw(canvas);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
if (lastGradientWidth != width) {
updateGradient = new LinearGradient(0, 0, width, 0, new int[] { 0xff69BF72, 0xff53B3AD }, new float[] { 0.0f, 1.0f }, Shader.TileMode.CLAMP);
lastGradientWidth = width;
}
int x = (getMeasuredWidth() - updateTextView.getMeasuredWidth()) / 2;
updateLayoutIcon.setProgressRect(x, AndroidUtilities.dp(13), x + AndroidUtilities.dp(22), AndroidUtilities.dp(13 + 22));
}
@Override
public void setTranslationY(float translationY) {
super.setTranslationY(translationY);
additionalFloatingTranslation2 = AndroidUtilities.dp(48) - translationY;
if (additionalFloatingTranslation2 < 0) {
additionalFloatingTranslation2 = 0;
}
if (!floatingHidden) {
updateFloatingButtonOffset();
}
}
};
updateLayout.setWillNotDraw(false);
updateLayout.setVisibility(View.INVISIBLE);
updateLayout.setTranslationY(AndroidUtilities.dp(48));
if (Build.VERSION.SDK_INT >= 21) {
updateLayout.setBackground(Theme.getSelectorDrawable(0x40ffffff, false));
}
contentView.addView(updateLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.LEFT | Gravity.BOTTOM));
updateLayout.setOnClickListener(v -> {
if (!SharedConfig.isAppUpdateAvailable()) {
return;
}
AndroidUtilities.openForView(SharedConfig.pendingAppUpdate.document, true, getParentActivity());
});
updateLayoutIcon = new RadialProgress2(updateLayout);
updateLayoutIcon.setColors(0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff);
updateLayoutIcon.setCircleRadius(AndroidUtilities.dp(11));
updateLayoutIcon.setAsMini();
updateLayoutIcon.setIcon(MediaActionDrawable.ICON_UPDATE, true, false);
updateTextView = new TextView(context);
updateTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
updateTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
updateTextView.setText(LocaleController.getString("AppUpdateNow", R.string.AppUpdateNow).toUpperCase());
updateTextView.setTextColor(0xffffffff);
updateTextView.setPadding(AndroidUtilities.dp(30), 0, 0, 0);
updateLayout.addView(updateTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER, 0, 0, 0, 0));
}
for (int a = 0; a < 2; a++) {
undoView[a] = new UndoView(context) {
@Override
public void setTranslationY(float translationY) {
super.setTranslationY(translationY);
if (this == undoView[0] && undoView[1].getVisibility() != VISIBLE) {
additionalFloatingTranslation = getMeasuredHeight() + AndroidUtilities.dp(8) - translationY;
if (additionalFloatingTranslation < 0) {
additionalFloatingTranslation = 0;
}
if (!floatingHidden) {
updateFloatingButtonOffset();
}
}
}
@Override
protected boolean canUndo() {
for (int a = 0; a < viewPages.length; a++) {
if (viewPages[a].dialogsItemAnimator.isRunning()) {
return false;
}
}
return true;
}
@Override
protected void onRemoveDialogAction(long currentDialogId, int action) {
if (action == UndoView.ACTION_DELETE || action == UndoView.ACTION_DELETE_FEW) {
debugLastUpdateAction = 1;
setDialogsListFrozen(true);
if (frozenDialogsList != null) {
int selectedIndex = -1;
for (int i = 0; i < frozenDialogsList.size(); i++) {
if (frozenDialogsList.get(i).id == currentDialogId) {
selectedIndex = i;
break;
}
}
if (selectedIndex >= 0) {
TLRPC.Dialog dialog = frozenDialogsList.remove(selectedIndex);
viewPages[0].dialogsAdapter.notifyDataSetChanged();
int finalSelectedIndex = selectedIndex;
AndroidUtilities.runOnUIThread(() -> {
if (frozenDialogsList != null) {
frozenDialogsList.add(finalSelectedIndex, dialog);
viewPages[0].dialogsAdapter.notifyItemInserted(finalSelectedIndex);
dialogInsertFinished = 2;
}
});
} else {
setDialogsListFrozen(false);
}
}
}
}
};
contentView.addView(undoView[a], LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT, 8, 0, 8, 8));
}
if (folderId != 0) {
viewPages[0].listView.setGlowColor(Theme.getColor(Theme.key_actionBarDefaultArchived));
actionBar.setTitleColor(Theme.getColor(Theme.key_actionBarDefaultArchivedTitle));
actionBar.setItemsColor(Theme.getColor(Theme.key_actionBarDefaultArchivedIcon), false);
actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultArchivedSelector), false);
actionBar.setSearchTextColor(Theme.getColor(Theme.key_actionBarDefaultArchivedSearch), false);
actionBar.setSearchTextColor(Theme.getColor(Theme.key_actionBarDefaultArchivedSearchPlaceholder), true);
}
if (!onlySelect && initialDialogsType == 0) {
blurredView = new View(context) {
@Override
public void setAlpha(float alpha) {
super.setAlpha(alpha);
if (fragmentView != null) {
fragmentView.invalidate();
}
}
};
blurredView.setVisibility(View.GONE);
contentView.addView(blurredView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
}
actionBarDefaultPaint.setColor(Theme.getColor(folderId == 0 ? Theme.key_actionBarDefault : Theme.key_actionBarDefaultArchived));
if (inPreviewMode) {
final TLRPC.User currentUser = getUserConfig().getCurrentUser();
avatarContainer = new ChatAvatarContainer(actionBar.getContext(), null, false);
avatarContainer.setTitle(UserObject.getUserName(currentUser));
avatarContainer.setSubtitle(LocaleController.formatUserStatus(currentAccount, currentUser));
avatarContainer.setUserAvatar(currentUser, true);
avatarContainer.setOccupyStatusBar(false);
avatarContainer.setLeftPadding(AndroidUtilities.dp(10));
actionBar.addView(avatarContainer, 0, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, 0, 0, 40, 0));
floatingButton.setVisibility(View.INVISIBLE);
actionBar.setOccupyStatusBar(false);
actionBar.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefault));
if (fragmentContextView != null) {
contentView.removeView(fragmentContextView);
}
if (fragmentLocationContextView != null) {
contentView.removeView(fragmentLocationContextView);
}
}
searchIsShowed = false;
updateFilterTabs(false, false);
if (searchString != null) {
showSearch(true, false);
actionBar.openSearchField(searchString, false);
} else if (initialSearchString != null) {
showSearch(true, false);
actionBar.openSearchField(initialSearchString, false);
initialSearchString = null;
if (filterTabsView != null) {
filterTabsView.setTranslationY(-AndroidUtilities.dp(44));
}
} else {
showSearch(false, false);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
FilesMigrationService.checkBottomSheet(this);
}
updateMenuButton(false);
return fragmentView;
}
use of org.telegram.ui.ActionBar.MenuDrawable in project Telegram-FOSS by Telegram-FOSS-Team.
the class DialogsActivity method showOrUpdateActionMode.
private void showOrUpdateActionMode(long dialogId, View cell) {
addOrRemoveSelectedDialog(dialogId, cell);
boolean updateAnimated = false;
if (actionBar.isActionModeShowed()) {
if (selectedDialogs.isEmpty()) {
hideActionMode(true);
return;
}
updateAnimated = true;
} else {
if (searchIsShowed) {
createActionMode(ACTION_MODE_SEARCH_DIALOGS_TAG);
if (actionBar.getBackButton().getDrawable() instanceof MenuDrawable) {
actionBar.setBackButtonDrawable(new BackDrawable(false));
}
} else {
createActionMode(null);
}
AndroidUtilities.hideKeyboard(fragmentView.findFocus());
actionBar.setActionModeOverrideColor(Theme.getColor(Theme.key_windowBackgroundWhite));
actionBar.showActionMode();
resetScroll();
if (menuDrawable != null) {
actionBar.setBackButtonContentDescription(LocaleController.getString("AccDescrGoBack", R.string.AccDescrGoBack));
}
if (getPinnedCount() > 1) {
if (viewPages != null) {
for (int a = 0; a < viewPages.length; a++) {
viewPages[a].dialogsAdapter.onReorderStateChanged(true);
}
}
updateVisibleRows(MessagesController.UPDATE_MASK_REORDER);
}
if (!searchIsShowed) {
AnimatorSet animatorSet = new AnimatorSet();
ArrayList<Animator> animators = new ArrayList<>();
for (int a = 0; a < actionModeViews.size(); a++) {
View view = actionModeViews.get(a);
view.setPivotY(ActionBar.getCurrentActionBarHeight() / 2);
AndroidUtilities.clearDrawableAnimation(view);
animators.add(ObjectAnimator.ofFloat(view, View.SCALE_Y, 0.1f, 1.0f));
}
animatorSet.playTogether(animators);
animatorSet.setDuration(200);
animatorSet.start();
}
if (actionBarColorAnimator != null) {
actionBarColorAnimator.cancel();
}
actionBarColorAnimator = ValueAnimator.ofFloat(progressToActionMode, 1f);
actionBarColorAnimator.addUpdateListener(valueAnimator -> {
progressToActionMode = (float) valueAnimator.getAnimatedValue();
for (int i = 0; i < actionBar.getChildCount(); i++) {
if (actionBar.getChildAt(i).getVisibility() == View.VISIBLE && actionBar.getChildAt(i) != actionBar.getActionMode() && actionBar.getChildAt(i) != actionBar.getBackButton()) {
actionBar.getChildAt(i).setAlpha(1f - progressToActionMode);
}
}
if (fragmentView != null) {
fragmentView.invalidate();
}
});
actionBarColorAnimator.setInterpolator(CubicBezierInterpolator.DEFAULT);
actionBarColorAnimator.setDuration(200);
actionBarColorAnimator.start();
if (filterTabsView != null) {
filterTabsView.animateColorsTo(Theme.key_profile_tabSelectedLine, Theme.key_profile_tabSelectedText, Theme.key_profile_tabText, Theme.key_profile_tabSelector, Theme.key_actionBarActionModeDefault);
}
if (menuDrawable != null) {
menuDrawable.setRotateToBack(false);
menuDrawable.setRotation(1, true);
} else if (backDrawable != null) {
backDrawable.setRotation(1, true);
}
}
updateCounters(false);
selectedDialogsCountTextView.setNumber(selectedDialogs.size(), updateAnimated);
}
Aggregations