summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jernej Virag <jernej@google.com> 2024-09-17 10:50:56 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-09-17 10:50:56 +0000
commit45e22250b694e8acc81e8e23d6db577d738a7ea6 (patch)
tree355c08c3d8374da188fabac6252ffa5bfd5b28c2
parenta571aa74c1130278b6e136115468f31dc464c133 (diff)
parent46a06145333dcc5b26c228ef5767aaded8639d6d (diff)
Merge "Fix cancellation of MediaDataLoader jobs" into main
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoaderTest.kt52
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoader.kt61
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImplTest.kt159
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessorTest.kt156
4 files changed, 237 insertions, 191 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoaderTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoaderTest.kt
index 69ccc58cadbf..7da2e9a8a283 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoaderTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoaderTest.kt
@@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.Flags.MEDIA_RESUME_PROGRESS
import com.android.systemui.flags.fakeFeatureFlagsClassic
+import com.android.systemui.graphics.ImageLoader
import com.android.systemui.graphics.imageLoader
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
@@ -45,12 +46,18 @@ import com.android.systemui.res.R
import com.android.systemui.statusbar.SbnBuilder
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
import org.mockito.kotlin.any
import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
private const val KEY = "KEY"
@@ -88,12 +95,13 @@ class MediaDataLoaderTest : SysuiTestCase() {
mediaControllerFactory,
mediaFlags,
kosmos.imageLoader,
- statusBarManager
+ statusBarManager,
)
@Before
fun setUp() {
mediaControllerFactory.setControllerForToken(session.sessionToken, mediaController)
+ whenever(mediaController.metadata).then { metadataBuilder.build() }
}
@Test
@@ -115,7 +123,7 @@ class MediaDataLoaderTest : SysuiTestCase() {
0,
0,
AudioAttributes.Builder().build(),
- null
+ null,
)
)
whenever(mediaController.metadata)
@@ -126,7 +134,7 @@ class MediaDataLoaderTest : SysuiTestCase() {
.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, albumArt)
.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
- MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT
+ MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT,
)
.build()
)
@@ -161,12 +169,12 @@ class MediaDataLoaderTest : SysuiTestCase() {
val extras = Bundle()
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
- MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED
+ MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED,
)
extras.putDouble(MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.3)
extras.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
- MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT
+ MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT,
)
val description =
@@ -189,7 +197,7 @@ class MediaDataLoaderTest : SysuiTestCase() {
session.sessionToken,
APP_NAME,
intent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
assertThat(result).isNotNull()
assertThat(result?.appName).isEqualTo(APP_NAME)
@@ -372,9 +380,37 @@ class MediaDataLoaderTest : SysuiTestCase() {
assertThat(result).isNotNull()
}
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun testLoadMediaDataInBg_cancelMultipleScheduledTasks() =
+ testScope.runTest {
+ val mockImageLoader = mock<ImageLoader>()
+ val mediaDataLoader =
+ MediaDataLoader(
+ context,
+ testDispatcher,
+ testScope,
+ mediaControllerFactory,
+ mediaFlags,
+ mockImageLoader,
+ statusBarManager,
+ )
+ metadataBuilder.putString(
+ MediaMetadata.METADATA_KEY_ALBUM_ART_URI,
+ "content://album_art_uri",
+ )
+
+ testScope.launch { mediaDataLoader.loadMediaData(KEY, createMediaNotification()) }
+ testScope.launch { mediaDataLoader.loadMediaData(KEY, createMediaNotification()) }
+ testScope.launch { mediaDataLoader.loadMediaData(KEY, createMediaNotification()) }
+ testScope.advanceUntilIdle()
+
+ verify(mockImageLoader, times(1)).loadBitmap(any(), anyInt(), anyInt(), anyInt())
+ }
+
private fun createMediaNotification(
mediaSession: MediaSession? = session,
- applicationInfo: ApplicationInfo? = null
+ applicationInfo: ApplicationInfo? = null,
): StatusBarNotification =
SbnBuilder().run {
setPkg(PACKAGE_NAME)
@@ -385,7 +421,7 @@ class MediaDataLoaderTest : SysuiTestCase() {
val bundle = Bundle()
bundle.putParcelable(
Notification.EXTRA_BUILDER_APPLICATION_INFO,
- applicationInfo
+ applicationInfo,
)
it.addExtras(bundle)
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoader.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoader.kt
index 53cc15b8c588..7b55dac8eee1 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoader.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataLoader.kt
@@ -42,7 +42,6 @@ import android.service.notification.StatusBarNotification
import android.support.v4.media.MediaMetadataCompat
import android.text.TextUtils
import android.util.Log
-import android.util.Pair
import androidx.media.utils.MediaConstants
import com.android.app.tracing.coroutines.traceCoroutine
import com.android.systemui.dagger.SysUISingleton
@@ -70,6 +69,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.cancel
+import kotlinx.coroutines.delay
import kotlinx.coroutines.ensureActive
/** Loads media information from media style [StatusBarNotification] classes. */
@@ -85,7 +85,7 @@ constructor(
private val imageLoader: ImageLoader,
private val statusBarManager: StatusBarManager,
) {
- private val mediaProcessingJobs = ConcurrentHashMap<JobKey, Job>()
+ private val mediaProcessingJobs = ConcurrentHashMap<String, Job>()
private val artworkWidth: Int =
context.resources.getDimensionPixelSize(
@@ -97,7 +97,7 @@ constructor(
private val themeText =
com.android.settingslib.Utils.getColorAttr(
context,
- com.android.internal.R.attr.textColorPrimary
+ com.android.internal.R.attr.textColorPrimary,
)
.defaultColor
@@ -112,11 +112,14 @@ constructor(
* load will be cancelled.
*/
suspend fun loadMediaData(key: String, sbn: StatusBarNotification): MediaDataLoaderResult? {
- logD(TAG) { "Loading media data for $key..." }
- val jobKey = JobKey(key, sbn)
val loadMediaJob = backgroundScope.async { loadMediaDataInBackground(key, sbn) }
- loadMediaJob.invokeOnCompletion { mediaProcessingJobs.remove(jobKey) }
- val existingJob = mediaProcessingJobs.put(jobKey, loadMediaJob)
+ loadMediaJob.invokeOnCompletion {
+ // We need to make sure we're removing THIS job after cancellation, not
+ // a job that we created later.
+ mediaProcessingJobs.remove(key, loadMediaJob)
+ }
+ val existingJob = mediaProcessingJobs.put(key, loadMediaJob)
+ logD(TAG) { "Loading media data for $key... / existing job: $existingJob" }
existingJob?.cancel("New processing job incoming.")
return loadMediaJob.await()
}
@@ -128,10 +131,15 @@ constructor(
sbn: StatusBarNotification,
): MediaDataLoaderResult? =
traceCoroutine("MediaDataLoader#loadMediaData") {
+ // We have apps spamming us with quick notification updates which can cause
+ // us to spend significant CPU time loading duplicate data. This debounces
+ // those requests at the cost of a bit of latency.
+ delay(DEBOUNCE_DELAY_MS)
+
val token =
sbn.notification.extras.getParcelable(
Notification.EXTRA_MEDIA_SESSION,
- MediaSession.Token::class.java
+ MediaSession.Token::class.java,
)
if (token == null) {
Log.i(TAG, "Token was null, not loading media info")
@@ -144,7 +152,7 @@ constructor(
val appInfo =
notification.extras.getParcelable(
Notification.EXTRA_BUILDER_APPLICATION_INFO,
- ApplicationInfo::class.java
+ ApplicationInfo::class.java,
) ?: getAppInfoFromPackage(sbn.packageName)
// App name
@@ -240,7 +248,7 @@ constructor(
playbackLocation = playbackLocation,
isPlaying = isPlaying,
appUid = appUid,
- isExplicit = isExplicit
+ isExplicit = isExplicit,
)
}
@@ -258,7 +266,7 @@ constructor(
token: MediaSession.Token,
appName: String,
appIntent: PendingIntent,
- packageName: String
+ packageName: String,
): MediaDataLoaderResult? {
val mediaData =
backgroundScope.async {
@@ -270,7 +278,7 @@ constructor(
token,
appName,
appIntent,
- packageName
+ packageName,
)
}
return mediaData.await()
@@ -286,7 +294,7 @@ constructor(
token: MediaSession.Token,
appName: String,
appIntent: PendingIntent,
- packageName: String
+ packageName: String,
): MediaDataLoaderResult? =
traceCoroutine("MediaDataLoader#loadMediaDataForResumption") {
if (desc.title.isNullOrBlank()) {
@@ -338,14 +346,14 @@ constructor(
appUid = appUid,
isExplicit = isExplicit,
resumeAction = resumeAction,
- resumeProgress = progress
+ resumeProgress = progress,
)
}
private fun createActionsFromState(
packageName: String,
controller: MediaController,
- user: UserHandle
+ user: UserHandle,
): MediaButton? {
if (!mediaFlags.areMediaSessionActionsEnabled(packageName, user)) {
return null
@@ -368,7 +376,7 @@ constructor(
*/
private fun getDeviceInfoForRemoteCast(
key: String,
- sbn: StatusBarNotification
+ sbn: StatusBarNotification,
): MediaDeviceData? {
val extras = sbn.notification.extras
val deviceName = extras.getCharSequence(Notification.EXTRA_MEDIA_REMOTE_DEVICE, null)
@@ -388,7 +396,7 @@ constructor(
deviceDrawable,
deviceName,
deviceIntent,
- showBroadcastButton = false
+ showBroadcastButton = false,
)
}
return null
@@ -439,7 +447,7 @@ constructor(
listOf(
ContentResolver.SCHEME_CONTENT,
ContentResolver.SCHEME_ANDROID_RESOURCE,
- ContentResolver.SCHEME_FILE
+ ContentResolver.SCHEME_FILE,
)
) {
Log.w(TAG, "Invalid album art uri $uri")
@@ -451,7 +459,7 @@ constructor(
source,
artworkWidth,
artworkHeight,
- allocator = ImageDecoder.ALLOCATOR_SOFTWARE
+ allocator = ImageDecoder.ALLOCATOR_SOFTWARE,
)
}
@@ -459,7 +467,7 @@ constructor(
uri: Uri,
userId: Int,
appUid: Int,
- packageName: String
+ packageName: String,
): Bitmap? {
try {
val ugm = UriGrantsManager.getService()
@@ -468,7 +476,7 @@ constructor(
packageName,
ContentProvider.getUriWithoutUserId(uri),
Intent.FLAG_GRANT_READ_URI_PERMISSION,
- ContentProvider.getUserIdFromUri(uri, userId)
+ ContentProvider.getUserIdFromUri(uri, userId),
)
return loadBitmapFromUri(uri)
} catch (e: SecurityException) {
@@ -488,21 +496,20 @@ constructor(
.loadDrawable(context),
action,
context.getString(R.string.controls_media_resume),
- context.getDrawable(R.drawable.ic_media_play_container)
+ context.getDrawable(R.drawable.ic_media_play_container),
)
}
- private data class JobKey(val key: String, val sbn: StatusBarNotification) :
- Pair<String, StatusBarNotification>(key, sbn)
-
companion object {
private const val TAG = "MediaDataLoader"
private val ART_URIS =
arrayOf(
MediaMetadata.METADATA_KEY_ALBUM_ART_URI,
MediaMetadata.METADATA_KEY_ART_URI,
- MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI
+ MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI,
)
+
+ private const val DEBOUNCE_DELAY_MS = 200L
}
/** Returned data from loader. */
@@ -523,6 +530,6 @@ constructor(
val appUid: Int,
val isExplicit: Boolean,
val resumeAction: Runnable? = null,
- val resumeProgress: Double? = null
+ val resumeProgress: Double? = null,
)
}
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 823a23dec4ea..d32d8cc4bd51 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
@@ -82,6 +82,7 @@ import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.After
@@ -200,7 +201,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
Settings.Secure.getInt(
context.contentResolver,
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION,
- 1
+ 1,
)
private lateinit var staticMockSession: MockitoSession
@@ -221,9 +222,8 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
Settings.Secure.putInt(
context.contentResolver,
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION,
- 1
+ 1,
)
-
mediaDataManager =
LegacyMediaDataManagerImpl(
context = context,
@@ -334,7 +334,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
Settings.Secure.putInt(
context.contentResolver,
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION,
- originalSmartspaceSetting
+ originalSmartspaceSetting,
)
}
@@ -365,7 +365,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
session.sessionToken,
APP_NAME,
pendingIntent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
runCurrent()
@@ -378,7 +378,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
mediaDataManager.setInactive(PACKAGE_NAME, timedOut = true)
@@ -404,7 +404,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
metadataBuilder
.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
- MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT
+ MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT,
)
.build()
)
@@ -420,7 +420,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.isExplicit).isTrue()
}
@@ -438,7 +438,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.isExplicit).isFalse()
}
@@ -451,7 +451,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
anyInt(),
eq(PACKAGE_NAME),
eq(mediaDataCaptor.value.instanceId),
- eq(MediaData.PLAYBACK_LOCAL)
+ eq(MediaData.PLAYBACK_LOCAL),
)
}
@@ -467,7 +467,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.active).isTrue()
}
@@ -483,7 +483,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
anyInt(),
eq(SYSTEM_PACKAGE_NAME),
eq(mediaDataCaptor.value.instanceId),
- eq(MediaData.PLAYBACK_CAST_REMOTE)
+ eq(MediaData.PLAYBACK_CAST_REMOTE),
)
}
@@ -511,7 +511,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.app).isEqualTo(subName)
@@ -597,7 +597,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
val placeholderTitle = context.getString(R.string.controls_media_empty_title, APP_NAME)
assertThat(mediaDataCaptor.value.song).isEqualTo(placeholderTitle)
@@ -627,7 +627,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
val placeholderTitle = context.getString(R.string.controls_media_empty_title, APP_NAME)
assertThat(mediaDataCaptor.value.song).isEqualTo(placeholderTitle)
@@ -668,7 +668,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.song).isEqualTo(SESSION_TITLE)
}
@@ -683,7 +683,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
mediaDataManager.onMediaDataLoaded(
KEY,
null,
- data.copy(song = SESSION_EMPTY_TITLE, resumeAction = Runnable {})
+ data.copy(song = SESSION_EMPTY_TITLE, resumeAction = Runnable {}),
)
// WHEN the notification is removed
@@ -698,7 +698,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
verify(logger, never())
.logActiveConvertedToResume(anyInt(), eq(PACKAGE_NAME), eq(instanceId))
@@ -716,7 +716,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
mediaDataManager.onMediaDataLoaded(
KEY,
null,
- data.copy(song = SESSION_BLANK_TITLE, resumeAction = Runnable {})
+ data.copy(song = SESSION_BLANK_TITLE, resumeAction = Runnable {}),
)
// WHEN the notification is removed
@@ -731,7 +731,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
verify(logger, never())
.logActiveConvertedToResume(anyInt(), eq(PACKAGE_NAME), eq(instanceId))
@@ -756,7 +756,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
@@ -777,7 +777,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
val data = mediaDataCaptor.value
assertThat(data.resumption).isFalse()
@@ -789,7 +789,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
val data2 = mediaDataCaptor.value
assertThat(data2.resumption).isFalse()
@@ -807,7 +807,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
verify(listener, never()).onMediaDataRemoved(eq(KEY), eq(false))
@@ -821,7 +821,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
verify(listener).onMediaDataRemoved(eq(KEY_2), eq(false))
@@ -842,7 +842,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
anyInt(),
eq(PACKAGE_NAME),
eq(mediaDataCaptor.value.instanceId),
- eq(MediaData.PLAYBACK_CAST_LOCAL)
+ eq(MediaData.PLAYBACK_CAST_LOCAL),
)
// WHEN the notification is removed
@@ -878,7 +878,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
}
@@ -932,7 +932,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
@@ -982,7 +982,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
// WHEN resumption controls are added with explicit indicator
bundle.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
- MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT
+ MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT,
)
val desc =
MediaDescription.Builder().run {
@@ -1015,7 +1015,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
Bundle().apply {
putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
- MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED
+ MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED,
)
putDouble(MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, progress)
}
@@ -1041,7 +1041,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
Bundle().apply {
putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
- MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED
+ MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED,
)
}
val desc =
@@ -1066,7 +1066,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
Bundle().apply {
putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
- MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED
+ MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED,
)
}
val desc =
@@ -1118,7 +1118,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
session.sessionToken,
APP_NAME,
pendingIntent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
// Resumption controls are not added.
@@ -1130,7 +1130,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -1151,7 +1151,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
session.sessionToken,
APP_NAME,
pendingIntent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
// Resumption controls are not added.
@@ -1163,7 +1163,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -1230,7 +1230,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -1256,7 +1256,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1280,7 +1280,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1312,7 +1312,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1359,7 +1359,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1393,7 +1393,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1424,7 +1424,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
verify(listener, never()).onSmartspaceMediaDataRemoved(eq(KEY_MEDIA_SMARTSPACE), eq(false))
}
@@ -1456,7 +1456,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1466,7 +1466,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
Settings.Secure.putInt(
context.contentResolver,
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION,
- 0
+ 0,
)
tunableCaptor.value.onTuningChanged(Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION, "0")
@@ -1488,7 +1488,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
Settings.Secure.putInt(
context.contentResolver,
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION,
- 0
+ 0,
)
tunableCaptor.value.onTuningChanged(Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION, "0")
@@ -1526,7 +1526,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.lastActive).isAtLeast(currentTime)
}
@@ -1553,7 +1553,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.lastActive).isAtLeast(currentTime)
@@ -1573,7 +1573,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
mediaDataManager.onMediaDataLoaded(
KEY,
null,
- data.copy(resumeAction = Runnable {}, active = false)
+ data.copy(resumeAction = Runnable {}, active = false),
)
// WHEN the notification is removed
@@ -1589,7 +1589,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.lastActive).isLessThan(currentTime)
@@ -1629,7 +1629,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.actionsToShowInCompact.size)
.isEqualTo(LegacyMediaDataManagerImpl.MAX_COMPACT_ACTIONS)
@@ -1664,7 +1664,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.actions.size)
.isEqualTo(LegacyMediaDataManagerImpl.MAX_NOTIFICATION_ACTIONS)
@@ -1695,7 +1695,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.semanticActions).isNull()
@@ -1868,7 +1868,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
anyInt(),
eq(PACKAGE_NAME),
eq(instanceId),
- eq(MediaData.PLAYBACK_CAST_LOCAL)
+ eq(MediaData.PLAYBACK_CAST_LOCAL),
)
// update to remote cast
@@ -1879,7 +1879,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
anyInt(),
eq(SYSTEM_PACKAGE_NAME),
eq(instanceId),
- eq(MediaData.PLAYBACK_CAST_REMOTE)
+ eq(MediaData.PLAYBACK_CAST_REMOTE),
)
}
@@ -1900,7 +1900,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.isPlaying).isTrue()
}
@@ -1948,7 +1948,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
assertThat(mediaDataCaptor.value.semanticActions).isNotNull()
@@ -1977,7 +1977,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
session.sessionToken,
APP_NAME,
pendingIntent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
runCurrent()
backgroundExecutor.runAllReady()
@@ -1992,7 +1992,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
assertThat(mediaDataCaptor.value.semanticActions).isNotNull()
@@ -2017,7 +2017,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
assertThat(mediaDataCaptor.value.semanticActions).isNull()
@@ -2074,7 +2074,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2082,7 +2082,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2141,7 +2141,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2149,7 +2149,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2193,7 +2193,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2201,7 +2201,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2245,7 +2245,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2253,7 +2253,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2279,7 +2279,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -2321,7 +2321,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2329,7 +2329,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2355,7 +2355,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
any(),
any(),
anyInt(),
- anyInt()
+ anyInt(),
)
)
.thenReturn(1)
@@ -2385,7 +2385,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
any(),
any(),
anyInt(),
- anyInt()
+ anyInt(),
)
)
.thenThrow(SecurityException("Test no permission"))
@@ -2421,7 +2421,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
verify(kosmos.mediaLogger).logDuplicateMediaNotification(eq(KEY))
}
@@ -2440,7 +2440,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
verify(kosmos.mediaLogger, never()).logDuplicateMediaNotification(eq(KEY))
}
@@ -2448,6 +2448,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
private fun TestScope.assertRunAllReady(foreground: Int = 0, background: Int = 0) {
runCurrent()
if (Flags.mediaLoadMetadataViaMediaDataLoader()) {
+ advanceUntilIdle()
// It doesn't make much sense to count tasks when we use coroutines in loader
// so this check is skipped in that scenario.
backgroundExecutor.runAllReady()
@@ -2478,7 +2479,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -2493,7 +2494,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
/** Helper function to add a resumption control and capture the resulting MediaData */
private fun addResumeControlAndLoad(
desc: MediaDescription,
- packageName: String = PACKAGE_NAME
+ packageName: String = PACKAGE_NAME,
) {
mediaDataManager.addResumptionControls(
USER_ID,
@@ -2502,7 +2503,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
session.sessionToken,
APP_NAME,
pendingIntent,
- packageName
+ packageName,
)
testScope.assertRunAllReady(foreground = 1, background = 1)
@@ -2514,7 +2515,7 @@ class LegacyMediaDataManagerImplTest(flags: FlagsParameterization) : SysuiTestCa
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
}
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 4cf7de3d7a63..90af93292de1 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
@@ -90,6 +90,7 @@ import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.runCurrent
import org.junit.After
import org.junit.Before
@@ -212,7 +213,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
Settings.Secure.getInt(
context.contentResolver,
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION,
- 1
+ 1,
)
private lateinit var staticMockSession: MockitoSession
@@ -233,7 +234,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
Settings.Secure.putInt(
context.contentResolver,
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION,
- 1
+ 1,
)
mediaDataProcessor =
MediaDataProcessor(
@@ -274,7 +275,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
mediaDataCombineLatest = mediaDataCombineLatest,
mediaDataFilter = mediaDataFilter,
mediaFilterRepository = mediaFilterRepository,
- mediaFlags = kosmos.mediaFlags
+ mediaFlags = kosmos.mediaFlags,
)
mediaCarouselInteractor.start()
verify(mediaTimeoutListener).stateCallback = capture(stateCallbackCaptor)
@@ -356,7 +357,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
Settings.Secure.putInt(
context.contentResolver,
Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION,
- originalSmartspaceSetting
+ originalSmartspaceSetting,
)
}
@@ -386,7 +387,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
session.sessionToken,
APP_NAME,
pendingIntent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
testScope.runCurrent()
@@ -399,7 +400,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
mediaDataProcessor.setInactive(PACKAGE_NAME, timedOut = true)
@@ -425,7 +426,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
metadataBuilder
.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
- MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT
+ MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT,
)
.build()
)
@@ -440,7 +441,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.isExplicit).isTrue()
}
@@ -457,7 +458,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.isExplicit).isFalse()
}
@@ -470,7 +471,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
anyInt(),
eq(PACKAGE_NAME),
eq(mediaDataCaptor.value.instanceId),
- eq(MediaData.PLAYBACK_LOCAL)
+ eq(MediaData.PLAYBACK_LOCAL),
)
}
@@ -485,7 +486,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.active).isTrue()
}
@@ -501,7 +502,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
anyInt(),
eq(SYSTEM_PACKAGE_NAME),
eq(mediaDataCaptor.value.instanceId),
- eq(MediaData.PLAYBACK_CAST_REMOTE)
+ eq(MediaData.PLAYBACK_CAST_REMOTE),
)
}
@@ -529,7 +530,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.app).isEqualTo(subName)
@@ -615,7 +616,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
val placeholderTitle = context.getString(R.string.controls_media_empty_title, APP_NAME)
assertThat(mediaDataCaptor.value.song).isEqualTo(placeholderTitle)
@@ -645,7 +646,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
val placeholderTitle = context.getString(R.string.controls_media_empty_title, APP_NAME)
assertThat(mediaDataCaptor.value.song).isEqualTo(placeholderTitle)
@@ -686,7 +687,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.song).isEqualTo(SESSION_TITLE)
}
@@ -701,7 +702,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
mediaDataProcessor.onMediaDataLoaded(
KEY,
null,
- data.copy(song = SESSION_EMPTY_TITLE, resumeAction = Runnable {})
+ data.copy(song = SESSION_EMPTY_TITLE, resumeAction = Runnable {}),
)
// WHEN the notification is removed
@@ -716,7 +717,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
verify(logger, never())
.logActiveConvertedToResume(anyInt(), eq(PACKAGE_NAME), eq(instanceId))
@@ -734,7 +735,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
mediaDataProcessor.onMediaDataLoaded(
KEY,
null,
- data.copy(song = SESSION_BLANK_TITLE, resumeAction = Runnable {})
+ data.copy(song = SESSION_BLANK_TITLE, resumeAction = Runnable {}),
)
// WHEN the notification is removed
@@ -749,7 +750,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
verify(logger, never())
.logActiveConvertedToResume(anyInt(), eq(PACKAGE_NAME), eq(instanceId))
@@ -774,7 +775,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
@@ -795,7 +796,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
val data = mediaDataCaptor.value
assertThat(data.resumption).isFalse()
@@ -807,7 +808,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
val data2 = mediaDataCaptor.value
assertThat(data2.resumption).isFalse()
@@ -825,7 +826,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
verify(listener, never()).onMediaDataRemoved(eq(KEY), anyBoolean())
@@ -839,7 +840,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
verify(listener).onMediaDataRemoved(eq(KEY_2), eq(false))
@@ -860,7 +861,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
anyInt(),
eq(PACKAGE_NAME),
eq(mediaDataCaptor.value.instanceId),
- eq(MediaData.PLAYBACK_CAST_LOCAL)
+ eq(MediaData.PLAYBACK_CAST_LOCAL),
)
// WHEN the notification is removed
@@ -896,7 +897,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
}
@@ -950,7 +951,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
@@ -1000,7 +1001,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
// WHEN resumption controls are added with explicit indicator
bundle.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
- MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT
+ MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT,
)
val desc =
MediaDescription.Builder().run {
@@ -1033,7 +1034,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
Bundle().apply {
putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
- MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED
+ MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED,
)
putDouble(MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, progress)
}
@@ -1059,7 +1060,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
Bundle().apply {
putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
- MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED
+ MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED,
)
}
val desc =
@@ -1084,7 +1085,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
Bundle().apply {
putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
- MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED
+ MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED,
)
}
val desc =
@@ -1136,7 +1137,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
session.sessionToken,
APP_NAME,
pendingIntent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
// Resumption controls are not added.
@@ -1148,7 +1149,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -1169,7 +1170,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
session.sessionToken,
APP_NAME,
pendingIntent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
// Resumption controls are not added.
@@ -1181,7 +1182,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -1248,7 +1249,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -1274,7 +1275,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1298,7 +1299,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1330,7 +1331,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1377,7 +1378,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1411,7 +1412,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1442,7 +1443,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
verify(listener, never()).onSmartspaceMediaDataRemoved(eq(KEY_MEDIA_SMARTSPACE), eq(false))
}
@@ -1474,7 +1475,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
expiryTimeMs = SMARTSPACE_EXPIRY_TIME,
)
),
- eq(false)
+ eq(false),
)
}
@@ -1536,7 +1537,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.lastActive).isAtLeast(currentTime)
}
@@ -1563,7 +1564,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.lastActive).isAtLeast(currentTime)
@@ -1583,7 +1584,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
mediaDataProcessor.onMediaDataLoaded(
KEY,
null,
- data.copy(resumeAction = Runnable {}, active = false)
+ data.copy(resumeAction = Runnable {}, active = false),
)
// WHEN the notification is removed
@@ -1599,7 +1600,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.lastActive).isLessThan(currentTime)
@@ -1639,7 +1640,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.actionsToShowInCompact.size)
.isEqualTo(MediaDataProcessor.MAX_COMPACT_ACTIONS)
@@ -1674,7 +1675,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.actions.size)
.isEqualTo(MediaDataProcessor.MAX_NOTIFICATION_ACTIONS)
@@ -1705,7 +1706,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value!!.semanticActions).isNull()
@@ -1944,7 +1945,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
anyInt(),
eq(PACKAGE_NAME),
eq(instanceId),
- eq(MediaData.PLAYBACK_CAST_LOCAL)
+ eq(MediaData.PLAYBACK_CAST_LOCAL),
)
// update to remote cast
@@ -1955,7 +1956,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
anyInt(),
eq(SYSTEM_PACKAGE_NAME),
eq(instanceId),
- eq(MediaData.PLAYBACK_CAST_REMOTE)
+ eq(MediaData.PLAYBACK_CAST_REMOTE),
)
}
@@ -1976,7 +1977,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.isPlaying).isTrue()
}
@@ -2024,7 +2025,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
assertThat(mediaDataCaptor.value.semanticActions).isNotNull()
@@ -2052,7 +2053,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
session.sessionToken,
APP_NAME,
pendingIntent,
- PACKAGE_NAME
+ PACKAGE_NAME,
)
testScope.runCurrent()
backgroundExecutor.runAllReady()
@@ -2067,7 +2068,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
assertThat(mediaDataCaptor.value.semanticActions).isNotNull()
@@ -2092,7 +2093,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.isPlaying).isFalse()
assertThat(mediaDataCaptor.value.semanticActions).isNull()
@@ -2149,7 +2150,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2157,7 +2158,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2216,7 +2217,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2224,7 +2225,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2268,7 +2269,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2276,7 +2277,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2320,7 +2321,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2328,7 +2329,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2354,7 +2355,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -2396,7 +2397,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
assertThat(mediaDataCaptor.value.resumption).isTrue()
assertThat(mediaDataCaptor.value.active).isFalse()
@@ -2404,7 +2405,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
.logActiveConvertedToResume(
anyInt(),
eq(PACKAGE_NAME),
- eq(mediaDataCaptor.value.instanceId)
+ eq(mediaDataCaptor.value.instanceId),
)
}
@@ -2430,7 +2431,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
any(),
any(),
anyInt(),
- anyInt()
+ anyInt(),
)
)
.thenReturn(1)
@@ -2460,7 +2461,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
any(),
any(),
anyInt(),
- anyInt()
+ anyInt(),
)
)
.thenThrow(SecurityException("Test no permission"))
@@ -2501,7 +2502,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
verify(kosmos.mediaLogger).logDuplicateMediaNotification(eq(KEY))
}
@@ -2525,7 +2526,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
verify(kosmos.mediaLogger, never()).logDuplicateMediaNotification(eq(KEY))
}
@@ -2533,6 +2534,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
private fun TestScope.assertRunAllReady(foreground: Int = 0, background: Int = 0) {
runCurrent()
if (Flags.mediaLoadMetadataViaMediaDataLoader()) {
+ advanceUntilIdle()
// It doesn't make much sense to count tasks when we use coroutines in loader
// so this check is skipped in that scenario.
backgroundExecutor.runAllReady()
@@ -2563,7 +2565,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
@@ -2578,7 +2580,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
/** Helper function to add a resumption control and capture the resulting MediaData */
private fun addResumeControlAndLoad(
desc: MediaDescription,
- packageName: String = PACKAGE_NAME
+ packageName: String = PACKAGE_NAME,
) {
mediaDataProcessor.addResumptionControls(
USER_ID,
@@ -2587,7 +2589,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
session.sessionToken,
APP_NAME,
pendingIntent,
- packageName
+ packageName,
)
testScope.assertRunAllReady(foreground = 1, background = 1)
@@ -2598,7 +2600,7 @@ class MediaDataProcessorTest(flags: FlagsParameterization) : SysuiTestCase() {
capture(mediaDataCaptor),
eq(true),
eq(0),
- eq(false)
+ eq(false),
)
}
}