diff options
| author | 2024-09-17 10:50:56 +0000 | |
|---|---|---|
| committer | 2024-09-17 10:50:56 +0000 | |
| commit | 45e22250b694e8acc81e8e23d6db577d738a7ea6 (patch) | |
| tree | 355c08c3d8374da188fabac6252ffa5bfd5b28c2 | |
| parent | a571aa74c1130278b6e136115468f31dc464c133 (diff) | |
| parent | 46a06145333dcc5b26c228ef5767aaded8639d6d (diff) | |
Merge "Fix cancellation of MediaDataLoader jobs" into main
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), ) } } |