summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/MediaRouteButton.java34
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);