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

Commit 8257e065 authored by Beth Thibodeau's avatar Beth Thibodeau Committed by Automerger Merge Worker
Browse files

Merge "Reduce extra connections made to app" into tm-qpr-dev am: a88f7383...

Merge "Reduce extra connections made to app" into tm-qpr-dev am: a88f7383 am: fd4d4306 am: ad6d0f29

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21801875



Change-Id: I38790e8578760d3cc75c8ce52ee9ed71aaaf25f2
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 60627f3a ad6d0f29
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -239,6 +239,8 @@ constructor(
                        data.playbackLocation != MediaData.PLAYBACK_CAST_REMOTE)
            if (data.resumeAction == null && !data.hasCheckedForResume && isEligibleForResume) {
                // TODO also check for a media button receiver intended for restarting (b/154127084)
                // Set null action to prevent additional attempts to connect
                mediaDataManager.setResumeAction(key, null)
                Log.d(TAG, "Checking for service component for " + data.packageName)
                val pm = context.packageManager
                val serviceIntent = Intent(MediaBrowserService.SERVICE_INTERFACE)
@@ -249,9 +251,6 @@ constructor(
                    backgroundExecutor.execute {
                        tryUpdateResumptionList(key, inf!!.get(0).componentInfo.componentName)
                    }
                } else {
                    // No service found
                    mediaDataManager.setResumeAction(key, null)
                }
            }
        }
@@ -263,8 +262,6 @@ constructor(
     */
    private fun tryUpdateResumptionList(key: String, componentName: ComponentName) {
        Log.d(TAG, "Testing if we can connect to $componentName")
        // Set null action to prevent additional attempts to connect
        mediaDataManager.setResumeAction(key, null)
        mediaBrowser =
            mediaBrowserFactory.create(
                object : ResumeMediaBrowser.Callback() {
+21 −15
Original line number Diff line number Diff line
@@ -85,16 +85,13 @@ public class ResumeMediaBrowser {
     * ResumeMediaBrowser#disconnect will be called automatically with this function.
     */
    public void findRecentMedia() {
        disconnect();
        Bundle rootHints = new Bundle();
        rootHints.putBoolean(MediaBrowserService.BrowserRoot.EXTRA_RECENT, true);
        mMediaBrowser = mBrowserFactory.create(
        MediaBrowser browser = mBrowserFactory.create(
                mComponentName,
                mConnectionCallback,
                rootHints);
        updateMediaController();
        mLogger.logConnection(mComponentName, "findRecentMedia");
        mMediaBrowser.connect();
        connectBrowser(browser, "findRecentMedia");
    }

    private final MediaBrowser.SubscriptionCallback mSubscriptionCallback =
@@ -201,6 +198,21 @@ public class ResumeMediaBrowser {
        }
    };

    /**
     * Connect using a new media browser. Disconnects the existing browser first, if it exists.
     * @param browser media browser to connect
     * @param reason Reason to log for connection
     */
    private void connectBrowser(MediaBrowser browser, String reason) {
        mLogger.logConnection(mComponentName, reason);
        disconnect();
        mMediaBrowser = browser;
        if (browser != null) {
            browser.connect();
        }
        updateMediaController();
    }

    /**
     * Disconnect the media browser. This should be done after callbacks have completed to
     * disconnect from the media browser service.
@@ -222,10 +234,9 @@ public class ResumeMediaBrowser {
     * getting a media update from the app
     */
    public void restart() {
        disconnect();
        Bundle rootHints = new Bundle();
        rootHints.putBoolean(MediaBrowserService.BrowserRoot.EXTRA_RECENT, true);
        mMediaBrowser = mBrowserFactory.create(mComponentName,
        MediaBrowser browser = mBrowserFactory.create(mComponentName,
                new MediaBrowser.ConnectionCallback() {
                    @Override
                    public void onConnected() {
@@ -265,9 +276,7 @@ public class ResumeMediaBrowser {
                        disconnect();
                    }
                }, rootHints);
        updateMediaController();
        mLogger.logConnection(mComponentName, "restart");
        mMediaBrowser.connect();
        connectBrowser(browser, "restart");
    }

    @VisibleForTesting
@@ -305,16 +314,13 @@ public class ResumeMediaBrowser {
     * ResumeMediaBrowser#disconnect should be called after this to ensure the connection is closed.
     */
    public void testConnection() {
        disconnect();
        Bundle rootHints = new Bundle();
        rootHints.putBoolean(MediaBrowserService.BrowserRoot.EXTRA_RECENT, true);
        mMediaBrowser = mBrowserFactory.create(
        MediaBrowser browser = mBrowserFactory.create(
                mComponentName,
                mConnectionCallback,
                rootHints);
        updateMediaController();
        mLogger.logConnection(mComponentName, "testConnection");
        mMediaBrowser.connect();
        connectBrowser(browser, "testConnection");
    }

    /** Updates mMediaController based on our current browser values. */
+23 −4
Original line number Diff line number Diff line
@@ -312,6 +312,25 @@ class MediaResumeListenerTest : SysuiTestCase() {
        verify(mediaDataManager, never()).setResumeAction(KEY, null)
    }

    @Test
    fun testOnLoadTwice_onlyChecksOnce() {
        // When data is first loaded,
        setUpMbsWithValidResolveInfo()
        resumeListener.onMediaDataLoaded(KEY, null, data)

        // We notify the manager to set a null action
        verify(mediaDataManager).setResumeAction(KEY, null)

        // If we then get another update from the app before the first check completes
        assertThat(executor.numPending()).isEqualTo(1)
        var dataWithCheck = data.copy(hasCheckedForResume = true)
        resumeListener.onMediaDataLoaded(KEY, null, dataWithCheck)

        // We do not try to start another check
        assertThat(executor.numPending()).isEqualTo(1)
        verify(mediaDataManager).setResumeAction(KEY, null)
    }

    @Test
    fun testOnUserUnlock_loadsTracks() {
        // Set up mock service to successfully find valid media
@@ -392,7 +411,7 @@ class MediaResumeListenerTest : SysuiTestCase() {
                assertThat(result.size).isEqualTo(3)
                assertThat(result[2].toLong()).isEqualTo(currentTime)
            }
        verify(sharedPrefsEditor, times(1)).apply()
        verify(sharedPrefsEditor).apply()
    }

    @Test
@@ -432,8 +451,8 @@ class MediaResumeListenerTest : SysuiTestCase() {
        resumeListener.userUnlockReceiver.onReceive(mockContext, intent)

        // We add its resume controls
        verify(resumeBrowser, times(1)).findRecentMedia()
        verify(mediaDataManager, times(1))
        verify(resumeBrowser).findRecentMedia()
        verify(mediaDataManager)
            .addResumptionControls(anyInt(), any(), any(), any(), any(), any(), eq(PACKAGE_NAME))
    }

@@ -516,7 +535,7 @@ class MediaResumeListenerTest : SysuiTestCase() {
                assertThat(result.size).isEqualTo(3)
                assertThat(result[2].toLong()).isEqualTo(currentTime)
            }
        verify(sharedPrefsEditor, times(1)).apply()
        verify(sharedPrefsEditor).apply()
    }

    @Test