| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuSpinnerHelper.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuSpinnerHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuSpinnerHelper.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c828b61226f05fb502cb1f3526e7d75566e20be4
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/translate/TranslateMenuSpinnerHelper.java
|
| @@ -0,0 +1,144 @@
|
| +// Copyright 2017 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.infobar.translate;
|
| +
|
| +import android.content.Context;
|
| +import android.view.ContextThemeWrapper;
|
| +import android.view.LayoutInflater;
|
| +import android.view.View;
|
| +import android.view.ViewGroup;
|
| +import android.widget.AdapterView;
|
| +import android.widget.ArrayAdapter;
|
| +import android.widget.Spinner;
|
| +import android.widget.TextView;
|
| +
|
| +import org.chromium.chrome.R;
|
| +
|
| +import java.util.List;
|
| +
|
| +/**
|
| + * A Helper class for managing the Translate Overflow Menu.
|
| + */
|
| +public class TranslateMenuSpinnerHelper implements AdapterView.OnItemSelectedListener {
|
| + // A dummy element, selecting it means "select none".
|
| + private static final int POSITION_NONE = 0;
|
| +
|
| + private Spinner mSpinner;
|
| + private final TranslateSpinnerItemListener mItemListener;
|
| +
|
| + /**
|
| + * Interface for receiving the click event of spinner item.
|
| + */
|
| + public interface TranslateSpinnerItemListener { void onSpinnerItemSelected(String id); }
|
| +
|
| + public TranslateMenuSpinnerHelper(Context context, Spinner spinner,
|
| + List<TranslateSpinnerElement> list, TranslateSpinnerItemListener itemListener) {
|
| + mItemListener = itemListener;
|
| + mSpinner = spinner;
|
| +
|
| + // Added a dummy (for "select none") element as the first element of the list.
|
| + list.add(POSITION_NONE, new TranslateSpinnerElement("", null));
|
| +
|
| + ContextThemeWrapper wrapper = new ContextThemeWrapper(context, R.style.OverflowMenuTheme);
|
| +
|
| + TranslateMenuSpinnerAdapter translateMenuSpinnerAdapter = new TranslateMenuSpinnerAdapter(
|
| + context, android.R.layout.simple_spinner_item, list, LayoutInflater.from(wrapper));
|
| + translateMenuSpinnerAdapter.setDropDownViewResource(
|
| + android.R.layout.simple_spinner_dropdown_item);
|
| + int popupWidth = context.getResources().getDimensionPixelSize(R.dimen.menu_width);
|
| + mSpinner.setOnItemSelectedListener(this);
|
| + mSpinner.setDropDownWidth(popupWidth);
|
| + mSpinner.setAdapter(translateMenuSpinnerAdapter);
|
| + }
|
| +
|
| + @Override
|
| + public void onItemSelected(AdapterView<?> adapter, View view, int position, long id) {
|
| + if (position == POSITION_NONE) {
|
| + return;
|
| + }
|
| + String code = ((TranslateSpinnerElement) mSpinner.getSelectedItem()).getId();
|
| + mItemListener.onSpinnerItemSelected(code);
|
| +
|
| + // Reset selection. this way the spinner will scroll back to the top when it reopens.
|
| + mSpinner.setSelection(POSITION_NONE);
|
| + }
|
| +
|
| + @Override
|
| + public void onNothingSelected(AdapterView<?> adapter) {}
|
| +
|
| + /**
|
| + * The provides the views of the spinner, spinner items and dividers.
|
| + */
|
| + public class TranslateMenuSpinnerAdapter extends ArrayAdapter<TranslateSpinnerElement> {
|
| + LayoutInflater mInflater;
|
| +
|
| + public TranslateMenuSpinnerAdapter(Context context, int textViewResourceId,
|
| + List<TranslateSpinnerElement> items, LayoutInflater inflater) {
|
| + super(context, textViewResourceId, items);
|
| + mInflater = inflater;
|
| + }
|
| +
|
| + @Override
|
| + public boolean isEnabled(int position) {
|
| + return (position != POSITION_NONE
|
| + && !((TranslateSpinnerElement) mSpinner.getItemAtPosition(position))
|
| + .isDividerLine());
|
| + }
|
| +
|
| + @Override
|
| + public View getView(int position, View convertView, ViewGroup parent) {
|
| + convertView = new View(getContext());
|
| + convertView.setVisibility(View.GONE);
|
| + return convertView;
|
| + }
|
| +
|
| + @Override
|
| + public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
| + TranslateSpinnerElement item =
|
| + ((TranslateSpinnerElement) mSpinner.getItemAtPosition(position));
|
| + if (position == POSITION_NONE) {
|
| + convertView = new View(getContext());
|
| + convertView.setVisibility(View.GONE);
|
| + } else if (item.isDividerLine()) {
|
| + convertView =
|
| + mInflater.inflate(R.layout.translate_menu_spinner_divider, parent, false);
|
| + } else {
|
| + convertView =
|
| + mInflater.inflate(R.layout.translate_menu_spinner_item, parent, false);
|
| + ((TextView) convertView.findViewById(R.id.menu_item_text)).setText(item.toString());
|
| + }
|
| + return convertView;
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * The element that goes inside the spinner.
|
| + */
|
| + public static class TranslateSpinnerElement {
|
| + private final String mTitle;
|
| + private final String mId;
|
| +
|
| + public TranslateSpinnerElement(String title, String id) {
|
| + mTitle = title;
|
| + mId = id;
|
| + }
|
| +
|
| + public String getId() {
|
| + return mId;
|
| + }
|
| +
|
| + public boolean isDividerLine() {
|
| + return mId == null;
|
| + }
|
| +
|
| + /**
|
| + * This is the text displayed in the spinner element.
|
| + */
|
| + @Override
|
| + public String toString() {
|
| + return mTitle;
|
| + }
|
| + }
|
| +}
|
|
|