mobile/android/base/menu/GeckoMenuItem.java

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 package org.mozilla.gecko.menu;
     7 import org.mozilla.gecko.R;
     8 import org.mozilla.gecko.widget.GeckoActionProvider;
    10 import android.content.Intent;
    11 import android.graphics.drawable.Drawable;
    12 import android.os.Build;
    13 import android.view.ActionProvider;
    14 import android.view.ContextMenu;
    15 import android.view.MenuItem;
    16 import android.view.SubMenu;
    17 import android.view.View;
    19 public class GeckoMenuItem implements MenuItem {
    20     private static final String LOGTAG = "GeckoMenuItem";
    22     public static final int SHOW_AS_ACTION_NEVER = 0;
    23     public static final int SHOW_AS_ACTION_IF_ROOM = 1;
    24     public static final int SHOW_AS_ACTION_ALWAYS = 2;
    26     // A View that can show a MenuItem should be able to initialize from 
    27     // the properties of the MenuItem.
    28     public static interface Layout {
    29         public void initialize(GeckoMenuItem item);
    30         public void setShowIcon(boolean show);
    31     }
    33     public static interface OnShowAsActionChangedListener {
    34         public boolean hasActionItemBar();
    35         public void onShowAsActionChanged(GeckoMenuItem item);
    36     }
    38     private int mId;
    39     private int mOrder;
    40     private View mActionView;
    41     private int mActionEnum;
    42     private CharSequence mTitle;
    43     private CharSequence mTitleCondensed;
    44     private boolean mCheckable = false;
    45     private boolean mChecked = false;
    46     private boolean mVisible = true;
    47     private boolean mEnabled = true;
    48     private Drawable mIcon;
    49     private int mIconRes;
    50     private GeckoActionProvider mActionProvider;
    51     private GeckoMenu mMenu;
    52     private GeckoSubMenu mSubMenu;
    53     private MenuItem.OnMenuItemClickListener mMenuItemClickListener = null;
    54     private OnShowAsActionChangedListener mShowAsActionChangedListener;
    56     public GeckoMenuItem(GeckoMenu menu, int id, int order, int titleRes) {
    57         mMenu = menu;
    58         mId = id;
    59         mOrder = order;
    60         setTitle(titleRes);
    61     }
    63     public GeckoMenuItem(GeckoMenu menu, int id, int order, CharSequence title) {
    64         mMenu = menu;
    65         mId = id;
    66         mOrder = order;
    67         setTitle(title);
    68     }
    70     @Override
    71     public boolean collapseActionView() {
    72         return false;
    73     }
    75     @Override
    76     public boolean expandActionView() {
    77         return false;
    78     }
    80     public boolean hasActionProvider() {
    81         if (Build.VERSION.SDK_INT < 14) {
    82             return false;
    83         }
    85         return (mActionProvider != null);
    86     }
    88     public int getActionEnum() {
    89         return mActionEnum;
    90     }
    92     public GeckoActionProvider getGeckoActionProvider() {
    93         return mActionProvider;
    94     }
    96     @Override
    97     public ActionProvider getActionProvider() {
    98         return null;
    99     }
   101     @Override
   102     public View getActionView() {
   103         if (mActionProvider != null) {
   104             return mActionProvider.getView();
   105         }
   107         return mActionView;
   108     }
   110     @Override
   111     public char getAlphabeticShortcut() {
   112         return 0;
   113     }
   115     @Override
   116     public int getGroupId() {
   117         return 0;
   118     }
   120     @Override
   121     public Drawable getIcon() {
   122         if (mIcon == null) {
   123             if (mIconRes != 0)
   124                 return mMenu.getResources().getDrawable(mIconRes);
   125             else
   126                 return null;
   127         } else {
   128             return mIcon;
   129         }
   130     }
   132     @Override
   133     public Intent getIntent() {
   134         return null;
   135     }
   137     @Override
   138     public int getItemId() {
   139         return mId;
   140     }
   142     @Override
   143     public ContextMenu.ContextMenuInfo getMenuInfo() {
   144         return null;
   145     }
   147     @Override
   148     public char getNumericShortcut() {
   149         return 0;
   150     }
   152     @Override
   153     public int getOrder() {
   154         return mOrder;
   155     }
   157     @Override
   158     public SubMenu getSubMenu() {
   159         return mSubMenu;
   160     }
   162     @Override
   163     public CharSequence getTitle() {
   164         return mTitle;
   165     }
   167     @Override
   168     public CharSequence getTitleCondensed() {
   169         return mTitleCondensed;
   170     }
   172     @Override
   173     public boolean hasSubMenu() {
   174         if (mActionProvider != null)
   175             return mActionProvider.hasSubMenu();
   177         return (mSubMenu != null);
   178     }
   180     public boolean isActionItem() {
   181         return (mActionEnum > 0);
   182     }
   184     @Override
   185     public boolean isActionViewExpanded() {
   186         return false;
   187     }
   189     @Override
   190     public boolean isCheckable() {
   191         return mCheckable;
   192     }
   194     @Override
   195     public boolean isChecked() {
   196         return mChecked;
   197     }
   199     @Override
   200     public boolean isEnabled() {
   201         return mEnabled;
   202     }
   204     @Override
   205     public boolean isVisible() {
   206         return mVisible;
   207     }
   209     @Override
   210     public MenuItem setActionProvider(ActionProvider actionProvider) {
   211         return this;
   212     }
   214     public MenuItem setActionProvider(GeckoActionProvider actionProvider) {
   215         mActionProvider = actionProvider;
   216         if (mActionProvider != null) {
   217             actionProvider.setOnTargetSelectedListener(new GeckoActionProvider.OnTargetSelectedListener() {
   218                 @Override
   219                 public void onTargetSelected() {
   220                     mMenu.close();
   222                     // Refresh the menu item to show the high frequency apps.
   223                     mShowAsActionChangedListener.onShowAsActionChanged(GeckoMenuItem.this);
   224                 }
   225             });
   226         }
   228         mShowAsActionChangedListener.onShowAsActionChanged(this);
   229         return this;
   230     }
   232     @Override
   233     public MenuItem setActionView(int resId) {
   234         return this;
   235     }
   237     @Override
   238     public MenuItem setActionView(View view) {
   239         return this;
   240     }
   242     @Override
   243     public MenuItem setAlphabeticShortcut(char alphaChar) {
   244         return this;
   245     }
   247     @Override
   248     public MenuItem setCheckable(boolean checkable) {
   249         mCheckable = checkable;
   250         mMenu.onItemChanged(this);
   251         return this;
   252     }
   254     @Override
   255     public MenuItem setChecked(boolean checked) {
   256         mChecked = checked;
   257         mMenu.onItemChanged(this);
   258         return this;
   259     }
   261     @Override
   262     public MenuItem setEnabled(boolean enabled) {
   263         mEnabled = enabled;
   264         mMenu.onItemChanged(this);
   265         return this;
   266     }
   268     @Override
   269     public MenuItem setIcon(Drawable icon) {
   270         mIcon = icon;
   271         mMenu.onItemChanged(this);
   272         return this;
   273     }
   275     @Override
   276     public MenuItem setIcon(int iconRes) {
   277         mIconRes = iconRes;
   278         mMenu.onItemChanged(this);
   279         return this;
   280     }
   282     @Override
   283     public MenuItem setIntent(Intent intent) {
   284         return this;
   285     }
   287     @Override
   288     public MenuItem setNumericShortcut(char numericChar) {
   289         return this;
   290     }
   292     @Override
   293     public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {
   294         return this;
   295     }
   297     @Override
   298     public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener menuItemClickListener) {
   299         mMenuItemClickListener = menuItemClickListener;
   300         return this;
   301     }
   303     @Override
   304     public MenuItem setShortcut(char numericChar, char alphaChar) {
   305         return this;
   306     }
   308     @Override
   309     public void setShowAsAction(int actionEnum) {
   310         setShowAsAction(actionEnum, 0);
   311     }
   313     public void setShowAsAction(int actionEnum, int style) {
   314         if (mShowAsActionChangedListener == null)
   315             return;
   317         if (mActionEnum == actionEnum)
   318             return;
   320         if (actionEnum > 0) {
   321             if (!mShowAsActionChangedListener.hasActionItemBar())
   322                 return;
   324             if (!hasActionProvider()) {
   325                 // Change the type to just an icon
   326                 MenuItemActionBar actionView;
   327                 if (style != 0) {
   328                     actionView = new MenuItemActionBar(mMenu.getContext(), null, style);
   329                 } else {
   330                     if (actionEnum == SHOW_AS_ACTION_ALWAYS) {
   331                         actionView = new MenuItemActionBar(mMenu.getContext());
   332                     } else {
   333                         actionView = new MenuItemActionBar(mMenu.getContext(), null, R.attr.menuItemSecondaryActionBarStyle);
   334                     }
   335                 }
   337                 actionView.initialize(this);
   338                 mActionView = actionView;
   339             }
   341             mActionEnum = actionEnum;
   342         }
   344         mShowAsActionChangedListener.onShowAsActionChanged(this);
   345     }
   347     @Override
   348     public MenuItem setShowAsActionFlags(int actionEnum) {
   349         return this;
   350     }
   352     public MenuItem setSubMenu(GeckoSubMenu subMenu) {
   353         mSubMenu = subMenu;
   354         return this;
   355     }
   357     @Override
   358     public MenuItem setTitle(CharSequence title) {
   359         mTitle = title;
   360         mMenu.onItemChanged(this);
   361         return this;
   362     }
   364     @Override
   365     public MenuItem setTitle(int title) {
   366         mTitle = mMenu.getResources().getString(title);
   367         mMenu.onItemChanged(this);
   368         return this;
   369     }
   371     @Override
   372     public MenuItem setTitleCondensed(CharSequence title) {
   373         mTitleCondensed = title;
   374         return this;
   375     }
   377     @Override
   378     public MenuItem setVisible(boolean visible) {
   379         mVisible = visible;
   380         mMenu.onItemChanged(this);
   381         return this;
   382     }
   384     public boolean invoke() {
   385         if (mMenuItemClickListener != null)
   386             return mMenuItemClickListener.onMenuItemClick(this);
   387         else
   388             return false;
   389     }
   391     public void setOnShowAsActionChangedListener(OnShowAsActionChangedListener listener) {
   392         mShowAsActionChangedListener = listener;
   393     }
   394 }

mercurial