Merge "Add NPVC.mIsPanelExpanded replacement" into main
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index a5abf58..88ee8da 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -2610,6 +2610,7 @@
if (mPanelExpanded != isExpanded) {
mPanelExpanded = isExpanded;
updateSystemUiStateFlags();
+ mShadeRepository.setLegacyExpandedOrAwaitingInputTransfer(mPanelExpanded);
mShadeExpansionStateManager.onShadeExpansionFullyChanged(isExpanded);
if (!isExpanded) {
mQsController.closeQsCustomizer();
diff --git a/packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt b/packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt
index 52a99af..024c8e3 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt
@@ -74,6 +74,21 @@
*/
@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)
@@ -155,6 +170,18 @@
@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
diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt
index 9918918..251cc16 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt
@@ -45,7 +45,6 @@
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
@@ -78,7 +77,7 @@
* 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()
@@ -93,7 +92,7 @@
keyguardRepository.statusBarState,
repository.legacyShadeExpansion,
repository.qsExpansion,
- splitShadeEnabled
+ isSplitShadeEnabled
) {
lockscreenShadeExpansion,
statusBarState,
@@ -131,13 +130,29 @@
.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.
*/
@@ -147,6 +162,7 @@
} 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
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt
index 19d59fd..7463e65 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt
@@ -169,6 +169,15 @@
}
@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 {
assertThat(underTest.udfpsTransitionToFullShadeProgress.value).isEqualTo(0f)
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt
index e72544a..8b721b2 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt
@@ -47,6 +47,17 @@
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