diff options
author | 2014-09-22 15:46:42 +0000 | |
---|---|---|
committer | 2014-09-22 15:46:42 +0000 | |
commit | 443c4e65049c2a6db627b5e73b6c1a46a7f9512c (patch) | |
tree | 5223373c410d10477e5f2825cbfd62cc2b703480 | |
parent | 8aa88195fef94b43aef534ba8e9c5a98d97f2ddd (diff) | |
parent | 7eb6202feef939d92b5ea268cc2cfea3cc177cd6 (diff) |
am f9d996c1: Fix status bar cast icon not updating
* commit 'f9d996c179e319e54769230e293b8712a3f0631b':
Fix status bar cast icon not updating
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java index eb0be054e8b9..e34495492c02 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CastControllerImpl.java @@ -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; } } |