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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuHelper.java

Issue 2830543003: Re-fact TranslateMenuHelper. (Closed)
Patch Set: Created 3 years, 8 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/infobar/translate/TranslateMenuHelper.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuHelper.java
index 24bbc3c3f1cbc8dba2ae170a0ae967f9ffc2a017..22146a603a5a389731b0eb597806c030b6334aa5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuHelper.java
@@ -24,81 +24,43 @@ import java.util.List;
* A Helper class for managing the Translate Overflow Menu.
*/
public class TranslateMenuHelper implements AdapterView.OnItemClickListener {
- private static final String EMPTY_STRING = "";
private final TranslateMenuItemListener mItemListener;
- private ContextThemeWrapper mWrapper;
- private View mAnchorView;
+
+ private ContextThemeWrapper mContextWrapper;
private TranslateMenuAdapter mAdapter;
private ListPopupWindow mPopup;
+ private View mAnchorView;
+ private String mSourceLanguage;
- /**
- * Add a divider menu item to list.
- * @param list The list of items to show in the menu.
- */
- public static void addDivider(List<TranslateMenuElement> list) {
- list.add(new TranslateMenuElement(
- EMPTY_STRING, EMPTY_STRING, TranslateMenuAdapter.MENU_DIVIDER));
- }
-
- /**
- * Add an overflow menu item to list.
- * @param title Title of the menu item
- * @param code Code of the menu item
- * @param list The list of items to show in the menu.
- */
- public static void addOverflowMenuItem(
- String title, String code, List<TranslateMenuElement> list) {
- list.add(new TranslateMenuElement(title, code, TranslateMenuAdapter.OVERFLOW_MENU_ITEM));
- }
-
- /**
- * Add a source language menu item to list.
- * @param title Title of the language
- * @param code ISO code of the language
- * @param list The list of items to show in the menu.
- */
- public static void addSourceLanguageMenuItem(
- String title, String code, List<TranslateMenuElement> list) {
- list.add(new TranslateMenuElement(
- title, code, TranslateMenuAdapter.SOURCE_LANGUAGE_MENU_ITEM));
- }
-
- /**
- * Add a target language menu item to list.
- * @param title Title of the language
- * @param code ISO code of the language
- * @param list The list of items to show in the menu.
- */
- public static void addTargetLanguageMenuItem(
- String title, String code, List<TranslateMenuElement> list) {
- list.add(new TranslateMenuElement(
- title, code, TranslateMenuAdapter.TARGET_LANGUAGE_MENU_ITEM));
- }
+ private List<TranslateMenu.TranslateMenuItem> mMenuList;
/**
* Interface for receiving the click event of menu item.
*/
public interface TranslateMenuItemListener {
- // return true if the menu is dismissed after clicking on the item; return false otherwise.
- // (when clicking on 'More languages' or 'Page not in this language', we show the language
- // menu by keeping the menu but replace the items inside.)
- boolean onTranslateMenuItemClicked(String code, int type);
+ void onTranslateMenuItemClicked(int itemType, String code);
}
- public TranslateMenuHelper(
- Context context, View anchorView, TranslateMenuItemListener itemListener) {
- mWrapper = new ContextThemeWrapper(context, R.style.OverflowMenuTheme);
+ public TranslateMenuHelper(Context context, View anchorView,
+ TranslateMenuItemListener itemListener, String sourceLanguage,
+ List<TranslateMenu.TranslateMenuItem> menuList) {
+ mContextWrapper = new ContextThemeWrapper(context, R.style.OverflowMenuTheme);
mAnchorView = anchorView;
mItemListener = itemListener;
+ mSourceLanguage = sourceLanguage;
+ mMenuList = menuList;
}
/**
* Show the overflow menu.
- * @param list List of menuitems.
*/
- public void show(List<TranslateMenuElement> list) {
+ public void show() {
+ if (mMenuList.isEmpty()) {
+ return;
+ }
+
if (mPopup == null) {
- mPopup = new ListPopupWindow(mWrapper, null, android.R.attr.popupMenuStyle);
+ mPopup = new ListPopupWindow(mContextWrapper, null, android.R.attr.popupMenuStyle);
mPopup.setModal(true);
mPopup.setAnchorView(mAnchorView);
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
@@ -106,22 +68,17 @@ public class TranslateMenuHelper implements AdapterView.OnItemClickListener {
// Need to explicitly set the background here. Relying on it being set in the style
// caused an incorrectly drawn background.
mPopup.setBackgroundDrawable(
- ContextCompat.getDrawable(mWrapper, R.drawable.edge_menu_bg));
+ ContextCompat.getDrawable(mContextWrapper, R.drawable.edge_menu_bg));
- int popupWidth = mWrapper.getResources().getDimensionPixelSize(
- R.dimen.infobar_translate_menu_width);
+ mPopup.setOnItemClickListener(this);
+ int popupWidth = mContextWrapper.getResources().getDimensionPixelSize(
+ R.dimen.infobar_translate_menu_width);
// TODO (martiw) make the width dynamic to handle longer items.
mPopup.setWidth(popupWidth);
- mAdapter = new TranslateMenuAdapter(
- mWrapper, R.id.menu_item_text, list, LayoutInflater.from(mWrapper));
+ mAdapter = new TranslateMenuAdapter();
mPopup.setAdapter(mAdapter);
-
- mPopup.setOnItemClickListener(this);
- } else {
- mAdapter.clear();
- mAdapter.addAll(list);
}
if (!mPopup.isShowing()) {
@@ -132,14 +89,13 @@ public class TranslateMenuHelper implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- if (mItemListener.onTranslateMenuItemClicked(
- mAdapter.getItem(position).getCode(), mAdapter.getItemViewType(position))) {
- dismiss();
- }
+ dismiss();
+ mItemListener.onTranslateMenuItemClicked(
+ mAdapter.getItemViewType(position), mAdapter.getItem(position).mCode);
}
/**
- * Dismisses the app menu.
+ * Dismisses the translate option menu.
*/
void dismiss() {
if (isShowing()) {
@@ -160,81 +116,60 @@ public class TranslateMenuHelper implements AdapterView.OnItemClickListener {
/**
* The provides the views of the menu items and dividers.
*/
- public static final class TranslateMenuAdapter extends ArrayAdapter<TranslateMenuElement> {
- public static final int MENU_DIVIDER = 0;
- public static final int OVERFLOW_MENU_ITEM = 1;
- public static final int SOURCE_LANGUAGE_MENU_ITEM = 2;
- public static final int TARGET_LANGUAGE_MENU_ITEM = 3;
+ private final class TranslateMenuAdapter extends ArrayAdapter<TranslateMenu.TranslateMenuItem> {
// TODO(martiw) create OVERFLOW_MENU_ITEM_WITH_CHECKBOX_CHECKED and
// OVERFLOW_MENU_ITEM_WITH_CHECKBOX_UNCHECKED for "Always Translate Language"
- LayoutInflater mInflater;
+ private final LayoutInflater mInflater;
- public TranslateMenuAdapter(Context context, int textViewResourceId,
- List<TranslateMenuElement> items, LayoutInflater inflater) {
- super(context, textViewResourceId, items);
- mInflater = inflater;
+ public TranslateMenuAdapter() {
+ super(mContextWrapper, R.layout.translate_menu_item, mMenuList);
+ mInflater = LayoutInflater.from(mContextWrapper);
}
@Override
public int getItemViewType(int position) {
- return getItem(position).getType();
+ return getItem(position).mType;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return TranslateMenu.MENU_ITEM_TYPE_COUNT;
}
@Override
public boolean isEnabled(int position) {
- return getItemViewType(position) != MENU_DIVIDER;
+ return getItemViewType(position) != TranslateMenu.MENU_DIVIDER;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- switch (getItemViewType(position)) {
- case MENU_DIVIDER:
- convertView = mInflater.inflate(R.layout.translate_menu_divider, parent, false);
+ final int itemViewType = getItemViewType(position);
+ View menuItemView = convertView;
+ switch (itemViewType) {
+ case TranslateMenu.MENU_DIVIDER:
+ if (convertView == null) {
gone 2017/04/19 23:21:13 if (menuItemView == null) you already set menuIte
Leo 2017/04/20 01:17:21 Done.
+ menuItemView =
+ mInflater.inflate(R.layout.translate_menu_divider, parent, false);
+ }
break;
- case OVERFLOW_MENU_ITEM:
- case SOURCE_LANGUAGE_MENU_ITEM:
- case TARGET_LANGUAGE_MENU_ITEM:
- convertView = mInflater.inflate(R.layout.translate_menu_item, parent, false);
- ((TextView) convertView.findViewById(R.id.menu_item_text))
- .setText(getItem(position).toString());
+ case TranslateMenu.OVERFLOW_MENU_ITEM:
+ case TranslateMenu.SOURCE_LANGUAGE_MENU_ITEM:
+ case TranslateMenu.TARGET_LANGUAGE_MENU_ITEM:
+ if (convertView == null) {
+ menuItemView =
+ mInflater.inflate(R.layout.translate_menu_item, parent, false);
+ }
+
+ ((TextView) menuItemView.findViewById(R.id.menu_item_text))
+ .setText(getItem(position).getTitle(mContextWrapper, mSourceLanguage));
break;
// TODO(martiw) create the layout for OVERFLOW_MENU_ITEM_WITH_CHECKBOX_CHECKED and
// OVERFLOW_MENU_ITEM_WITH_CHECKBOX_UNCHECKED for "Always Translate Language"
default:
assert false : "Unexpected MenuItem type";
}
- return convertView;
- }
- }
-
- /**
- * The element that goes inside the menu.
- */
- public static final class TranslateMenuElement {
- private final String mTitle;
- private final String mCode;
- private final int mType;
-
- public TranslateMenuElement(String title, String code, int type) {
- mTitle = title;
- mCode = code;
- mType = type;
- }
-
- public String getCode() {
- return mCode;
- }
-
- public int getType() {
- return mType;
- }
-
- /**
- * This is the text displayed in the menu item.
- */
- public String toString() {
- return mTitle;
+ return menuItemView;
}
}
}

Powered by Google App Engine
This is Rietveld 408576698