Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a1721ad authored by Beth Thibodeau's avatar Beth Thibodeau
Browse files

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
parent 8140ae8d
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -135,13 +135,17 @@ public class ResumeMediaBrowser {
         */
        @Override
        public void onConnected() {
            if (mMediaBrowser.isConnected()) {
                mCallback.onConnected();
            Log.d(TAG, "Service connected for " + mComponentName);
            if (mMediaBrowser.isConnected()) {
                String root = mMediaBrowser.getRoot();
                if (!TextUtils.isEmpty(root)) {
                    mCallback.onConnected();
                    mMediaBrowser.subscribe(root, mSubscriptionCallback);
                    return;
                }
            }
            mCallback.onError();
        }

        /**
         * Invoked when the client is disconnected from the media browser.
@@ -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();