Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java +13 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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, Loading @@ -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. Loading Loading @@ -215,6 +225,9 @@ public final class DozeServiceHost implements DozeHost { mStatusBarStateController.setIsDozing(dozing); mNotificationShadeWindowViewController.setDozing(dozing); if (mFoldAodAnimationController != null) { mFoldAodAnimationController.setIsDozing(dozing); } } @Override Loading packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt +44 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 /** Loading @@ -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 Loading @@ -62,6 +75,7 @@ constructor( override fun initialize(statusBar: StatusBar, lightRevealScrim: LightRevealScrim) { this.statusBar = statusBar deviceStateManager.registerCallback(executor, FoldListener()) wakefulnessLifecycle.addObserver(this) } Loading @@ -84,7 +98,7 @@ constructor( override fun onStartedWakingUp() { if (isAnimationPlaying) { handler.removeCallbacks(startAnimationRunnable) statusBar.notificationPanelViewController.cancelFoldToAodAnimation(); statusBar.notificationPanelViewController.cancelFoldToAodAnimation() } setAnimationState(playing = false) Loading @@ -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() Loading @@ -136,6 +163,10 @@ constructor( } } fun setIsDozing(dozing: Boolean) { isDozing = dozing } override fun isAnimationPlaying(): Boolean = isAnimationPlaying override fun isKeyguardHideDelayed(): Boolean = isAnimationPlaying() Loading Loading @@ -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 }) } packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java +13 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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, Loading @@ -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. Loading Loading @@ -215,6 +225,9 @@ public final class DozeServiceHost implements DozeHost { mStatusBarStateController.setIsDozing(dozing); mNotificationShadeWindowViewController.setDozing(dozing); if (mFoldAodAnimationController != null) { mFoldAodAnimationController.setIsDozing(dozing); } } @Override Loading
packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt +44 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 /** Loading @@ -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 Loading @@ -62,6 +75,7 @@ constructor( override fun initialize(statusBar: StatusBar, lightRevealScrim: LightRevealScrim) { this.statusBar = statusBar deviceStateManager.registerCallback(executor, FoldListener()) wakefulnessLifecycle.addObserver(this) } Loading @@ -84,7 +98,7 @@ constructor( override fun onStartedWakingUp() { if (isAnimationPlaying) { handler.removeCallbacks(startAnimationRunnable) statusBar.notificationPanelViewController.cancelFoldToAodAnimation(); statusBar.notificationPanelViewController.cancelFoldToAodAnimation() } setAnimationState(playing = false) Loading @@ -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() Loading @@ -136,6 +163,10 @@ constructor( } } fun setIsDozing(dozing: Boolean) { isDozing = dozing } override fun isAnimationPlaying(): Boolean = isAnimationPlaying override fun isKeyguardHideDelayed(): Boolean = isAnimationPlaying() Loading Loading @@ -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 }) }
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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); Loading