Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1271)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java

Issue 203173008: Cleanup Icon Row custom code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed tests Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
index ce4cd65badc3f0b64481b46a0613c53d93e3d47b..ec9fe27d01c9642f35562914325d2075d8b6ae1d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
@@ -8,8 +8,11 @@ import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
@@ -21,14 +24,29 @@ import java.util.List;
* ListAdapter to customize the view of items in the list.
*/
class AppMenuAdapter extends BaseAdapter {
- private static final int VIEW_TYPE_MENUITEM = 0;
- private static final int VIEW_TYPE_COUNT = 1;
-
+ private static final int VIEW_TYPE_COUNT = 3;
+
+ /**
+ * Regular Android menu item that contains a title and an icon if icon is specified.
+ */
+ private static final int STANDARD_MENU_ITEM = 0;
+ /**
+ * Menu item that has two buttons, the first one is a title and the second one is an icon.
+ * It is different from the regular menu item because it contains two separate buttons.
+ */
+ private static final int TITLE_BUTTON_MENU_ITEM = 1;
+ /**
+ * Menu item that has three buttons. Every one of these buttons is displayed as an icon.
+ */
+ private static final int THREE_BUTTON_MENU_ITEM = 2;
+
+ private final AppMenu mAppMenu;
private final LayoutInflater mInflater;
private final List<MenuItem> mMenuItems;
private final int mNumMenuItems;
- public AppMenuAdapter(List<MenuItem> menuItems, LayoutInflater inflater) {
+ public AppMenuAdapter(AppMenu appMenu, List<MenuItem> menuItems, LayoutInflater inflater) {
+ mAppMenu = appMenu;
mMenuItems = menuItems;
mInflater = inflater;
mNumMenuItems = menuItems.size();
@@ -46,7 +64,14 @@ class AppMenuAdapter extends BaseAdapter {
@Override
public int getItemViewType(int position) {
- return VIEW_TYPE_MENUITEM;
+ if (getItem(position).hasSubMenu()) {
+ if (getItem(position).getSubMenu().size() == 3) {
+ return THREE_BUTTON_MENU_ITEM;
+ } else if (getItem(position).getSubMenu().size() == 2) {
+ return TITLE_BUTTON_MENU_ITEM;
+ }
+ }
+ return STANDARD_MENU_ITEM;
}
@Override
@@ -64,41 +89,117 @@ class AppMenuAdapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- View rowView = convertView;
- // A ViewHolder keeps references to children views to avoid unneccessary calls
- // to findViewById() on each row.
- ViewHolder holder = null;
-
- // When convertView is not null, we can reuse it directly, there is no need
- // to reinflate it.
- if (rowView == null) {
- holder = new ViewHolder();
- rowView = mInflater.inflate(R.layout.menu_item, null);
- holder.text = (TextView) rowView.findViewById(R.id.menu_item_text);
- holder.image = (AppMenuItemIcon) rowView.findViewById(R.id.menu_item_icon);
- rowView.setTag(holder);
- } else {
- holder = (ViewHolder) convertView.getTag();
+ final MenuItem item = getItem(position);
+ switch (getItemViewType(position)) {
+ case STANDARD_MENU_ITEM: {
+ StandardMenuItemViewHolder holder = null;
+ if (convertView == null) {
+ holder = new StandardMenuItemViewHolder();
+ convertView = mInflater.inflate(R.layout.menu_item, null);
+ holder.text = (TextView) convertView.findViewById(R.id.menu_item_text);
+ holder.image = (AppMenuItemIcon) convertView.findViewById(R.id.menu_item_icon);
+ convertView.setTag(holder);
+ } else {
+ holder = (StandardMenuItemViewHolder) convertView.getTag();
+ }
+
+ convertView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mAppMenu.onItemClick(item);
+ }
+ });
+ // Set up the icon.
+ Drawable icon = item.getIcon();
+ holder.image.setImageDrawable(icon);
+ holder.image.setVisibility(icon == null ? View.GONE : View.VISIBLE);
+ holder.image.setChecked(item.isChecked());
+
+ holder.text.setText(item.getTitle());
+ boolean isEnabled = item.isEnabled();
+ // Set the text color (using a color state list).
+ holder.text.setEnabled(isEnabled);
+ // This will ensure that the item is not highlighted when selected.
+ convertView.setEnabled(isEnabled);
+ break;
+ }
+ case THREE_BUTTON_MENU_ITEM: {
+ ThreeButtonMenuItemViewHolder holder = null;
+ if (convertView == null) {
+ holder = new ThreeButtonMenuItemViewHolder();
+ convertView = mInflater.inflate(R.layout.three_button_menu_item, null);
+ holder.buttonOne = (ImageButton) convertView.findViewById(R.id.button_one);
+ holder.buttonTwo = (ImageButton) convertView.findViewById(R.id.button_two);
+ holder.buttonThree = (ImageButton) convertView.findViewById(R.id.button_three);
+ convertView.setTag(holder);
+ } else {
+ holder = (ThreeButtonMenuItemViewHolder) convertView.getTag();
+ }
+ setupImageButton(holder.buttonOne, item.getSubMenu().getItem(0));
+ setupImageButton(holder.buttonTwo, item.getSubMenu().getItem(1));
+ setupImageButton(holder.buttonThree, item.getSubMenu().getItem(2));
+ convertView.setFocusable(false);
+ convertView.setEnabled(false);
+ break;
+ }
+ case TITLE_BUTTON_MENU_ITEM: {
+ TitleButtonMenuItemViewHolder holder = null;
+ if (convertView == null) {
+ holder = new TitleButtonMenuItemViewHolder();
+ convertView = mInflater.inflate(R.layout.title_button_menu_item, null);
+ holder.title = (Button) convertView.findViewById(R.id.title);
+ holder.button = (ImageButton) convertView.findViewById(R.id.button);
+ convertView.setTag(holder);
+ } else {
+ holder = (TitleButtonMenuItemViewHolder) convertView.getTag();
+ }
+ final MenuItem titleItem = item.getSubMenu().getItem(0);
+ holder.title.setText(titleItem.getTitle());
+ holder.title.setEnabled(titleItem.isEnabled());
+ holder.title.setFocusable(titleItem.isEnabled());
+ holder.title.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mAppMenu.onItemClick(titleItem);
+ }
+ });
+ setupImageButton(holder.button, item.getSubMenu().getItem(1));
+ convertView.setFocusable(false);
+ convertView.setEnabled(false);
+ break;
+ }
+ default:
+ assert false : "Unexpected MenuItem type";
}
- MenuItem item = getItem(position);
-
- // Set up the icon.
- Drawable icon = item.getIcon();
- holder.image.setImageDrawable(icon);
- holder.image.setVisibility(icon == null ? View.GONE : View.VISIBLE);
- holder.image.setChecked(item.isChecked());
-
- holder.text.setText(item.getTitle());
- boolean isEnabled = item.isEnabled();
- // Set the text color (using a color state list).
- holder.text.setEnabled(isEnabled);
- // This will ensure that the item is not highlighted when selected.
- rowView.setEnabled(isEnabled);
- return rowView;
+ return convertView;
+ }
+
+ private void setupImageButton(ImageButton button, final MenuItem item) {
+ button.setImageDrawable(item.getIcon());
+ button.setContentDescription(item.getTitle());
+ button.setEnabled(item.isEnabled());
+ button.setFocusable(item.isEnabled());
+ button.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mAppMenu.onItemClick(item);
+ }
+ });
}
- static class ViewHolder {
+ static class StandardMenuItemViewHolder {
public TextView text;
public AppMenuItemIcon image;
}
+
+ static class ThreeButtonMenuItemViewHolder {
+ public ImageButton buttonOne;
+ public ImageButton buttonTwo;
+ public ImageButton buttonThree;
+ }
+
+ static class TitleButtonMenuItemViewHolder {
+ public Button title;
+ public ImageButton button;
+ }
}

Powered by Google App Engine
This is Rietveld 408576698