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
This commit is contained in:
Beth Thibodeau
2020-06-12 12:36:18 -04:00
parent 8140ae8d22
commit 7a1721ad71

View File

@@ -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();