diff options
-rw-r--r-- | core/java/android/app/MediaRouteButton.java | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/core/java/android/app/MediaRouteButton.java b/core/java/android/app/MediaRouteButton.java index 5863ad0..65f9f87 100644 --- a/core/java/android/app/MediaRouteButton.java +++ b/core/java/android/app/MediaRouteButton.java @@ -39,6 +39,8 @@ public class MediaRouteButton extends View { private final MediaRouteCallback mRouterCallback = new MediaRouteCallback(); private int mRouteTypes; + private boolean mAttachedToWindow; + private Drawable mRemoteIndicator; private boolean mRemoteActive; private boolean mToggleMode; @@ -132,13 +134,22 @@ public class MediaRouteButton extends View { // Already registered; nothing to do. return; } - if (mRouteTypes != 0) { + + if (mAttachedToWindow && mRouteTypes != 0) { mRouter.removeCallback(mRouterCallback); } + mRouteTypes = types; + + if (mAttachedToWindow) { + updateRouteInfo(); + mRouter.addCallback(types, mRouterCallback); + } + } + + private void updateRouteInfo() { updateRemoteIndicator(); updateRouteCount(); - mRouter.addCallback(types, mRouterCallback); } public int getRouteTypes() { @@ -214,6 +225,25 @@ public class MediaRouteButton extends View { } @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + mAttachedToWindow = true; + if (mRouteTypes != 0) { + mRouter.addCallback(mRouteTypes, mRouterCallback); + updateRouteInfo(); + } + } + + @Override + public void onDetachedFromWindow() { + if (mRouteTypes != 0) { + mRouter.removeCallback(mRouterCallback); + } + mAttachedToWindow = false; + super.onDetachedFromWindow(); + } + + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int widthSize = MeasureSpec.getSize(widthMeasureSpec); final int heightSize = MeasureSpec.getSize(heightMeasureSpec); |