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

Commit 101c4491 authored by Jack Palevich's avatar Jack Palevich
Browse files

Avoid memory leak by only registering callback while attached to window.

Bug: 6710307
Change-Id: Idf57251e6feb48ec3e75e797144ff800fa874cc8
parent 2dde147b
Loading
Loading
Loading
Loading
+32 −2
Original line number Diff line number Diff line
@@ -38,6 +38,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;
@@ -131,13 +133,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() {
@@ -207,6 +218,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);