Fall back to notification for for blank metadata
In case the app has set a blank string in the session metadata, we should continue checking the other fields and notification for a non-blank one. Bug: 274775190 Test: atest MediaDataManagerTest Change-Id: I4db207ee41a8dcaea5cd2ef079433b657ffc566e
This commit is contained in:
@@ -786,10 +786,10 @@ class MediaDataManager(
|
||||
|
||||
// Song name
|
||||
var song: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE)
|
||||
if (song == null) {
|
||||
if (song.isNullOrBlank()) {
|
||||
song = metadata?.getString(MediaMetadata.METADATA_KEY_TITLE)
|
||||
}
|
||||
if (song == null) {
|
||||
if (song.isNullOrBlank()) {
|
||||
song = HybridGroupManager.resolveTitle(notif)
|
||||
}
|
||||
if (song.isNullOrBlank()) {
|
||||
@@ -846,7 +846,7 @@ class MediaDataManager(
|
||||
|
||||
// Artist name
|
||||
var artist: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_ARTIST)
|
||||
if (artist == null) {
|
||||
if (artist.isNullOrBlank()) {
|
||||
artist = HybridGroupManager.resolveText(notif)
|
||||
}
|
||||
|
||||
|
||||
@@ -715,6 +715,48 @@ class MediaDataManagerTest : SysuiTestCase() {
|
||||
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
|
||||
fun testOnNotificationRemoved_emptyTitle_notConverted() {
|
||||
// GIVEN that the manager has a notification with a resume action and empty title.
|
||||
|
||||
Reference in New Issue
Block a user