summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-09-24 01:50:26 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-09-24 01:50:26 +0000
commit60267f64724e27e4d12c6ff09cab7a88361ff932 (patch)
tree4906698a893b3c8e34210763dda815d9170e84ae
parent17ed26ef84a5b87f2f184163c37f07953cda441e (diff)
parenta450e9723616118e5025bdcd8762c550a7e0ce92 (diff)
Merge "Refresh Notification Shelf layout when it becomes visible" into main
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelTest.kt24
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt15
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt17
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt2
5 files changed, 45 insertions, 16 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelTest.kt
index 2fd94e2016aa..5d606c67a4d7 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelTest.kt
@@ -47,10 +47,14 @@ import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.shadeTestUtil
+import com.android.systemui.statusbar.notification.data.model.activeNotificationModel
+import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationsStore
+import com.android.systemui.statusbar.notification.data.repository.activeNotificationListRepository
import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor
import com.android.systemui.statusbar.phone.dozeParameters
import com.android.systemui.statusbar.phone.screenOffAnimationController
import com.android.systemui.testKosmos
+import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.ui.isAnimating
import com.android.systemui.util.ui.stopAnimating
@@ -73,7 +77,7 @@ import platform.test.runner.parameterized.Parameters
@EnableFlags(
FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT,
FLAG_NEW_AOD_TRANSITION,
- FLAG_KEYGUARD_BOTTOM_AREA_REFACTOR
+ FLAG_KEYGUARD_BOTTOM_AREA_REFACTOR,
)
class KeyguardRootViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
private val kosmos = testKosmos()
@@ -110,6 +114,20 @@ class KeyguardRootViewModelTest(flags: FlagsParameterization) : SysuiTestCase()
@Before
fun setUp() {
kosmos.sceneContainerRepository.setTransitionState(transitionState)
+
+ // Add sample notif so that the notif shelf has something to display
+ kosmos.activeNotificationListRepository.activeNotifications.value =
+ ActiveNotificationsStore.Builder()
+ .apply {
+ addIndividualNotif(
+ activeNotificationModel(
+ key = "notif",
+ aodIcon = mock(),
+ groupKey = "testGroup",
+ )
+ )
+ }
+ .build()
}
@Test
@@ -129,7 +147,7 @@ class KeyguardRootViewModelTest(flags: FlagsParameterization) : SysuiTestCase()
from = KeyguardState.LOCKSCREEN,
to = KeyguardState.AOD,
value = 0f,
- transitionState = TransitionState.STARTED
+ transitionState = TransitionState.STARTED,
),
validateStep = false,
)
@@ -393,7 +411,7 @@ class KeyguardRootViewModelTest(flags: FlagsParameterization) : SysuiTestCase()
flowOf(Scenes.Communal),
flowOf(0.5f),
false,
- emptyFlow()
+ emptyFlow(),
)
keyguardTransitionRepository.sendTransitionSteps(
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
index 445da248a8fb..6569e4cdd557 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
@@ -324,6 +324,9 @@ object KeyguardRootViewBinder {
.getDimensionPixelSize(R.dimen.shelf_appear_translation)
.stateIn(this)
viewModel.isNotifIconContainerVisible.collect { isVisible ->
+ if (isVisible.value) {
+ blueprintViewModel.refreshBlueprint()
+ }
childViews[aodNotificationIconContainerId]
?.setAodNotifIconContainerIsVisible(
isVisible,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt
index c6efcfad8da7..4cf3c4e7f6d0 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt
@@ -25,20 +25,18 @@ import androidx.constraintlayout.widget.ConstraintLayout
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Config
+import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Type
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
-data class TransitionData(
- val config: Config,
- val start: Long = System.currentTimeMillis(),
-)
+data class TransitionData(val config: Config, val start: Long = System.currentTimeMillis())
class KeyguardBlueprintViewModel
@Inject
constructor(
@Main private val handler: Handler,
- keyguardBlueprintInteractor: KeyguardBlueprintInteractor,
+ private val keyguardBlueprintInteractor: KeyguardBlueprintInteractor,
) {
val blueprint = keyguardBlueprintInteractor.blueprint
val blueprintId = keyguardBlueprintInteractor.blueprintId
@@ -76,6 +74,9 @@ constructor(
}
}
+ fun refreshBlueprint(type: Type = Type.NoTransition) =
+ keyguardBlueprintInteractor.refreshBlueprint(type)
+
fun updateTransitions(data: TransitionData?, mutate: MutableSet<Transition>.() -> Unit) {
runningTransitions.mutate()
@@ -95,7 +96,7 @@ constructor(
Log.w(
TAG,
"runTransition: skipping ${transition::class.simpleName}: " +
- "currentPriority=$currentPriority; config=$config"
+ "currentPriority=$currentPriority; config=$config",
)
}
apply()
@@ -106,7 +107,7 @@ constructor(
Log.i(
TAG,
"runTransition: running ${transition::class.simpleName}: " +
- "currentPriority=$currentPriority; config=$config"
+ "currentPriority=$currentPriority; config=$config",
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
index efb574410da3..dc0ce34614d1 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
@@ -43,6 +43,7 @@ import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.ui.viewmodel.NotificationShadeWindowModel
import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor
+import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel
import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.phone.ScreenOffAnimationController
import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf
@@ -81,6 +82,7 @@ constructor(
private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
private val notificationsKeyguardInteractor: NotificationsKeyguardInteractor,
notificationShadeWindowModel: NotificationShadeWindowModel,
+ private val aodNotificationIconViewModel: NotificationIconContainerAlwaysOnDisplayViewModel,
private val alternateBouncerToAodTransitionViewModel: AlternateBouncerToAodTransitionViewModel,
private val alternateBouncerToGoneTransitionViewModel:
AlternateBouncerToGoneTransitionViewModel,
@@ -130,7 +132,7 @@ constructor(
val goneToAodTransition =
keyguardTransitionInteractor.transition(
edge = Edge.create(Scenes.Gone, AOD),
- edgeWithoutSceneContainer = Edge.create(GONE, AOD)
+ edgeWithoutSceneContainer = Edge.create(GONE, AOD),
)
private val goneToAodTransitionRunning: Flow<Boolean> =
@@ -183,7 +185,7 @@ constructor(
/* rangeMax = */ 1f,
/* valueMin = */ 0f,
/* valueMax = */ 0.2f,
- /* value = */ max(qsExpansion, shadeExpansion)
+ /* value = */ max(qsExpansion, shadeExpansion),
)
emit(alpha)
}
@@ -254,7 +256,7 @@ constructor(
primaryBouncerToGoneTransitionViewModel.lockscreenAlpha,
primaryBouncerToLockscreenTransitionViewModel.lockscreenAlpha(viewState),
)
- .onStart { emit(1f) }
+ .onStart { emit(1f) },
) { hideKeyguard, alpha ->
if (hideKeyguard) {
0f
@@ -304,11 +306,12 @@ constructor(
.onStart { emit(false) },
keyguardTransitionInteractor.isFinishedIn(
scene = Scenes.Gone,
- stateWithoutSceneContainer = GONE
+ stateWithoutSceneContainer = GONE,
),
deviceEntryInteractor.isBypassEnabled,
areNotifsFullyHiddenAnimated(),
isPulseExpandingAnimated(),
+ aodNotificationIconViewModel.icons.map { it.visibleIcons.isNotEmpty() },
) { flows ->
val goneToAodTransitionRunning = flows[0] as Boolean
val isOnLockscreen = flows[1] as Boolean
@@ -316,6 +319,7 @@ constructor(
val isBypassEnabled = flows[3] as Boolean
val notifsFullyHidden = flows[4] as AnimatedValue<Boolean>
val pulseExpanding = flows[5] as AnimatedValue<Boolean>
+ val hasAodIcons = flows[6] as Boolean
when {
// Hide the AOD icons if we're not in the KEYGUARD state unless the screen off
@@ -327,9 +331,10 @@ constructor(
else ->
zip(notifsFullyHidden, pulseExpanding) {
areNotifsFullyHidden,
- isPulseExpanding,
- ->
+ isPulseExpanding ->
when {
+ // If there are no notification icons to show, then it can be hidden
+ !hasAodIcons -> false
// If we're bypassing, then we're visible
isBypassEnabled -> true
// If we are pulsing (and not bypassing), then we are hidden
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt
index 7cf4083e8407..38626a5dbac3 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt
@@ -26,6 +26,7 @@ import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.ui.viewmodel.notificationShadeWindowModel
+import com.android.systemui.statusbar.notification.icon.ui.viewmodel.notificationIconContainerAlwaysOnDisplayViewModel
import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor
import com.android.systemui.statusbar.phone.dozeParameters
import com.android.systemui.statusbar.phone.screenOffAnimationController
@@ -40,6 +41,7 @@ val Kosmos.keyguardRootViewModel by Fixture {
communalInteractor = communalInteractor,
keyguardTransitionInteractor = keyguardTransitionInteractor,
notificationsKeyguardInteractor = notificationsKeyguardInteractor,
+ aodNotificationIconViewModel = notificationIconContainerAlwaysOnDisplayViewModel,
notificationShadeWindowModel = notificationShadeWindowModel,
alternateBouncerToAodTransitionViewModel = alternateBouncerToAodTransitionViewModel,
alternateBouncerToGoneTransitionViewModel = alternateBouncerToGoneTransitionViewModel,