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

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: 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 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..8ba3e3fa9a6adedb17591f45d6d7301cf5291658 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,19 @@ import java.util.List;
* ListAdapter to customize the view of items in the list.
*/
class AppMenuAdapter extends BaseAdapter {
+ private static final int VIEW_TYPE_COUNT = 3;
+
private static final int VIEW_TYPE_MENUITEM = 0;
- private static final int VIEW_TYPE_COUNT = 1;
+ private static final int VIEW_TYPE_TITLE_BUTTON_MENUITEM = 1;
+ 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.
+ 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,6 +54,13 @@ class AppMenuAdapter extends BaseAdapter {
@Override
public int getItemViewType(int position) {
+ if (getItem(position).hasSubMenu()) {
+ if (getItem(position).getSubMenu().size() == 3) {
+ return VIEW_TYPE_THREE_BUTTON_MENUITEM;
+ } else if (getItem(position).getSubMenu().size() == 2) {
+ return VIEW_TYPE_TITLE_BUTTON_MENUITEM;
+ }
+ }
return VIEW_TYPE_MENUITEM;
}
@@ -64,37 +79,85 @@ 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);
+ final MenuItem item = getItem(position);
+ 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.
+ // 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 (convertView == null) {
+ holder = new ViewHolder();
+ 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 = (ViewHolder) 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);
+ return convertView;
+ } 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.
+ convertView = mInflater.inflate(R.layout.three_button_menu_item, null);
+ setupImageButton((ImageButton) convertView.findViewById(R.id.button_one),
+ item.getSubMenu().getItem(0));
+ setupImageButton((ImageButton) convertView.findViewById(R.id.button_two),
+ item.getSubMenu().getItem(1));
+ setupImageButton((ImageButton) convertView.findViewById(R.id.button_three),
+ item.getSubMenu().getItem(2));
+ convertView.setFocusable(false);
+ convertView.setEnabled(false);
+ return convertView;
} 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.
- holder = (ViewHolder) convertView.getTag();
+ convertView = mInflater.inflate(R.layout.title_button_menu_item, null);
+ Button button = (Button) convertView.findViewById(R.id.menu_item_text);
+ final MenuItem textItem = item.getSubMenu().getItem(0);
+ button.setText(textItem.getTitle());
+ button.setEnabled(textItem.isEnabled());
+ button.setFocusable(textItem.isEnabled());
+ button.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mAppMenu.onItemClick(textItem);
+ }
+ });
+ setupImageButton((ImageButton) convertView.findViewById(R.id.button),
+ item.getSubMenu().getItem(1));
+ convertView.setFocusable(false);
+ convertView.setEnabled(false);
+ return convertView;
}
- 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;
+ }
+
+ 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 {

Powered by Google App Engine
This is Rietveld 408576698