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

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

Check ongoing flag for media control dismissal

To match NotificationEntry#isDismissible, use the ongoing flag instead
to determine whether or not the control can be cleared. This enables
media controls with only the NO_CLEAR flag to be dismissed manually,
which matches notification behavior.

Bug: 264179692
Test: atest MediaDataManagerTest
Change-Id: I869cae5c53115fe6131071b23b21339696721972
parent 6195a5c2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -848,7 +848,7 @@ class MediaDataManager(
                    notificationKey = key,
                    hasCheckedForResume = hasCheckedForResume,
                    isPlaying = isPlaying,
                    isClearable = sbn.isClearable(),
                    isClearable = !sbn.isOngoing,
                    lastActive = lastActive,
                    instanceId = instanceId,
                    appUid = appUid
+34 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.media.controls.pipeline

import android.app.Notification
import android.app.Notification.FLAG_NO_CLEAR
import android.app.Notification.MediaStyle
import android.app.PendingIntent
import android.app.smartspace.SmartspaceAction
@@ -1349,6 +1350,39 @@ class MediaDataManagerTest : SysuiTestCase() {
        assertThat(mediaDataCaptor.value.semanticActions).isNull()
    }

    @Test
    fun testNoClearNotOngoing_canDismiss() {
        mediaNotification =
            SbnBuilder().run {
                setPkg(PACKAGE_NAME)
                modifyNotification(context).also {
                    it.setSmallIcon(android.R.drawable.ic_media_pause)
                    it.setStyle(MediaStyle().apply { setMediaSession(session.sessionToken) })
                    it.setOngoing(false)
                    it.setFlag(FLAG_NO_CLEAR, true)
                }
                build()
            }
        addNotificationAndLoad()
        assertThat(mediaDataCaptor.value.isClearable).isTrue()
    }

    @Test
    fun testOngoing_cannotDismiss() {
        mediaNotification =
            SbnBuilder().run {
                setPkg(PACKAGE_NAME)
                modifyNotification(context).also {
                    it.setSmallIcon(android.R.drawable.ic_media_pause)
                    it.setStyle(MediaStyle().apply { setMediaSession(session.sessionToken) })
                    it.setOngoing(true)
                }
                build()
            }
        addNotificationAndLoad()
        assertThat(mediaDataCaptor.value.isClearable).isFalse()
    }

    /** Helper function to add a media notification and capture the resulting MediaData */
    private fun addNotificationAndLoad() {
        mediaDataManager.onNotificationAdded(KEY, mediaNotification)