package org.telegram.ui; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.content.DialogInterface; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.Gravity; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.animation.Interpolator; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.TextView; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ContactsController; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessagesController; import org.telegram.messenger.R; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; import org.telegram.ui.ActionBar.ActionBarMenu; import org.telegram.ui.ActionBar.ActionBarMenuItem; import org.telegram.ui.ActionBar.AlertDialog; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.ActionBar.ThemeDescription; import org.telegram.ui.Components.AlertsCreator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RecyclerListView; import org.telegram.ui.Components.ScrollSlidingTextTabStrip; import java.util.ArrayList; import java.util.Collections; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; public class DialogOrContactPickerActivity extends BaseFragment { private static class ViewPage extends FrameLayout { private BaseFragment parentFragment; private FrameLayout fragmentView; private ActionBar actionBar; private RecyclerListView listView; private RecyclerListView listView2; private View emptyView; private int selectedType; public ViewPage(Context context) { super(context); } } private DialogsActivity dialogsActivity; private ContactsActivity contactsActivity; private ActionBarMenuItem searchItem; private final static int search_button = 0; private Paint backgroundPaint = new Paint(); private ScrollSlidingTextTabStrip scrollSlidingTextTabStrip; private ViewPage[] viewPages = new ViewPage[2]; private AnimatorSet tabsAnimation; private boolean tabsAnimationInProgress; private boolean animatingForward; private boolean backAnimation; private int maximumVelocity; private static final Interpolator interpolator = t -> { --t; return t * t * t * t * t + 1.0F; }; private boolean swipeBackEnabled = true; public DialogOrContactPickerActivity() { super(); Bundle args = new Bundle(); args.putBoolean("onlySelect", true); args.putBoolean("checkCanWrite", false); args.putBoolean("resetDelegate", false); args.putInt("dialogsType", 4); dialogsActivity = new DialogsActivity(args); dialogsActivity.setDelegate((fragment, dids, message, param) -> { if (dids.isEmpty()) { return; } long did = dids.get(0); int lowerId = (int) did; if (did <= 0) { return; } TLRPC.User user = getMessagesController().getUser(lowerId); showBlockAlert(user); }); dialogsActivity.onFragmentCreate(); args = new Bundle(); args.putBoolean("onlyUsers", true); args.putBoolean("destroyAfterSelect", true); args.putBoolean("returnAsResult", true); args.putBoolean("disableSections", true); args.putBoolean("needFinishFragment", false); args.putBoolean("resetDelegate", false); args.putBoolean("allowSelf", false); contactsActivity = new ContactsActivity(args); contactsActivity.setDelegate((user, param, activity) -> showBlockAlert(user)); contactsActivity.onFragmentCreate(); } @Override public View createView(Context context) { actionBar.setBackButtonImage(R.drawable.ic_ab_back); actionBar.setTitle(LocaleController.getString("BlockUserMultiTitle", R.string.BlockUserMultiTitle)); if (AndroidUtilities.isTablet()) { actionBar.setOccupyStatusBar(false); } actionBar.setExtraHeight(AndroidUtilities.dp(44)); actionBar.setAllowOverlayTitle(false); actionBar.setAddToContainer(false); actionBar.setClipContent(true); actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { @Override public void onItemClick(int id) { if (id == -1) { finishFragment(); } } }); hasOwnBackground = true; ActionBarMenu menu = actionBar.createMenu(); searchItem = menu.addItem(search_button, R.drawable.ic_ab_search).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() { @Override public void onSearchExpand() { dialogsActivity.getActionBar().openSearchField("", false); contactsActivity.getActionBar().openSearchField("", false); searchItem.getSearchField().requestFocus(); } @Override public void onSearchCollapse() { dialogsActivity.getActionBar().closeSearchField(false); contactsActivity.getActionBar().closeSearchField(false); } @Override public void onTextChanged(EditText editText) { dialogsActivity.getActionBar().setSearchFieldText(editText.getText().toString()); contactsActivity.getActionBar().setSearchFieldText(editText.getText().toString()); } }); scrollSlidingTextTabStrip = new ScrollSlidingTextTabStrip(context); scrollSlidingTextTabStrip.setUseSameWidth(true); actionBar.addView(scrollSlidingTextTabStrip, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 44, Gravity.LEFT | Gravity.BOTTOM)); scrollSlidingTextTabStrip.setDelegate(new ScrollSlidingTextTabStrip.ScrollSlidingTabStripDelegate() { @Override public void onPageSelected(int id, boolean forward) { if (viewPages[0].selectedType == id) { return; } swipeBackEnabled = id == scrollSlidingTextTabStrip.getFirstTabId(); viewPages[1].selectedType = id; viewPages[1].setVisibility(View.VISIBLE); switchToCurrentSelectedMode(true); animatingForward = forward; } @Override public void onPageScrolled(float progress) { if (progress == 1 && viewPages[1].getVisibility() != View.VISIBLE) { 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); } } }); ViewConfiguration configuration = ViewConfiguration.get(context); maximumVelocity = configuration.getScaledMaximumFlingVelocity(); FrameLayout frameLayout; fragmentView = frameLayout = new FrameLayout(context) { private int startedTrackingPointerId; private boolean startedTracking; private boolean maybeStartTracking; private int startedTrackingX; private int startedTrackingY; private VelocityTracker velocityTracker; private boolean globalIgnoreLayout; private boolean prepareForMoving(MotionEvent ev, boolean forward) { int id = scrollSlidingTextTabStrip.getNextPageId(forward); if (id < 0) { return false; } getParent().requestDisallowInterceptTouchEvent(true); maybeStartTracking = false; startedTracking = true; startedTrackingX = (int) ev.getX(); actionBar.setEnabled(false); scrollSlidingTextTabStrip.setEnabled(false); viewPages[1].selectedType = id; viewPages[1].setVisibility(View.VISIBLE); animatingForward = forward; switchToCurrentSelectedMode(true); if (forward) { viewPages[1].setTranslationX(viewPages[0].getMeasuredWidth()); } else { viewPages[1].setTranslationX(-viewPages[0].getMeasuredWidth()); } return true; } @Override public void forceHasOverlappingRendering(boolean hasOverlappingRendering) { super.forceHasOverlappingRendering(hasOverlappingRendering); } @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(); globalIgnoreLayout = true; for (int a = 0; a < viewPages.length; a++) { if (viewPages[a] == null) { continue; } if (viewPages[a].listView != null) { viewPages[a].listView.setPadding(0, actionBarHeight, 0, 0); } if (viewPages[a].listView2 != null) { viewPages[a].listView2.setPadding(0, actionBarHeight, 0, 0); } if (viewPages[a].emptyView != null) { viewPages[a].emptyView.setPadding(0, actionBarHeight, 0, 0); } } globalIgnoreLayout = false; int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View child = getChildAt(i); if (child == null || child.getVisibility() == GONE || child == actionBar) { continue; } measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0); } } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if (parentLayout != null) { parentLayout.drawHeaderShadow(canvas, actionBar.getMeasuredHeight() + (int) actionBar.getTranslationY()); } } @Override public void requestLayout() { if (globalIgnoreLayout) { return; } super.requestLayout(); } public boolean checkTabsAnimationInProgress() { if (tabsAnimationInProgress) { boolean cancel = false; if (backAnimation) { if (Math.abs(viewPages[0].getTranslationX()) < 1) { viewPages[0].setTranslationX(0); viewPages[1].setTranslationX(viewPages[0].getMeasuredWidth() * (animatingForward ? 1 : -1)); cancel = true; } } else if (Math.abs(viewPages[1].getTranslationX()) < 1) { viewPages[0].setTranslationX(viewPages[0].getMeasuredWidth() * (animatingForward ? -1 : 1)); viewPages[1].setTranslationX(0); cancel = true; } if (cancel) { if (tabsAnimation != null) { tabsAnimation.cancel(); tabsAnimation = null; } tabsAnimationInProgress = false; } return tabsAnimationInProgress; } return false; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return checkTabsAnimationInProgress() || scrollSlidingTextTabStrip.isAnimatingIndicator() || onTouchEvent(ev); } @Override protected void onDraw(Canvas canvas) { backgroundPaint.setColor(Theme.getColor(Theme.key_windowBackgroundWhite)); canvas.drawRect(0, actionBar.getMeasuredHeight() + actionBar.getTranslationY(), getMeasuredWidth(), getMeasuredHeight(), backgroundPaint); } @Override public boolean onTouchEvent(MotionEvent ev) { if (!parentLayout.checkTransitionAnimation() && !checkTabsAnimationInProgress()) { if (ev != null) { if (velocityTracker == null) { velocityTracker = VelocityTracker.obtain(); } velocityTracker.addMovement(ev); } if (ev != null && ev.getAction() == MotionEvent.ACTION_DOWN && !startedTracking && !maybeStartTracking) { startedTrackingPointerId = ev.getPointerId(0); maybeStartTracking = true; startedTrackingX = (int) ev.getX(); startedTrackingY = (int) ev.getY(); velocityTracker.clear(); } else if (ev != null && ev.getAction() == MotionEvent.ACTION_MOVE && ev.getPointerId(0) == startedTrackingPointerId) { int dx = (int) (ev.getX() - startedTrackingX); int dy = Math.abs((int) ev.getY() - startedTrackingY); if (startedTracking && (animatingForward && dx > 0 || !animatingForward && dx < 0)) { if (!prepareForMoving(ev, dx < 0)) { maybeStartTracking = true; startedTracking = false; viewPages[0].setTranslationX(0); viewPages[1].setTranslationX(animatingForward ? viewPages[0].getMeasuredWidth() : -viewPages[0].getMeasuredWidth()); scrollSlidingTextTabStrip.selectTabWithId(viewPages[1].selectedType, 0); } } if (maybeStartTracking && !startedTracking) { float touchSlop = AndroidUtilities.getPixelsInCM(0.3f, true); if (Math.abs(dx) >= touchSlop && Math.abs(dx) > dy) { prepareForMoving(ev, dx < 0); } } else if (startedTracking) { viewPages[0].setTranslationX(dx); if (animatingForward) { viewPages[1].setTranslationX(viewPages[0].getMeasuredWidth() + dx); } else { viewPages[1].setTranslationX(dx - viewPages[0].getMeasuredWidth()); } float scrollProgress = Math.abs(dx) / (float) viewPages[0].getMeasuredWidth(); scrollSlidingTextTabStrip.selectTabWithId(viewPages[1].selectedType, scrollProgress); } } else if (ev == null || ev.getPointerId(0) == startedTrackingPointerId && (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_POINTER_UP)) { velocityTracker.computeCurrentVelocity(1000, maximumVelocity); float velX; float velY; if (ev != null && ev.getAction() != MotionEvent.ACTION_CANCEL) { velX = velocityTracker.getXVelocity(); velY = velocityTracker.getYVelocity(); if (!startedTracking) { if (Math.abs(velX) >= 3000 && Math.abs(velX) > Math.abs(velY)) { prepareForMoving(ev, velX < 0); } } } else { velX = 0; velY = 0; } if (startedTracking) { float x = viewPages[0].getX(); tabsAnimation = new AnimatorSet(); backAnimation = Math.abs(x) < viewPages[0].getMeasuredWidth() / 3.0f && (Math.abs(velX) < 3500 || Math.abs(velX) < Math.abs(velY)); float distToMove; float dx; if (backAnimation) { dx = Math.abs(x); if (animatingForward) { tabsAnimation.playTogether( ObjectAnimator.ofFloat(viewPages[0], View.TRANSLATION_X, 0), ObjectAnimator.ofFloat(viewPages[1], View.TRANSLATION_X, viewPages[1].getMeasuredWidth()) ); } else { tabsAnimation.playTogether( ObjectAnimator.ofFloat(viewPages[0], View.TRANSLATION_X, 0), ObjectAnimator.ofFloat(viewPages[1], View.TRANSLATION_X, -viewPages[1].getMeasuredWidth()) ); } } else { dx = viewPages[0].getMeasuredWidth() - Math.abs(x); if (animatingForward) { tabsAnimation.playTogether( ObjectAnimator.ofFloat(viewPages[0], View.TRANSLATION_X, -viewPages[0].getMeasuredWidth()), ObjectAnimator.ofFloat(viewPages[1], View.TRANSLATION_X, 0) ); } else { tabsAnimation.playTogether( ObjectAnimator.ofFloat(viewPages[0], View.TRANSLATION_X, viewPages[0].getMeasuredWidth()), ObjectAnimator.ofFloat(viewPages[1], View.TRANSLATION_X, 0) ); } } tabsAnimation.setInterpolator(interpolator); int width = getMeasuredWidth(); int halfWidth = width / 2; float distanceRatio = Math.min(1.0f, 1.0f * dx / (float) width); float distance = (float) halfWidth + (float) halfWidth * AndroidUtilities.distanceInfluenceForSnapDuration(distanceRatio); velX = Math.abs(velX); int duration; if (velX > 0) { duration = 4 * Math.round(1000.0f * Math.abs(distance / velX)); } else { float pageDelta = dx / getMeasuredWidth(); duration = (int) ((pageDelta + 1.0f) * 100.0f); } duration = Math.max(150, Math.min(duration, 600)); tabsAnimation.setDuration(duration); tabsAnimation.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animator) { tabsAnimation = null; if (backAnimation) { viewPages[1].setVisibility(View.GONE); } else { ViewPage tempPage = viewPages[0]; viewPages[0] = viewPages[1]; viewPages[1] = tempPage; viewPages[1].setVisibility(View.GONE); swipeBackEnabled = viewPages[0].selectedType == scrollSlidingTextTabStrip.getFirstTabId(); scrollSlidingTextTabStrip.selectTabWithId(viewPages[0].selectedType, 1.0f); } tabsAnimationInProgress = false; maybeStartTracking = false; startedTracking = false; actionBar.setEnabled(true); scrollSlidingTextTabStrip.setEnabled(true); } }); tabsAnimation.start(); tabsAnimationInProgress = true; startedTracking = false; } else { maybeStartTracking = false; actionBar.setEnabled(true); scrollSlidingTextTabStrip.setEnabled(true); } if (velocityTracker != null) { velocityTracker.recycle(); velocityTracker = null; } } return startedTracking; } return false; } }; frameLayout.setWillNotDraw(false); dialogsActivity.setParentFragment(this); contactsActivity.setParentFragment(this); for (int a = 0; a < viewPages.length; a++) { viewPages[a] = 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(); scrollSlidingTextTabStrip.selectTabWithId(viewPages[1].selectedType, scrollProgress); } } } }; frameLayout.addView(viewPages[a], LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); if (a == 0) { viewPages[a].parentFragment = dialogsActivity; viewPages[a].listView = dialogsActivity.getListView(); viewPages[a].listView2 = dialogsActivity.getSearchListView(); viewPages[a].emptyView = dialogsActivity.getEmptyView(); } else if (a == 1) { viewPages[a].parentFragment = contactsActivity; viewPages[a].listView = contactsActivity.getListView(); viewPages[a].setVisibility(View.GONE); } viewPages[a].listView.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING); viewPages[a].fragmentView = (FrameLayout) viewPages[a].parentFragment.getFragmentView(); viewPages[a].actionBar = viewPages[a].parentFragment.getActionBar(); viewPages[a].addView(viewPages[a].fragmentView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); viewPages[a].addView(viewPages[a].actionBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); viewPages[a].actionBar.setVisibility(View.GONE); for (int i = 0; i < 2; i++) { RecyclerListView listView = i == 0 ? viewPages[a].listView : viewPages[a].listView2; if (listView == null) { continue; } listView.setClipToPadding(false); RecyclerView.OnScrollListener onScrollListener = listView.getOnScrollListener(); listView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { onScrollListener.onScrollStateChanged(recyclerView, newState); if (newState != RecyclerView.SCROLL_STATE_DRAGGING) { int scrollY = (int) -actionBar.getTranslationY(); int actionBarHeight = ActionBar.getCurrentActionBarHeight(); if (scrollY != 0 && scrollY != actionBarHeight) { if (scrollY < actionBarHeight / 2) { viewPages[0].listView.smoothScrollBy(0, -scrollY); if (viewPages[0].listView2 != null) { viewPages[0].listView2.smoothScrollBy(0, -scrollY); } } else { viewPages[0].listView.smoothScrollBy(0, actionBarHeight - scrollY); if (viewPages[0].listView2 != null) { viewPages[0].listView2.smoothScrollBy(0, actionBarHeight - scrollY); } } } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { onScrollListener.onScrolled(recyclerView, dx, dy); if (recyclerView == viewPages[0].listView || recyclerView == viewPages[0].listView2) { 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); } } } }); } } frameLayout.addView(actionBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); updateTabs(); switchToCurrentSelectedMode(false); swipeBackEnabled = scrollSlidingTextTabStrip.getCurrentTabId() == scrollSlidingTextTabStrip.getFirstTabId(); return fragmentView; } @Override public void onResume() { super.onResume(); if (dialogsActivity != null) { dialogsActivity.onResume(); } if (contactsActivity != null) { contactsActivity.onResume(); } } @Override public void onPause() { super.onPause(); if (dialogsActivity != null) { dialogsActivity.onPause(); } if (contactsActivity != null) { contactsActivity.onPause(); } } @Override public boolean isSwipeBackEnabled(MotionEvent event) { return swipeBackEnabled; } @Override public void onFragmentDestroy() { if (dialogsActivity != null) { dialogsActivity.onFragmentDestroy(); } if (contactsActivity != null) { contactsActivity.onFragmentDestroy(); } super.onFragmentDestroy(); } private void setScrollY(float value) { actionBar.setTranslationY(value); for (int a = 0; a < viewPages.length; a++) { viewPages[a].listView.setPinnedSectionOffsetY((int) value); if (viewPages[a].listView2 != null) { viewPages[a].listView2.setPinnedSectionOffsetY((int) value); } } fragmentView.invalidate(); } private void showBlockAlert(TLRPC.User user) { if (user == null) { return; } AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); builder.setTitle(LocaleController.getString("BlockUser", R.string.BlockUser)); builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("AreYouSureBlockContact2", R.string.AreYouSureBlockContact2, ContactsController.formatName(user.first_name, user.last_name)))); builder.setPositiveButton(LocaleController.getString("BlockContact", R.string.BlockContact), (dialogInterface, i) -> { if (MessagesController.isSupportUser(user)) { AlertsCreator.showSimpleToast(DialogOrContactPickerActivity.this, LocaleController.getString("ErrorOccurred", R.string.ErrorOccurred)); } else { MessagesController.getInstance(currentAccount).blockUser(user.id); AlertsCreator.showSimpleToast(DialogOrContactPickerActivity.this, LocaleController.getString("UserBlocked", R.string.UserBlocked)); } finishFragment(); }); 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)); } } private void updateTabs() { if (scrollSlidingTextTabStrip == null) { return; } scrollSlidingTextTabStrip.addTextTab(0, LocaleController.getString("BlockUserChatsTitle", R.string.BlockUserChatsTitle)); scrollSlidingTextTabStrip.addTextTab(1, LocaleController.getString("BlockUserContactsTitle", R.string.BlockUserContactsTitle)); scrollSlidingTextTabStrip.setVisibility(View.VISIBLE); actionBar.setExtraHeight(AndroidUtilities.dp(44)); int id = scrollSlidingTextTabStrip.getCurrentTabId(); if (id >= 0) { viewPages[0].selectedType = id; } scrollSlidingTextTabStrip.finishAddingTabs(); } private void switchToCurrentSelectedMode(boolean animated) { for (int a = 0; a < viewPages.length; a++) { viewPages[a].listView.stopScroll(); if (viewPages[a].listView2 != null) { viewPages[a].listView2.stopScroll(); } } int a = animated ? 1 : 0; for (int i = 0; i < 2; i++) { RecyclerListView listView = i == 0 ? viewPages[a].listView : viewPages[a].listView2; if (listView == null) { continue; } RecyclerView.Adapter currentAdapter = listView.getAdapter(); listView.setPinnedHeaderShadowDrawable(null); if (actionBar.getTranslationY() != 0) { LinearLayoutManager layoutManager = (LinearLayoutManager) listView.getLayoutManager(); layoutManager.scrollToPositionWithOffset(0, (int) actionBar.getTranslationY()); } } } @Override public ThemeDescription[] getThemeDescriptions() { ArrayList arrayList = new ArrayList<>(); arrayList.add(new ThemeDescription(fragmentView, 0, null, null, null, null, Theme.key_windowBackgroundWhite)); arrayList.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_actionBarDefault)); arrayList.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_ITEMSCOLOR, null, null, null, null, Theme.key_actionBarDefaultIcon)); arrayList.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_TITLECOLOR, null, null, null, null, Theme.key_actionBarDefaultTitle)); arrayList.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_SELECTORCOLOR, null, null, null, null, Theme.key_actionBarDefaultSelector)); arrayList.add(new ThemeDescription(scrollSlidingTextTabStrip.getTabsContainer(), ThemeDescription.FLAG_TEXTCOLOR | ThemeDescription.FLAG_CHECKTAG, new Class[]{TextView.class}, null, null, null, Theme.key_actionBarTabActiveText)); arrayList.add(new ThemeDescription(scrollSlidingTextTabStrip.getTabsContainer(), ThemeDescription.FLAG_TEXTCOLOR | ThemeDescription.FLAG_CHECKTAG, new Class[]{TextView.class}, null, null, null, Theme.key_actionBarTabUnactiveText)); arrayList.add(new ThemeDescription(scrollSlidingTextTabStrip.getTabsContainer(), ThemeDescription.FLAG_BACKGROUNDFILTER | ThemeDescription.FLAG_DRAWABLESELECTEDSTATE, new Class[]{TextView.class}, null, null, null, Theme.key_actionBarTabLine)); arrayList.add(new ThemeDescription(null, 0, null, null, new Drawable[]{scrollSlidingTextTabStrip.getSelectorDrawable()}, null, Theme.key_actionBarTabSelector)); Collections.addAll(arrayList, dialogsActivity.getThemeDescriptions()); Collections.addAll(arrayList, contactsActivity.getThemeDescriptions()); return arrayList.toArray(new ThemeDescription[0]); } }