Merge "Add flag to allow remote sessions to be resumable" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1877b30cfe
@@ -373,6 +373,9 @@ object Flags {
|
|||||||
// TODO(b/267166152) : Tracking Bug
|
// TODO(b/267166152) : Tracking Bug
|
||||||
val MEDIA_RETAIN_RECOMMENDATIONS = unreleasedFlag(916, "media_retain_recommendations")
|
val MEDIA_RETAIN_RECOMMENDATIONS = unreleasedFlag(916, "media_retain_recommendations")
|
||||||
|
|
||||||
|
// TODO(b/270437894): Tracking Bug
|
||||||
|
val MEDIA_REMOTE_RESUME = unreleasedFlag(917, "media_remote_resume")
|
||||||
|
|
||||||
// 1000 - dock
|
// 1000 - dock
|
||||||
val SIMULATE_DOCK_THROUGH_CHARGING = releasedFlag(1000, "simulate_dock_through_charging")
|
val SIMULATE_DOCK_THROUGH_CHARGING = releasedFlag(1000, "simulate_dock_through_charging")
|
||||||
|
|
||||||
|
|||||||
@@ -1339,10 +1339,13 @@ class MediaDataManager(
|
|||||||
fun onNotificationRemoved(key: String) {
|
fun onNotificationRemoved(key: String) {
|
||||||
Assert.isMainThread()
|
Assert.isMainThread()
|
||||||
val removed = mediaEntries.remove(key) ?: return
|
val removed = mediaEntries.remove(key) ?: return
|
||||||
|
val isEligibleForResume =
|
||||||
|
removed.isLocalSession() ||
|
||||||
|
(mediaFlags.isRemoteResumeAllowed() &&
|
||||||
|
removed.playbackLocation != MediaData.PLAYBACK_CAST_REMOTE)
|
||||||
if (keyguardUpdateMonitor.isUserInLockdown(removed.userId)) {
|
if (keyguardUpdateMonitor.isUserInLockdown(removed.userId)) {
|
||||||
logger.logMediaRemoved(removed.appUid, removed.packageName, removed.instanceId)
|
logger.logMediaRemoved(removed.appUid, removed.packageName, removed.instanceId)
|
||||||
} else if (useMediaResumption && removed.resumeAction != null && removed.isLocalSession()) {
|
} else if (useMediaResumption && removed.resumeAction != null && isEligibleForResume) {
|
||||||
convertToResumePlayer(key, removed)
|
convertToResumePlayer(key, removed)
|
||||||
} else if (mediaFlags.isRetainingPlayersEnabled()) {
|
} else if (mediaFlags.isRetainingPlayersEnabled()) {
|
||||||
handlePossibleRemoval(key, removed, notificationRemoved = true)
|
handlePossibleRemoval(key, removed, notificationRemoved = true)
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import com.android.systemui.dump.DumpManager
|
|||||||
import com.android.systemui.media.controls.models.player.MediaData
|
import com.android.systemui.media.controls.models.player.MediaData
|
||||||
import com.android.systemui.media.controls.pipeline.MediaDataManager
|
import com.android.systemui.media.controls.pipeline.MediaDataManager
|
||||||
import com.android.systemui.media.controls.pipeline.RESUME_MEDIA_TIMEOUT
|
import com.android.systemui.media.controls.pipeline.RESUME_MEDIA_TIMEOUT
|
||||||
|
import com.android.systemui.media.controls.util.MediaFlags
|
||||||
import com.android.systemui.settings.UserTracker
|
import com.android.systemui.settings.UserTracker
|
||||||
import com.android.systemui.tuner.TunerService
|
import com.android.systemui.tuner.TunerService
|
||||||
import com.android.systemui.util.Utils
|
import com.android.systemui.util.Utils
|
||||||
@@ -63,7 +64,8 @@ constructor(
|
|||||||
private val tunerService: TunerService,
|
private val tunerService: TunerService,
|
||||||
private val mediaBrowserFactory: ResumeMediaBrowserFactory,
|
private val mediaBrowserFactory: ResumeMediaBrowserFactory,
|
||||||
dumpManager: DumpManager,
|
dumpManager: DumpManager,
|
||||||
private val systemClock: SystemClock
|
private val systemClock: SystemClock,
|
||||||
|
private val mediaFlags: MediaFlags,
|
||||||
) : MediaDataManager.Listener, Dumpable {
|
) : MediaDataManager.Listener, Dumpable {
|
||||||
|
|
||||||
private var useMediaResumption: Boolean = Utils.useMediaResumption(context)
|
private var useMediaResumption: Boolean = Utils.useMediaResumption(context)
|
||||||
@@ -231,7 +233,11 @@ constructor(
|
|||||||
mediaBrowser = null
|
mediaBrowser = null
|
||||||
}
|
}
|
||||||
// If we don't have a resume action, check if we haven't already
|
// If we don't have a resume action, check if we haven't already
|
||||||
if (data.resumeAction == null && !data.hasCheckedForResume && data.isLocalSession()) {
|
val isEligibleForResume =
|
||||||
|
data.isLocalSession() ||
|
||||||
|
(mediaFlags.isRemoteResumeAllowed() &&
|
||||||
|
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)
|
// TODO also check for a media button receiver intended for restarting (b/154127084)
|
||||||
Log.d(TAG, "Checking for service component for " + data.packageName)
|
Log.d(TAG, "Checking for service component for " + data.packageName)
|
||||||
val pm = context.packageManager
|
val pm = context.packageManager
|
||||||
|
|||||||
@@ -61,4 +61,7 @@ class MediaFlags @Inject constructor(private val featureFlags: FeatureFlags) {
|
|||||||
|
|
||||||
/** If true, do not automatically dismiss the recommendation card */
|
/** If true, do not automatically dismiss the recommendation card */
|
||||||
fun isPersistentSsCardEnabled() = featureFlags.isEnabled(Flags.MEDIA_RETAIN_RECOMMENDATIONS)
|
fun isPersistentSsCardEnabled() = featureFlags.isEnabled(Flags.MEDIA_RETAIN_RECOMMENDATIONS)
|
||||||
|
|
||||||
|
/** Check whether we allow remote media to generate resume controls */
|
||||||
|
fun isRemoteResumeAllowed() = featureFlags.isEnabled(Flags.MEDIA_REMOTE_RESUME)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ class MediaDataManagerTest : SysuiTestCase() {
|
|||||||
@Mock private lateinit var logger: MediaUiEventLogger
|
@Mock private lateinit var logger: MediaUiEventLogger
|
||||||
lateinit var mediaDataManager: MediaDataManager
|
lateinit var mediaDataManager: MediaDataManager
|
||||||
lateinit var mediaNotification: StatusBarNotification
|
lateinit var mediaNotification: StatusBarNotification
|
||||||
|
lateinit var remoteCastNotification: StatusBarNotification
|
||||||
@Captor lateinit var mediaDataCaptor: ArgumentCaptor<MediaData>
|
@Captor lateinit var mediaDataCaptor: ArgumentCaptor<MediaData>
|
||||||
private val clock = FakeSystemClock()
|
private val clock = FakeSystemClock()
|
||||||
@Mock private lateinit var tunerService: TunerService
|
@Mock private lateinit var tunerService: TunerService
|
||||||
@@ -207,6 +208,20 @@ class MediaDataManagerTest : SysuiTestCase() {
|
|||||||
}
|
}
|
||||||
build()
|
build()
|
||||||
}
|
}
|
||||||
|
remoteCastNotification =
|
||||||
|
SbnBuilder().run {
|
||||||
|
setPkg(SYSTEM_PACKAGE_NAME)
|
||||||
|
modifyNotification(context).also {
|
||||||
|
it.setSmallIcon(android.R.drawable.ic_media_pause)
|
||||||
|
it.setStyle(
|
||||||
|
MediaStyle().apply {
|
||||||
|
setMediaSession(session.sessionToken)
|
||||||
|
setRemotePlaybackInfo("Remote device", 0, null)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
build()
|
||||||
|
}
|
||||||
metadataBuilder =
|
metadataBuilder =
|
||||||
MediaMetadata.Builder().apply {
|
MediaMetadata.Builder().apply {
|
||||||
putString(MediaMetadata.METADATA_KEY_ARTIST, SESSION_ARTIST)
|
putString(MediaMetadata.METADATA_KEY_ARTIST, SESSION_ARTIST)
|
||||||
@@ -247,6 +262,7 @@ class MediaDataManagerTest : SysuiTestCase() {
|
|||||||
whenever(mediaFlags.isExplicitIndicatorEnabled()).thenReturn(true)
|
whenever(mediaFlags.isExplicitIndicatorEnabled()).thenReturn(true)
|
||||||
whenever(mediaFlags.isRetainingPlayersEnabled()).thenReturn(false)
|
whenever(mediaFlags.isRetainingPlayersEnabled()).thenReturn(false)
|
||||||
whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(false)
|
whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(false)
|
||||||
|
whenever(mediaFlags.isRemoteResumeAllowed()).thenReturn(false)
|
||||||
whenever(logger.getNewInstanceId()).thenReturn(instanceIdSequence.newInstanceId())
|
whenever(logger.getNewInstanceId()).thenReturn(instanceIdSequence.newInstanceId())
|
||||||
whenever(keyguardUpdateMonitor.isUserInLockdown(any())).thenReturn(false)
|
whenever(keyguardUpdateMonitor.isUserInLockdown(any())).thenReturn(false)
|
||||||
}
|
}
|
||||||
@@ -400,33 +416,8 @@ class MediaDataManagerTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testOnNotificationAdded_isRcn_markedRemote() {
|
fun testOnNotificationAdded_isRcn_markedRemote() {
|
||||||
val rcn =
|
addNotificationAndLoad(remoteCastNotification)
|
||||||
SbnBuilder().run {
|
|
||||||
setPkg(SYSTEM_PACKAGE_NAME)
|
|
||||||
modifyNotification(context).also {
|
|
||||||
it.setSmallIcon(android.R.drawable.ic_media_pause)
|
|
||||||
it.setStyle(
|
|
||||||
MediaStyle().apply {
|
|
||||||
setMediaSession(session.sessionToken)
|
|
||||||
setRemotePlaybackInfo("Remote device", 0, null)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
build()
|
|
||||||
}
|
|
||||||
|
|
||||||
mediaDataManager.onNotificationAdded(KEY, rcn)
|
|
||||||
assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
|
|
||||||
assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
|
|
||||||
verify(listener)
|
|
||||||
.onMediaDataLoaded(
|
|
||||||
eq(KEY),
|
|
||||||
eq(null),
|
|
||||||
capture(mediaDataCaptor),
|
|
||||||
eq(true),
|
|
||||||
eq(0),
|
|
||||||
eq(false)
|
|
||||||
)
|
|
||||||
assertThat(mediaDataCaptor.value!!.playbackLocation)
|
assertThat(mediaDataCaptor.value!!.playbackLocation)
|
||||||
.isEqualTo(MediaData.PLAYBACK_CAST_REMOTE)
|
.isEqualTo(MediaData.PLAYBACK_CAST_REMOTE)
|
||||||
verify(logger)
|
verify(logger)
|
||||||
@@ -709,6 +700,56 @@ class MediaDataManagerTest : SysuiTestCase() {
|
|||||||
verify(listener).onMediaDataRemoved(eq(KEY))
|
verify(listener).onMediaDataRemoved(eq(KEY))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testOnNotificationRemoved_withResumption_isRemoteAndRemoteAllowed() {
|
||||||
|
// With the flag enabled to allow remote media to resume
|
||||||
|
whenever(mediaFlags.isRemoteResumeAllowed()).thenReturn(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
|
||||||
|
whenever(mediaFlags.isRemoteResumeAllowed()).thenReturn(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))
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testOnNotificationRemoved_withResumption_tooManyPlayers() {
|
fun testOnNotificationRemoved_withResumption_tooManyPlayers() {
|
||||||
// Given the maximum number of resume controls already
|
// Given the maximum number of resume controls already
|
||||||
@@ -1654,22 +1695,7 @@ class MediaDataManagerTest : SysuiTestCase() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
// update to remote cast
|
// update to remote cast
|
||||||
val rcn =
|
mediaDataManager.onNotificationAdded(KEY, remoteCastNotification)
|
||||||
SbnBuilder().run {
|
|
||||||
setPkg(SYSTEM_PACKAGE_NAME) // System package
|
|
||||||
modifyNotification(context).also {
|
|
||||||
it.setSmallIcon(android.R.drawable.ic_media_pause)
|
|
||||||
it.setStyle(
|
|
||||||
MediaStyle().apply {
|
|
||||||
setMediaSession(session.sessionToken)
|
|
||||||
setRemotePlaybackInfo("Remote device", 0, null)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
build()
|
|
||||||
}
|
|
||||||
|
|
||||||
mediaDataManager.onNotificationAdded(KEY, rcn)
|
|
||||||
assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
|
assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
|
||||||
assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
|
assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
|
||||||
verify(logger)
|
verify(logger)
|
||||||
@@ -2038,9 +2064,14 @@ class MediaDataManagerTest : SysuiTestCase() {
|
|||||||
verify(listener).onMediaDataRemoved(eq(KEY))
|
verify(listener).onMediaDataRemoved(eq(KEY))
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Helper function to add a media notification and capture the resulting MediaData */
|
/** Helper function to add a basic media notification and capture the resulting MediaData */
|
||||||
private fun addNotificationAndLoad() {
|
private fun addNotificationAndLoad() {
|
||||||
mediaDataManager.onNotificationAdded(KEY, mediaNotification)
|
addNotificationAndLoad(mediaNotification)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Helper function to add the given notification and capture the resulting MediaData */
|
||||||
|
private fun addNotificationAndLoad(sbn: StatusBarNotification) {
|
||||||
|
mediaDataManager.onNotificationAdded(KEY, sbn)
|
||||||
assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
|
assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
|
||||||
assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
|
assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
|
||||||
verify(listener)
|
verify(listener)
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import com.android.systemui.media.controls.models.player.MediaData
|
|||||||
import com.android.systemui.media.controls.models.player.MediaDeviceData
|
import com.android.systemui.media.controls.models.player.MediaDeviceData
|
||||||
import com.android.systemui.media.controls.pipeline.MediaDataManager
|
import com.android.systemui.media.controls.pipeline.MediaDataManager
|
||||||
import com.android.systemui.media.controls.pipeline.RESUME_MEDIA_TIMEOUT
|
import com.android.systemui.media.controls.pipeline.RESUME_MEDIA_TIMEOUT
|
||||||
|
import com.android.systemui.media.controls.util.MediaFlags
|
||||||
import com.android.systemui.settings.UserTracker
|
import com.android.systemui.settings.UserTracker
|
||||||
import com.android.systemui.tuner.TunerService
|
import com.android.systemui.tuner.TunerService
|
||||||
import com.android.systemui.util.concurrency.FakeExecutor
|
import com.android.systemui.util.concurrency.FakeExecutor
|
||||||
@@ -92,6 +93,7 @@ class MediaResumeListenerTest : SysuiTestCase() {
|
|||||||
@Mock private lateinit var mockContext: Context
|
@Mock private lateinit var mockContext: Context
|
||||||
@Mock private lateinit var pendingIntent: PendingIntent
|
@Mock private lateinit var pendingIntent: PendingIntent
|
||||||
@Mock private lateinit var dumpManager: DumpManager
|
@Mock private lateinit var dumpManager: DumpManager
|
||||||
|
@Mock private lateinit var mediaFlags: MediaFlags
|
||||||
|
|
||||||
@Captor lateinit var callbackCaptor: ArgumentCaptor<ResumeMediaBrowser.Callback>
|
@Captor lateinit var callbackCaptor: ArgumentCaptor<ResumeMediaBrowser.Callback>
|
||||||
@Captor lateinit var actionCaptor: ArgumentCaptor<Runnable>
|
@Captor lateinit var actionCaptor: ArgumentCaptor<Runnable>
|
||||||
@@ -134,6 +136,7 @@ class MediaResumeListenerTest : SysuiTestCase() {
|
|||||||
whenever(mockContext.packageManager).thenReturn(context.packageManager)
|
whenever(mockContext.packageManager).thenReturn(context.packageManager)
|
||||||
whenever(mockContext.contentResolver).thenReturn(context.contentResolver)
|
whenever(mockContext.contentResolver).thenReturn(context.contentResolver)
|
||||||
whenever(mockContext.userId).thenReturn(context.userId)
|
whenever(mockContext.userId).thenReturn(context.userId)
|
||||||
|
whenever(mediaFlags.isRemoteResumeAllowed()).thenReturn(false)
|
||||||
|
|
||||||
executor = FakeExecutor(clock)
|
executor = FakeExecutor(clock)
|
||||||
resumeListener =
|
resumeListener =
|
||||||
@@ -146,7 +149,8 @@ class MediaResumeListenerTest : SysuiTestCase() {
|
|||||||
tunerService,
|
tunerService,
|
||||||
resumeBrowserFactory,
|
resumeBrowserFactory,
|
||||||
dumpManager,
|
dumpManager,
|
||||||
clock
|
clock,
|
||||||
|
mediaFlags,
|
||||||
)
|
)
|
||||||
resumeListener.setManager(mediaDataManager)
|
resumeListener.setManager(mediaDataManager)
|
||||||
mediaDataManager.addListener(resumeListener)
|
mediaDataManager.addListener(resumeListener)
|
||||||
@@ -188,7 +192,8 @@ class MediaResumeListenerTest : SysuiTestCase() {
|
|||||||
tunerService,
|
tunerService,
|
||||||
resumeBrowserFactory,
|
resumeBrowserFactory,
|
||||||
dumpManager,
|
dumpManager,
|
||||||
clock
|
clock,
|
||||||
|
mediaFlags,
|
||||||
)
|
)
|
||||||
listener.setManager(mediaDataManager)
|
listener.setManager(mediaDataManager)
|
||||||
verify(broadcastDispatcher, never())
|
verify(broadcastDispatcher, never())
|
||||||
@@ -243,6 +248,32 @@ class MediaResumeListenerTest : SysuiTestCase() {
|
|||||||
verify(mediaDataManager, never()).setResumeAction(any(), any())
|
verify(mediaDataManager, never()).setResumeAction(any(), any())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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)
|
||||||
|
resumeListener.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)
|
||||||
|
resumeListener.onMediaDataLoaded(KEY, null, dataRcn)
|
||||||
|
|
||||||
|
// Then we do not take action
|
||||||
|
verify(mediaDataManager, never()).setResumeAction(any(), any())
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testOnLoad_checksForResume_hasService() {
|
fun testOnLoad_checksForResume_hasService() {
|
||||||
setUpMbsWithValidResolveInfo()
|
setUpMbsWithValidResolveInfo()
|
||||||
@@ -389,7 +420,8 @@ class MediaResumeListenerTest : SysuiTestCase() {
|
|||||||
tunerService,
|
tunerService,
|
||||||
resumeBrowserFactory,
|
resumeBrowserFactory,
|
||||||
dumpManager,
|
dumpManager,
|
||||||
clock
|
clock,
|
||||||
|
mediaFlags,
|
||||||
)
|
)
|
||||||
resumeListener.setManager(mediaDataManager)
|
resumeListener.setManager(mediaDataManager)
|
||||||
mediaDataManager.addListener(resumeListener)
|
mediaDataManager.addListener(resumeListener)
|
||||||
@@ -421,7 +453,8 @@ class MediaResumeListenerTest : SysuiTestCase() {
|
|||||||
tunerService,
|
tunerService,
|
||||||
resumeBrowserFactory,
|
resumeBrowserFactory,
|
||||||
dumpManager,
|
dumpManager,
|
||||||
clock
|
clock,
|
||||||
|
mediaFlags,
|
||||||
)
|
)
|
||||||
resumeListener.setManager(mediaDataManager)
|
resumeListener.setManager(mediaDataManager)
|
||||||
mediaDataManager.addListener(resumeListener)
|
mediaDataManager.addListener(resumeListener)
|
||||||
@@ -463,7 +496,8 @@ class MediaResumeListenerTest : SysuiTestCase() {
|
|||||||
tunerService,
|
tunerService,
|
||||||
resumeBrowserFactory,
|
resumeBrowserFactory,
|
||||||
dumpManager,
|
dumpManager,
|
||||||
clock
|
clock,
|
||||||
|
mediaFlags,
|
||||||
)
|
)
|
||||||
resumeListener.setManager(mediaDataManager)
|
resumeListener.setManager(mediaDataManager)
|
||||||
mediaDataManager.addListener(resumeListener)
|
mediaDataManager.addListener(resumeListener)
|
||||||
|
|||||||
Reference in New Issue
Block a user