diff options
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/app/MediaRouteActionProvider.java | 26 | ||||
-rw-r--r-- | core/java/android/view/ActionProvider.java | 26 | ||||
-rw-r--r-- | core/java/com/android/internal/view/menu/MenuItemImpl.java | 3 |
3 files changed, 36 insertions, 19 deletions
diff --git a/core/java/android/app/MediaRouteActionProvider.java b/core/java/android/app/MediaRouteActionProvider.java index 4860182..b1fc90a 100644 --- a/core/java/android/app/MediaRouteActionProvider.java +++ b/core/java/android/app/MediaRouteActionProvider.java @@ -21,7 +21,6 @@ import com.android.internal.app.MediaRouteChooserDialogFragment; import android.content.Context; import android.content.ContextWrapper; import android.media.MediaRouter; -import android.media.MediaRouter.RouteInfo; import android.util.Log; import android.view.ActionProvider; import android.view.MenuItem; @@ -35,7 +34,6 @@ public class MediaRouteActionProvider extends ActionProvider { private MenuItem mMenuItem; private MediaRouteButton mView; private int mRouteTypes; - private final RouterCallback mRouterCallback = new RouterCallback(); private View.OnClickListener mExtendedSettingsListener; public MediaRouteActionProvider(Context context) { @@ -50,18 +48,10 @@ public class MediaRouteActionProvider extends ActionProvider { } public void setRouteTypes(int types) { - if (types == mRouteTypes) { - // Already registered; nothing to do. - return; - } - if (mRouteTypes != 0) { - mRouter.removeCallback(mRouterCallback); - } mRouteTypes = types; if (mView != null) { mView.setRouteTypes(mRouteTypes); } - mRouter.addCallback(types, mRouterCallback); } @Override @@ -124,15 +114,13 @@ public class MediaRouteActionProvider extends ActionProvider { } } - private class RouterCallback extends MediaRouter.SimpleCallback { - @Override - public void onRouteAdded(MediaRouter router, RouteInfo info) { - mMenuItem.setVisible(mRouter.getRouteCount() > 1); - } + @Override + public boolean overridesItemVisibility() { + return true; + } - @Override - public void onRouteRemoved(MediaRouter router, RouteInfo info) { - mMenuItem.setVisible(mRouter.getRouteCount() > 1); - } + @Override + public boolean isVisible() { + return mRouter.getRouteCount() > 1; } } diff --git a/core/java/android/view/ActionProvider.java b/core/java/android/view/ActionProvider.java index fa79d36..af9bf9e 100644 --- a/core/java/android/view/ActionProvider.java +++ b/core/java/android/view/ActionProvider.java @@ -96,6 +96,32 @@ public abstract class ActionProvider { } /** + * The result of this method determines whether or not {@link #isVisible()} will be used + * by the {@link MenuItem} this ActionProvider is bound to help determine its visibility. + * + * @return true if this ActionProvider overrides the visibility of the MenuItem + * it is bound to, false otherwise. The default implementation returns false. + * @see #isVisible() + */ + public boolean overridesItemVisibility() { + return false; + } + + /** + * If {@link #overridesItemVisibility()} returns true, the return value of this method + * will help determine the visibility of the {@link MenuItem} this ActionProvider is bound to. + * + * <p>If the MenuItem's visibility is explicitly set to false by the application, + * the MenuItem will not be shown, even if this method returns true.</p> + * + * @return true if the MenuItem this ActionProvider is bound to is visible, false if + * it is invisible. The default implementation returns true. + */ + public boolean isVisible() { + return true; + } + + /** * Performs an optional default action. * <p> * For the case of an action provider placed in a menu item not shown as an action this diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java index de75962..9baface 100644 --- a/core/java/com/android/internal/view/menu/MenuItemImpl.java +++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java @@ -456,6 +456,9 @@ public final class MenuItemImpl implements MenuItem { } public boolean isVisible() { + if (mActionProvider != null && mActionProvider.overridesItemVisibility()) { + return (mFlags & HIDDEN) == 0 && mActionProvider.isVisible(); + } return (mFlags & HIDDEN) == 0; } |