| 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 c6587af53ac710365171711c89a48cba733e9b55..e2b5d39bdc68e69eafe56f720d753d84b7abafad 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
|
| @@ -228,26 +228,31 @@ class AppMenuAdapter extends BaseAdapter {
|
| break;
|
| }
|
| case TITLE_BUTTON_MENU_ITEM: {
|
| + assert item.hasSubMenu();
|
| + final MenuItem titleItem = item.getSubMenu().getItem(0);
|
| + final MenuItem subItem = item.getSubMenu().getItem(1);
|
| +
|
| TitleButtonMenuItemViewHolder holder = null;
|
| if (convertView == null
|
| || !(convertView.getTag() instanceof TitleButtonMenuItemViewHolder)) {
|
| - holder = new TitleButtonMenuItemViewHolder();
|
| convertView = mInflater.inflate(R.layout.title_button_menu_item, parent, false);
|
| +
|
| + holder = new TitleButtonMenuItemViewHolder();
|
| holder.title = (TextView) convertView.findViewById(R.id.title);
|
| + holder.checkbox = (AppMenuItemIcon) convertView.findViewById(R.id.checkbox);
|
| holder.button = (TintedImageButton) convertView.findViewById(R.id.button);
|
| holder.button.setTag(
|
| R.id.menu_item_original_background, holder.button.getBackground());
|
| - View animatedView = convertView;
|
|
|
| convertView.setTag(holder);
|
| convertView.setTag(R.id.menu_item_enter_anim_id,
|
| - buildStandardItemEnterAnimator(animatedView, position));
|
| + buildStandardItemEnterAnimator(convertView, position));
|
| convertView.setTag(
|
| R.id.menu_item_original_background, convertView.getBackground());
|
| } else {
|
| holder = (TitleButtonMenuItemViewHolder) convertView.getTag();
|
| }
|
| - final MenuItem titleItem = item.hasSubMenu() ? item.getSubMenu().getItem(0) : item;
|
| +
|
| holder.title.setText(titleItem.getTitle());
|
| holder.title.setEnabled(titleItem.isEnabled());
|
| holder.title.setFocusable(titleItem.isEnabled());
|
| @@ -258,12 +263,22 @@ class AppMenuAdapter extends BaseAdapter {
|
| }
|
| });
|
|
|
| - if (item.getSubMenu().getItem(1).getIcon() != null) {
|
| + if (subItem.isCheckable()) {
|
| + // Display a checkbox for the MenuItem.
|
| + holder.checkbox.setVisibility(View.VISIBLE);
|
| + holder.button.setVisibility(View.GONE);
|
| + setupCheckBox(holder.checkbox, subItem);
|
| + } else if (subItem.getIcon() != null) {
|
| + // Display an icon alongside the MenuItem.
|
| + holder.checkbox.setVisibility(View.GONE);
|
| holder.button.setVisibility(View.VISIBLE);
|
| - setupImageButton(holder.button, item.getSubMenu().getItem(1));
|
| + setupImageButton(holder.button, subItem);
|
| } else {
|
| + // Display just the label of the MenuItem.
|
| + holder.checkbox.setVisibility(View.GONE);
|
| holder.button.setVisibility(View.GONE);
|
| }
|
| +
|
| convertView.setFocusable(false);
|
| convertView.setEnabled(false);
|
| break;
|
| @@ -277,16 +292,33 @@ class AppMenuAdapter extends BaseAdapter {
|
| return convertView;
|
| }
|
|
|
| + private void setupCheckBox(AppMenuItemIcon button, final MenuItem item) {
|
| + button.setChecked(item.isChecked());
|
| +
|
| + // The checkbox must be tinted to make Android consistently style it across OS versions.
|
| + // http://crbug.com/571445
|
| + button.setTint(ApiCompatibilityUtils.getColorStateList(
|
| + button.getResources(), R.color.checkbox_tint));
|
| +
|
| + setupMenuButton(button, item);
|
| + }
|
| +
|
| private void setupImageButton(TintedImageButton button, final MenuItem item) {
|
| // Store and recover the level of image as button.setimageDrawable
|
| // resets drawable to default level.
|
| int currentLevel = item.getIcon().getLevel();
|
| button.setImageDrawable(item.getIcon());
|
| item.getIcon().setLevel(currentLevel);
|
| +
|
| if (item.isChecked()) {
|
| button.setTint(ApiCompatibilityUtils.getColorStateList(
|
| button.getResources(), R.color.blue_mode_tint));
|
| }
|
| +
|
| + setupMenuButton(button, item);
|
| + }
|
| +
|
| + private void setupMenuButton(View button, final MenuItem item) {
|
| button.setEnabled(item.isEnabled());
|
| button.setFocusable(item.isEnabled());
|
| button.setContentDescription(item.getTitleCondensed());
|
| @@ -497,6 +529,7 @@ class AppMenuAdapter extends BaseAdapter {
|
|
|
| static class TitleButtonMenuItemViewHolder {
|
| public TextView title;
|
| + public AppMenuItemIcon checkbox;
|
| public TintedImageButton button;
|
| }
|
| }
|
|
|