Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d80aab6f authored by Beth Thibodeau's avatar Beth Thibodeau
Browse files

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
Merged-In: I4db207ee41a8dcaea5cd2ef079433b657ffc566e
(cherry picked from commit 19628a15)
parent 8a7ab0e9
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -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()) {
@@ -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)
        }
        }


+42 −0
Original line number Original line Diff line number Diff line
@@ -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.