/* * This is the source code of Telegram for Android v. 3.x.x. * It is licensed under GNU GPL v. 2 or later. * You should have received a copy of the license in this archive (see LICENSE). * * Copyright Nikolai Kudashov, 2013-2017. */ package org.telegram.ui.ActionBar; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import org.telegram.messenger.AndroidUtilities; public class ActionBarMenu extends LinearLayout { protected ActionBar parentActionBar; protected boolean isActionMode; public ActionBarMenu(Context context, ActionBar layer) { super(context); setOrientation(LinearLayout.HORIZONTAL); parentActionBar = layer; } public ActionBarMenu(Context context) { super(context); } protected void updateItemsBackgroundColor() { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { view.setBackgroundDrawable(Theme.createSelectorDrawable(isActionMode ? parentActionBar.itemsActionModeBackgroundColor : parentActionBar.itemsBackgroundColor)); } } } protected void updateItemsColor() { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ((ActionBarMenuItem) view).setIconColor(isActionMode ? parentActionBar.itemsActionModeColor : parentActionBar.itemsColor); } } } public ActionBarMenuItem addItem(int id, Drawable drawable) { return addItem(id, 0, isActionMode ? parentActionBar.itemsActionModeBackgroundColor : parentActionBar.itemsBackgroundColor, drawable, AndroidUtilities.dp(48)); } public ActionBarMenuItem addItem(int id, int icon) { return addItem(id, icon, isActionMode ? parentActionBar.itemsActionModeBackgroundColor : parentActionBar.itemsBackgroundColor); } public ActionBarMenuItem addItem(int id, int icon, int backgroundColor) { return addItem(id, icon, backgroundColor, null, AndroidUtilities.dp(48)); } public ActionBarMenuItem addItemWithWidth(int id, int icon, int width) { return addItem(id, icon, isActionMode ? parentActionBar.itemsActionModeBackgroundColor : parentActionBar.itemsBackgroundColor, null, width); } public ActionBarMenuItem addItem(int id, int icon, int backgroundColor, Drawable drawable, int width) { ActionBarMenuItem menuItem = new ActionBarMenuItem(getContext(), this, backgroundColor, isActionMode ? parentActionBar.itemsActionModeColor : parentActionBar.itemsColor); menuItem.setTag(id); if (drawable != null) { menuItem.iconView.setImageDrawable(drawable); } else if (icon != 0) { menuItem.iconView.setImageResource(icon); } addView(menuItem, new LinearLayout.LayoutParams(width, ViewGroup.LayoutParams.MATCH_PARENT)); menuItem.setOnClickListener(view -> { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.hasSubMenu()) { if (parentActionBar.actionBarMenuOnItemClick.canOpenMenu()) { item.toggleSubMenu(); } } else if (item.isSearchField()) { parentActionBar.onSearchFieldVisibilityChanged(item.toggleSearch(true)); } else { onItemClick((Integer) view.getTag()); } }); return menuItem; } public void hideAllPopupMenus() { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ((ActionBarMenuItem) view).closeSubMenu(); } } } protected void setPopupItemsColor(int color) { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; item.setPopupItemsColor(color); } } } protected void redrawPopup(int color) { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; item.redrawPopup(color); } } } public void onItemClick(int id) { if (parentActionBar.actionBarMenuOnItemClick != null) { parentActionBar.actionBarMenuOnItemClick.onItemClick(id); } } public void clearItems() { removeAllViews(); } public void onMenuButtonPressed() { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.getVisibility() != VISIBLE) { continue; } if (item.hasSubMenu()) { item.toggleSubMenu(); break; } else if (item.overrideMenuClick) { onItemClick((Integer) item.getTag()); break; } } } } public void closeSearchField(boolean closeKeyboard) { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.isSearchField()) { parentActionBar.onSearchFieldVisibilityChanged(false); item.toggleSearch(closeKeyboard); break; } } } } public void setSearchTextColor(int color, boolean placeholder) { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.isSearchField()) { if (placeholder) { item.getSearchField().setHintTextColor(color); } else { item.getSearchField().setTextColor(color); } break; } } } } public void openSearchField(boolean toggle, String text) { int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); if (view instanceof ActionBarMenuItem) { ActionBarMenuItem item = (ActionBarMenuItem) view; if (item.isSearchField()) { if (toggle) { parentActionBar.onSearchFieldVisibilityChanged(item.toggleSearch(true)); } item.getSearchField().setText(text); item.getSearchField().setSelection(text.length()); break; } } } } public ActionBarMenuItem getItem(int id) { View v = findViewWithTag(id); if (v instanceof ActionBarMenuItem) { return (ActionBarMenuItem) v; } return null; } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); int count = getChildCount(); for (int a = 0; a < count; a++) { View view = getChildAt(a); view.setEnabled(enabled); } } }