Loading packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt +3 −3 Original line number Original line Diff line number Diff line Loading @@ -786,10 +786,10 @@ class MediaDataManager( // Song name // Song name var song: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE) var song: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE) if (song == null) { if (song.isNullOrBlank()) { song = metadata?.getString(MediaMetadata.METADATA_KEY_TITLE) song = metadata?.getString(MediaMetadata.METADATA_KEY_TITLE) } } if (song == null) { if (song.isNullOrBlank()) { song = HybridGroupManager.resolveTitle(notif) song = HybridGroupManager.resolveTitle(notif) } } if (song.isNullOrBlank()) { if (song.isNullOrBlank()) { Loading Loading @@ -846,7 +846,7 @@ class MediaDataManager( // Artist name // Artist name var artist: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_ARTIST) var artist: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_ARTIST) if (artist == null) { if (artist.isNullOrBlank()) { artist = HybridGroupManager.resolveText(notif) artist = HybridGroupManager.resolveText(notif) } } Loading packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt +42 −0 Original line number Original line Diff line number Diff line Loading @@ -715,6 +715,48 @@ class MediaDataManagerTest : SysuiTestCase() { assertThat(mediaDataCaptor.value.song).isEqualTo(placeholderTitle) assertThat(mediaDataCaptor.value.song).isEqualTo(placeholderTitle) } } @Test fun testOnNotificationAdded_emptyMetadata_usesNotificationTitle() { // When the app sets the metadata title fields to empty strings, but does include a // non-blank notification title val mockPackageManager = mock(PackageManager::class.java) context.setMockPackageManager(mockPackageManager) whenever(mockPackageManager.getApplicationLabel(any())).thenReturn(APP_NAME) whenever(mediaFlags.isMediaTitleRequired(any(), any())).thenReturn(true) whenever(controller.metadata) .thenReturn( metadataBuilder .putString(MediaMetadata.METADATA_KEY_TITLE, SESSION_EMPTY_TITLE) .putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, SESSION_EMPTY_TITLE) .build() ) mediaNotification = SbnBuilder().run { setPkg(PACKAGE_NAME) modifyNotification(context).also { it.setSmallIcon(android.R.drawable.ic_media_pause) it.setContentTitle(SESSION_TITLE) it.setStyle(MediaStyle().apply { setMediaSession(session.sessionToken) }) } build() } mediaDataManager.onNotificationAdded(KEY, mediaNotification) // Then the media control is added using the notification's title assertThat(backgroundExecutor.runAllReady()).isEqualTo(1) assertThat(foregroundExecutor.runAllReady()).isEqualTo(1) verify(listener) .onMediaDataLoaded( eq(KEY), eq(null), capture(mediaDataCaptor), eq(true), eq(0), eq(false) ) assertThat(mediaDataCaptor.value.song).isEqualTo(SESSION_TITLE) } @Test @Test fun testOnNotificationRemoved_emptyTitle_notConverted() { fun testOnNotificationRemoved_emptyTitle_notConverted() { // GIVEN that the manager has a notification with a resume action and empty title. // GIVEN that the manager has a notification with a resume action and empty title. Loading Loading
packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt +3 −3 Original line number Original line Diff line number Diff line Loading @@ -786,10 +786,10 @@ class MediaDataManager( // Song name // Song name var song: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE) var song: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE) if (song == null) { if (song.isNullOrBlank()) { song = metadata?.getString(MediaMetadata.METADATA_KEY_TITLE) song = metadata?.getString(MediaMetadata.METADATA_KEY_TITLE) } } if (song == null) { if (song.isNullOrBlank()) { song = HybridGroupManager.resolveTitle(notif) song = HybridGroupManager.resolveTitle(notif) } } if (song.isNullOrBlank()) { if (song.isNullOrBlank()) { Loading Loading @@ -846,7 +846,7 @@ class MediaDataManager( // Artist name // Artist name var artist: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_ARTIST) var artist: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_ARTIST) if (artist == null) { if (artist.isNullOrBlank()) { artist = HybridGroupManager.resolveText(notif) artist = HybridGroupManager.resolveText(notif) } } Loading
packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt +42 −0 Original line number Original line Diff line number Diff line Loading @@ -715,6 +715,48 @@ class MediaDataManagerTest : SysuiTestCase() { assertThat(mediaDataCaptor.value.song).isEqualTo(placeholderTitle) assertThat(mediaDataCaptor.value.song).isEqualTo(placeholderTitle) } } @Test fun testOnNotificationAdded_emptyMetadata_usesNotificationTitle() { // When the app sets the metadata title fields to empty strings, but does include a // non-blank notification title val mockPackageManager = mock(PackageManager::class.java) context.setMockPackageManager(mockPackageManager) whenever(mockPackageManager.getApplicationLabel(any())).thenReturn(APP_NAME) whenever(mediaFlags.isMediaTitleRequired(any(), any())).thenReturn(true) whenever(controller.metadata) .thenReturn( metadataBuilder .putString(MediaMetadata.METADATA_KEY_TITLE, SESSION_EMPTY_TITLE) .putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, SESSION_EMPTY_TITLE) .build() ) mediaNotification = SbnBuilder().run { setPkg(PACKAGE_NAME) modifyNotification(context).also { it.setSmallIcon(android.R.drawable.ic_media_pause) it.setContentTitle(SESSION_TITLE) it.setStyle(MediaStyle().apply { setMediaSession(session.sessionToken) }) } build() } mediaDataManager.onNotificationAdded(KEY, mediaNotification) // Then the media control is added using the notification's title assertThat(backgroundExecutor.runAllReady()).isEqualTo(1) assertThat(foregroundExecutor.runAllReady()).isEqualTo(1) verify(listener) .onMediaDataLoaded( eq(KEY), eq(null), capture(mediaDataCaptor), eq(true), eq(0), eq(false) ) assertThat(mediaDataCaptor.value.song).isEqualTo(SESSION_TITLE) } @Test @Test fun testOnNotificationRemoved_emptyTitle_notConverted() { fun testOnNotificationRemoved_emptyTitle_notConverted() { // GIVEN that the manager has a notification with a resume action and empty title. // GIVEN that the manager has a notification with a resume action and empty title. Loading