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

Commit 81cffe8b authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Android (Google) Code Review
Browse files

Merge changes I165ad54c,If71fae0a into main

* changes:
  [SB][Chip] Add UI events for chip tap.
  [SB][Chips] Add UI events for chip show and chip hide.
parents 03ee1803 e584e114
Loading
Loading
Loading
Loading
+24 −18
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.FlagsParameterization
import android.view.View
import androidx.test.filters.SmallTest
import com.android.internal.logging.InstanceId
import com.android.systemui.SysuiTestCase
import com.android.systemui.activity.data.repository.activityManagerRepository
import com.android.systemui.activity.data.repository.fake
@@ -44,8 +45,6 @@ import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.chips.ui.view.ChipBackgroundContainer
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentBuilder
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel
import com.android.systemui.statusbar.phone.ongoingcall.DisableChipsModernization
import com.android.systemui.statusbar.phone.ongoingcall.EnableChipsModernization
import com.android.systemui.statusbar.phone.ongoingcall.StatusBarChipsModernization
@@ -99,39 +98,57 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
        }

    @Test
    fun chip_inCall_zeroStartTime_isShownAsIconOnly() =
    fun chip_inCall_hasKeyWithPrefix() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            addOngoingCallState(startTimeMs = 0, isAppVisible = false)

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).key)
                .startsWith(CallChipViewModel.KEY_PREFIX)
        }

    @Test
    fun chip_inCall_zeroStartTime_isShownAsIconOnly_withData() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            val instanceId = InstanceId.fakeInstanceId(10)
            addOngoingCallState(startTimeMs = 0, isAppVisible = false, instanceId = instanceId)

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isFalse()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isEqualTo(instanceId)
        }

    @Test
    fun chip_inCall_negativeStartTime_isShownAsIconOnly() =
    fun chip_inCall_negativeStartTime_isShownAsIconOnly_withData() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            addOngoingCallState(startTimeMs = -2, isAppVisible = false)
            val instanceId = InstanceId.fakeInstanceId(10)
            addOngoingCallState(startTimeMs = -2, isAppVisible = false, instanceId = instanceId)

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isFalse()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isEqualTo(instanceId)
        }

    @Test
    fun chip_inCall_positiveStartTime_isShownAsTimer() =
    fun chip_inCall_positiveStartTime_isShownAsTimer_withData() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            addOngoingCallState(startTimeMs = 345, isAppVisible = false)
            val instanceId = InstanceId.fakeInstanceId(10)
            addOngoingCallState(startTimeMs = 345, isAppVisible = false, instanceId = instanceId)

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isFalse()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isEqualTo(instanceId)
        }

    @Test
@@ -799,17 +816,6 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
                mock<StatusBarIconView>()
            }

        private val PROMOTED_CONTENT_WITH_COLOR =
            PromotedNotificationContentBuilder("notif")
                .applyToShared {
                    this.colors =
                        PromotedNotificationContentModel.Colors(
                            backgroundColor = PROMOTED_BACKGROUND_COLOR,
                            primaryTextColor = PROMOTED_PRIMARY_TEXT_COLOR,
                        )
                }
                .build()

        private const val NOTIFICATION_KEY = "testKey"
        private const val NOTIFICATION_UID = 12345
        private const val PROMOTED_BACKGROUND_COLOR = 65
+10 −0
Original line number Diff line number Diff line
@@ -136,6 +136,8 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isTrue()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isNotNull()

            val icon =
                (((latest as OngoingActivityChipModel.Active).icon)
                        as OngoingActivityChipModel.ChipIcon.SingleColorIcon)
@@ -159,6 +161,8 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isTrue()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isNotNull()

            val icon =
                (((latest as OngoingActivityChipModel.Active).icon)
                        as OngoingActivityChipModel.ChipIcon.SingleColorIcon)
@@ -180,6 +184,8 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isTrue()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isNotNull()

            val icon =
                (((latest as OngoingActivityChipModel.Active).icon)
                        as OngoingActivityChipModel.ChipIcon.SingleColorIcon)
@@ -219,6 +225,8 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isTrue()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isNotNull()

            val icon =
                (((latest as OngoingActivityChipModel.Active).icon)
                        as OngoingActivityChipModel.ChipIcon.SingleColorIcon)
@@ -250,6 +258,8 @@ class CastToOtherDeviceChipViewModelTest : SysuiTestCase() {
            // Only the projection info will show a timer
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isTrue()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isNotNull()

            val icon =
                (((latest as OngoingActivityChipModel.Active).icon)
                        as OngoingActivityChipModel.ChipIcon.SingleColorIcon)
+9 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.logging.InstanceId
import com.android.systemui.SysuiTestCase
import com.android.systemui.activity.data.repository.activityManagerRepository
import com.android.systemui.activity.data.repository.fake
@@ -49,12 +50,14 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
    fun notificationChip_startsWithStartingModel() =
        kosmos.runTest {
            val icon = mock<StatusBarIconView>()
            val instanceId = InstanceId.fakeInstanceId(4)
            val startingNotif =
                activeNotificationModel(
                    key = "notif1",
                    appName = "Fake Name",
                    statusBarChipIcon = icon,
                    promotedContent = PROMOTED_CONTENT,
                    instanceId = instanceId,
                )

            val underTest = factory.create(startingNotif, creationTime = 1)
@@ -65,12 +68,14 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
            assertThat(latest!!.appName).isEqualTo("Fake Name")
            assertThat(latest!!.statusBarChipIconView).isEqualTo(icon)
            assertThat(latest!!.promotedContent).isEqualTo(PROMOTED_CONTENT)
            assertThat(latest!!.instanceId).isEqualTo(instanceId)
        }

    @Test
    fun notificationChip_updatesAfterSet() =
        kosmos.runTest {
            val originalIconView = mock<StatusBarIconView>()
            val originalInstanceId = InstanceId.fakeInstanceId(4)
            val underTest =
                factory.create(
                    activeNotificationModel(
@@ -78,6 +83,7 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
                        appName = "Fake Name",
                        statusBarChipIcon = originalIconView,
                        promotedContent = PROMOTED_CONTENT,
                        instanceId = originalInstanceId,
                    ),
                    creationTime = 1,
                )
@@ -85,18 +91,21 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
            val latest by collectLastValue(underTest.notificationChip)

            val newIconView = mock<StatusBarIconView>()
            val newInstanceId = InstanceId.fakeInstanceId(4)
            underTest.setNotification(
                activeNotificationModel(
                    key = "notif1",
                    appName = "New Name",
                    statusBarChipIcon = newIconView,
                    promotedContent = PROMOTED_CONTENT,
                    instanceId = newInstanceId,
                )
            )

            assertThat(latest!!.key).isEqualTo("notif1")
            assertThat(latest!!.appName).isEqualTo("New Name")
            assertThat(latest!!.statusBarChipIconView).isEqualTo(newIconView)
            assertThat(latest!!.instanceId).isEqualTo(newInstanceId)
        }

    @Test
+63 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.platform.test.annotations.EnableFlags
import android.view.View
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.logging.InstanceId
import com.android.systemui.Flags.FLAG_PROMOTE_NOTIFICATIONS_AUTOMATICALLY
import com.android.systemui.SysuiTestCase
import com.android.systemui.activity.data.repository.activityManagerRepository
@@ -394,6 +395,33 @@ class NotifChipsViewModelTest : SysuiTestCase() {
                .isEqualTo("Arrived")
        }

    @Test
    @DisableFlags(FLAG_PROMOTE_NOTIFICATIONS_AUTOMATICALLY)
    fun chips_shortCriticalText_usesInstanceId() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chips)

            val promotedContentBuilder =
                PromotedNotificationContentBuilder("notif").applyToShared {
                    this.shortCriticalText = "Arrived"
                }
            val instanceId = InstanceId.fakeInstanceId(30)
            setNotifs(
                listOf(
                    activeNotificationModel(
                        key = "notif",
                        statusBarChipIcon = createStatusBarIconViewOrNull(),
                        promotedContent = promotedContentBuilder.build(),
                        instanceId = instanceId,
                    )
                )
            )

            assertThat(latest).hasSize(1)
            assertThat(latest!![0]).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat(latest!![0].instanceId).isEqualTo(instanceId)
        }

    @Test
    @DisableFlags(FLAG_PROMOTE_NOTIFICATIONS_AUTOMATICALLY)
    fun chips_noTime_isIconOnly() =
@@ -772,6 +800,41 @@ class NotifChipsViewModelTest : SysuiTestCase() {
                .isTrue()
        }

    @Test
    @DisableFlags(FLAG_PROMOTE_NOTIFICATIONS_AUTOMATICALLY)
    fun chips_countDownTime_usesInstanceId() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chips)

            val instanceId = InstanceId.fakeInstanceId(20)
            val currentTime = 30.minutes.inWholeMilliseconds
            fakeSystemClock.setCurrentTimeMillis(currentTime)

            val currentElapsed =
                currentTime + fakeSystemClock.elapsedRealtime() -
                    fakeSystemClock.currentTimeMillis()
            val whenElapsed = currentElapsed + 10.minutes.inWholeMilliseconds
            val promotedContentBuilder =
                PromotedNotificationContentBuilder("notif").applyToShared {
                    this.time =
                        When.Chronometer(elapsedRealtimeMillis = whenElapsed, isCountDown = true)
                }
            setNotifs(
                listOf(
                    activeNotificationModel(
                        key = "notif",
                        statusBarChipIcon = createStatusBarIconViewOrNull(),
                        promotedContent = promotedContentBuilder.build(),
                        instanceId = instanceId,
                    )
                )
            )

            assertThat(latest).hasSize(1)
            assertThat(latest!![0]).isInstanceOf(OngoingActivityChipModel.Active::class.java)
            assertThat((latest!![0]).instanceId).isEqualTo(instanceId)
        }

    @Test
    @DisableFlags(FLAG_PROMOTE_NOTIFICATIONS_AUTOMATICALLY)
    fun chips_noHeadsUp_showsTime() =
+2 −0
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ class ScreenRecordChipViewModelTest : SysuiTestCase() {

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Countdown::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isTrue()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isNotNull()
            assertThat((latest as OngoingActivityChipModel.Active).icon).isNull()
            assertThat((latest as OngoingActivityChipModel.Active).onClickListenerLegacy).isNull()
        }
@@ -158,6 +159,7 @@ class ScreenRecordChipViewModelTest : SysuiTestCase() {

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isTrue()
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isNotNull()
            val icon =
                (((latest as OngoingActivityChipModel.Active).icon)
                        as OngoingActivityChipModel.ChipIcon.SingleColorIcon)
Loading