Loading packages/SystemUI/src/com/android/systemui/media/MediaResumeListener.kt +7 −3 Original line number Diff line number Diff line Loading @@ -163,8 +163,10 @@ class MediaResumeListener @Inject constructor( ) { if (useMediaResumption) { // If this had been started from a resume state, disconnect now that it's live if (!key.equals(oldKey)) { mediaBrowser?.disconnect() mediaBrowser = null } // If we don't have a resume action, check if we haven't already if (data.resumeAction == null && !data.hasCheckedForResume && data.isLocalSession) { // TODO also check for a media button receiver intended for restarting (b/154127084) Loading Loading @@ -194,6 +196,9 @@ class MediaResumeListener @Inject 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?.disconnect() mediaBrowser = mediaBrowserFactory.create( object : ResumeMediaBrowser.Callback() { override fun onConnected() { Loading @@ -202,7 +207,6 @@ class MediaResumeListener @Inject constructor( override fun onError() { Log.e(TAG, "Cannot resume with $componentName") mediaDataManager.setResumeAction(key, null) mediaBrowser = null } Loading packages/SystemUI/tests/src/com/android/systemui/media/MediaResumeListenerTest.kt +31 −3 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.isNotNull import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito Loading Loading @@ -182,6 +183,31 @@ class MediaResumeListenerTest : SysuiTestCase() { verify(mediaDataManager).setResumeAction(KEY, null) } @Test fun testOnLoad_checksForResume_badService() { // Set up MBS that will allow connection but not return valid media val pm = mock(PackageManager::class.java) whenever(mockContext.packageManager).thenReturn(pm) val resolveInfo = ResolveInfo() val serviceInfo = ServiceInfo() serviceInfo.packageName = PACKAGE_NAME resolveInfo.serviceInfo = serviceInfo resolveInfo.serviceInfo.name = CLASS_NAME val resumeInfo = listOf(resolveInfo) whenever(pm.queryIntentServices(any(), anyInt())).thenReturn(resumeInfo) whenever(resumeBrowser.testConnection()).thenAnswer { callbackCaptor.value.onError() } // When media data is loaded that has not been checked yet, and does not have a MBS resumeListener.onMediaDataLoaded(KEY, null, data) executor.runAllReady() // Then we report back to the manager verify(mediaDataManager).setResumeAction(eq(KEY), eq(null)) } @Test fun testOnLoad_remotePlayback_doesNotCheck() { // When media data is loaded that has not been checked yet, and is not local Loading Loading @@ -217,10 +243,11 @@ class MediaResumeListenerTest : SysuiTestCase() { // Then we test whether the service is valid executor.runAllReady() verify(mediaDataManager).setResumeAction(eq(KEY), eq(null)) verify(resumeBrowser).testConnection() // And since it is, we report back to the manager verify(mediaDataManager).setResumeAction(eq(KEY), any()) // And since it is, we send info to the manager verify(mediaDataManager).setResumeAction(eq(KEY), isNotNull()) // But we do not tell it to add new controls verify(mediaDataManager, never()) Loading Loading @@ -291,8 +318,9 @@ class MediaResumeListenerTest : SysuiTestCase() { // Then we test whether the service is valid and set the resume action executor.runAllReady() verify(mediaDataManager).setResumeAction(eq(KEY), eq(null)) verify(resumeBrowser).testConnection() verify(mediaDataManager).setResumeAction(eq(KEY), capture(actionCaptor)) verify(mediaDataManager, times(2)).setResumeAction(eq(KEY), capture(actionCaptor)) // When the resume action is run actionCaptor.value.run() Loading Loading
packages/SystemUI/src/com/android/systemui/media/MediaResumeListener.kt +7 −3 Original line number Diff line number Diff line Loading @@ -163,8 +163,10 @@ class MediaResumeListener @Inject constructor( ) { if (useMediaResumption) { // If this had been started from a resume state, disconnect now that it's live if (!key.equals(oldKey)) { mediaBrowser?.disconnect() mediaBrowser = null } // If we don't have a resume action, check if we haven't already if (data.resumeAction == null && !data.hasCheckedForResume && data.isLocalSession) { // TODO also check for a media button receiver intended for restarting (b/154127084) Loading Loading @@ -194,6 +196,9 @@ class MediaResumeListener @Inject 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?.disconnect() mediaBrowser = mediaBrowserFactory.create( object : ResumeMediaBrowser.Callback() { override fun onConnected() { Loading @@ -202,7 +207,6 @@ class MediaResumeListener @Inject constructor( override fun onError() { Log.e(TAG, "Cannot resume with $componentName") mediaDataManager.setResumeAction(key, null) mediaBrowser = null } Loading
packages/SystemUI/tests/src/com/android/systemui/media/MediaResumeListenerTest.kt +31 −3 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.isNotNull import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito Loading Loading @@ -182,6 +183,31 @@ class MediaResumeListenerTest : SysuiTestCase() { verify(mediaDataManager).setResumeAction(KEY, null) } @Test fun testOnLoad_checksForResume_badService() { // Set up MBS that will allow connection but not return valid media val pm = mock(PackageManager::class.java) whenever(mockContext.packageManager).thenReturn(pm) val resolveInfo = ResolveInfo() val serviceInfo = ServiceInfo() serviceInfo.packageName = PACKAGE_NAME resolveInfo.serviceInfo = serviceInfo resolveInfo.serviceInfo.name = CLASS_NAME val resumeInfo = listOf(resolveInfo) whenever(pm.queryIntentServices(any(), anyInt())).thenReturn(resumeInfo) whenever(resumeBrowser.testConnection()).thenAnswer { callbackCaptor.value.onError() } // When media data is loaded that has not been checked yet, and does not have a MBS resumeListener.onMediaDataLoaded(KEY, null, data) executor.runAllReady() // Then we report back to the manager verify(mediaDataManager).setResumeAction(eq(KEY), eq(null)) } @Test fun testOnLoad_remotePlayback_doesNotCheck() { // When media data is loaded that has not been checked yet, and is not local Loading Loading @@ -217,10 +243,11 @@ class MediaResumeListenerTest : SysuiTestCase() { // Then we test whether the service is valid executor.runAllReady() verify(mediaDataManager).setResumeAction(eq(KEY), eq(null)) verify(resumeBrowser).testConnection() // And since it is, we report back to the manager verify(mediaDataManager).setResumeAction(eq(KEY), any()) // And since it is, we send info to the manager verify(mediaDataManager).setResumeAction(eq(KEY), isNotNull()) // But we do not tell it to add new controls verify(mediaDataManager, never()) Loading Loading @@ -291,8 +318,9 @@ class MediaResumeListenerTest : SysuiTestCase() { // Then we test whether the service is valid and set the resume action executor.runAllReady() verify(mediaDataManager).setResumeAction(eq(KEY), eq(null)) verify(resumeBrowser).testConnection() verify(mediaDataManager).setResumeAction(eq(KEY), capture(actionCaptor)) verify(mediaDataManager, times(2)).setResumeAction(eq(KEY), capture(actionCaptor)) // When the resume action is run actionCaptor.value.run() Loading