summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Justin Weir <justinweir@google.com> 2023-09-05 11:42:16 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-09-05 11:42:16 +0000
commitc5df75a1bd5c706859978b1bd1f3df391ea20a4c (patch)
tree1b66166e60ab819fe7af9111f40975660ffe090c
parent1fce85b1f44920dc0f3455fbfaf19be561690bba (diff)
parentcf1dda96f60578e2e518a89e2cf601c6268b63ed (diff)
Merge "Make shadeExpansion support all status bar states" into main
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt56
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt34
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt14
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java1
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt59
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeRepositoryImplTest.kt31
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt30
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt17
11 files changed, 209 insertions, 54 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index 8db7abf7347f..c1999043743c 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -163,6 +163,7 @@ import com.android.systemui.plugins.FalsingManager.FalsingTapListener;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
+import com.android.systemui.shade.data.repository.ShadeRepository;
import com.android.systemui.shade.transition.ShadeTransitionController;
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
import com.android.systemui.shared.system.QuickStepContract;
@@ -350,6 +351,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
private final Interpolator mBounceInterpolator;
private final NotificationShadeWindowController mNotificationShadeWindowController;
private final ShadeExpansionStateManager mShadeExpansionStateManager;
+ private final ShadeRepository mShadeRepository;
private final FalsingTapListener mFalsingTapListener = this::falsingAdditionalTapRequired;
private final AccessibilityDelegate mAccessibilityDelegate = new ShadeAccessibilityDelegate();
private final NotificationGutsManager mGutsManager;
@@ -710,7 +712,8 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
VibratorHelper vibratorHelper,
LatencyTracker latencyTracker,
PowerManager powerManager,
- AccessibilityManager accessibilityManager, @DisplayId int displayId,
+ AccessibilityManager accessibilityManager,
+ @DisplayId int displayId,
KeyguardUpdateMonitor keyguardUpdateMonitor,
MetricsLogger metricsLogger,
ShadeLogger shadeLogger,
@@ -746,6 +749,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
ScreenOffAnimationController screenOffAnimationController,
LockscreenGestureLogger lockscreenGestureLogger,
ShadeExpansionStateManager shadeExpansionStateManager,
+ ShadeRepository shadeRepository,
Optional<SysUIUnfoldComponent> unfoldComponent,
SysUiState sysUiState,
Provider<KeyguardBottomAreaViewController> keyguardBottomAreaViewControllerProvider,
@@ -788,6 +792,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mLockscreenGestureLogger = lockscreenGestureLogger;
mShadeExpansionStateManager = shadeExpansionStateManager;
+ mShadeRepository = shadeRepository;
mShadeLog = shadeLogger;
mGutsManager = gutsManager;
mDreamingToLockscreenTransitionViewModel = dreamingToLockscreenTransitionViewModel;
@@ -3952,6 +3957,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
}
mExpandedFraction = Math.min(1f,
maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
+ mShadeRepository.setLegacyShadeExpansion(mExpandedFraction);
mQsController.setShadeExpansion(mExpandedHeight, mExpandedFraction);
mExpansionDragDownAmountPx = h;
mAmbientState.setExpansionFraction(mExpandedFraction);
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 5a8be1e328f6..509921fd38e1 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
@@ -34,21 +34,48 @@ interface ShadeRepository {
/** ShadeModel information regarding shade expansion events */
val shadeModel: Flow<ShadeModel>
- /** Amount qs has expanded. Quick Settings can be expanded without the full shade expansion. */
+ /**
+ * Amount qs has expanded, [0-1]. 0 means fully collapsed, 1 means fully expanded. Quick
+ * Settings can be expanded without the full shade expansion.
+ */
val qsExpansion: StateFlow<Float>
- /** The amount the shade has expanded */
- val shadeExpansion: StateFlow<Float>
+ /**
+ * The amount the lockscreen shade has dragged down by the user, [0-1]. 0 means fully collapsed,
+ * 1 means fully expanded.
+ */
+ val lockscreenShadeExpansion: StateFlow<Float>
+
+ /**
+ * NotificationPanelViewController.mExpandedFraction as a StateFlow. This nominally represents
+ * the amount the shade has expanded 0-1 like many other flows in this repo, but there are cases
+ * where its value will be 1 and no shade will be rendered, e.g. whenever the keyguard is
+ * visible and when quick settings is expanded. The confusing nature and impending deletion of
+ * this makes it unsuitable for future development, so usage is discouraged.
+ */
+ @Deprecated("Use ShadeInteractor.shadeExpansion instead")
+ val legacyShadeExpansion: StateFlow<Float>
/** Amount shade has expanded with regard to the UDFPS location */
val udfpsTransitionToFullShadeProgress: StateFlow<Float>
/** The amount QS has expanded without notifications */
fun setQsExpansion(qsExpansion: Float)
+
fun setUdfpsTransitionToFullShadeProgress(progress: Float)
- /** The amount the shade has expanded, [0-1]. 0 means fully collapsed, 1 means fully expanded */
- fun setShadeExpansion(expansion: Float)
+ /**
+ * Set the amount the shade has dragged down by the user, [0-1]. 0 means fully collapsed, 1
+ * means fully expanded.
+ */
+ fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float)
+
+ /**
+ * Set the legacy expansion value. This should only be called whenever the value of
+ * NotificationPanelViewController.mExpandedFraction changes or in tests.
+ */
+ @Deprecated("Should only be called by NPVC and tests")
+ fun setLegacyShadeExpansion(expandedFraction: Float)
}
/** Business logic for shade interactions */
@@ -84,18 +111,29 @@ constructor(shadeExpansionStateManager: ShadeExpansionStateManager) : ShadeRepos
private val _qsExpansion = MutableStateFlow(0f)
override val qsExpansion: StateFlow<Float> = _qsExpansion.asStateFlow()
- private val _shadeExpansion = MutableStateFlow(0f)
- override val shadeExpansion: StateFlow<Float> = _shadeExpansion.asStateFlow()
+ private val _lockscreenShadeExpansion = MutableStateFlow(0f)
+ override val lockscreenShadeExpansion: StateFlow<Float> =
+ _lockscreenShadeExpansion.asStateFlow()
private var _udfpsTransitionToFullShadeProgress = MutableStateFlow(0f)
override val udfpsTransitionToFullShadeProgress: StateFlow<Float> =
_udfpsTransitionToFullShadeProgress.asStateFlow()
+
+ private val _legacyShadeExpansion = MutableStateFlow(0f)
+ @Deprecated("Use ShadeInteractor.shadeExpansion instead")
+ override val legacyShadeExpansion: StateFlow<Float> = _legacyShadeExpansion.asStateFlow()
+
override fun setQsExpansion(qsExpansion: Float) {
_qsExpansion.value = qsExpansion
}
- override fun setShadeExpansion(expansion: Float) {
- _shadeExpansion.value = expansion
+ @Deprecated("Should only be called by NPVC and tests")
+ override fun setLegacyShadeExpansion(expandedFraction: Float) {
+ _legacyShadeExpansion.value = expandedFraction
+ }
+
+ override fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) {
+ _lockscreenShadeExpansion.value = lockscreenShadeExpansion
}
override fun setUdfpsTransitionToFullShadeProgress(progress: Float) {
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 288d32e58c7c..fd63b89d1199 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
@@ -22,6 +22,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardRepository
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.statusbar.disableflags.data.repository.DisableFlagsRepository
+import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor
import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupRepository
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.user.domain.interactor.UserInteractor
@@ -31,6 +32,7 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
@@ -45,6 +47,7 @@ constructor(
userSetupRepository: UserSetupRepository,
deviceProvisionedController: DeviceProvisionedController,
userInteractor: UserInteractor,
+ sharedNotificationContainerInteractor: SharedNotificationContainerInteractor,
repository: ShadeRepository,
) {
/** Emits true if the shade is currently allowed and false otherwise. */
@@ -53,16 +56,31 @@ constructor(
.map { it.isShadeEnabled() }
.stateIn(scope, SharingStarted.Eagerly, initialValue = false)
+ /**
+ * Whether split shade, the combined notifications and quick settings shade used for large
+ * screens, is enabled.
+ */
+ val splitShadeEnabled: Flow<Boolean> =
+ sharedNotificationContainerInteractor.configurationBasedDimensions
+ .map { dimens -> dimens.useSplitShade }
+ .distinctUntilChanged()
+
/** The amount [0-1] that the shade has been opened */
val shadeExpansion: Flow<Float> =
- combine(repository.shadeExpansion, keyguardRepository.statusBarState) {
- shadeExpansion,
- statusBarState ->
- // This is required, as shadeExpansion gets reset to 0f even with the shade open
- if (statusBarState == StatusBarState.SHADE_LOCKED) {
- 1f
- } else {
- shadeExpansion
+ combine(
+ repository.lockscreenShadeExpansion,
+ keyguardRepository.statusBarState,
+ repository.legacyShadeExpansion,
+ repository.qsExpansion,
+ splitShadeEnabled
+ ) { dragDownAmount, statusBarState, legacyShadeExpansion, qsExpansion, splitShadeEnabled ->
+ when (statusBarState) {
+ // legacyShadeExpansion is 1 instead of 0 when QS is expanded
+ StatusBarState.SHADE ->
+ if (!splitShadeEnabled && qsExpansion > 0f) 0f else legacyShadeExpansion
+ StatusBarState.KEYGUARD -> dragDownAmount
+ // This is required, as shadeExpansion gets reset to 0f even with the shade open
+ StatusBarState.SHADE_LOCKED -> 1f
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
index f004982413e8..73bbbca09fe8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
@@ -447,7 +447,7 @@ class LockscreenShadeTransitionController @Inject constructor(
if (!nsslController.isInLockedDownShade() || field == 0f || forceApplyAmount) {
fractionToShade =
MathUtils.saturate(dragDownAmount / notificationShelfTransitionDistance)
- shadeRepository.setShadeExpansion(fractionToShade)
+ shadeRepository.setLockscreenShadeExpansion(fractionToShade)
nsslController.setTransitionToFullShadeAmount(fractionToShade)
qsTransitionController.dragDownAmount = value
@@ -857,12 +857,12 @@ class DragDownHelper(
MotionEvent.ACTION_MOVE -> {
val h = y - initialTouchY
// Adjust the touch slop if another gesture may be being performed.
- val touchSlop = if (event.classification
- == MotionEvent.CLASSIFICATION_AMBIGUOUS_GESTURE) {
- touchSlop * slopMultiplier
- } else {
- touchSlop
- }
+ val touchSlop =
+ if (event.classification == MotionEvent.CLASSIFICATION_AMBIGUOUS_GESTURE) {
+ touchSlop * slopMultiplier
+ } else {
+ touchSlop
+ }
if (h > touchSlop && h > Math.abs(x - initialTouchX)) {
isDraggingDown = true
captureStartingChild(initialTouchX, initialTouchY)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
index c573ac638032..1c9ec27c6a1b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
@@ -626,6 +626,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
mScreenOffAnimationController,
mLockscreenGestureLogger,
mShadeExpansionStateManager,
+ mShadeRepository,
mSysUIUnfoldComponent,
mSysUiState,
() -> mKeyguardBottomAreaViewController,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java
index ab0ae05b0e83..e42a7a6f50d7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java
@@ -37,6 +37,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.TestScopeProvider;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.fragments.FragmentHostManager;
@@ -61,6 +62,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository;
import com.android.systemui.statusbar.notification.stack.AmbientState;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
+import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor;
import com.android.systemui.statusbar.phone.KeyguardBottomAreaView;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.KeyguardStatusBarView;
@@ -174,6 +176,9 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase {
new FakeUserSetupRepository(),
mDeviceProvisionedController,
mUserInteractor,
+ new SharedNotificationContainerInteractor(
+ new FakeConfigurationRepository(),
+ mContext),
mShadeRepository
);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt
index e6e7482bdaf9..41ea5b747e06 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/data/repository/ShadeInteractorTest.kt
@@ -25,7 +25,9 @@ import android.os.UserManager
import androidx.test.filters.SmallTest
import com.android.internal.logging.UiEventLogger
import com.android.keyguard.KeyguardUpdateMonitor
+import com.android.systemui.R
import com.android.systemui.SysuiTestCase
+import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.Flags
@@ -36,6 +38,7 @@ import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.disableflags.data.model.DisableFlagsModel
import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository
+import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor
import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeUserSetupRepository
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.telephony.data.repository.FakeTelephonyRepository
@@ -52,6 +55,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@@ -71,6 +75,12 @@ class ShadeInteractorTest : SysuiTestCase() {
private val disableFlagsRepository = FakeDisableFlagsRepository()
private val keyguardRepository = FakeKeyguardRepository()
private val shadeRepository = FakeShadeRepository()
+ private val configurationRepository = FakeConfigurationRepository()
+ private val sharedNotificationContainerInteractor =
+ SharedNotificationContainerInteractor(
+ configurationRepository,
+ mContext,
+ )
@Mock private lateinit var manager: UserManager
@Mock private lateinit var headlessSystemUserMode: HeadlessSystemUserMode
@@ -145,6 +155,7 @@ class ShadeInteractorTest : SysuiTestCase() {
userSetupRepository,
deviceProvisionedController,
userInteractor,
+ sharedNotificationContainerInteractor,
shadeRepository,
)
}
@@ -363,7 +374,7 @@ class ShadeInteractorTest : SysuiTestCase() {
val actual by collectLastValue(underTest.shadeExpansion)
keyguardRepository.setStatusBarState(StatusBarState.SHADE_LOCKED)
- shadeRepository.setShadeExpansion(0.5f)
+ shadeRepository.setLockscreenShadeExpansion(0.5f)
assertThat(actual).isEqualTo(1f)
}
@@ -375,10 +386,52 @@ class ShadeInteractorTest : SysuiTestCase() {
keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
- shadeRepository.setShadeExpansion(0.5f)
+ shadeRepository.setLockscreenShadeExpansion(0.5f)
assertThat(actual).isEqualTo(0.5f)
- shadeRepository.setShadeExpansion(0.8f)
+ shadeRepository.setLockscreenShadeExpansion(0.8f)
assertThat(actual).isEqualTo(0.8f)
}
+
+ fun shadeExpansionWhenInSplitShadeAndQsExpanded() =
+ testScope.runTest {
+ val actual by collectLastValue(underTest.shadeExpansion)
+
+ // WHEN split shade is enabled and QS is expanded
+ keyguardRepository.setStatusBarState(StatusBarState.SHADE)
+ overrideResource(R.bool.config_use_split_notification_shade, true)
+ configurationRepository.onAnyConfigurationChange()
+ runCurrent()
+ shadeRepository.setQsExpansion(.5f)
+ shadeRepository.setLegacyShadeExpansion(.7f)
+
+ // THEN legacy shade expansion is passed through
+ assertThat(actual).isEqualTo(.7f)
+ }
+
+ fun shadeExpansionWhenNotInSplitShadeAndQsExpanded() =
+ testScope.runTest {
+ val actual by collectLastValue(underTest.shadeExpansion)
+
+ // WHEN split shade is not enabled and QS is expanded
+ keyguardRepository.setStatusBarState(StatusBarState.SHADE)
+ shadeRepository.setQsExpansion(.5f)
+ shadeRepository.setLegacyShadeExpansion(1f)
+
+ // THEN shade expansion is zero
+ assertThat(actual).isEqualTo(0f)
+ }
+
+ fun shadeExpansionWhenNotInSplitShadeAndQsCollapsed() =
+ testScope.runTest {
+ val actual by collectLastValue(underTest.shadeExpansion)
+
+ // WHEN split shade is not enabled and QS is expanded
+ keyguardRepository.setStatusBarState(StatusBarState.SHADE)
+ shadeRepository.setQsExpansion(0f)
+ shadeRepository.setLegacyShadeExpansion(.6f)
+
+ // THEN shade expansion is zero
+ assertThat(actual).isEqualTo(.6f)
+ }
}
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 fdaea2220de9..e086712308b6 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
@@ -121,18 +121,33 @@ class ShadeRepositoryImplTest : SysuiTestCase() {
}
@Test
- fun updateShadeExpansion() =
+ fun updateDragDownAmount() =
testScope.runTest {
- assertThat(underTest.shadeExpansion.value).isEqualTo(0f)
+ assertThat(underTest.lockscreenShadeExpansion.value).isEqualTo(0f)
- underTest.setShadeExpansion(.5f)
- assertThat(underTest.shadeExpansion.value).isEqualTo(.5f)
+ underTest.setLockscreenShadeExpansion(.5f)
+ assertThat(underTest.lockscreenShadeExpansion.value).isEqualTo(.5f)
- underTest.setShadeExpansion(.82f)
- assertThat(underTest.shadeExpansion.value).isEqualTo(.82f)
+ underTest.setLockscreenShadeExpansion(.82f)
+ assertThat(underTest.lockscreenShadeExpansion.value).isEqualTo(.82f)
- underTest.setShadeExpansion(1f)
- assertThat(underTest.shadeExpansion.value).isEqualTo(1f)
+ underTest.setLockscreenShadeExpansion(1f)
+ assertThat(underTest.lockscreenShadeExpansion.value).isEqualTo(1f)
+ }
+
+ @Test
+ fun updateLegacyShadeExpansion() =
+ testScope.runTest {
+ assertThat(underTest.legacyShadeExpansion.value).isEqualTo(0f)
+
+ underTest.setLegacyShadeExpansion(.5f)
+ assertThat(underTest.legacyShadeExpansion.value).isEqualTo(.5f)
+
+ underTest.setLegacyShadeExpansion(.82f)
+ assertThat(underTest.legacyShadeExpansion.value).isEqualTo(.82f)
+
+ underTest.setLegacyShadeExpansion(1f)
+ assertThat(underTest.legacyShadeExpansion.value).isEqualTo(1f)
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
index 51e72c615372..6f7588097c70 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
@@ -10,6 +10,7 @@ import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.classifier.FalsingCollectorFake
+import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
@@ -29,6 +30,7 @@ import com.android.systemui.statusbar.notification.row.NotificationTestHelper
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
+import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor
import com.android.systemui.statusbar.phone.CentralSurfaces
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.phone.LSShadeTransitionLogger
@@ -102,6 +104,11 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() {
@Mock lateinit var transitionControllerCallback: LockscreenShadeTransitionController.Callback
private val disableFlagsRepository = FakeDisableFlagsRepository()
private val keyguardRepository = FakeKeyguardRepository()
+ private val configurationRepository = FakeConfigurationRepository()
+ private val sharedNotificationContainerInteractor = SharedNotificationContainerInteractor(
+ configurationRepository,
+ mContext,
+ )
private val shadeInteractor =
ShadeInteractor(
testScope.backgroundScope,
@@ -110,6 +117,7 @@ class LockscreenShadeTransitionControllerTest : SysuiTestCase() {
userSetupRepository = FakeUserSetupRepository(),
deviceProvisionedController = mock(),
userInteractor = mock(),
+ sharedNotificationContainerInteractor,
repository = FakeShadeRepository(),
)
private val powerInteractor =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
index 55b52dc21434..75fb22dfddd0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
@@ -30,6 +30,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory
import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.shade.data.repository.FakeShadeRepository
@@ -97,7 +98,11 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
keyguardTransitionInteractor = it.keyguardTransitionInteractor
keyguardTransitionRepository = it.repository
}
-
+ sharedNotificationContainerInteractor =
+ SharedNotificationContainerInteractor(
+ configurationRepository,
+ mContext,
+ )
shadeInteractor =
ShadeInteractor(
testScope.backgroundScope,
@@ -106,14 +111,9 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
userSetupRepository,
deviceProvisionedController,
userInteractor,
+ sharedNotificationContainerInteractor,
shadeRepository,
)
-
- sharedNotificationContainerInteractor =
- SharedNotificationContainerInteractor(
- configurationRepository,
- mContext,
- )
underTest =
SharedNotificationContainerViewModel(
sharedNotificationContainerInteractor,
@@ -228,7 +228,7 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
val isOnLockscreenWithoutShade by collectLastValue(underTest.isOnLockscreenWithoutShade)
// First on AOD
- shadeRepository.setShadeExpansion(0f)
+ shadeRepository.setLockscreenShadeExpansion(0f)
shadeRepository.setQsExpansion(0f)
keyguardTransitionRepository.sendTransitionStep(
TransitionStep(
@@ -242,19 +242,19 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
showLockscreen()
// While state is LOCKSCREEN, validate variations of both shade and qs expansion
- shadeRepository.setShadeExpansion(0.1f)
+ shadeRepository.setLockscreenShadeExpansion(0.1f)
shadeRepository.setQsExpansion(0f)
assertThat(isOnLockscreenWithoutShade).isFalse()
- shadeRepository.setShadeExpansion(0.1f)
+ shadeRepository.setLockscreenShadeExpansion(0.1f)
shadeRepository.setQsExpansion(0.1f)
assertThat(isOnLockscreenWithoutShade).isFalse()
- shadeRepository.setShadeExpansion(0f)
+ shadeRepository.setLockscreenShadeExpansion(0f)
shadeRepository.setQsExpansion(0.1f)
assertThat(isOnLockscreenWithoutShade).isFalse()
- shadeRepository.setShadeExpansion(0f)
+ shadeRepository.setLockscreenShadeExpansion(0f)
shadeRepository.setQsExpansion(0f)
assertThat(isOnLockscreenWithoutShade).isTrue()
}
@@ -366,8 +366,9 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
}
private suspend fun showLockscreen() {
- shadeRepository.setShadeExpansion(0f)
+ shadeRepository.setLockscreenShadeExpansion(0f)
shadeRepository.setQsExpansion(0f)
+ keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
keyguardTransitionRepository.sendTransitionStep(
TransitionStep(
to = KeyguardState.LOCKSCREEN,
@@ -377,8 +378,9 @@ class SharedNotificationContainerViewModelTest : SysuiTestCase() {
}
private suspend fun showLockscreenWithShadeExpanded() {
- shadeRepository.setShadeExpansion(1f)
+ shadeRepository.setLockscreenShadeExpansion(1f)
shadeRepository.setQsExpansion(0f)
+ keyguardRepository.setStatusBarState(StatusBarState.SHADE_LOCKED)
keyguardTransitionRepository.sendTransitionStep(
TransitionStep(
to = KeyguardState.LOCKSCREEN,
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 ccddca2d6611..08152a3c49cd 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
@@ -33,8 +33,12 @@ class FakeShadeRepository : ShadeRepository {
private val _udfpsTransitionToFullShadeProgress = MutableStateFlow(0f)
override val udfpsTransitionToFullShadeProgress = _udfpsTransitionToFullShadeProgress
- private val _shadeExpansion = MutableStateFlow(0f)
- override val shadeExpansion = _shadeExpansion
+ private val _lockscreenShadeExpansion = MutableStateFlow(0f)
+ override val lockscreenShadeExpansion = _lockscreenShadeExpansion
+
+ private val _legacyShadeExpansion = MutableStateFlow(0f)
+ @Deprecated("Use ShadeInteractor instead")
+ override val legacyShadeExpansion = _legacyShadeExpansion
fun setShadeModel(model: ShadeModel) {
_shadeModel.value = model
@@ -48,7 +52,12 @@ class FakeShadeRepository : ShadeRepository {
_udfpsTransitionToFullShadeProgress.value = progress
}
- override fun setShadeExpansion(expansion: Float) {
- _shadeExpansion.value = expansion
+ override fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) {
+ _lockscreenShadeExpansion.value = lockscreenShadeExpansion
+ }
+
+ @Deprecated("Should only be called by NPVC and tests")
+ override fun setLegacyShadeExpansion(expandedFraction: Float) {
+ _legacyShadeExpansion.value = expandedFraction
}
}