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

Commit 1aa94f07 authored by Alison Cichowlas's avatar Alison Cichowlas
Browse files

Add Dismiss button to Notification Guts.

Bug: 383967964
Test: NotificationInfoTest
Flag: EXEMPT bugfix
Change-Id: I8f5814588fdfc313b1361360df018581822cb371
parent 22067462
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -80,6 +80,9 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.testKosmos
import com.android.systemui.util.kotlin.JavaAdapter
import com.android.systemui.wmshell.BubblesManager
import java.util.Optional
import kotlin.test.assertNotNull
import kotlin.test.fail
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals
@@ -107,9 +110,6 @@ import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters
import java.util.Optional
import kotlin.test.assertNotNull
import kotlin.test.fail

/** Tests for [NotificationGutsManager]. */
@SmallTest
@@ -509,6 +509,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
            .setImportance(NotificationManager.IMPORTANCE_HIGH)
            .build()

        whenever(row.canViewBeDismissed()).thenReturn(true)
        whenever(highPriorityProvider.isHighPriority(entry)).thenReturn(true)
        val statusBarNotification = entry.sbn
        gutsManager.initializeNotificationInfo(row, notificationInfoView)
@@ -530,6 +531,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
                any<UiEventLogger>(),
                /* isDeviceProvisioned = */ eq(false),
                /* isNonblockable = */ eq(false),
                /* isDismissable = */ eq(true),
                /* wasShownHighPriority = */ eq(true),
                eq(assistantFeedbackController),
                eq(metricsLogger),
@@ -545,6 +547,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
        NotificationEntryHelper.modifyRanking(row.entry)
            .setUserSentiment(NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE)
            .build()
        whenever(row.canViewBeDismissed()).thenReturn(true)
        val statusBarNotification = row.entry.sbn
        val entry = row.entry

@@ -569,6 +572,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
                any<UiEventLogger>(),
                /* isDeviceProvisioned = */ eq(true),
                /* isNonblockable = */ eq(false),
                /* isDismissable = */ eq(true),
                /* wasShownHighPriority = */ eq(false),
                eq(assistantFeedbackController),
                eq(metricsLogger),
@@ -584,6 +588,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
        NotificationEntryHelper.modifyRanking(row.entry)
            .setUserSentiment(NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE)
            .build()
        whenever(row.canViewBeDismissed()).thenReturn(true)
        val statusBarNotification = row.entry.sbn
        val entry = row.entry

@@ -606,6 +611,7 @@ class NotificationGutsManagerTest(flags: FlagsParameterization) : SysuiTestCase(
                any<UiEventLogger>(),
                /* isDeviceProvisioned = */ eq(false),
                /* isNonblockable = */ eq(false),
                /* isDismissable = */ eq(true),
                /* wasShownHighPriority = */ eq(false),
                eq(assistantFeedbackController),
                eq(metricsLogger),
+28 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import android.view.View.GONE
import android.view.View.VISIBLE
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.logging.MetricsLogger
@@ -863,6 +864,31 @@ class NotificationInfoTest : SysuiTestCase() {
        assertThat(underTest.findViewById<View>(R.id.feedback).visibility).isEqualTo(GONE)
    }

    @Test
    @Throws(RemoteException::class)
    fun testDismissListenerBound() {
        val latch = CountDownLatch(1)
        bindNotification(onCloseClick = { _: View? -> latch.countDown() })

        val dismissView = underTest.findViewById<View>(R.id.inline_dismiss)
        assertThat(dismissView.isVisible).isTrue()
        dismissView.performClick()

        // Verify that listener was triggered.
        assertThat(latch.count).isEqualTo(0)
    }

    @Test
    @Throws(RemoteException::class)
    fun testDismissHiddenWhenUndismissable() {

        entry.sbn.notification.flags =
            entry.sbn.notification.flags or android.app.Notification.FLAG_NO_DISMISS
        bindNotification(isDismissable = false)
        val dismissView = underTest.findViewById<View>(R.id.inline_dismiss)
        assertThat(dismissView.isVisible).isFalse()
    }

    private fun bindNotification(
        pm: PackageManager = this.mockPackageManager,
        iNotificationManager: INotificationManager = this.mockINotificationManager,
@@ -880,6 +906,7 @@ class NotificationInfoTest : SysuiTestCase() {
        uiEventLogger: UiEventLogger = this.uiEventLogger,
        isDeviceProvisioned: Boolean = true,
        isNonblockable: Boolean = false,
        isDismissable: Boolean = true,
        wasShownHighPriority: Boolean = true,
        assistantFeedbackController: AssistantFeedbackController = this.assistantFeedbackController,
        metricsLogger: MetricsLogger = kosmos.metricsLogger,
@@ -901,6 +928,7 @@ class NotificationInfoTest : SysuiTestCase() {
            uiEventLogger,
            isDeviceProvisioned,
            isNonblockable,
            isDismissable,
            wasShownHighPriority,
            assistantFeedbackController,
            metricsLogger,
+1 −0
Original line number Diff line number Diff line
@@ -148,6 +148,7 @@ public class PromotedNotificationInfoTest extends SysuiTestCase {
                true,
                false,
                true,
                true,
                mAssistantFeedbackController,
                mMetricsLogger,
                null);
+31 −6
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
<!-- extends LinearLayout -->
<com.android.systemui.statusbar.notification.row.NotificationInfo
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
    android:id="@+id/notification_guts"
    android:layout_width="match_parent"
@@ -324,18 +325,34 @@
            </com.android.systemui.statusbar.notification.row.ButtonLinearLayout>

        </LinearLayout>

        <LinearLayout
        <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/bottom_buttons"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@*android:dimen/notification_2025_margin"
            android:minHeight="@dimen/notification_2025_guts_button_size"
            android:gravity="center_vertical"
            >
            android:gravity="center_vertical">

            <TextView
                android:id="@+id/inline_dismiss"
                android:text="@string/notification_inline_dismiss"
                android:paddingEnd="@dimen/notification_importance_button_padding"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingTop="8dp"
                android:paddingBottom="@*android:dimen/notification_2025_margin"
                app:layout_constraintStart_toStartOf="parent"
                android:gravity="center"
                android:minWidth="@dimen/notification_2025_min_tap_target_size"
                android:minHeight="@dimen/notification_2025_min_tap_target_size"
                android:maxWidth="200dp"
                style="@style/TextAppearance.NotificationInfo.Button"
                android:textSize="@*android:dimen/notification_2025_action_text_size"
                />
            <TextView
                android:id="@+id/turn_off_notifications"
                android:text="@string/inline_turn_off_notifications"
                android:paddingStart="@dimen/notification_importance_button_padding"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="32dp"
@@ -345,6 +362,8 @@
                android:minWidth="@dimen/notification_2025_min_tap_target_size"
                android:minHeight="@dimen/notification_2025_min_tap_target_size"
                android:maxWidth="200dp"
                app:layout_constraintStart_toEndOf="@id/inline_dismiss"
                app:layout_constraintBaseline_toBaselineOf="@id/inline_dismiss"
                style="@style/TextAppearance.NotificationInfo.Button"
                android:textSize="@*android:dimen/notification_2025_action_text_size"/>
            <TextView
@@ -354,12 +373,18 @@
                android:layout_height="wrap_content"
                android:paddingTop="8dp"
                android:paddingBottom="@*android:dimen/notification_2025_margin"
                android:gravity="center"
                android:gravity="end"
                app:layout_constraintEnd_toEndOf="parent"
                android:minWidth="@dimen/notification_2025_min_tap_target_size"
                android:minHeight="@dimen/notification_2025_min_tap_target_size"
                android:maxWidth="125dp"
                style="@style/TextAppearance.NotificationInfo.Button"
                android:textSize="@*android:dimen/notification_2025_action_text_size"/>
        </LinearLayout>
            <androidx.constraintlayout.helper.widget.Flow
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:constraint_referenced_ids="inline_dismiss,turn_off_notifications,done"
                app:flow_wrapMode="chain"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
    </LinearLayout>
</com.android.systemui.statusbar.notification.row.NotificationInfo>
+14 −1
Original line number Diff line number Diff line
@@ -340,16 +340,29 @@ asked for it -->
            android:paddingStart="4dp"
            android:paddingEnd="4dp"
            >
            <TextView
                android:id="@+id/inline_dismiss"
                android:text="@string/notification_inline_dismiss"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:gravity="start|center_vertical"
                android:minWidth="@dimen/notification_importance_toggle_size"
                android:minHeight="@dimen/notification_importance_toggle_size"
                android:maxWidth="200dp"
                android:paddingEnd="@dimen/notification_importance_button_padding"
                style="@style/TextAppearance.NotificationInfo.Button"/>
            <TextView
                android:id="@+id/turn_off_notifications"
                android:text="@string/inline_turn_off_notifications"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_toEndOf="@id/inline_dismiss"
                android:gravity="start|center_vertical"
                android:minWidth="@dimen/notification_importance_toggle_size"
                android:minHeight="@dimen/notification_importance_toggle_size"
                android:maxWidth="200dp"
                android:paddingStart="@dimen/notification_importance_button_padding"
                style="@style/TextAppearance.NotificationInfo.Button"/>
            <TextView
                android:id="@+id/done"
Loading