Loading packages/SystemUI/aconfig/systemui.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -2121,3 +2121,10 @@ flag { description: "Enables moving the launching window on top of the origin window in the Animation library." bug: "390422470" } flag { name: "status_bar_chips_return_animations" namespace: "systemui" description: "Enables return animations for status bar chips" bug: "202516970" } packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModelTest.kt +103 −6 Original line number Diff line number Diff line Loading @@ -19,8 +19,8 @@ package com.android.systemui.statusbar.chips.call.ui.viewmodel import android.app.PendingIntent import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.FlagsParameterization import android.view.View import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.animation.Expandable Loading @@ -33,13 +33,16 @@ import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.plugins.activityStarter import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView import com.android.systemui.statusbar.chips.StatusBarChipsReturnAnimations import com.android.systemui.statusbar.chips.ui.model.ColorsModel 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.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 import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.addOngoingCallState import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.removeOngoingCallState import com.android.systemui.testKosmos Loading @@ -51,10 +54,16 @@ import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters @SmallTest @RunWith(AndroidJUnit4::class) class CallChipViewModelTest : SysuiTestCase() { @RunWith(ParameterizedAndroidJunit4::class) class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { init { mSetFlagsRule.setFlagsParameterization(flags) } private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val chipBackgroundView = mock<ChipBackgroundContainer>() Loading Loading @@ -87,9 +96,10 @@ class CallChipViewModelTest : SysuiTestCase() { kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 0) addOngoingCallState(startTimeMs = 0, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse() } @Test Loading @@ -97,9 +107,10 @@ class CallChipViewModelTest : SysuiTestCase() { kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = -2) addOngoingCallState(startTimeMs = -2, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse() } @Test Loading @@ -107,9 +118,82 @@ class CallChipViewModelTest : SysuiTestCase() { kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 345) addOngoingCallState(startTimeMs = 345, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse() } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_zeroStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 0, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java) } @Test @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableChipsModernization fun chipWithReturnAnimation_inCallWithVisibleApp_zeroStartTime_isHiddenAsIconOnly() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 0, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isTrue() } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_negativeStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = -2, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java) } @Test @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableChipsModernization fun chipWithReturnAnimation_inCallWithVisibleApp_negativeStartTime_isHiddenAsIconOnly() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = -2, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isTrue() } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_positiveStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 345, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java) } @Test @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableChipsModernization fun chipWithReturnAnimation_inCallWithVisibleApp_positiveStartTime_isHiddenAsTimer() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 345, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isTrue() } @Test Loading Loading @@ -418,5 +502,18 @@ class CallChipViewModelTest : SysuiTestCase() { private const val PROMOTED_BACKGROUND_COLOR = 65 private const val PROMOTED_PRIMARY_TEXT_COLOR = 98 @get:Parameters(name = "{0}") @JvmStatic val flags: List<FlagsParameterization> get() = buildList { addAll( FlagsParameterization.allCombinationsOf( StatusBarRootModernization.FLAG_NAME, StatusBarChipsModernization.FLAG_NAME, StatusBarChipsReturnAnimations.FLAG_NAME, ) ) } } } packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsViewModelTest.kt +5 −5 Original line number Diff line number Diff line Loading @@ -137,7 +137,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState() addOngoingCallState(isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -163,7 +163,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { screenRecordState.value = ScreenRecordModel.DoingNothing mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) addOngoingCallState() addOngoingCallState(isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -178,7 +178,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { // MediaProjection covers both share-to-app and cast-to-other-device mediaProjectionState.value = MediaProjectionState.NotProjecting addOngoingCallState(key = notificationKey) addOngoingCallState(key = notificationKey, isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -190,7 +190,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { kosmos.runTest { // Start with just the lowest priority chip shown val callNotificationKey = "call" addOngoingCallState(key = callNotificationKey) addOngoingCallState(key = callNotificationKey, isAppVisible = false) // And everything else hidden mediaProjectionState.value = MediaProjectionState.NotProjecting screenRecordState.value = ScreenRecordModel.DoingNothing Loading Loading @@ -225,7 +225,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) val callNotificationKey = "call" addOngoingCallState(key = callNotificationKey) addOngoingCallState(key = callNotificationKey, isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsWithNotifsViewModelTest.kt +17 −17 Original line number Diff line number Diff line Loading @@ -236,7 +236,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun primaryChip_screenRecordShowAndCallShow_screenRecordShown() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState("call") addOngoingCallState("call", isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -249,7 +249,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { kosmos.runTest { val callNotificationKey = "call" screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) val unused by collectLastValue(underTest.chips) Loading Loading @@ -296,7 +296,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { @Test fun chipsLegacy_oneChip_notSquished() = kosmos.runTest { addOngoingCallState() addOngoingCallState(isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) Loading @@ -323,7 +323,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun chipsLegacy_twoTimerChips_isSmallPortrait_bothSquished() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) Loading Loading @@ -385,7 +385,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun chipsLegacy_countdownChipAndTimerChip_countdownNotSquished_butTimerSquished() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Starting(millisUntilStarted = 2000) addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) Loading Loading @@ -431,7 +431,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { .isInstanceOf(OngoingActivityChipModel.Inactive::class.java) // WHEN there's 2 chips addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) // THEN they both become squished assertThat(latest!!.primary) Loading Loading @@ -487,7 +487,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun chipsLegacy_twoChips_isLandscape_notSquished() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) // WHEN we're in landscape val config = Loading Loading @@ -533,7 +533,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun chipsLegacy_twoChips_isLargeScreen_notSquished() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) // WHEN we're on a large screen kosmos.displayStateRepository.setIsLargeScreen(true) Loading Loading @@ -627,7 +627,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { screenRecordState.value = ScreenRecordModel.DoingNothing mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -642,7 +642,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { screenRecordState.value = ScreenRecordModel.DoingNothing mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) val unused by collectLastValue(underTest.chips) Loading Loading @@ -681,7 +681,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { mediaProjectionState.value = MediaProjectionState.NotProjecting val callNotificationKey = "call" addOngoingCallState(key = callNotificationKey) addOngoingCallState(key = callNotificationKey, isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -697,7 +697,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { // MediaProjection covers both share-to-app and cast-to-other-device mediaProjectionState.value = MediaProjectionState.NotProjecting addOngoingCallState(key = callNotificationKey) addOngoingCallState(key = callNotificationKey, isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) val unused by collectLastValue(underTest.chips) Loading Loading @@ -975,7 +975,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { val unused by collectLastValue(underTest.chips) val callNotificationKey = "call" addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) val firstIcon = createStatusBarIconViewOrNull() activeNotificationListRepository.addNotifs( Loading Loading @@ -1053,7 +1053,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { val latest by collectLastValue(underTest.chipsLegacy) val unused by collectLastValue(underTest.chips) addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) screenRecordState.value = ScreenRecordModel.Recording activeNotificationListRepository.addNotif( activeNotificationModel( Loading Loading @@ -1160,7 +1160,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { assertIsNotifChip(latest, context, notifIcon, "notif") // WHEN the higher priority call chip is added addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) // THEN the higher priority call chip is used assertIsCallChip(latest, callNotificationKey, context) Loading Loading @@ -1191,7 +1191,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { screenRecordState.value = ScreenRecordModel.Recording mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) val notifIcon = createStatusBarIconViewOrNull() activeNotificationListRepository.addNotif( activeNotificationModel( Loading Loading @@ -1253,7 +1253,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { assertThat(unused).isEqualTo(MultipleOngoingActivityChipsModel()) // WHEN the higher priority call chip is added addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) // THEN the higher priority call chip is used as primary and notif is demoted to // secondary Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/ongoingcall/domain/interactor/OngoingCallInteractorTest.kt +6 −10 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ class OngoingCallInteractorTest : SysuiTestCase() { statusBarChipIconView = testIconView, contentIntent = testIntent, promotedContent = testPromotedContent, isAppVisible = false, ) // Verify model is InCall and has the correct icon, intent, and promoted content. Loading @@ -98,7 +99,6 @@ class OngoingCallInteractorTest : SysuiTestCase() { @Test fun ongoingCallNotification_setsAllFields_withAppVisible() = kosmos.runTest { kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = true val latest by collectLastValue(underTest.ongoingCallState) // Set up notification with icon view and intent Loading @@ -113,6 +113,7 @@ class OngoingCallInteractorTest : SysuiTestCase() { statusBarChipIconView = testIconView, contentIntent = testIntent, promotedContent = testPromotedContent, isAppVisible = true, ) // Verify model is InCall with visible app and has the correct icon, intent, and Loading Loading @@ -141,10 +142,9 @@ class OngoingCallInteractorTest : SysuiTestCase() { @Test fun ongoingCallNotification_appVisibleInitially_emitsInCallWithVisibleApp() = kosmos.runTest { kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = true val latest by collectLastValue(underTest.ongoingCallState) addOngoingCallState(uid = UID) addOngoingCallState(uid = UID, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingCallModel.InCall::class.java) assertThat((latest as OngoingCallModel.InCall).isAppVisible).isTrue() Loading @@ -153,10 +153,9 @@ class OngoingCallInteractorTest : SysuiTestCase() { @Test fun ongoingCallNotification_appNotVisibleInitially_emitsInCall() = kosmos.runTest { kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = false val latest by collectLastValue(underTest.ongoingCallState) addOngoingCallState(uid = UID) addOngoingCallState(uid = UID, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingCallModel.InCall::class.java) assertThat((latest as OngoingCallModel.InCall).isAppVisible).isFalse() Loading @@ -168,8 +167,7 @@ class OngoingCallInteractorTest : SysuiTestCase() { val latest by collectLastValue(underTest.ongoingCallState) // Start with notification and app not visible kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = false addOngoingCallState(uid = UID) addOngoingCallState(uid = UID, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingCallModel.InCall::class.java) assertThat((latest as OngoingCallModel.InCall).isAppVisible).isFalse() Loading Loading @@ -245,9 +243,7 @@ class OngoingCallInteractorTest : SysuiTestCase() { .ongoingProcessRequiresStatusBarVisible ) kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = false addOngoingCallState(uid = UID) addOngoingCallState(uid = UID, isAppVisible = false) assertThat(ongoingCallState).isInstanceOf(OngoingCallModel.InCall::class.java) assertThat((ongoingCallState as OngoingCallModel.InCall).isAppVisible).isFalse() Loading Loading
packages/SystemUI/aconfig/systemui.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -2121,3 +2121,10 @@ flag { description: "Enables moving the launching window on top of the origin window in the Animation library." bug: "390422470" } flag { name: "status_bar_chips_return_animations" namespace: "systemui" description: "Enables return animations for status bar chips" bug: "202516970" }
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModelTest.kt +103 −6 Original line number Diff line number Diff line Loading @@ -19,8 +19,8 @@ package com.android.systemui.statusbar.chips.call.ui.viewmodel import android.app.PendingIntent import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.FlagsParameterization import android.view.View import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.animation.Expandable Loading @@ -33,13 +33,16 @@ import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.plugins.activityStarter import com.android.systemui.res.R import com.android.systemui.statusbar.StatusBarIconView import com.android.systemui.statusbar.chips.StatusBarChipsReturnAnimations import com.android.systemui.statusbar.chips.ui.model.ColorsModel 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.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 import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.addOngoingCallState import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.removeOngoingCallState import com.android.systemui.testKosmos Loading @@ -51,10 +54,16 @@ import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters @SmallTest @RunWith(AndroidJUnit4::class) class CallChipViewModelTest : SysuiTestCase() { @RunWith(ParameterizedAndroidJunit4::class) class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { init { mSetFlagsRule.setFlagsParameterization(flags) } private val kosmos = testKosmos().useUnconfinedTestDispatcher() private val chipBackgroundView = mock<ChipBackgroundContainer>() Loading Loading @@ -87,9 +96,10 @@ class CallChipViewModelTest : SysuiTestCase() { kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 0) addOngoingCallState(startTimeMs = 0, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse() } @Test Loading @@ -97,9 +107,10 @@ class CallChipViewModelTest : SysuiTestCase() { kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = -2) addOngoingCallState(startTimeMs = -2, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse() } @Test Loading @@ -107,9 +118,82 @@ class CallChipViewModelTest : SysuiTestCase() { kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 345) addOngoingCallState(startTimeMs = 345, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isFalse() } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_zeroStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 0, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java) } @Test @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableChipsModernization fun chipWithReturnAnimation_inCallWithVisibleApp_zeroStartTime_isHiddenAsIconOnly() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 0, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isTrue() } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_negativeStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = -2, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java) } @Test @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableChipsModernization fun chipWithReturnAnimation_inCallWithVisibleApp_negativeStartTime_isHiddenAsIconOnly() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = -2, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.IconOnly::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isTrue() } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_positiveStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 345, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java) } @Test @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableChipsModernization fun chipWithReturnAnimation_inCallWithVisibleApp_positiveStartTime_isHiddenAsTimer() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 345, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active.Timer::class.java) assertThat((latest as OngoingActivityChipModel.Active).isHidden).isTrue() } @Test Loading Loading @@ -418,5 +502,18 @@ class CallChipViewModelTest : SysuiTestCase() { private const val PROMOTED_BACKGROUND_COLOR = 65 private const val PROMOTED_PRIMARY_TEXT_COLOR = 98 @get:Parameters(name = "{0}") @JvmStatic val flags: List<FlagsParameterization> get() = buildList { addAll( FlagsParameterization.allCombinationsOf( StatusBarRootModernization.FLAG_NAME, StatusBarChipsModernization.FLAG_NAME, StatusBarChipsReturnAnimations.FLAG_NAME, ) ) } } }
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsViewModelTest.kt +5 −5 Original line number Diff line number Diff line Loading @@ -137,7 +137,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState() addOngoingCallState(isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -163,7 +163,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { screenRecordState.value = ScreenRecordModel.DoingNothing mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) addOngoingCallState() addOngoingCallState(isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -178,7 +178,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { // MediaProjection covers both share-to-app and cast-to-other-device mediaProjectionState.value = MediaProjectionState.NotProjecting addOngoingCallState(key = notificationKey) addOngoingCallState(key = notificationKey, isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -190,7 +190,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { kosmos.runTest { // Start with just the lowest priority chip shown val callNotificationKey = "call" addOngoingCallState(key = callNotificationKey) addOngoingCallState(key = callNotificationKey, isAppVisible = false) // And everything else hidden mediaProjectionState.value = MediaProjectionState.NotProjecting screenRecordState.value = ScreenRecordModel.DoingNothing Loading Loading @@ -225,7 +225,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() { mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) val callNotificationKey = "call" addOngoingCallState(key = callNotificationKey) addOngoingCallState(key = callNotificationKey, isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsWithNotifsViewModelTest.kt +17 −17 Original line number Diff line number Diff line Loading @@ -236,7 +236,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun primaryChip_screenRecordShowAndCallShow_screenRecordShown() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState("call") addOngoingCallState("call", isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -249,7 +249,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { kosmos.runTest { val callNotificationKey = "call" screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) val unused by collectLastValue(underTest.chips) Loading Loading @@ -296,7 +296,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { @Test fun chipsLegacy_oneChip_notSquished() = kosmos.runTest { addOngoingCallState() addOngoingCallState(isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) Loading @@ -323,7 +323,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun chipsLegacy_twoTimerChips_isSmallPortrait_bothSquished() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) Loading Loading @@ -385,7 +385,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun chipsLegacy_countdownChipAndTimerChip_countdownNotSquished_butTimerSquished() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Starting(millisUntilStarted = 2000) addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) Loading Loading @@ -431,7 +431,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { .isInstanceOf(OngoingActivityChipModel.Inactive::class.java) // WHEN there's 2 chips addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) // THEN they both become squished assertThat(latest!!.primary) Loading Loading @@ -487,7 +487,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun chipsLegacy_twoChips_isLandscape_notSquished() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) // WHEN we're in landscape val config = Loading Loading @@ -533,7 +533,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { fun chipsLegacy_twoChips_isLargeScreen_notSquished() = kosmos.runTest { screenRecordState.value = ScreenRecordModel.Recording addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) // WHEN we're on a large screen kosmos.displayStateRepository.setIsLargeScreen(true) Loading Loading @@ -627,7 +627,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { screenRecordState.value = ScreenRecordModel.DoingNothing mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -642,7 +642,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { screenRecordState.value = ScreenRecordModel.DoingNothing mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) addOngoingCallState(key = "call") addOngoingCallState(key = "call", isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) val unused by collectLastValue(underTest.chips) Loading Loading @@ -681,7 +681,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { mediaProjectionState.value = MediaProjectionState.NotProjecting val callNotificationKey = "call" addOngoingCallState(key = callNotificationKey) addOngoingCallState(key = callNotificationKey, isAppVisible = false) val latest by collectLastValue(underTest.primaryChip) Loading @@ -697,7 +697,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { // MediaProjection covers both share-to-app and cast-to-other-device mediaProjectionState.value = MediaProjectionState.NotProjecting addOngoingCallState(key = callNotificationKey) addOngoingCallState(key = callNotificationKey, isAppVisible = false) val latest by collectLastValue(underTest.chipsLegacy) val unused by collectLastValue(underTest.chips) Loading Loading @@ -975,7 +975,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { val unused by collectLastValue(underTest.chips) val callNotificationKey = "call" addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) val firstIcon = createStatusBarIconViewOrNull() activeNotificationListRepository.addNotifs( Loading Loading @@ -1053,7 +1053,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { val latest by collectLastValue(underTest.chipsLegacy) val unused by collectLastValue(underTest.chips) addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) screenRecordState.value = ScreenRecordModel.Recording activeNotificationListRepository.addNotif( activeNotificationModel( Loading Loading @@ -1160,7 +1160,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { assertIsNotifChip(latest, context, notifIcon, "notif") // WHEN the higher priority call chip is added addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) // THEN the higher priority call chip is used assertIsCallChip(latest, callNotificationKey, context) Loading Loading @@ -1191,7 +1191,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { screenRecordState.value = ScreenRecordModel.Recording mediaProjectionState.value = MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE) addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) val notifIcon = createStatusBarIconViewOrNull() activeNotificationListRepository.addNotif( activeNotificationModel( Loading Loading @@ -1253,7 +1253,7 @@ class OngoingActivityChipsWithNotifsViewModelTest : SysuiTestCase() { assertThat(unused).isEqualTo(MultipleOngoingActivityChipsModel()) // WHEN the higher priority call chip is added addOngoingCallState(callNotificationKey) addOngoingCallState(callNotificationKey, isAppVisible = false) // THEN the higher priority call chip is used as primary and notif is demoted to // secondary Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/ongoingcall/domain/interactor/OngoingCallInteractorTest.kt +6 −10 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ class OngoingCallInteractorTest : SysuiTestCase() { statusBarChipIconView = testIconView, contentIntent = testIntent, promotedContent = testPromotedContent, isAppVisible = false, ) // Verify model is InCall and has the correct icon, intent, and promoted content. Loading @@ -98,7 +99,6 @@ class OngoingCallInteractorTest : SysuiTestCase() { @Test fun ongoingCallNotification_setsAllFields_withAppVisible() = kosmos.runTest { kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = true val latest by collectLastValue(underTest.ongoingCallState) // Set up notification with icon view and intent Loading @@ -113,6 +113,7 @@ class OngoingCallInteractorTest : SysuiTestCase() { statusBarChipIconView = testIconView, contentIntent = testIntent, promotedContent = testPromotedContent, isAppVisible = true, ) // Verify model is InCall with visible app and has the correct icon, intent, and Loading Loading @@ -141,10 +142,9 @@ class OngoingCallInteractorTest : SysuiTestCase() { @Test fun ongoingCallNotification_appVisibleInitially_emitsInCallWithVisibleApp() = kosmos.runTest { kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = true val latest by collectLastValue(underTest.ongoingCallState) addOngoingCallState(uid = UID) addOngoingCallState(uid = UID, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingCallModel.InCall::class.java) assertThat((latest as OngoingCallModel.InCall).isAppVisible).isTrue() Loading @@ -153,10 +153,9 @@ class OngoingCallInteractorTest : SysuiTestCase() { @Test fun ongoingCallNotification_appNotVisibleInitially_emitsInCall() = kosmos.runTest { kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = false val latest by collectLastValue(underTest.ongoingCallState) addOngoingCallState(uid = UID) addOngoingCallState(uid = UID, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingCallModel.InCall::class.java) assertThat((latest as OngoingCallModel.InCall).isAppVisible).isFalse() Loading @@ -168,8 +167,7 @@ class OngoingCallInteractorTest : SysuiTestCase() { val latest by collectLastValue(underTest.ongoingCallState) // Start with notification and app not visible kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = false addOngoingCallState(uid = UID) addOngoingCallState(uid = UID, isAppVisible = false) assertThat(latest).isInstanceOf(OngoingCallModel.InCall::class.java) assertThat((latest as OngoingCallModel.InCall).isAppVisible).isFalse() Loading Loading @@ -245,9 +243,7 @@ class OngoingCallInteractorTest : SysuiTestCase() { .ongoingProcessRequiresStatusBarVisible ) kosmos.activityManagerRepository.fake.startingIsAppVisibleValue = false addOngoingCallState(uid = UID) addOngoingCallState(uid = UID, isAppVisible = false) assertThat(ongoingCallState).isInstanceOf(OngoingCallModel.InCall::class.java) assertThat((ongoingCallState as OngoingCallModel.InCall).isAppVisible).isFalse() Loading