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

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

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

parents 0b9b053c 101c4491
Loading
Loading
Loading
Loading
+32 −2
Original line number Diff line number Diff line
@@ -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);