Merge "Do not separate flow into two." into tm-qpr-dev am: 4f5270a46f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22187446

Change-Id: I702a3ebbaf8e14f1acfb60986127f7e44638a814
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepository.kt
index ae5b799..64e2a2c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardBouncerRepository.kt
@@ -17,6 +17,7 @@
 package com.android.systemui.keyguard.data.repository
 
 import android.os.Build
+import android.util.Log
 import com.android.keyguard.ViewMediatorCallback
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Application
@@ -34,6 +35,7 @@
 import kotlinx.coroutines.flow.filterNotNull
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.onEach
 
 /**
  * Encapsulates app state for the lock screen primary and alternate bouncer.
@@ -231,6 +233,7 @@
 
         primaryBouncerShow
             .logDiffsForTable(buffer, "", "PrimaryBouncerShow", false)
+            .onEach { Log.d(TAG, "Keyguard Bouncer is ${if (it) "showing" else "hiding."}") }
             .launchIn(applicationScope)
         primaryBouncerShowingSoon
             .logDiffsForTable(buffer, "", "PrimaryBouncerShowingSoon", false)
@@ -274,5 +277,6 @@
 
     companion object {
         private const val NOT_VISIBLE = -1L
+        private const val TAG = "KeyguardBouncerRepositoryImpl"
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/PrimaryBouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/PrimaryBouncerInteractor.kt
index 0a3b3d3..e9184ae 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/PrimaryBouncerInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/PrimaryBouncerInteractor.kt
@@ -95,8 +95,7 @@
     }
 
     val keyguardAuthenticated: Flow<Boolean> = repository.keyguardAuthenticated.filterNotNull()
-    val show: Flow<Unit> = repository.primaryBouncerShow.filter { it }.map {}
-    val hide: Flow<Unit> = repository.primaryBouncerShow.filter { !it }.map {}
+    val isShowing: Flow<Boolean> = repository.primaryBouncerShow
     val startingToHide: Flow<Unit> = repository.primaryBouncerStartingToHide.filter { it }.map {}
     val isBackButtonEnabled: Flow<Boolean> = repository.isBackButtonEnabled.filterNotNull()
     val showMessage: Flow<BouncerShowMessageModel> = repository.showMessage.filterNotNull()
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBouncerViewBinder.kt
index 5fcf105..468a6b5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBouncerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBouncerViewBinder.kt
@@ -109,36 +109,36 @@
                 try {
                     viewModel.setBouncerViewDelegate(delegate)
                     launch {
-                        viewModel.show.collect {
-                            // Reset Security Container entirely.
-                            securityContainerController.reinflateViewFlipper {
+                        viewModel.isShowing.collect { isShowing ->
+                            if (isShowing) {
                                 // Reset Security Container entirely.
-                                view.visibility = View.VISIBLE
+                                securityContainerController.reinflateViewFlipper {
+                                    // Reset Security Container entirely.
+                                    view.visibility = View.VISIBLE
+                                    securityContainerController.onBouncerVisibilityChanged(
+                                        /* isVisible= */ true
+                                    )
+                                    securityContainerController.showPrimarySecurityScreen(
+                                        /* turningOff= */ false
+                                    )
+                                    securityContainerController.appear()
+                                    securityContainerController.onResume(
+                                        KeyguardSecurityView.SCREEN_ON
+                                    )
+                                }
+                            } else {
+                                view.visibility = View.INVISIBLE
                                 securityContainerController.onBouncerVisibilityChanged(
-                                    /* isVisible= */ true
+                                    /* isVisible= */ false
                                 )
-                                securityContainerController.showPrimarySecurityScreen(
-                                    /* turningOff= */ false
-                                )
-                                securityContainerController.appear()
-                                securityContainerController.onResume(KeyguardSecurityView.SCREEN_ON)
+                                securityContainerController.cancelDismissAction()
+                                securityContainerController.reset()
+                                securityContainerController.onPause()
                             }
                         }
                     }
 
                     launch {
-                        viewModel.hide.collect {
-                            view.visibility = View.INVISIBLE
-                            securityContainerController.onBouncerVisibilityChanged(
-                                /* isVisible= */ false
-                            )
-                            securityContainerController.cancelDismissAction()
-                            securityContainerController.reset()
-                            securityContainerController.onPause()
-                        }
-                    }
-
-                    launch {
                         viewModel.startingToHide.collect {
                             securityContainerController.onStartingToHide()
                         }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModel.kt
index 0656c9b..9602888 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModel.kt
@@ -40,11 +40,8 @@
     /** Can the user interact with the view? */
     val isInteractable: Flow<Boolean> = interactor.isInteractable
 
-    /** Observe whether bouncer is showing. */
-    val show: Flow<Unit> = interactor.show
-
-    /** Observe whether bouncer is hiding. */
-    val hide: Flow<Unit> = interactor.hide
+    /** Observe whether bouncer is showing or not. */
+    val isShowing: Flow<Boolean> = interactor.isShowing
 
     /** Observe whether bouncer is starting to hide. */
     val startingToHide: Flow<Unit> = interactor.startingToHide
@@ -70,8 +67,8 @@
     /** Observe whether we should update fps is showing. */
     val shouldUpdateSideFps: Flow<Unit> =
         merge(
-            interactor.hide,
-            interactor.show,
+            interactor.isShowing.map {},
+            interactor.startingToHide,
             interactor.startingDisappearAnimation.filterNotNull().map {}
         )
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModelTest.kt
index 2ab1b99..9cd2220 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModelTest.kt
@@ -125,4 +125,26 @@
         assertThat(sideFpsIsShowing).isEqualTo(true)
         job.cancel()
     }
+
+    @Test
+    fun isShowing() = runTest {
+        var isShowing: Boolean? = null
+        val job = underTest.isShowing.onEach { isShowing = it }.launchIn(this)
+        repository.setPrimaryShow(true)
+        // Run the tasks that are pending at this point of virtual time.
+        runCurrent()
+        assertThat(isShowing).isEqualTo(true)
+        job.cancel()
+    }
+
+    @Test
+    fun isNotShowing() = runTest {
+        var isShowing: Boolean? = null
+        val job = underTest.isShowing.onEach { isShowing = it }.launchIn(this)
+        repository.setPrimaryShow(false)
+        // Run the tasks that are pending at this point of virtual time.
+        runCurrent()
+        assertThat(isShowing).isEqualTo(false)
+        job.cancel()
+    }
 }