Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c868b154 authored by Adam Powell's avatar Adam Powell Committed by Android (Google) Code Review
Browse files

Merge "Fix bug 3240444 - add OnMenuVisibilityListener for action bar."

parents fad77875 8515ee84
Loading
Loading
Loading
Loading
+52 −5
Original line number Diff line number Diff line
@@ -20749,6 +20749,19 @@
 visibility="public"
>
</constructor>
<method name="addOnMenuVisibilityListener"
 return="void"
 abstract="true"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="listener" type="android.app.ActionBar.OnMenuVisibilityListener">
</parameter>
</method>
<method name="addTab"
 return="void"
 abstract="true"
@@ -20998,6 +21011,19 @@
 visibility="public"
>
</method>
<method name="removeOnMenuVisibilityListener"
 return="void"
 abstract="true"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="listener" type="android.app.ActionBar.OnMenuVisibilityListener">
</parameter>
</method>
<method name="removeTab"
 return="void"
 abstract="true"
@@ -21131,7 +21157,7 @@
>
<parameter name="adapter" type="android.widget.SpinnerAdapter">
</parameter>
<parameter name="callback" type="android.app.ActionBar.NavigationCallback">
<parameter name="callback" type="android.app.ActionBar.OnNavigationListener">
</parameter>
</method>
<method name="setDropdownNavigationMode"
@@ -21146,7 +21172,7 @@
>
<parameter name="adapter" type="android.widget.SpinnerAdapter">
</parameter>
<parameter name="callback" type="android.app.ActionBar.NavigationCallback">
<parameter name="callback" type="android.app.ActionBar.OnNavigationListener">
</parameter>
<parameter name="defaultSelectedPosition" type="int">
</parameter>
@@ -21163,7 +21189,7 @@
>
<parameter name="adapter" type="android.widget.SpinnerAdapter">
</parameter>
<parameter name="callback" type="android.app.ActionBar.NavigationCallback">
<parameter name="callback" type="android.app.ActionBar.OnNavigationListener">
</parameter>
</method>
<method name="setNavigationMode"
@@ -21475,7 +21501,28 @@
>
</field>
</class>
<interface name="ActionBar.NavigationCallback"
<interface name="ActionBar.OnMenuVisibilityListener"
 abstract="true"
 static="true"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<method name="onMenuVisibilityChanged"
 return="void"
 abstract="true"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="isVisible" type="boolean">
</parameter>
</method>
</interface>
<interface name="ActionBar.OnNavigationListener"
 abstract="true"
 static="true"
 final="false"
@@ -249389,7 +249436,7 @@
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="t" type="T">
<parameter name="arg0" type="T">
</parameter>
</method>
</interface>
+39 −9
Original line number Diff line number Diff line
@@ -168,13 +168,13 @@ public abstract class ActionBar {
     * @param adapter An adapter that will provide views both to display
     *                the current navigation selection and populate views
     *                within the dropdown navigation menu.
     * @param callback A NavigationCallback that will receive events when the user
     * @param callback A OnNavigationListener that will receive events when the user
     *                 selects a navigation item.
     * @deprecated See setListNavigationCallbacks.
     */
    @Deprecated
    public abstract void setDropdownNavigationMode(SpinnerAdapter adapter,
            NavigationCallback callback);
            OnNavigationListener callback);

    /**
     * Set the adapter and navigation callback for list navigation mode.
@@ -182,17 +182,17 @@ public abstract class ActionBar {
     * The supplied adapter will provide views for the expanded list as well as
     * the currently selected item. (These may be displayed differently.)
     *
     * The supplied NavigationCallback will alert the application when the user
     * The supplied OnNavigationListener will alert the application when the user
     * changes the current list selection.
     *
     * @param adapter An adapter that will provide views both to display
     *                the current navigation selection and populate views
     *                within the dropdown navigation menu.
     * @param callback A NavigationCallback that will receive events when the user
     * @param callback An OnNavigationListener that will receive events when the user
     *                 selects a navigation item.
     */
    public abstract void setListNavigationCallbacks(SpinnerAdapter adapter,
            NavigationCallback callback);
            OnNavigationListener callback);

    /**
     * Set the action bar into dropdown navigation mode and supply an adapter that will
@@ -201,7 +201,7 @@ public abstract class ActionBar {
     * @param adapter An adapter that will provide views both to display the current
     *                navigation selection and populate views within the dropdown
     *                navigation menu.
     * @param callback A NavigationCallback that will receive events when the user
     * @param callback A OnNavigationListener that will receive events when the user
     *                 selects a navigation item.
     * @param defaultSelectedPosition Position within the provided adapter that should be
     *                                selected from the outset.
@@ -209,7 +209,7 @@ public abstract class ActionBar {
     */
    @Deprecated
    public abstract void setDropdownNavigationMode(SpinnerAdapter adapter,
            NavigationCallback callback, int defaultSelectedPosition);
            OnNavigationListener callback, int defaultSelectedPosition);

    /**
     * Set the selected navigation item in list or tabbed navigation modes.
@@ -532,9 +532,24 @@ public abstract class ActionBar {
    public abstract boolean isShowing();

    /**
     * Callback interface for ActionBar navigation events. 
     * Add a listener that will respond to menu visibility change events.
     *
     * @param listener The new listener to add
     */
    public abstract void addOnMenuVisibilityListener(OnMenuVisibilityListener listener);

    /**
     * Remove a menu visibility listener. This listener will no longer receive menu
     * visibility change events.
     *
     * @param listener A listener to remove that was previously added
     */
    public abstract void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener);

    /**
     * Listener interface for ActionBar navigation events.
     */
    public interface NavigationCallback {
    public interface OnNavigationListener {
        /**
         * This method is called whenever a navigation item in your action bar
         * is selected.
@@ -546,6 +561,21 @@ public abstract class ActionBar {
        public boolean onNavigationItemSelected(int itemPosition, long itemId);
    }

    /**
     * Listener for receiving events when action bar menus are shown or hidden.
     */
    public interface OnMenuVisibilityListener {
        /**
         * Called when an action bar menu is shown or hidden. Applications may want to use
         * this to tune auto-hiding behavior for the action bar or pause/resume video playback,
         * gameplay, or other activity within the main content area.
         *
         * @param isVisible True if an action bar menu is now visible, false if no action bar
         *                  menus are visible.
         */
        public void onMenuVisibilityChanged(boolean isVisible);
    }

    /**
     * A tab in the action bar.
     *
+8 −1
Original line number Diff line number Diff line
@@ -2362,6 +2362,9 @@ public class Activity extends ContextThemeWrapper
     * @return The default implementation returns true.
     */
    public boolean onMenuOpened(int featureId, Menu menu) {
        if (featureId == Window.FEATURE_ACTION_BAR) {
            mActionBar.dispatchMenuVisibilityChanged(true);
        }
        return true;
    }

@@ -2417,6 +2420,10 @@ public class Activity extends ContextThemeWrapper
            case Window.FEATURE_CONTEXT_MENU:
                onContextMenuClosed(menu);
                break;

            case Window.FEATURE_ACTION_BAR:
                mActionBar.dispatchMenuVisibilityChanged(false);
                break;
        }
    }

+6 −0
Original line number Diff line number Diff line
@@ -735,6 +735,9 @@ public class Dialog implements DialogInterface, Window.Callback,
     * @see Activity#onMenuOpened(int, Menu)
     */
    public boolean onMenuOpened(int featureId, Menu menu) {
        if (featureId == Window.FEATURE_ACTION_BAR) {
            mActionBar.dispatchMenuVisibilityChanged(true);
        }
        return true;
    }

@@ -749,6 +752,9 @@ public class Dialog implements DialogInterface, Window.Callback,
     * @see Activity#onPanelClosed(int, Menu)
     */
    public void onPanelClosed(int featureId, Menu menu) {
        if (featureId == Window.FEATURE_ACTION_BAR) {
            mActionBar.dispatchMenuVisibilityChanged(false);
        }
    }

    /**
+28 −4
Original line number Diff line number Diff line
@@ -70,6 +70,10 @@ public class ActionBarImpl extends ActionBar {
    
    private ActionMode mActionMode;
    
    private boolean mLastMenuVisibility;
    private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners =
            new ArrayList<OnMenuVisibilityListener>();

    private static final int CONTEXT_DISPLAY_NORMAL = 0;
    private static final int CONTEXT_DISPLAY_SPLIT = 1;
    
@@ -120,6 +124,26 @@ public class ActionBarImpl extends ActionBar {
                CONTEXT_DISPLAY_NORMAL : CONTEXT_DISPLAY_SPLIT;
    }

    public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
        mMenuVisibilityListeners.add(listener);
    }

    public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
        mMenuVisibilityListeners.remove(listener);
    }

    public void dispatchMenuVisibilityChanged(boolean isVisible) {
        if (isVisible == mLastMenuVisibility) {
            return;
        }
        mLastMenuVisibility = isVisible;

        final int count = mMenuVisibilityListeners.size();
        for (int i = 0; i < count; i++) {
            mMenuVisibilityListeners.get(i).onMenuVisibilityChanged(isVisible);
        }
    }

    @Override
    public void setTitle(int resId) {
        setTitle(mContext.getString(resId));
@@ -138,11 +162,11 @@ public class ActionBarImpl extends ActionBar {
        mActionView.setCallback(null);
    }

    public void setDropdownNavigationMode(SpinnerAdapter adapter, NavigationCallback callback) {
    public void setDropdownNavigationMode(SpinnerAdapter adapter, OnNavigationListener callback) {
        setDropdownNavigationMode(adapter, callback, -1);
    }

    public void setDropdownNavigationMode(SpinnerAdapter adapter, NavigationCallback callback,
    public void setDropdownNavigationMode(SpinnerAdapter adapter, OnNavigationListener callback,
            int defaultSelectedPosition) {
        cleanupTabs();
        setDisplayOptions(0, DISPLAY_SHOW_CUSTOM | DISPLAY_SHOW_TITLE);
@@ -516,7 +540,7 @@ public class ActionBarImpl extends ActionBar {

        public void onMenuModeChange(MenuBuilder menu) {
            invalidate();
            mUpperContextView.showOverflowMenu();
            mUpperContextView.openOverflowMenu();
        }
    }

@@ -627,7 +651,7 @@ public class ActionBarImpl extends ActionBar {
    }

    @Override
    public void setListNavigationCallbacks(SpinnerAdapter adapter, NavigationCallback callback) {
    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
        mActionView.setDropdownAdapter(adapter);
        mActionView.setCallback(callback);
    }
Loading