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 d8d789237fe2d71367319130ad29610b26a007dd..348467130a5390677d7ee0662c9b0fe21b9f9fcc 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 |
@@ -9,6 +9,7 @@ import android.animation.AnimatorListenerAdapter; |
import android.animation.AnimatorSet; |
import android.animation.ObjectAnimator; |
import android.graphics.drawable.Drawable; |
+import android.text.TextUtils; |
import android.view.LayoutInflater; |
import android.view.MenuItem; |
import android.view.View; |
@@ -21,6 +22,7 @@ import android.widget.TextView; |
import org.chromium.base.ApiCompatibilityUtils; |
import org.chromium.chrome.R; |
+import org.chromium.chrome.browser.omaha.UpdateMenuItemHelper; |
import org.chromium.chrome.browser.widget.TintedImageButton; |
import org.chromium.ui.base.LocalizationUtils; |
import org.chromium.ui.interpolators.BakedBezierInterpolator; |
@@ -35,24 +37,32 @@ class AppMenuAdapter extends BaseAdapter { |
* 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 four buttons. Every one of these buttons is displayed as an icon. |
*/ |
private static final int THREE_BUTTON_MENU_ITEM = 2; |
+ |
/** |
* Menu item that has four buttons. Every one of these buttons is displayed as an icon. |
*/ |
private static final int FOUR_BUTTON_MENU_ITEM = 3; |
/** |
+ * Menu item for updating Chrome; uses a custom layout. |
+ */ |
+ private static final int UPDATE_MENU_ITEM = 4; |
+ |
+ /** |
* The number of view types specified above. If you add a view type you MUST increment this. |
*/ |
- private static final int VIEW_TYPE_COUNT = 4; |
+ private static final int VIEW_TYPE_COUNT = 5; |
/** MenuItem Animation Constants */ |
private static final int ENTER_ITEM_DURATION_MS = 350; |
@@ -90,7 +100,9 @@ class AppMenuAdapter extends BaseAdapter { |
MenuItem item = getItem(position); |
int viewCount = item.hasSubMenu() ? item.getSubMenu().size() : 1; |
- if (viewCount == 4) { |
+ if (item.getItemId() == R.id.update_menu_id) { |
+ return UPDATE_MENU_ITEM; |
+ } else if (viewCount == 4) { |
return FOUR_BUTTON_MENU_ITEM; |
} else if (viewCount == 3) { |
return THREE_BUTTON_MENU_ITEM; |
@@ -119,7 +131,8 @@ class AppMenuAdapter extends BaseAdapter { |
switch (getItemViewType(position)) { |
case STANDARD_MENU_ITEM: { |
StandardMenuItemViewHolder holder = null; |
- if (convertView == null) { |
+ if (convertView == null |
+ || !(convertView.getTag() instanceof StandardMenuItemViewHolder)) { |
holder = new StandardMenuItemViewHolder(); |
convertView = mInflater.inflate(R.layout.menu_item, parent, false); |
holder.text = (TextView) convertView.findViewById(R.id.menu_item_text); |
@@ -131,30 +144,40 @@ class AppMenuAdapter extends BaseAdapter { |
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()); |
- holder.text.setContentDescription(item.getTitleCondensed()); |
- |
- 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); |
+ setupStandardMenuItemViewHolder(holder, convertView, item); |
+ break; |
+ } |
+ case UPDATE_MENU_ITEM: { |
+ CustomMenuItemViewHolder holder = null; |
+ if (convertView == null |
+ || !(convertView.getTag() instanceof CustomMenuItemViewHolder)) { |
+ holder = new CustomMenuItemViewHolder(); |
+ convertView = mInflater.inflate(R.layout.update_menu_item, parent, false); |
+ holder.text = (TextView) convertView.findViewById(R.id.menu_item_text); |
+ holder.image = (AppMenuItemIcon) convertView.findViewById(R.id.menu_item_icon); |
+ holder.summary = (TextView) convertView.findViewById(R.id.menu_item_summary); |
+ convertView.setTag(holder); |
+ convertView.setTag(R.id.menu_item_enter_anim_id, |
+ buildStandardItemEnterAnimator(convertView, position)); |
+ } else { |
+ holder = (CustomMenuItemViewHolder) convertView.getTag(); |
+ } |
+ |
+ setupStandardMenuItemViewHolder(holder, convertView, item); |
+ String summary = UpdateMenuItemHelper.getInstance().getMenuItemSummaryText( |
+ mInflater.getContext()); |
+ if (TextUtils.isEmpty(summary)) { |
+ holder.summary.setVisibility(View.GONE); |
+ } else { |
+ holder.summary.setText(summary); |
+ } |
+ |
break; |
} |
case THREE_BUTTON_MENU_ITEM: { |
ThreeButtonMenuItemViewHolder holder = null; |
- if (convertView == null) { |
+ if (convertView == null |
+ || !(convertView.getTag() instanceof ThreeButtonMenuItemViewHolder)) { |
holder = new ThreeButtonMenuItemViewHolder(); |
convertView = mInflater.inflate(R.layout.three_button_menu_item, parent, false); |
holder.buttons[0] = |
@@ -179,7 +202,8 @@ class AppMenuAdapter extends BaseAdapter { |
} |
case FOUR_BUTTON_MENU_ITEM: { |
FourButtonMenuItemViewHolder holder = null; |
- if (convertView == null) { |
+ if (convertView == null |
+ || !(convertView.getTag() instanceof FourButtonMenuItemViewHolder)) { |
holder = new FourButtonMenuItemViewHolder(); |
convertView = mInflater.inflate(R.layout.four_button_menu_item, parent, false); |
holder.buttons[0] = |
@@ -206,7 +230,8 @@ class AppMenuAdapter extends BaseAdapter { |
} |
case TITLE_BUTTON_MENU_ITEM: { |
TitleButtonMenuItemViewHolder holder = null; |
- if (convertView == null) { |
+ if (convertView == null |
+ || !(convertView.getTag() instanceof TitleButtonMenuItemViewHolder)) { |
holder = new TitleButtonMenuItemViewHolder(); |
convertView = mInflater.inflate(R.layout.title_button_menu_item, parent, false); |
holder.title = (TextView) convertView.findViewById(R.id.title); |
@@ -269,6 +294,30 @@ class AppMenuAdapter extends BaseAdapter { |
}); |
} |
+ private void setupStandardMenuItemViewHolder(StandardMenuItemViewHolder holder, |
+ View convertView, final MenuItem 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()); |
+ holder.text.setContentDescription(item.getTitleCondensed()); |
+ |
+ 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); |
+ |
+ convertView.setOnClickListener(new OnClickListener() { |
+ @Override |
+ public void onClick(View v) { |
+ mAppMenu.onItemClick(item); |
+ } |
+ }); |
+ } |
+ |
/** |
* This builds an {@link Animator} for the enter animation of a standard menu item. This means |
* it will animate the alpha from 0 to 1 and translate the view from -10dp to 0dp on the y axis. |
@@ -348,6 +397,10 @@ class AppMenuAdapter extends BaseAdapter { |
public AppMenuItemIcon image; |
} |
+ static class CustomMenuItemViewHolder extends StandardMenuItemViewHolder { |
+ public TextView summary; |
+ } |
+ |
static class ThreeButtonMenuItemViewHolder { |
public TintedImageButton[] buttons = new TintedImageButton[3]; |
} |