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

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

Merge "[SB][Call] Only show call chip if we have promoted content for it." into main

parents 754da569 a048d00c
Loading
Loading
Loading
Loading
+236 −9
Original line number Diff line number Diff line
@@ -45,10 +45,12 @@ 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.PromotedNotificationUi
import com.android.systemui.statusbar.phone.ongoingcall.DisableChipsModernization
import com.android.systemui.statusbar.phone.ongoingcall.EnableChipsModernization
import com.android.systemui.statusbar.phone.ongoingcall.StatusBarChipsModernization
import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.addOngoingCallState
import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.callPromotedContentBuilder
import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.removeOngoingCallState
import com.android.systemui.testKosmos
import com.android.systemui.util.time.fakeSystemClock
@@ -102,20 +104,27 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            addOngoingCallState(startTimeMs = 0, isAppVisible = false)
            addOngoingCallState(startTimeMs = 0, isAppVisible = false, key = NOTIFICATION_KEY)

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

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

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

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
@@ -123,6 +132,63 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isEqualTo(instanceId)
        }

    @Test
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_inCall_zeroStartTime_promotedFlagOff_noPromotedContent_isShownAsIconOnly_withData() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

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

            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
    @EnableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_inCall_zeroStartTime_promotedFlagOn_hasPromotedContent_isShownAsIconOnly_withData() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

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

            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
    @EnableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_inCall_zeroStartTime_promotedFlagOn_noPromotedContent_isInactive() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

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

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java)
        }

    @Test
    fun chip_inCall_negativeStartTime_isShownAsIconOnly_withData() =
        kosmos.runTest {
@@ -138,12 +204,18 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
        }

    @Test
    fun chip_inCall_positiveStartTime_isShownAsTimer_withData() =
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_inCall_positiveStartTime_promotedFlagOff_hasPromotedContent_isShownAsTimer_withData() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

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

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse()
@@ -151,6 +223,118 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            assertThat((latest as OngoingActivityChipModel.Active).instanceId).isEqualTo(instanceId)
        }

    @Test
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_inCall_positiveStartTime_promotedFlagOff_noPromotedContent_isShownAsTimer_withData() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

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

            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
    @EnableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_inCall_positiveStartTime_promotedFlagOn_hasPromotedContent_isShownAsTimer_withData() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

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

            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
    @EnableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_inCall_positiveStartTime_promotedFlagOn_noPromotedContent_isInactive() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

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

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java)
        }

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

            val instanceIdOld = InstanceId.fakeInstanceId(3)
            addOngoingCallState(
                key = "earlierNotif",
                startTimeMs = 3_000,
                instanceId = instanceIdOld,
                promotedContent = callPromotedContentBuilder("earlierNotif").build(),
            )
            val instanceIdNew = InstanceId.fakeInstanceId(6)
            addOngoingCallState(
                key = "laterNotif",
                startTimeMs = 6_000,
                instanceId = instanceIdNew,
                promotedContent = callPromotedContentBuilder("laterNotif").build(),
            )

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).key).contains("earlierNotif")
            assertThat((latest as OngoingActivityChipModel.Active).instanceId)
                .isEqualTo(instanceIdOld)
        }

    @Test
    @EnableChipsModernization
    @EnableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_twoCallNotifs_earlierHasNoPromotedContent_laterIsUsed() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            val instanceIdOld = InstanceId.fakeInstanceId(3)
            addOngoingCallState(
                key = "earlierNotif",
                startTimeMs = 3_000,
                instanceId = instanceIdOld,
                promotedContent = null,
            )
            val instanceIdNew = InstanceId.fakeInstanceId(6)
            addOngoingCallState(
                key = "laterNotif",
                startTimeMs = 6_000,
                instanceId = instanceIdNew,
                promotedContent = callPromotedContentBuilder("laterNotif").build(),
            )

            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java)
            assertThat((latest as OngoingActivityChipModel.Active).key).contains("laterNotif")
            assertThat((latest as OngoingActivityChipModel.Active).instanceId)
                .isEqualTo(instanceIdNew)
        }

    @Test
    @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME)
    fun chipLegacy_inCallWithVisibleApp_zeroStartTime_isHiddenAsInactive() =
@@ -364,7 +548,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            addOngoingCallState(startTimeMs = 1000, promotedContent = null)
            addOngoingCallState(startTimeMs = 1000)

            assertThat((latest as OngoingActivityChipModel.Active).colors)
                .isEqualTo(ColorsModel.AccentThemed)
@@ -375,12 +559,56 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            addOngoingCallState(startTimeMs = 0, promotedContent = null)
            addOngoingCallState(startTimeMs = 0)

            assertThat((latest as OngoingActivityChipModel.Active).colors)
                .isEqualTo(ColorsModel.AccentThemed)
        }

    @Test
    @DisableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_promotedFlagOff_promotedContentChanges_isIgnored() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            // WHEN there's promoted content
            addOngoingCallState(promotedContent = callPromotedContentBuilder().build())
            // THEN the chip is active
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)

            // WHEN the promoted content is removed
            addOngoingCallState(promotedContent = null)
            // THEN the chip stays active
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)

            // WHEN there's promoted content again
            addOngoingCallState(promotedContent = callPromotedContentBuilder().build())
            // THEN the chip is still active
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
        }

    @Test
    @EnableFlags(PromotedNotificationUi.FLAG_NAME)
    fun chip_promotedFlagOn_promotedContentChanges_modelUpdates() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.chip)

            // WHEN there's promoted content
            addOngoingCallState(promotedContent = callPromotedContentBuilder().build())
            // THEN the chip is active
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)

            // WHEN the promoted content is removed
            addOngoingCallState(promotedContent = null)
            // THEN the chip is inactive
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java)

            // WHEN there's promoted content again
            addOngoingCallState(promotedContent = callPromotedContentBuilder().build())
            // THEN the chip is active again
            assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java)
        }

    @Test
    fun chip_resetsCorrectly() =
        kosmos.runTest {
@@ -886,8 +1114,6 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {

        private const val NOTIFICATION_KEY = "testKey"
        private const val NOTIFICATION_UID = 12345
        private const val PROMOTED_BACKGROUND_COLOR = 65
        private const val PROMOTED_PRIMARY_TEXT_COLOR = 98

        @get:Parameters(name = "{0}")
        @JvmStatic
@@ -898,6 +1124,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
                        StatusBarRootModernization.FLAG_NAME,
                        StatusBarChipsModernization.FLAG_NAME,
                        StatusBarChipsReturnAnimations.FLAG_NAME,
                        PromotedNotificationUi.FLAG_NAME,
                    )
                )
            }
+1 −1
Original line number Diff line number Diff line
@@ -302,7 +302,7 @@ class ColorizedFgsCoordinatorTest : SysuiTestCase() {
    fun comparatorPutsCallBeforeOther() =
        kosmos.runTest {
            // GIVEN a call and a promoted ongoing notification
            val callEntry = buildOngoingCallEntry(promoted = false)
            val callEntry = buildOngoingCallEntry(promoted = true)
            val ronEntry = buildPromotedOngoingEntry()
            val otherEntry = buildNotificationEntry(tag = "other")

+227 −3

File changed.

Preview size limit exceeded, changes collapsed.

+5 −7
Original line number Diff line number Diff line
@@ -70,9 +70,9 @@ class PromotedNotificationsInteractorTest : SysuiTestCase() {
    }

    @Test
    fun orderedChipNotificationKeys_containsNonPromotedCalls() =
    fun orderedChipNotificationKeys_doesNotContainNonPromotedCalls() =
        kosmos.runTest {
            // GIVEN a call and a promoted ongoing notification
            // GIVEN a non-promoted call and a promoted ongoing notification
            val callEntry = buildOngoingCallEntry(promoted = false)
            val ronEntry = buildPromotedOngoingEntry()
            val otherEntry = buildNotificationEntry(tag = "other")
@@ -84,16 +84,14 @@ class PromotedNotificationsInteractorTest : SysuiTestCase() {
            val orderedChipNotificationKeys by
                collectLastValue(underTest.orderedChipNotificationKeys)

            // THEN the order of the notification keys should be the call then the RON
            assertThat(orderedChipNotificationKeys)
                .containsExactly("0|test_pkg|0|call|0", "0|test_pkg|0|ron|0")
                .inOrder()
            // THEN the call shouldn't be in the list
            assertThat(orderedChipNotificationKeys).containsExactly("0|test_pkg|0|ron|0")
        }

    @Test
    fun orderedChipNotificationKeys_containsPromotedCalls() =
        kosmos.runTest {
            // GIVEN a call and a promoted ongoing notification
            // GIVEN a promoted call and a promoted ongoing notification
            val callEntry = buildOngoingCallEntry(promoted = true)
            val ronEntry = buildPromotedOngoingEntry()
            val otherEntry = buildNotificationEntry(tag = "other")
+2 −1
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.systemui.statusbar.notification.data.model.activeNotification
import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationsStore
import com.android.systemui.statusbar.notification.data.repository.activeNotificationListRepository
import com.android.systemui.statusbar.notification.domain.interactor.activeNotificationsInteractor
import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUi
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentBuilder
import com.android.systemui.statusbar.notification.shared.ActiveNotificationModel
import com.android.systemui.statusbar.notification.shared.CallType
@@ -68,7 +69,7 @@ import org.mockito.kotlin.whenever
@SmallTest
@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
@DisableFlags(StatusBarChipsModernization.FLAG_NAME)
@DisableFlags(StatusBarChipsModernization.FLAG_NAME, PromotedNotificationUi.FLAG_NAME)
class OngoingCallControllerTest : SysuiTestCase() {
    private val kosmos = testKosmos()

Loading