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

Commit 7eb6202f authored by Jason Monk's avatar Jason Monk
Browse files

Fix status bar cast icon not updating

Change the listening in CastControllerImpl so that it will always
at least passive discovery when callbacks are added.  When discovering
is set this will switch to request discovery.  This allows the
status bar to catch disconnect callbacks when QS is not discovering.

Bug: 17555869
Change-Id: Id2a80b98f6c7ca7e6a4d0ff00315d10a109e8259
parent ee3ef2b8
Loading
Loading
Loading
Loading
+25 −6
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ public class CastControllerImpl implements CastController {
    private final Object mProjectionLock = new Object();

    private boolean mDiscovering;
    private boolean mCallbackRegistered;
    private MediaProjectionInfo mProjection;

    public CastControllerImpl(Context context) {
@@ -70,6 +71,7 @@ public class CastControllerImpl implements CastController {
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("CastController state:");
        pw.print("  mDiscovering="); pw.println(mDiscovering);
        pw.print("  mCallbackRegistered="); pw.println(mCallbackRegistered);
        pw.print("  mCallbacks.size="); pw.println(mCallbacks.size());
        pw.print("  mRoutes.size="); pw.println(mRoutes.size());
        for (int i = 0; i < mRoutes.size(); i++) {
@@ -83,11 +85,17 @@ public class CastControllerImpl implements CastController {
    public void addCallback(Callback callback) {
        mCallbacks.add(callback);
        fireOnCastDevicesChanged(callback);
        synchronized (mDiscoveringLock) {
            handleDiscoveryChangeLocked();
        }
    }

    @Override
    public void removeCallback(Callback callback) {
        mCallbacks.remove(callback);
        synchronized (mDiscoveringLock) {
            handleDiscoveryChangeLocked();
        }
    }

    @Override
@@ -96,12 +104,23 @@ public class CastControllerImpl implements CastController {
            if (mDiscovering == request) return;
            mDiscovering = request;
            if (DEBUG) Log.d(TAG, "setDiscovering: " + request);
            if (request) {
                mMediaRouter.addCallback(ROUTE_TYPE_REMOTE_DISPLAY, mMediaCallback,
                        MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
            } else {
            handleDiscoveryChangeLocked();
        }
    }

    private void handleDiscoveryChangeLocked() {
        if (mCallbackRegistered) {
            mMediaRouter.removeCallback(mMediaCallback);
            mCallbackRegistered = false;
        }
        if (mDiscovering) {
            mMediaRouter.addCallback(ROUTE_TYPE_REMOTE_DISPLAY, mMediaCallback,
                    MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
            mCallbackRegistered = true;
        } else if (mCallbacks.size() != 0) {
            mMediaRouter.addCallback(ROUTE_TYPE_REMOTE_DISPLAY, mMediaCallback,
                    MediaRouter.CALLBACK_FLAG_PASSIVE_DISCOVERY);
            mCallbackRegistered = true;
        }
    }