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

Side by Side 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: Rebase 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.appmenu; 5 package org.chromium.chrome.browser.appmenu;
6 6
7 import android.graphics.drawable.Drawable; 7 import android.graphics.drawable.Drawable;
8 import android.view.LayoutInflater; 8 import android.view.LayoutInflater;
9 import android.view.MenuItem; 9 import android.view.MenuItem;
10 import android.view.View; 10 import android.view.View;
11 import android.view.View.OnClickListener;
11 import android.view.ViewGroup; 12 import android.view.ViewGroup;
12 import android.widget.BaseAdapter; 13 import android.widget.BaseAdapter;
14 import android.widget.Button;
15 import android.widget.ImageButton;
13 import android.widget.ListView; 16 import android.widget.ListView;
14 import android.widget.TextView; 17 import android.widget.TextView;
15 18
16 import org.chromium.chrome.R; 19 import org.chromium.chrome.R;
17 20
18 import java.util.List; 21 import java.util.List;
19 22
20 /** 23 /**
21 * ListAdapter to customize the view of items in the list. 24 * ListAdapter to customize the view of items in the list.
22 */ 25 */
23 class AppMenuAdapter extends BaseAdapter { 26 class AppMenuAdapter extends BaseAdapter {
27 private static final int VIEW_TYPE_COUNT = 3;
28
24 private static final int VIEW_TYPE_MENUITEM = 0; 29 private static final int VIEW_TYPE_MENUITEM = 0;
25 private static final int VIEW_TYPE_COUNT = 1; 30 private static final int VIEW_TYPE_TITLE_BUTTON_MENUITEM = 1;
31 private static final int VIEW_TYPE_THREE_BUTTON_MENUITEM = 2;
Kibeom Kim (inactive) 2014/03/19 22:04:46 maybe comment what they represent?
aurimas (slooooooooow) 2014/03/19 23:31:32 Done.
26 32
33 private final AppMenu mAppMenu;
27 private final LayoutInflater mInflater; 34 private final LayoutInflater mInflater;
28 private final List<MenuItem> mMenuItems; 35 private final List<MenuItem> mMenuItems;
29 private final int mNumMenuItems; 36 private final int mNumMenuItems;
30 37
31 public AppMenuAdapter(List<MenuItem> menuItems, LayoutInflater inflater) { 38 public AppMenuAdapter(AppMenu appMenu, List<MenuItem> menuItems, LayoutInfla ter inflater) {
39 mAppMenu = appMenu;
32 mMenuItems = menuItems; 40 mMenuItems = menuItems;
33 mInflater = inflater; 41 mInflater = inflater;
34 mNumMenuItems = menuItems.size(); 42 mNumMenuItems = menuItems.size();
35 } 43 }
36 44
37 @Override 45 @Override
38 public int getCount() { 46 public int getCount() {
39 return mNumMenuItems; 47 return mNumMenuItems;
40 } 48 }
41 49
42 @Override 50 @Override
43 public int getViewTypeCount() { 51 public int getViewTypeCount() {
44 return VIEW_TYPE_COUNT; 52 return VIEW_TYPE_COUNT;
45 } 53 }
46 54
47 @Override 55 @Override
48 public int getItemViewType(int position) { 56 public int getItemViewType(int position) {
57 if (getItem(position).hasSubMenu()) {
58 if (getItem(position).getSubMenu().size() == 3) {
59 return VIEW_TYPE_THREE_BUTTON_MENUITEM;
60 } else if (getItem(position).getSubMenu().size() == 2) {
61 return VIEW_TYPE_TITLE_BUTTON_MENUITEM;
62 }
63 }
49 return VIEW_TYPE_MENUITEM; 64 return VIEW_TYPE_MENUITEM;
50 } 65 }
51 66
52 @Override 67 @Override
53 public long getItemId(int position) { 68 public long getItemId(int position) {
54 return getItem(position).getItemId(); 69 return getItem(position).getItemId();
55 } 70 }
56 71
57 @Override 72 @Override
58 public MenuItem getItem(int position) { 73 public MenuItem getItem(int position) {
59 if (position == ListView.INVALID_POSITION) return null; 74 if (position == ListView.INVALID_POSITION) return null;
60 assert position >= 0; 75 assert position >= 0;
61 assert position < mMenuItems.size(); 76 assert position < mMenuItems.size();
62 return mMenuItems.get(position); 77 return mMenuItems.get(position);
63 } 78 }
64 79
65 @Override 80 @Override
66 public View getView(int position, View convertView, ViewGroup parent) { 81 public View getView(int position, View convertView, ViewGroup parent) {
67 View rowView = convertView; 82 final MenuItem item = getItem(position);
68 // A ViewHolder keeps references to children views to avoid unneccessary calls 83 if (getItemViewType(position) == VIEW_TYPE_MENUITEM) {
Kibeom Kim (inactive) 2014/03/19 22:04:46 optinal: In this case, I think switch statement wi
aurimas (slooooooooow) 2014/03/19 23:31:32 Done.
69 // to findViewById() on each row. 84 // A ViewHolder keeps references to children views to avoid unnecces sary calls
70 ViewHolder holder = null; 85 // to findViewById() on each row.
86 ViewHolder holder = null;
71 87
72 // When convertView is not null, we can reuse it directly, there is no n eed 88 // When convertView is not null, we can reuse it directly, there is no need
73 // to reinflate it. 89 // to reinflate it.
74 if (rowView == null) { 90 if (convertView == null) {
75 holder = new ViewHolder(); 91 holder = new ViewHolder();
76 rowView = mInflater.inflate(R.layout.menu_item, null); 92 convertView = mInflater.inflate(R.layout.menu_item, null);
77 holder.text = (TextView) rowView.findViewById(R.id.menu_item_text); 93 holder.text = (TextView) convertView.findViewById(R.id.menu_item _text);
78 holder.image = (AppMenuItemIcon) rowView.findViewById(R.id.menu_item _icon); 94 holder.image = (AppMenuItemIcon) convertView.findViewById(R.id.m enu_item_icon);
79 rowView.setTag(holder); 95 convertView.setTag(holder);
96 } else {
97 holder = (ViewHolder) convertView.getTag();
98 }
99 convertView.setOnClickListener(new OnClickListener() {
100 @Override
101 public void onClick(View v) {
102 mAppMenu.onItemClick(item);
103 }
104 });
105 // Set up the icon.
106 Drawable icon = item.getIcon();
107 holder.image.setImageDrawable(icon);
108 holder.image.setVisibility(icon == null ? View.GONE : View.VISIBLE);
109 holder.image.setChecked(item.isChecked());
110
111 holder.text.setText(item.getTitle());
112 boolean isEnabled = item.isEnabled();
113 // Set the text color (using a color state list).
114 holder.text.setEnabled(isEnabled);
115 // This will ensure that the item is not highlighted when selected.
116 convertView.setEnabled(isEnabled);
117 return convertView;
118 } else if (getItemViewType(position) == VIEW_TYPE_THREE_BUTTON_MENUITEM) {
Kibeom Kim (inactive) 2014/03/19 22:04:46 probably not important but just Q: can't we reuse
aurimas (slooooooooow) 2014/03/19 23:31:32 Done.
119 convertView = mInflater.inflate(R.layout.three_button_menu_item, nul l);
120 setupImageButton((ImageButton) convertView.findViewById(R.id.button_ one),
121 item.getSubMenu().getItem(0));
122 setupImageButton((ImageButton) convertView.findViewById(R.id.button_ two),
123 item.getSubMenu().getItem(1));
124 setupImageButton((ImageButton) convertView.findViewById(R.id.button_ three),
125 item.getSubMenu().getItem(2));
126 convertView.setFocusable(false);
127 convertView.setEnabled(false);
128 return convertView;
80 } else { 129 } else {
Kibeom Kim (inactive) 2014/03/19 22:04:46 I'd either use switch statement or put "assert get
aurimas (slooooooooow) 2014/03/19 23:31:32 Done.
81 holder = (ViewHolder) convertView.getTag(); 130 convertView = mInflater.inflate(R.layout.title_button_menu_item, nul l);
131 Button button = (Button) convertView.findViewById(R.id.menu_item_tex t);
132 final MenuItem textItem = item.getSubMenu().getItem(0);
133 button.setText(textItem.getTitle());
134 button.setEnabled(textItem.isEnabled());
135 button.setFocusable(textItem.isEnabled());
136 button.setOnClickListener(new OnClickListener() {
137 @Override
138 public void onClick(View v) {
139 mAppMenu.onItemClick(textItem);
140 }
141 });
142 setupImageButton((ImageButton) convertView.findViewById(R.id.button) ,
143 item.getSubMenu().getItem(1));
144 convertView.setFocusable(false);
145 convertView.setEnabled(false);
146 return convertView;
82 } 147 }
83 MenuItem item = getItem(position); 148 }
84 149
85 // Set up the icon. 150 private void setupImageButton(ImageButton button, final MenuItem item) {
86 Drawable icon = item.getIcon(); 151 button.setImageDrawable(item.getIcon());
87 holder.image.setImageDrawable(icon); 152 button.setContentDescription(item.getTitle());
88 holder.image.setVisibility(icon == null ? View.GONE : View.VISIBLE); 153 button.setEnabled(item.isEnabled());
89 holder.image.setChecked(item.isChecked()); 154 button.setFocusable(item.isEnabled());
90 155 button.setOnClickListener(new OnClickListener() {
91 holder.text.setText(item.getTitle()); 156 @Override
92 boolean isEnabled = item.isEnabled(); 157 public void onClick(View v) {
93 // Set the text color (using a color state list). 158 mAppMenu.onItemClick(item);
94 holder.text.setEnabled(isEnabled); 159 }
95 // This will ensure that the item is not highlighted when selected. 160 });
96 rowView.setEnabled(isEnabled);
97 return rowView;
98 } 161 }
99 162
100 static class ViewHolder { 163 static class ViewHolder {
101 public TextView text; 164 public TextView text;
102 public AppMenuItemIcon image; 165 public AppMenuItemIcon image;
103 } 166 }
104 } 167 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698