summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nick Chameyev <nickchameyev@google.com> 2022-02-21 17:47:21 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-02-21 17:47:21 +0000
commit239675d72bc5cf5f6438f68a8b1f16fa56a5bc3a (patch)
treea8de1a056983cd7e5276d9d1bd79429f7539d678
parent75ac29b6ac4cb19431b1a5a8f5f01b56a72613b4 (diff)
parent241a78982b0c7385fe7f0d78c31607f9dc0b9b3d (diff)
Merge "[Fold to AOD] Play fold to AOD even if we already in AOD on the inner screen" into tm-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt46
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java3
3 files changed, 59 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
index 6d7748388e14..05fba5498ea7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
@@ -28,6 +28,8 @@ import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
+import androidx.annotation.Nullable;
+
import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.assist.AssistManager;
@@ -46,8 +48,11 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
+import com.android.systemui.unfold.FoldAodAnimationController;
+import com.android.systemui.unfold.SysUIUnfoldComponent;
import java.util.ArrayList;
+import java.util.Optional;
import javax.inject.Inject;
@@ -73,6 +78,8 @@ public final class DozeServiceHost implements DozeHost {
private final WakefulnessLifecycle mWakefulnessLifecycle;
private final SysuiStatusBarStateController mStatusBarStateController;
private final DeviceProvisionedController mDeviceProvisionedController;
+ @Nullable
+ private final FoldAodAnimationController mFoldAodAnimationController;
private final HeadsUpManagerPhone mHeadsUpManagerPhone;
private final BatteryController mBatteryController;
private final ScrimController mScrimController;
@@ -105,6 +112,7 @@ public final class DozeServiceHost implements DozeHost {
Lazy<AssistManager> assistManagerLazy,
DozeScrimController dozeScrimController, KeyguardUpdateMonitor keyguardUpdateMonitor,
PulseExpansionHandler pulseExpansionHandler,
+ Optional<SysUIUnfoldComponent> sysUIUnfoldComponent,
NotificationShadeWindowController notificationShadeWindowController,
NotificationWakeUpCoordinator notificationWakeUpCoordinator,
AuthController authController,
@@ -128,6 +136,8 @@ public final class DozeServiceHost implements DozeHost {
mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
mAuthController = authController;
mNotificationIconAreaController = notificationIconAreaController;
+ mFoldAodAnimationController = sysUIUnfoldComponent
+ .map(SysUIUnfoldComponent::getFoldAodAnimationController).orElse(null);
}
// TODO: we should try to not pass status bar in here if we can avoid it.
@@ -215,6 +225,9 @@ public final class DozeServiceHost implements DozeHost {
mStatusBarStateController.setIsDozing(dozing);
mNotificationShadeWindowViewController.setDozing(dozing);
+ if (mFoldAodAnimationController != null) {
+ mFoldAodAnimationController.setIsDozing(dozing);
+ }
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt b/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
index 2a9076e8f848..e2374ada15d5 100644
--- a/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
@@ -16,9 +16,12 @@
package com.android.systemui.unfold
+import android.content.Context
+import android.hardware.devicestate.DeviceStateManager
import android.os.Handler
import android.os.PowerManager
import android.provider.Settings
+import androidx.core.view.OneShotPreDrawListener
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.statusbar.LightRevealScrim
@@ -27,6 +30,8 @@ import com.android.systemui.statusbar.phone.StatusBar
import com.android.systemui.statusbar.policy.CallbackController
import com.android.systemui.unfold.FoldAodAnimationController.FoldAodAnimationStatus
import com.android.systemui.util.settings.GlobalSettings
+import java.util.concurrent.Executor
+import java.util.function.Consumer
import javax.inject.Inject
/**
@@ -38,13 +43,21 @@ class FoldAodAnimationController
@Inject
constructor(
@Main private val handler: Handler,
+ @Main private val executor: Executor,
+ private val context: Context,
+ private val deviceStateManager: DeviceStateManager,
private val wakefulnessLifecycle: WakefulnessLifecycle,
private val globalSettings: GlobalSettings
) : CallbackController<FoldAodAnimationStatus>, ScreenOffAnimation, WakefulnessLifecycle.Observer {
+ private lateinit var statusBar: StatusBar
+
+ private var isFolded = false
+ private var isFoldHandled = true
+
private var alwaysOnEnabled: Boolean = false
+ private var isDozing: Boolean = false
private var isScrimOpaque: Boolean = false
- private lateinit var statusBar: StatusBar
private var pendingScrimReadyCallback: Runnable? = null
private var shouldPlayAnimation = false
@@ -62,6 +75,7 @@ constructor(
override fun initialize(statusBar: StatusBar, lightRevealScrim: LightRevealScrim) {
this.statusBar = statusBar
+ deviceStateManager.registerCallback(executor, FoldListener())
wakefulnessLifecycle.addObserver(this)
}
@@ -84,7 +98,7 @@ constructor(
override fun onStartedWakingUp() {
if (isAnimationPlaying) {
handler.removeCallbacks(startAnimationRunnable)
- statusBar.notificationPanelViewController.cancelFoldToAodAnimation();
+ statusBar.notificationPanelViewController.cancelFoldToAodAnimation()
}
setAnimationState(playing = false)
@@ -105,11 +119,24 @@ constructor(
*/
fun onScreenTurningOn(onReady: Runnable) {
if (shouldPlayAnimation) {
+ // The device was not dozing and going to sleep after folding, play the animation
+
if (isScrimOpaque) {
onReady.run()
} else {
pendingScrimReadyCallback = onReady
}
+ } else if (isFolded && !isFoldHandled && alwaysOnEnabled && isDozing) {
+ // Screen turning on for the first time after folding and we are already dozing
+ // We should play the folding to AOD animation
+
+ setAnimationState(playing = true)
+ statusBar.notificationPanelViewController.prepareFoldToAodAnimation()
+
+ // We don't need to wait for the scrim as it is already displayed
+ // but we should wait for the initial animation preparations to be drawn
+ // (setting initial alpha/translation)
+ OneShotPreDrawListener.add(statusBar.notificationPanelViewController.view, onReady)
} else {
// No animation, call ready callback immediately
onReady.run()
@@ -136,6 +163,10 @@ constructor(
}
}
+ fun setIsDozing(dozing: Boolean) {
+ isDozing = dozing
+ }
+
override fun isAnimationPlaying(): Boolean = isAnimationPlaying
override fun isKeyguardHideDelayed(): Boolean = isAnimationPlaying()
@@ -166,4 +197,15 @@ constructor(
interface FoldAodAnimationStatus {
fun onFoldToAodAnimationChanged()
}
+
+ private inner class FoldListener :
+ DeviceStateManager.FoldStateListener(
+ context,
+ Consumer { isFolded ->
+ if (!isFolded) {
+ // We are unfolded now, reset the fold handle status
+ isFoldHandled = false
+ }
+ this.isFolded = isFolded
+ })
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
index 38d7ce76f1b9..6ce3b4b7b6f9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
@@ -59,6 +59,7 @@ import org.mockito.MockitoAnnotations;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
+import java.util.Optional;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@@ -97,7 +98,7 @@ public class DozeServiceHostTest extends SysuiTestCase {
mStatusBarStateController, mDeviceProvisionedController, mHeadsUpManager,
mBatteryController, mScrimController, () -> mBiometricUnlockController,
mKeyguardViewMediator, () -> mAssistManager, mDozeScrimController,
- mKeyguardUpdateMonitor, mPulseExpansionHandler,
+ mKeyguardUpdateMonitor, mPulseExpansionHandler, Optional.empty(),
mNotificationShadeWindowController, mNotificationWakeUpCoordinator,
mAuthController, mNotificationIconAreaController);