Merge "Avoid memory leak by only registering callback while attached to window." into jb-dev

This commit is contained in:
Adam Powell
2012-06-22 10:44:27 -07:00
committed by Android (Google) Code Review

View File

@@ -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() {
@@ -213,6 +224,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);