Loading packages/SystemUI/aconfig/systemui.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -1758,6 +1758,16 @@ flag { bug: "202516970" } flag { name: "status_bar_call_chip_use_is_hidden" namespace: "systemui" description: "Enables isHidden field for all call chips" bug: "427747840" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "media_projection_grey_error_text" namespace: "systemui" Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModelTest.kt +58 −3 Original line number Diff line number Diff line Loading @@ -322,7 +322,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME, StatusBarCallChipUseIsHidden.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_zeroStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) Loading @@ -332,6 +332,24 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java) } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableFlags(StatusBarCallChipUseIsHidden.FLAG_NAME) @EnableChipsModernization fun chipLegacy_useIsHidden_inCallWithVisibleApp_zeroStartTime_isHiddenAsIconOnly() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 0, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java) val activeChip = latest as OngoingActivityChipModel.Active assertThat(activeChip.isHidden).isTrue() assertThat(activeChip.content) .isInstanceOf(OngoingActivityChipModel.Content.IconOnly::class.java) } @Test @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableChipsModernization Loading @@ -348,7 +366,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME, StatusBarCallChipUseIsHidden.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_negativeStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) Loading @@ -374,7 +392,25 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test @EnableFlags(StatusBarCallChipUseIsHidden.FLAG_NAME) @EnableChipsModernization @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_useIsHidden_animationsDisabled_negativeStartTime_isHiddenAsIconOnly() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = -2, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java) val activeChip = latest as OngoingActivityChipModel.Active assertThat(activeChip.isHidden).isTrue() assertThat(activeChip.content) .isInstanceOf(OngoingActivityChipModel.Content.IconOnly::class.java) } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME, StatusBarCallChipUseIsHidden.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_positiveStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) Loading @@ -399,6 +435,24 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isFalse() } @Test @EnableFlags(StatusBarCallChipUseIsHidden.FLAG_NAME) @EnableChipsModernization @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_useIsHidden_animationsDisabled_positiveStartTime_isHiddenAsTimer() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 345, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java) val activeChip = latest as OngoingActivityChipModel.Active assertThat(activeChip.isHidden).isTrue() assertThat(activeChip.content) .isInstanceOf(OngoingActivityChipModel.Content.Timer::class.java) } @Test fun chip_inCall_startTimeConvertedToElapsedRealtime() = kosmos.runTest { Loading Loading @@ -1469,6 +1523,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { get() = buildList { addAll( FlagsParameterization.allCombinationsOf( StatusBarCallChipUseIsHidden.FLAG_NAME, StatusBarRootModernization.FLAG_NAME, StatusBarChipsModernization.FLAG_NAME, StatusBarChipsReturnAnimations.FLAG_NAME, Loading packages/SystemUI/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModel.kt +7 −3 Original line number Diff line number Diff line Loading @@ -162,19 +162,23 @@ constructor( ) { callState, headsUpState -> when (callState) { is OngoingCallModel.NoCall -> OngoingActivityChipModel.Inactive() is OngoingCallModel.InCall -> if (callState.isAppVisible) { is OngoingCallModel.InCall -> { val useLegacyInactiveBehavior = callState.isAppVisible && !StatusBarCallChipUseIsHidden.isEnabled if (useLegacyInactiveBehavior) { OngoingActivityChipModel.Inactive() } else { prepareChip( state = callState, headsUpState = headsUpState, systemClock = systemClock, isHidden = false, isHidden = callState.isAppVisible, ) } } } } .stateIn( scope, SharingStarted.WhileSubscribed(), Loading packages/SystemUI/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/StatusBarCallChipUseIsHidden.kt 0 → 100644 +31 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.chips.call.ui.viewmodel import com.android.systemui.Flags import com.android.systemui.statusbar.phone.ongoingcall.StatusBarChipsModernization /** Helper for reading or using the status_bar_call_chip_use_is_hidden flag state. */ object StatusBarCallChipUseIsHidden { /** The aconfig flag name */ const val FLAG_NAME = Flags.FLAG_STATUS_BAR_CALL_CHIP_USE_IS_HIDDEN /** Is the feature enabled. */ @JvmStatic inline val isEnabled get() = StatusBarChipsModernization.isEnabled && Flags.statusBarCallChipUseIsHidden() } Loading
packages/SystemUI/aconfig/systemui.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -1758,6 +1758,16 @@ flag { bug: "202516970" } flag { name: "status_bar_call_chip_use_is_hidden" namespace: "systemui" description: "Enables isHidden field for all call chips" bug: "427747840" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "media_projection_grey_error_text" namespace: "systemui" Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModelTest.kt +58 −3 Original line number Diff line number Diff line Loading @@ -322,7 +322,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME, StatusBarCallChipUseIsHidden.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_zeroStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) Loading @@ -332,6 +332,24 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat(latest).isInstanceOf(OngoingActivityChipModel.Inactive::class.java) } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableFlags(StatusBarCallChipUseIsHidden.FLAG_NAME) @EnableChipsModernization fun chipLegacy_useIsHidden_inCallWithVisibleApp_zeroStartTime_isHiddenAsIconOnly() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 0, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java) val activeChip = latest as OngoingActivityChipModel.Active assertThat(activeChip.isHidden).isTrue() assertThat(activeChip.content) .isInstanceOf(OngoingActivityChipModel.Content.IconOnly::class.java) } @Test @EnableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @EnableChipsModernization Loading @@ -348,7 +366,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME, StatusBarCallChipUseIsHidden.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_negativeStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) Loading @@ -374,7 +392,25 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test @EnableFlags(StatusBarCallChipUseIsHidden.FLAG_NAME) @EnableChipsModernization @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_useIsHidden_animationsDisabled_negativeStartTime_isHiddenAsIconOnly() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = -2, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java) val activeChip = latest as OngoingActivityChipModel.Active assertThat(activeChip.isHidden).isTrue() assertThat(activeChip.content) .isInstanceOf(OngoingActivityChipModel.Content.IconOnly::class.java) } @Test @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME, StatusBarCallChipUseIsHidden.FLAG_NAME) fun chipLegacy_inCallWithVisibleApp_positiveStartTime_isHiddenAsInactive() = kosmos.runTest { val latest by collectLastValue(underTest.chip) Loading @@ -399,6 +435,24 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { assertThat((latest as OngoingActivityChipModel.Active).isImportantForPrivacy).isFalse() } @Test @EnableFlags(StatusBarCallChipUseIsHidden.FLAG_NAME) @EnableChipsModernization @DisableFlags(StatusBarChipsReturnAnimations.FLAG_NAME) fun chipLegacy_useIsHidden_animationsDisabled_positiveStartTime_isHiddenAsTimer() = kosmos.runTest { val latest by collectLastValue(underTest.chip) addOngoingCallState(startTimeMs = 345, isAppVisible = true) assertThat(latest).isInstanceOf(OngoingActivityChipModel.Active::class.java) val activeChip = latest as OngoingActivityChipModel.Active assertThat(activeChip.isHidden).isTrue() assertThat(activeChip.content) .isInstanceOf(OngoingActivityChipModel.Content.Timer::class.java) } @Test fun chip_inCall_startTimeConvertedToElapsedRealtime() = kosmos.runTest { Loading Loading @@ -1469,6 +1523,7 @@ class CallChipViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { get() = buildList { addAll( FlagsParameterization.allCombinationsOf( StatusBarCallChipUseIsHidden.FLAG_NAME, StatusBarRootModernization.FLAG_NAME, StatusBarChipsModernization.FLAG_NAME, StatusBarChipsReturnAnimations.FLAG_NAME, Loading
packages/SystemUI/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/CallChipViewModel.kt +7 −3 Original line number Diff line number Diff line Loading @@ -162,19 +162,23 @@ constructor( ) { callState, headsUpState -> when (callState) { is OngoingCallModel.NoCall -> OngoingActivityChipModel.Inactive() is OngoingCallModel.InCall -> if (callState.isAppVisible) { is OngoingCallModel.InCall -> { val useLegacyInactiveBehavior = callState.isAppVisible && !StatusBarCallChipUseIsHidden.isEnabled if (useLegacyInactiveBehavior) { OngoingActivityChipModel.Inactive() } else { prepareChip( state = callState, headsUpState = headsUpState, systemClock = systemClock, isHidden = false, isHidden = callState.isAppVisible, ) } } } } .stateIn( scope, SharingStarted.WhileSubscribed(), Loading
packages/SystemUI/src/com/android/systemui/statusbar/chips/call/ui/viewmodel/StatusBarCallChipUseIsHidden.kt 0 → 100644 +31 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.chips.call.ui.viewmodel import com.android.systemui.Flags import com.android.systemui.statusbar.phone.ongoingcall.StatusBarChipsModernization /** Helper for reading or using the status_bar_call_chip_use_is_hidden flag state. */ object StatusBarCallChipUseIsHidden { /** The aconfig flag name */ const val FLAG_NAME = Flags.FLAG_STATUS_BAR_CALL_CHIP_USE_IS_HIDDEN /** Is the feature enabled. */ @JvmStatic inline val isEnabled get() = StatusBarChipsModernization.isEnabled && Flags.statusBarCallChipUseIsHidden() }