Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 } |
| OLD | NEW |