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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ce4cd65badc3f0b64481b46a0613c53d93e3d47b |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java |
@@ -0,0 +1,104 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.appmenu; |
+ |
+import android.graphics.drawable.Drawable; |
+import android.view.LayoutInflater; |
+import android.view.MenuItem; |
+import android.view.View; |
+import android.view.ViewGroup; |
+import android.widget.BaseAdapter; |
+import android.widget.ListView; |
+import android.widget.TextView; |
+ |
+import org.chromium.chrome.R; |
+ |
+import java.util.List; |
+ |
+/** |
+ * ListAdapter to customize the view of items in the list. |
+ */ |
+class AppMenuAdapter extends BaseAdapter { |
+ private static final int VIEW_TYPE_MENUITEM = 0; |
+ private static final int VIEW_TYPE_COUNT = 1; |
+ |
+ private final LayoutInflater mInflater; |
+ private final List<MenuItem> mMenuItems; |
+ private final int mNumMenuItems; |
+ |
+ public AppMenuAdapter(List<MenuItem> menuItems, LayoutInflater inflater) { |
+ mMenuItems = menuItems; |
+ mInflater = inflater; |
+ mNumMenuItems = menuItems.size(); |
+ } |
+ |
+ @Override |
+ public int getCount() { |
+ return mNumMenuItems; |
+ } |
+ |
+ @Override |
+ public int getViewTypeCount() { |
+ return VIEW_TYPE_COUNT; |
+ } |
+ |
+ @Override |
+ public int getItemViewType(int position) { |
+ return VIEW_TYPE_MENUITEM; |
+ } |
+ |
+ @Override |
+ public long getItemId(int position) { |
+ return getItem(position).getItemId(); |
+ } |
+ |
+ @Override |
+ public MenuItem getItem(int position) { |
+ if (position == ListView.INVALID_POSITION) return null; |
+ assert position >= 0; |
+ assert position < mMenuItems.size(); |
+ return mMenuItems.get(position); |
+ } |
+ |
+ @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); |
+ } else { |
+ holder = (ViewHolder) convertView.getTag(); |
+ } |
+ 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; |
+ } |
+ |
+ static class ViewHolder { |
+ public TextView text; |
+ public AppMenuItemIcon image; |
+ } |
+} |