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

Commit a49a320e authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Disable player's "Dismiss" button when notification is not dismissible.

Bug: 169271494
Test: manual
Change-Id: I3c2a73e4885642965ec553387b5e91f0cb16ff2f
Merged-In: I3c2a73e4885642965ec553387b5e91f0cb16ff2f
parent 734c3749
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2820,6 +2820,8 @@
    <string name="controls_media_title">Media</string>
    <!-- Explanation for closing controls associated with a specific media session [CHAR_LIMIT=NONE] -->
    <string name="controls_media_close_session">Hide the current session.</string>
    <!-- Explanation that controls associated with a specific media session are active [CHAR_LIMIT=NONE] -->
    <string name="controls_media_active_session">Current session cannot be hidden.</string>
    <!-- Label for a button that will hide media controls [CHAR_LIMIT=30] -->
    <string name="controls_media_dismiss_button">Dismiss</string>
    <!-- Label for button to resume media playback [CHAR_LIMIT=NONE] -->
+8 −0
Original line number Diff line number Diff line
@@ -359,7 +359,15 @@ public class MediaControlPanel {
        final MediaController controller = getController();
        mBackgroundExecutor.execute(() -> mSeekBarViewModel.updateController(controller));

        // Guts label
        boolean isDismissible = data.isClearable();
        mViewHolder.getSettingsText().setText(isDismissible
                ? R.string.controls_media_close_session
                : R.string.controls_media_active_session);

        // Dismiss
        mViewHolder.getDismissLabel().setAlpha(isDismissible ? 1 : DISABLED_ALPHA);
        mViewHolder.getDismiss().setEnabled(isDismissible);
        mViewHolder.getDismiss().setOnClickListener(v -> {
            if (mKey != null) {
                closeGuts();
+3 −1
Original line number Diff line number Diff line
@@ -60,8 +60,10 @@ class PlayerViewHolder private constructor(itemView: View) {
    val action4 = itemView.requireViewById<ImageButton>(R.id.action4)

    // Settings screen
    val settingsText = itemView.requireViewById<TextView>(R.id.remove_text)
    val cancel = itemView.requireViewById<View>(R.id.cancel)
    val dismiss = itemView.requireViewById<View>(R.id.dismiss)
    val dismiss = itemView.requireViewById<ViewGroup>(R.id.dismiss)
    val dismissLabel = dismiss.getChildAt(0)
    val settings = itemView.requireViewById<View>(R.id.settings)

    init {
+21 −2
Original line number Diff line number Diff line
@@ -109,9 +109,11 @@ public class MediaControlPanelTest : SysuiTestCase() {
    private lateinit var action2: ImageButton
    private lateinit var action3: ImageButton
    private lateinit var action4: ImageButton
    private lateinit var settingsText: TextView
    private lateinit var settings: View
    private lateinit var cancel: View
    private lateinit var dismiss: View
    private lateinit var dismiss: FrameLayout
    private lateinit var dismissLabel: View

    private lateinit var session: MediaSession
    private val device = MediaDeviceData(true, null, DEVICE_NAME)
@@ -168,12 +170,16 @@ public class MediaControlPanelTest : SysuiTestCase() {
        whenever(holder.action3).thenReturn(action3)
        action4 = ImageButton(context)
        whenever(holder.action4).thenReturn(action4)
        settingsText = TextView(context)
        whenever(holder.settingsText).thenReturn(settingsText)
        settings = View(context)
        whenever(holder.settings).thenReturn(settings)
        cancel = View(context)
        whenever(holder.cancel).thenReturn(cancel)
        dismiss = View(context)
        dismiss = FrameLayout(context)
        whenever(holder.dismiss).thenReturn(dismiss)
        dismissLabel = View(context)
        whenever(holder.dismissLabel).thenReturn(dismissLabel)

        // Create media session
        val metadataBuilder = MediaMetadata.Builder().apply {
@@ -327,6 +333,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
                notificationKey = KEY)
        player.bind(state, mediaKey)

        assertThat(dismiss.isEnabled).isEqualTo(true)
        dismiss.callOnClick()
        val captor = ArgumentCaptor.forClass(ActivityStarter.OnDismissAction::class.java)
        verify(keyguardDismissUtil).executeWhenUnlocked(captor.capture(), anyBoolean())
@@ -334,4 +341,16 @@ public class MediaControlPanelTest : SysuiTestCase() {
        captor.value.onDismiss()
        verify(mediaDataManager).dismissMediaData(eq(mediaKey), anyLong())
    }

    @Test
    fun dismissButtonDisabled() {
        val mediaKey = "key for dismissal"
        player.attach(holder)
        val state = MediaData(USER_ID, true, BG_COLOR, APP, null, ARTIST, TITLE, null, emptyList(),
                emptyList(), PACKAGE, session.getSessionToken(), null, null, true, null,
                isClearable = false, notificationKey = KEY)
        player.bind(state, mediaKey)

        assertThat(dismiss.isEnabled).isEqualTo(false)
    }
}