diff options
author | 2025-03-24 13:38:37 -0700 | |
---|---|---|
committer | 2025-03-24 13:38:37 -0700 | |
commit | 0e3d88271514e543cc8b2c3f576f82ce7bc53e3c (patch) | |
tree | edc0eb52948e9003bf79bbbc12d36b2abfc922bf | |
parent | 5ba7eda220f3fcd8730ec517f2e66dda980a950f (diff) | |
parent | fc57496f392cd038cf29ded6bbee82882e8d9d66 (diff) |
Merge "Clean up MEDIA_REMOTE_RESUME flag" into main
9 files changed, 11 insertions, 168 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt index 9a37439e7486..6aacdde57c53 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt @@ -200,9 +200,6 @@ object Flags { // TODO(b/266157412): Tracking Bug val MEDIA_RETAIN_SESSIONS = unreleasedFlag("media_retain_sessions") - // TODO(b/270437894): Tracking Bug - val MEDIA_REMOTE_RESUME = unreleasedFlag("media_remote_resume") - // 1000 - dock val SIMULATE_DOCK_THROUGH_CHARGING = releasedFlag("simulate_dock_through_charging") diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImpl.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImpl.kt index 1c69d41092a4..d6921fb42a34 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImpl.kt @@ -1188,10 +1188,7 @@ class LegacyMediaDataManagerImpl( } private fun isAbleToResume(data: MediaData): Boolean { - val isEligibleForResume = - data.isLocalSession() || - (mediaFlags.isRemoteResumeAllowed() && - data.playbackLocation != MediaData.PLAYBACK_CAST_REMOTE) + val isEligibleForResume = data.isLocalSession() return useMediaResumption && data.resumeAction != null && isEligibleForResume } diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessor.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessor.kt index 7e101582dafa..1c47fb4ed56d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessor.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessor.kt @@ -1143,10 +1143,7 @@ class MediaDataProcessor( } private fun isAbleToResume(data: MediaData): Boolean { - val isEligibleForResume = - data.isLocalSession() || - (mediaFlags.isRemoteResumeAllowed() && - data.playbackLocation != MediaData.PLAYBACK_CAST_REMOTE) + val isEligibleForResume = data.isLocalSession() return useMediaResumption && data.resumeAction != null && isEligibleForResume } diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/resume/MediaResumeListener.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/resume/MediaResumeListener.kt index 0a70e78bf039..89d66e82bcab 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/resume/MediaResumeListener.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/resume/MediaResumeListener.kt @@ -38,7 +38,6 @@ import com.android.systemui.dump.DumpManager import com.android.systemui.media.controls.domain.pipeline.MediaDataManager import com.android.systemui.media.controls.domain.pipeline.RESUME_MEDIA_TIMEOUT import com.android.systemui.media.controls.shared.model.MediaData -import com.android.systemui.media.controls.util.MediaFlags import com.android.systemui.settings.UserTracker import com.android.systemui.tuner.TunerService import com.android.systemui.util.Utils @@ -67,7 +66,6 @@ constructor( private val mediaBrowserFactory: ResumeMediaBrowserFactory, dumpManager: DumpManager, private val systemClock: SystemClock, - private val mediaFlags: MediaFlags, ) : MediaDataManager.Listener, Dumpable { private var useMediaResumption: Boolean = Utils.useMediaResumption(context) @@ -251,10 +249,7 @@ constructor( mediaBrowser = null } // If we don't have a resume action, check if we haven't already - val isEligibleForResume = - data.isLocalSession() || - (mediaFlags.isRemoteResumeAllowed() && - data.playbackLocation != MediaData.PLAYBACK_CAST_REMOTE) + val isEligibleForResume = data.isLocalSession() 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 diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaFlags.kt b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaFlags.kt index 8ad10ba2a240..1db821c89324 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaFlags.kt +++ b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaFlags.kt @@ -45,7 +45,4 @@ class MediaFlags @Inject constructor(private val featureFlags: FeatureFlagsClass * whether the underlying notification was dismissed */ fun isRetainingPlayersEnabled() = featureFlags.isEnabled(FlagsClassic.MEDIA_RETAIN_SESSIONS) - - /** Check whether we allow remote media to generate resume controls */ - fun isRemoteResumeAllowed() = featureFlags.isEnabled(FlagsClassic.MEDIA_REMOTE_RESUME) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImplTest.kt index ecc4361abc4f..e39f0a599cd0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImplTest.kt @@ -46,7 +46,6 @@ import com.android.systemui.InstanceIdSequenceFake import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.dump.DumpManager -import com.android.systemui.flags.Flags.MEDIA_REMOTE_RESUME import com.android.systemui.flags.Flags.MEDIA_RETAIN_SESSIONS import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.kosmos.testDispatcher @@ -248,7 +247,6 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa listener = mediaSessionBasedFilter fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, false) - fakeFeatureFlags.set(MEDIA_REMOTE_RESUME, false) whenever(logger.getNewInstanceId()).thenReturn(instanceIdSequence.newInstanceId()) whenever(keyguardUpdateMonitor.isUserInLockdown(any())).thenReturn(false) } @@ -775,56 +773,6 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa } @Test - fun testOnNotificationRemoved_withResumption_isRemoteAndRemoteAllowed() { - // With the flag enabled to allow remote media to resume - fakeFeatureFlags.set(MEDIA_REMOTE_RESUME, true) - - // GIVEN that the manager has a notification with a resume action, but is not local - whenever(controller.metadata).thenReturn(metadataBuilder.build()) - whenever(playbackInfo.playbackType) - .thenReturn(MediaController.PlaybackInfo.PLAYBACK_TYPE_REMOTE) - addNotificationAndLoad() - val data = mediaDataCaptor.value - val dataRemoteWithResume = - data.copy(resumeAction = Runnable {}, playbackLocation = MediaData.PLAYBACK_CAST_LOCAL) - mediaDataManager.onMediaDataLoaded(KEY, null, dataRemoteWithResume) - - // WHEN the notification is removed - mediaDataManager.onNotificationRemoved(KEY) - - // THEN the media data is converted to a resume state - verify(listener) - .onMediaDataLoaded( - eq(PACKAGE_NAME), - eq(KEY), - capture(mediaDataCaptor), - eq(true), - eq(0), - eq(false), - ) - assertThat(mediaDataCaptor.value.resumption).isTrue() - } - - @Test - fun testOnNotificationRemoved_withResumption_isRcnAndRemoteAllowed() { - // With the flag enabled to allow remote media to resume - fakeFeatureFlags.set(MEDIA_REMOTE_RESUME, true) - - // GIVEN that the manager has a remote cast notification - addNotificationAndLoad(remoteCastNotification) - val data = mediaDataCaptor.value - assertThat(data.playbackLocation).isEqualTo(MediaData.PLAYBACK_CAST_REMOTE) - val dataRemoteWithResume = data.copy(resumeAction = Runnable {}) - mediaDataManager.onMediaDataLoaded(KEY, null, dataRemoteWithResume) - - // WHEN the RCN is removed - mediaDataManager.onNotificationRemoved(KEY) - - // THEN the media data is removed - verify(listener).onMediaDataRemoved(eq(KEY), eq(false)) - } - - @Test fun testOnNotificationRemoved_withResumption_tooManyPlayers() { // Given the maximum number of resume controls already val desc = diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessorTest.kt index 988f5545a62a..a6a42e946d4d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessorTest.kt @@ -50,7 +50,6 @@ import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.coroutines.collectLastValue import com.android.systemui.dump.DumpManager import com.android.systemui.flags.EnableSceneContainer -import com.android.systemui.flags.Flags.MEDIA_REMOTE_RESUME import com.android.systemui.flags.Flags.MEDIA_RETAIN_SESSIONS import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.kosmos.testDispatcher @@ -274,7 +273,6 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { listener = mediaSessionBasedFilter fakeFeatureFlags.set(MEDIA_RETAIN_SESSIONS, false) - fakeFeatureFlags.set(MEDIA_REMOTE_RESUME, false) whenever(logger.getNewInstanceId()).thenReturn(instanceIdSequence.newInstanceId()) whenever(keyguardUpdateMonitor.isUserInLockdown(any())).thenReturn(false) } @@ -797,56 +795,6 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test - fun testOnNotificationRemoved_withResumption_isRemoteAndRemoteAllowed() { - // With the flag enabled to allow remote media to resume - fakeFeatureFlags.set(MEDIA_REMOTE_RESUME, true) - - // GIVEN that the manager has a notification with a resume action, but is not local - whenever(controller.metadata).thenReturn(metadataBuilder.build()) - whenever(playbackInfo.playbackType) - .thenReturn(MediaController.PlaybackInfo.PLAYBACK_TYPE_REMOTE) - addNotificationAndLoad() - val data = mediaDataCaptor.value - val dataRemoteWithResume = - data.copy(resumeAction = Runnable {}, playbackLocation = MediaData.PLAYBACK_CAST_LOCAL) - mediaDataProcessor.onMediaDataLoaded(KEY, null, dataRemoteWithResume) - - // WHEN the notification is removed - mediaDataProcessor.onNotificationRemoved(KEY) - - // THEN the media data is converted to a resume state - verify(listener) - .onMediaDataLoaded( - eq(PACKAGE_NAME), - eq(KEY), - capture(mediaDataCaptor), - eq(true), - eq(0), - eq(false), - ) - assertThat(mediaDataCaptor.value.resumption).isTrue() - } - - @Test - fun testOnNotificationRemoved_withResumption_isRcnAndRemoteAllowed() { - // With the flag enabled to allow remote media to resume - fakeFeatureFlags.set(MEDIA_REMOTE_RESUME, true) - - // GIVEN that the manager has a remote cast notification - addNotificationAndLoad(remoteCastNotification) - val data = mediaDataCaptor.value - assertThat(data.playbackLocation).isEqualTo(MediaData.PLAYBACK_CAST_REMOTE) - val dataRemoteWithResume = data.copy(resumeAction = Runnable {}) - mediaDataProcessor.onMediaDataLoaded(KEY, null, dataRemoteWithResume) - - // WHEN the RCN is removed - mediaDataProcessor.onNotificationRemoved(KEY) - - // THEN the media data is removed - verify(listener).onMediaDataRemoved(eq(KEY), eq(false)) - } - - @Test fun testOnNotificationRemoved_withResumption_tooManyPlayers() { // Given the maximum number of resume controls already val desc = diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/resume/MediaResumeListenerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/resume/MediaResumeListenerTest.kt index bc29d2a8ba0d..366b6457e0d8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/resume/MediaResumeListenerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/resume/MediaResumeListenerTest.kt @@ -38,7 +38,6 @@ import com.android.systemui.media.controls.domain.pipeline.MediaDataManager import com.android.systemui.media.controls.domain.pipeline.RESUME_MEDIA_TIMEOUT import com.android.systemui.media.controls.shared.model.MediaData import com.android.systemui.media.controls.shared.model.MediaDeviceData -import com.android.systemui.media.controls.util.MediaFlags import com.android.systemui.settings.UserTracker import com.android.systemui.tuner.TunerService import com.android.systemui.util.concurrency.FakeExecutor @@ -93,7 +92,6 @@ class MediaResumeListenerTest : SysuiTestCase() { @Mock private lateinit var mockContext: Context @Mock private lateinit var pendingIntent: PendingIntent @Mock private lateinit var dumpManager: DumpManager - @Mock private lateinit var mediaFlags: MediaFlags @Captor lateinit var callbackCaptor: ArgumentCaptor<ResumeMediaBrowser.Callback> @Captor lateinit var actionCaptor: ArgumentCaptor<Runnable> @@ -110,7 +108,7 @@ class MediaResumeListenerTest : SysuiTestCase() { Settings.Global.getInt( context.contentResolver, Settings.Global.SHOW_MEDIA_ON_QUICK_SETTINGS, - 1 + 1, ) private var originalResumeSetting = Settings.Secure.getInt(context.contentResolver, Settings.Secure.MEDIA_CONTROLS_RESUME, 0) @@ -122,7 +120,7 @@ class MediaResumeListenerTest : SysuiTestCase() { Settings.Global.putInt( context.contentResolver, Settings.Global.SHOW_MEDIA_ON_QUICK_SETTINGS, - 1 + 1, ) Settings.Secure.putInt(context.contentResolver, Settings.Secure.MEDIA_CONTROLS_RESUME, 1) @@ -139,7 +137,6 @@ class MediaResumeListenerTest : SysuiTestCase() { whenever(mockContext.contentResolver).thenReturn(context.contentResolver) whenever(mockContext.userId).thenReturn(context.userId) whenever(mockContext.resources).thenReturn(context.resources) - whenever(mediaFlags.isRemoteResumeAllowed()).thenReturn(false) executor = FakeExecutor(clock) resumeListener = @@ -153,7 +150,6 @@ class MediaResumeListenerTest : SysuiTestCase() { resumeBrowserFactory, dumpManager, clock, - mediaFlags, ) resumeListener.setManager(mediaDataManager) mediaDataManager.addListener(resumeListener) @@ -162,7 +158,7 @@ class MediaResumeListenerTest : SysuiTestCase() { MediaTestUtils.emptyMediaData.copy( song = TITLE, packageName = PACKAGE_NAME, - token = token + token = token, ) } @@ -171,12 +167,12 @@ class MediaResumeListenerTest : SysuiTestCase() { Settings.Global.putInt( context.contentResolver, Settings.Global.SHOW_MEDIA_ON_QUICK_SETTINGS, - originalQsSetting + originalQsSetting, ) Settings.Secure.putInt( context.contentResolver, Settings.Secure.MEDIA_CONTROLS_RESUME, - originalResumeSetting + originalResumeSetting, ) } @@ -196,7 +192,6 @@ class MediaResumeListenerTest : SysuiTestCase() { resumeBrowserFactory, dumpManager, clock, - mediaFlags, ) listener.setManager(mediaDataManager) verify(broadcastDispatcher, never()) @@ -251,32 +246,6 @@ class MediaResumeListenerTest : SysuiTestCase() { } @Test - fun testOnLoad_localCast_remoteResumeAllowed_doesCheck() { - // If local cast media is allowed to resume - whenever(mediaFlags.isRemoteResumeAllowed()).thenReturn(true) - - // When media data is loaded that has not been checked yet, and is a local cast - val dataCast = data.copy(playbackLocation = MediaData.PLAYBACK_CAST_LOCAL) - onMediaDataLoaded(KEY, null, dataCast) - - // Then we report back to the manager - verify(mediaDataManager).setResumeAction(KEY, null) - } - - @Test - fun testOnLoad_remoteCast_remoteResumeAllowed_doesCheck() { - // If local cast media is allowed to resume - whenever(mediaFlags.isRemoteResumeAllowed()).thenReturn(true) - - // When media data is loaded that has not been checked yet, and is a remote cast - val dataRcn = data.copy(playbackLocation = MediaData.PLAYBACK_CAST_REMOTE) - onMediaDataLoaded(KEY, null, dataRcn, false) - - // Then we do not take action - verify(mediaDataManager, never()).setResumeAction(any(), any()) - } - - @Test fun testOnLoad_checksForResume_hasService() { setUpMbsWithValidResolveInfo() @@ -351,7 +320,7 @@ class MediaResumeListenerTest : SysuiTestCase() { any(), any(), anyInt(), - any() + any(), ) // When we get an unlock event @@ -441,7 +410,6 @@ class MediaResumeListenerTest : SysuiTestCase() { resumeBrowserFactory, dumpManager, clock, - mediaFlags, ) resumeListener.setManager(mediaDataManager) mediaDataManager.addListener(resumeListener) @@ -475,7 +443,6 @@ class MediaResumeListenerTest : SysuiTestCase() { resumeBrowserFactory, dumpManager, clock, - mediaFlags, ) resumeListener.setManager(mediaDataManager) mediaDataManager.addListener(resumeListener) @@ -518,7 +485,6 @@ class MediaResumeListenerTest : SysuiTestCase() { resumeBrowserFactory, dumpManager, clock, - mediaFlags, ) resumeListener.setManager(mediaDataManager) mediaDataManager.addListener(resumeListener) @@ -645,7 +611,7 @@ class MediaResumeListenerTest : SysuiTestCase() { eq(token), eq(PACKAGE_NAME), eq(pendingIntent), - eq(PACKAGE_NAME) + eq(PACKAGE_NAME), ) } @@ -688,7 +654,7 @@ class MediaResumeListenerTest : SysuiTestCase() { key: String, oldKey: String?, data: MediaData, - resume: Boolean = true + resume: Boolean = true, ) { resumeListener.onMediaDataLoaded(key, oldKey, data) if (resume) { diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/MediaResumeListenerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/MediaResumeListenerKosmos.kt index 2a3e84b74369..76fb52c84a1b 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/MediaResumeListenerKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/MediaResumeListenerKosmos.kt @@ -23,7 +23,6 @@ import com.android.systemui.dump.dumpManager import com.android.systemui.kosmos.Kosmos import com.android.systemui.media.controls.domain.resume.MediaResumeListener import com.android.systemui.media.controls.domain.resume.resumeMediaBrowserFactory -import com.android.systemui.media.controls.util.mediaFlags import com.android.systemui.settings.userTracker import com.android.systemui.tuner.TunerService import com.android.systemui.util.mockito.mock @@ -41,6 +40,5 @@ val Kosmos.mediaResumeListener by mediaBrowserFactory = resumeMediaBrowserFactory, dumpManager = dumpManager, systemClock = systemClock, - mediaFlags = mediaFlags, ) } |