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
This commit is contained in:
@@ -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 {
|
||||
mMediaRouter.removeCallback(mMediaCallback);
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user