mobile/android/base/widget/GeckoPopupMenu.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 /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
     2  * This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 package org.mozilla.gecko.widget;
     8 import org.mozilla.gecko.menu.GeckoMenu;
     9 import org.mozilla.gecko.menu.GeckoMenuInflater;
    10 import org.mozilla.gecko.menu.MenuPanel;
    11 import org.mozilla.gecko.menu.MenuPopup;
    13 import android.content.Context;
    14 import android.view.Menu;
    15 import android.view.MenuInflater;
    16 import android.view.MenuItem;
    17 import android.view.View;
    19 /**
    20  * A PopupMenu that uses the custom GeckoMenu. This menu is
    21  * usually tied to an anchor, and show as a dropdrown from the anchor.
    22  */
    23 public class GeckoPopupMenu implements GeckoMenu.Callback,
    24                                        GeckoMenu.MenuPresenter {
    26     // An interface for listeners for dismissal.
    27     public static interface OnDismissListener {
    28         public boolean onDismiss(GeckoMenu menu);
    29     }
    31     // An interface for listeners for menu item click events.
    32     public static interface OnMenuItemClickListener {
    33         public boolean onMenuItemClick(MenuItem item);
    34     }
    36     private View mAnchor;
    38     private MenuPopup mMenuPopup;
    39     private MenuPanel mMenuPanel;
    41     private GeckoMenu mMenu;
    42     private GeckoMenuInflater mMenuInflater;
    44     private OnDismissListener mDismissListener;
    45     private OnMenuItemClickListener mClickListener;
    47     public GeckoPopupMenu(Context context) {
    48         initialize(context, null);
    49     }
    51     public GeckoPopupMenu(Context context, View anchor) {
    52         initialize(context, anchor);
    53     }
    55     /**
    56      * This method creates an empty menu and attaches the necessary listeners.
    57      * If an anchor is supplied, it is stored as well.
    58      */
    59     private void initialize(Context context, View anchor) {
    60         mMenu = new GeckoMenu(context, null);
    61         mMenu.setCallback(this);
    62         mMenu.setMenuPresenter(this);
    63         mMenuInflater = new GeckoMenuInflater(context);
    65         mMenuPopup = new MenuPopup(context);
    66         mMenuPanel = new MenuPanel(context, null);
    68         mMenuPanel.addView(mMenu);
    69         mMenuPopup.setPanelView(mMenuPanel);
    71         setAnchor(anchor);
    72     }
    74     /**
    75      * Returns the menu that is current being shown.
    76      *
    77      * @return The menu being shown.
    78      */
    79     public Menu getMenu() {
    80         return mMenu;
    81     }
    83     /**
    84      * Returns the menu inflater that was used to create the menu.
    85      *
    86      * @return The menu inflater used.
    87      */
    88     public MenuInflater getMenuInflater() {
    89         return mMenuInflater;
    90     }
    92     /**
    93      * Inflates a menu resource to the menu using the menu inflater.
    94      *
    95      * @param menuRes The menu resource to be inflated.
    96      */
    97     public void inflate(int menuRes) {
    98         if (menuRes > 0) {
    99             mMenuInflater.inflate(menuRes, mMenu);
   100         }
   101     }
   103     /**
   104      * Set a different anchor after the menu is inflated.
   105      *
   106      * @param anchor The new anchor for the popup.
   107      */
   108     public void setAnchor(View anchor) {
   109         mAnchor = anchor;
   110     }
   112     public void setOnDismissListener(OnDismissListener listener) {
   113         mDismissListener = listener;
   114     }
   116     public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
   117         mClickListener = listener;
   118     }
   120     /**
   121      * Show the inflated menu.
   122      */
   123     public void show() {
   124         if (!mMenuPopup.isShowing())
   125             mMenuPopup.showAsDropDown(mAnchor);
   126     }
   128     /**
   129      * Hide the inflated menu.
   130      */
   131     public void dismiss() {
   132         if (mMenuPopup.isShowing()) {
   133             mMenuPopup.dismiss();
   135             if (mDismissListener != null)
   136                 mDismissListener.onDismiss(mMenu);
   137         }
   138     }
   140     @Override
   141     public boolean onMenuItemSelected(MenuItem item) {
   142         if (mClickListener != null)
   143             return mClickListener.onMenuItemClick(item);
   145         return false;
   146     }
   148     @Override
   149     public void openMenu() {
   150         show();
   151     }
   153     @Override
   154     public void showMenu(View menu) {
   155         mMenuPanel.removeAllViews();
   156         mMenuPanel.addView(menu);
   158         openMenu();
   159     }
   161     @Override
   162     public void closeMenu() {
   163         dismiss();
   164     }
   165 }

mercurial