Loading packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +1 −0 Original line number Diff line number Diff line Loading @@ -2610,6 +2610,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump if (mPanelExpanded != isExpanded) { mPanelExpanded = isExpanded; updateSystemUiStateFlags(); mShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(mPanelExpanded); mShadeExpansionStateManager.onShadeExpansionFullyChanged(isExpanded); if (!isExpanded) { mQsController.closeQsCustomizer(); Loading packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt +27 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,21 @@ interface ShadeRepository { */ @Deprecated("Use ShadeInteractor instead") val legacyQsTracking: StateFlow<Boolean> /** * NotificationPanelViewController.mPanelExpanded as a flow. This value is true whenever the * expansion fraction is greater than zero or NPVC is about to accept an input transfer from the * status bar, home screen, or trackpad. */ @Deprecated("Use ShadeInteractor instead") val legacyExpandedOrAwaitingInputTransfer: StateFlow<Boolean> /** * Sets whether the expansion fraction is greater than zero or NPVC is about to accept an input * transfer from the status bar, home screen, or trackpad. */ @Deprecated("Use ShadeInteractor instead") fun setLegacyExpandedOrAwaitingInputTransfer(legacyExpandedOrAwaitingInputTransfer: Boolean) /** Sets whether the user is moving Quick Settings with a pointer */ fun setLegacyQsTracking(legacyQsTracking: Boolean) Loading Loading @@ -155,6 +170,18 @@ constructor(shadeExpansionStateManager: ShadeExpansionStateManager) : ShadeRepos @Deprecated("Use ShadeInteractor instead") override val legacyQsTracking: StateFlow<Boolean> = _legacyQsTracking.asStateFlow() private val _legacyExpandedOrAwaitingInputTransfer = MutableStateFlow(false) @Deprecated("Use ShadeInteractor instead") override val legacyExpandedOrAwaitingInputTransfer: StateFlow<Boolean> = _legacyExpandedOrAwaitingInputTransfer.asStateFlow() @Deprecated("Use ShadeInteractor instead") override fun setLegacyExpandedOrAwaitingInputTransfer( legacyExpandedOrAwaitingInputTransfer: Boolean ) { _legacyExpandedOrAwaitingInputTransfer.value = legacyExpandedOrAwaitingInputTransfer } @Deprecated("Should only be called by NPVC and tests") override fun setLegacyQsTracking(legacyQsTracking: Boolean) { _legacyQsTracking.value = legacyQsTracking Loading packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt +20 −4 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.isActive import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.isActive Loading Loading @@ -78,7 +77,7 @@ constructor( * Whether split shade, the combined notifications and quick settings shade used for large * screens, is enabled. */ val splitShadeEnabled: Flow<Boolean> = val isSplitShadeEnabled: Flow<Boolean> = sharedNotificationContainerInteractor.configurationBasedDimensions .map { dimens -> dimens.useSplitShade } .distinctUntilChanged() Loading @@ -93,7 +92,7 @@ constructor( keyguardRepository.statusBarState, repository.legacyShadeExpansion, repository.qsExpansion, splitShadeEnabled isSplitShadeEnabled ) { lockscreenShadeExpansion, statusBarState, Loading Loading @@ -131,12 +130,28 @@ constructor( .stateIn(scope, SharingStarted.Eagerly, 0f) /** Whether either the shade or QS is expanding from a fully collapsed state. */ val isAnyExpanding = val isAnyExpanding: Flow<Boolean> = anyExpansion .pairwise(1f) .map { (prev, curr) -> curr > 0f && curr < 1f && prev < 1f } .distinctUntilChanged() /** * Whether either the shade or QS is partially or fully expanded, i.e. not fully collapsed. At * this time, this is not simply a matter of checking if either value in shadeExpansion and * qsExpansion is greater than zero, because it includes the legacy concept of whether input * transfer is about to occur. If the scene container flag is enabled, it just checks whether * either expansion value is positive. * * TODO(b/300258424) remove all but the first sentence of this comment */ val isAnyExpanded: Flow<Boolean> = if (sceneContainerFlags.isEnabled()) { anyExpansion.map { it > 0f }.distinctUntilChanged() } else { repository.legacyExpandedOrAwaitingInputTransfer } /** * Whether the user is expanding or collapsing the shade with user input. This will be true even * if the user's input gesture has ended but a transition they initiated is animating. Loading @@ -147,6 +162,7 @@ constructor( } else { userInteractingFlow(repository.legacyShadeTracking, repository.legacyShadeExpansion) } /** * Whether the user is expanding or collapsing quick settings with user input. This will be true * even if the user's input gesture has ended but a transition they initiated is still Loading packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt +9 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,15 @@ class ShadeRepositoryImplTest : SysuiTestCase() { assertThat(underTest.legacyQsTracking.value).isEqualTo(true) } @Test fun updateLegacyExpandedOrAwaitingInputTransfer() = testScope.runTest { assertThat(underTest.legacyExpandedOrAwaitingInputTransfer.value).isEqualTo(false) underTest.setLegacyExpandedOrAwaitingInputTransfer(true) assertThat(underTest.legacyExpandedOrAwaitingInputTransfer.value).isEqualTo(true) } @Test fun updateUdfpsTransitionToFullShadeProgress() = testScope.runTest { Loading packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt +11 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,17 @@ class FakeShadeRepository : ShadeRepository { private val _legacyQsTracking = MutableStateFlow(false) @Deprecated("Use ShadeInteractor instead") override val legacyQsTracking = _legacyQsTracking private val _legacyExpandedOrAwaitingInputTransfer = MutableStateFlow(false) @Deprecated("Use ShadeInteractor instead") override val legacyExpandedOrAwaitingInputTransfer = _legacyExpandedOrAwaitingInputTransfer @Deprecated("Use ShadeInteractor instead") override fun setLegacyExpandedOrAwaitingInputTransfer( legacyExpandedOrAwaitingInputTransfer: Boolean ) { _legacyExpandedOrAwaitingInputTransfer.value = legacyExpandedOrAwaitingInputTransfer } @Deprecated("Should only be called by NPVC and tests") override fun setLegacyQsTracking(legacyQsTracking: Boolean) { _legacyQsTracking.value = legacyQsTracking Loading Loading
packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +1 −0 Original line number Diff line number Diff line Loading @@ -2610,6 +2610,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump if (mPanelExpanded != isExpanded) { mPanelExpanded = isExpanded; updateSystemUiStateFlags(); mShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(mPanelExpanded); mShadeExpansionStateManager.onShadeExpansionFullyChanged(isExpanded); if (!isExpanded) { mQsController.closeQsCustomizer(); Loading
packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt +27 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,21 @@ interface ShadeRepository { */ @Deprecated("Use ShadeInteractor instead") val legacyQsTracking: StateFlow<Boolean> /** * NotificationPanelViewController.mPanelExpanded as a flow. This value is true whenever the * expansion fraction is greater than zero or NPVC is about to accept an input transfer from the * status bar, home screen, or trackpad. */ @Deprecated("Use ShadeInteractor instead") val legacyExpandedOrAwaitingInputTransfer: StateFlow<Boolean> /** * Sets whether the expansion fraction is greater than zero or NPVC is about to accept an input * transfer from the status bar, home screen, or trackpad. */ @Deprecated("Use ShadeInteractor instead") fun setLegacyExpandedOrAwaitingInputTransfer(legacyExpandedOrAwaitingInputTransfer: Boolean) /** Sets whether the user is moving Quick Settings with a pointer */ fun setLegacyQsTracking(legacyQsTracking: Boolean) Loading Loading @@ -155,6 +170,18 @@ constructor(shadeExpansionStateManager: ShadeExpansionStateManager) : ShadeRepos @Deprecated("Use ShadeInteractor instead") override val legacyQsTracking: StateFlow<Boolean> = _legacyQsTracking.asStateFlow() private val _legacyExpandedOrAwaitingInputTransfer = MutableStateFlow(false) @Deprecated("Use ShadeInteractor instead") override val legacyExpandedOrAwaitingInputTransfer: StateFlow<Boolean> = _legacyExpandedOrAwaitingInputTransfer.asStateFlow() @Deprecated("Use ShadeInteractor instead") override fun setLegacyExpandedOrAwaitingInputTransfer( legacyExpandedOrAwaitingInputTransfer: Boolean ) { _legacyExpandedOrAwaitingInputTransfer.value = legacyExpandedOrAwaitingInputTransfer } @Deprecated("Should only be called by NPVC and tests") override fun setLegacyQsTracking(legacyQsTracking: Boolean) { _legacyQsTracking.value = legacyQsTracking Loading
packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt +20 −4 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.isActive import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.isActive Loading Loading @@ -78,7 +77,7 @@ constructor( * Whether split shade, the combined notifications and quick settings shade used for large * screens, is enabled. */ val splitShadeEnabled: Flow<Boolean> = val isSplitShadeEnabled: Flow<Boolean> = sharedNotificationContainerInteractor.configurationBasedDimensions .map { dimens -> dimens.useSplitShade } .distinctUntilChanged() Loading @@ -93,7 +92,7 @@ constructor( keyguardRepository.statusBarState, repository.legacyShadeExpansion, repository.qsExpansion, splitShadeEnabled isSplitShadeEnabled ) { lockscreenShadeExpansion, statusBarState, Loading Loading @@ -131,12 +130,28 @@ constructor( .stateIn(scope, SharingStarted.Eagerly, 0f) /** Whether either the shade or QS is expanding from a fully collapsed state. */ val isAnyExpanding = val isAnyExpanding: Flow<Boolean> = anyExpansion .pairwise(1f) .map { (prev, curr) -> curr > 0f && curr < 1f && prev < 1f } .distinctUntilChanged() /** * Whether either the shade or QS is partially or fully expanded, i.e. not fully collapsed. At * this time, this is not simply a matter of checking if either value in shadeExpansion and * qsExpansion is greater than zero, because it includes the legacy concept of whether input * transfer is about to occur. If the scene container flag is enabled, it just checks whether * either expansion value is positive. * * TODO(b/300258424) remove all but the first sentence of this comment */ val isAnyExpanded: Flow<Boolean> = if (sceneContainerFlags.isEnabled()) { anyExpansion.map { it > 0f }.distinctUntilChanged() } else { repository.legacyExpandedOrAwaitingInputTransfer } /** * Whether the user is expanding or collapsing the shade with user input. This will be true even * if the user's input gesture has ended but a transition they initiated is animating. Loading @@ -147,6 +162,7 @@ constructor( } else { userInteractingFlow(repository.legacyShadeTracking, repository.legacyShadeExpansion) } /** * Whether the user is expanding or collapsing quick settings with user input. This will be true * even if the user's input gesture has ended but a transition they initiated is still Loading
packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt +9 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,15 @@ class ShadeRepositoryImplTest : SysuiTestCase() { assertThat(underTest.legacyQsTracking.value).isEqualTo(true) } @Test fun updateLegacyExpandedOrAwaitingInputTransfer() = testScope.runTest { assertThat(underTest.legacyExpandedOrAwaitingInputTransfer.value).isEqualTo(false) underTest.setLegacyExpandedOrAwaitingInputTransfer(true) assertThat(underTest.legacyExpandedOrAwaitingInputTransfer.value).isEqualTo(true) } @Test fun updateUdfpsTransitionToFullShadeProgress() = testScope.runTest { Loading
packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt +11 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,17 @@ class FakeShadeRepository : ShadeRepository { private val _legacyQsTracking = MutableStateFlow(false) @Deprecated("Use ShadeInteractor instead") override val legacyQsTracking = _legacyQsTracking private val _legacyExpandedOrAwaitingInputTransfer = MutableStateFlow(false) @Deprecated("Use ShadeInteractor instead") override val legacyExpandedOrAwaitingInputTransfer = _legacyExpandedOrAwaitingInputTransfer @Deprecated("Use ShadeInteractor instead") override fun setLegacyExpandedOrAwaitingInputTransfer( legacyExpandedOrAwaitingInputTransfer: Boolean ) { _legacyExpandedOrAwaitingInputTransfer.value = legacyExpandedOrAwaitingInputTransfer } @Deprecated("Should only be called by NPVC and tests") override fun setLegacyQsTracking(legacyQsTracking: Boolean) { _legacyQsTracking.value = legacyQsTracking Loading