From b5245d8904160917942fe91fc8db7f1dfa098fc0 Mon Sep 17 00:00:00 2001 From: Christoph Studer Date: Fri, 19 Sep 2014 16:54:36 +0200 Subject: [PATCH] SysUI: Correctly compare MediaControllers Instead of comparing MediaControllers via reference equality (which is never true), go deeper and check whether the two controllers are connected to the same IBinder. Bug: 17571414 Change-Id: Id25d70be0a60d1900e977310dedcc7063552e018 --- media/java/android/media/session/MediaController.java | 8 ++++++++ .../android/systemui/statusbar/phone/PhoneStatusBar.java | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index be867414bd76c..cfbf3af0a9b12 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -434,6 +434,14 @@ public final class MediaController { return mSessionBinder; } + /** + * @hide + */ + public boolean controlsSameSession(MediaController other) { + if (other == null) return false; + return mSessionBinder.asBinder() == other.getSessionBinder().asBinder(); + } + private void addCallbackLocked(Callback cb, Handler handler) { if (getHandlerForCallbackLocked(cb) != null) { Log.w(TAG, "Callback is already added, ignoring"); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 353c8877d0533..7649baa3a1110 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1748,7 +1748,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } } - if (controller != mMediaController) { + if (!sameSessions(mMediaController, controller)) { // We have a new media session if (mMediaController != null) { @@ -1797,6 +1797,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateMediaMetaData(metaDataChanged); } + private boolean sameSessions(MediaController a, MediaController b) { + if (a == b) return true; + if (a == null) return false; + return a.controlsSameSession(b); + } + /** * Hide the album artwork that is fading out and release its bitmap. */