From 7a1721ad71a17283ba98fd3d30759f7158afc08a Mon Sep 17 00:00:00 2001 From: Beth Thibodeau Date: Fri, 12 Jun 2020 12:36:18 -0400 Subject: [PATCH] Check connection state of media browser We need to verify that the browser is actually connected before calling getRoot or getSessionToken, otherwise it will throw an exception (and crash sysui). This is not typical but could happen if the service we connected to had some problem and disconnected soon after we got the onConnected callback Bug: 156104922 Test: atest com.android.systemui.media Change-Id: I9b73e2167612a287b527c7bf7bdba1ca2455d55b --- .../systemui/media/ResumeMediaBrowser.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/ResumeMediaBrowser.java b/packages/SystemUI/src/com/android/systemui/media/ResumeMediaBrowser.java index 1e9a303646079..6462f072bc745 100644 --- a/packages/SystemUI/src/com/android/systemui/media/ResumeMediaBrowser.java +++ b/packages/SystemUI/src/com/android/systemui/media/ResumeMediaBrowser.java @@ -135,12 +135,16 @@ public class ResumeMediaBrowser { */ @Override public void onConnected() { + Log.d(TAG, "Service connected for " + mComponentName); if (mMediaBrowser.isConnected()) { - mCallback.onConnected(); - Log.d(TAG, "Service connected for " + mComponentName); String root = mMediaBrowser.getRoot(); - mMediaBrowser.subscribe(root, mSubscriptionCallback); + if (!TextUtils.isEmpty(root)) { + mCallback.onConnected(); + mMediaBrowser.subscribe(root, mSubscriptionCallback); + return; + } } + mCallback.onError(); } /** @@ -193,6 +197,10 @@ public class ResumeMediaBrowser { @Override public void onConnected() { Log.d(TAG, "Connected for restart " + mMediaBrowser.isConnected()); + if (!mMediaBrowser.isConnected()) { + mCallback.onError(); + return; + } MediaSession.Token token = mMediaBrowser.getSessionToken(); MediaController controller = new MediaController(mContext, token); controller.getTransportControls(); @@ -251,7 +259,8 @@ public class ResumeMediaBrowser { @Override public void onConnected() { Log.d(TAG, "connected"); - if (TextUtils.isEmpty(mMediaBrowser.getRoot())) { + if (!mMediaBrowser.isConnected() + || TextUtils.isEmpty(mMediaBrowser.getRoot())) { mCallback.onError(); } else { mCallback.onConnected();