Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdc9ee8d authored by Nick Chameyev's avatar Nick Chameyev Committed by Automerger Merge Worker
Browse files

Merge "[Fold to AOD] Play fold to AOD even if we already in AOD on the inner...

Merge "[Fold to AOD] Play fold to AOD even if we already in AOD on the inner screen" into tm-dev am: 239675d7

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

Change-Id: I1c0af71b08fa33eec4dcb2b5af106da36fd049c4
parents 04fc1e2d 239675d7
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,8 @@ import android.util.Log;
import android.view.MotionEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View;


import androidx.annotation.Nullable;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.assist.AssistManager;
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.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
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.ArrayList;
import java.util.Optional;


import javax.inject.Inject;
import javax.inject.Inject;


@@ -73,6 +78,8 @@ public final class DozeServiceHost implements DozeHost {
    private final WakefulnessLifecycle mWakefulnessLifecycle;
    private final WakefulnessLifecycle mWakefulnessLifecycle;
    private final SysuiStatusBarStateController mStatusBarStateController;
    private final SysuiStatusBarStateController mStatusBarStateController;
    private final DeviceProvisionedController mDeviceProvisionedController;
    private final DeviceProvisionedController mDeviceProvisionedController;
    @Nullable
    private final FoldAodAnimationController mFoldAodAnimationController;
    private final HeadsUpManagerPhone mHeadsUpManagerPhone;
    private final HeadsUpManagerPhone mHeadsUpManagerPhone;
    private final BatteryController mBatteryController;
    private final BatteryController mBatteryController;
    private final ScrimController mScrimController;
    private final ScrimController mScrimController;
@@ -105,6 +112,7 @@ public final class DozeServiceHost implements DozeHost {
            Lazy<AssistManager> assistManagerLazy,
            Lazy<AssistManager> assistManagerLazy,
            DozeScrimController dozeScrimController, KeyguardUpdateMonitor keyguardUpdateMonitor,
            DozeScrimController dozeScrimController, KeyguardUpdateMonitor keyguardUpdateMonitor,
            PulseExpansionHandler pulseExpansionHandler,
            PulseExpansionHandler pulseExpansionHandler,
            Optional<SysUIUnfoldComponent> sysUIUnfoldComponent,
            NotificationShadeWindowController notificationShadeWindowController,
            NotificationShadeWindowController notificationShadeWindowController,
            NotificationWakeUpCoordinator notificationWakeUpCoordinator,
            NotificationWakeUpCoordinator notificationWakeUpCoordinator,
            AuthController authController,
            AuthController authController,
@@ -128,6 +136,8 @@ public final class DozeServiceHost implements DozeHost {
        mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
        mNotificationWakeUpCoordinator = notificationWakeUpCoordinator;
        mAuthController = authController;
        mAuthController = authController;
        mNotificationIconAreaController = notificationIconAreaController;
        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.
    // 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);
        mStatusBarStateController.setIsDozing(dozing);
        mNotificationShadeWindowViewController.setDozing(dozing);
        mNotificationShadeWindowViewController.setDozing(dozing);
        if (mFoldAodAnimationController != null) {
            mFoldAodAnimationController.setIsDozing(dozing);
        }
    }
    }


    @Override
    @Override
+44 −2
Original line number Original line Diff line number Diff line
@@ -16,9 +16,12 @@


package com.android.systemui.unfold
package com.android.systemui.unfold


import android.content.Context
import android.hardware.devicestate.DeviceStateManager
import android.os.Handler
import android.os.Handler
import android.os.PowerManager
import android.os.PowerManager
import android.provider.Settings
import android.provider.Settings
import androidx.core.view.OneShotPreDrawListener
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.statusbar.LightRevealScrim
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.statusbar.policy.CallbackController
import com.android.systemui.unfold.FoldAodAnimationController.FoldAodAnimationStatus
import com.android.systemui.unfold.FoldAodAnimationController.FoldAodAnimationStatus
import com.android.systemui.util.settings.GlobalSettings
import com.android.systemui.util.settings.GlobalSettings
import java.util.concurrent.Executor
import java.util.function.Consumer
import javax.inject.Inject
import javax.inject.Inject


/**
/**
@@ -38,13 +43,21 @@ class FoldAodAnimationController
@Inject
@Inject
constructor(
constructor(
    @Main private val handler: Handler,
    @Main private val handler: Handler,
    @Main private val executor: Executor,
    private val context: Context,
    private val deviceStateManager: DeviceStateManager,
    private val wakefulnessLifecycle: WakefulnessLifecycle,
    private val wakefulnessLifecycle: WakefulnessLifecycle,
    private val globalSettings: GlobalSettings
    private val globalSettings: GlobalSettings
) : CallbackController<FoldAodAnimationStatus>, ScreenOffAnimation, WakefulnessLifecycle.Observer {
) : 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 alwaysOnEnabled: Boolean = false
    private var isDozing: Boolean = false
    private var isScrimOpaque: Boolean = false
    private var isScrimOpaque: Boolean = false
    private lateinit var statusBar: StatusBar
    private var pendingScrimReadyCallback: Runnable? = null
    private var pendingScrimReadyCallback: Runnable? = null


    private var shouldPlayAnimation = false
    private var shouldPlayAnimation = false
@@ -62,6 +75,7 @@ constructor(
    override fun initialize(statusBar: StatusBar, lightRevealScrim: LightRevealScrim) {
    override fun initialize(statusBar: StatusBar, lightRevealScrim: LightRevealScrim) {
        this.statusBar = statusBar
        this.statusBar = statusBar


        deviceStateManager.registerCallback(executor, FoldListener())
        wakefulnessLifecycle.addObserver(this)
        wakefulnessLifecycle.addObserver(this)
    }
    }


@@ -84,7 +98,7 @@ constructor(
    override fun onStartedWakingUp() {
    override fun onStartedWakingUp() {
        if (isAnimationPlaying) {
        if (isAnimationPlaying) {
            handler.removeCallbacks(startAnimationRunnable)
            handler.removeCallbacks(startAnimationRunnable)
            statusBar.notificationPanelViewController.cancelFoldToAodAnimation();
            statusBar.notificationPanelViewController.cancelFoldToAodAnimation()
        }
        }


        setAnimationState(playing = false)
        setAnimationState(playing = false)
@@ -105,11 +119,24 @@ constructor(
     */
     */
    fun onScreenTurningOn(onReady: Runnable) {
    fun onScreenTurningOn(onReady: Runnable) {
        if (shouldPlayAnimation) {
        if (shouldPlayAnimation) {
            // The device was not dozing and going to sleep after folding, play the animation

            if (isScrimOpaque) {
            if (isScrimOpaque) {
                onReady.run()
                onReady.run()
            } else {
            } else {
                pendingScrimReadyCallback = onReady
                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 {
        } else {
            // No animation, call ready callback immediately
            // No animation, call ready callback immediately
            onReady.run()
            onReady.run()
@@ -136,6 +163,10 @@ constructor(
        }
        }
    }
    }


    fun setIsDozing(dozing: Boolean) {
        isDozing = dozing
    }

    override fun isAnimationPlaying(): Boolean = isAnimationPlaying
    override fun isAnimationPlaying(): Boolean = isAnimationPlaying


    override fun isKeyguardHideDelayed(): Boolean = isAnimationPlaying()
    override fun isKeyguardHideDelayed(): Boolean = isAnimationPlaying()
@@ -166,4 +197,15 @@ constructor(
    interface FoldAodAnimationStatus {
    interface FoldAodAnimationStatus {
        fun onFoldToAodAnimationChanged()
        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
            })
}
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -59,6 +59,7 @@ import org.mockito.MockitoAnnotations;
import java.util.Arrays;
import java.util.Arrays;
import java.util.Collections;
import java.util.Collections;
import java.util.HashSet;
import java.util.HashSet;
import java.util.Optional;


@SmallTest
@SmallTest
@RunWith(AndroidTestingRunner.class)
@RunWith(AndroidTestingRunner.class)
@@ -97,7 +98,7 @@ public class DozeServiceHostTest extends SysuiTestCase {
                mStatusBarStateController, mDeviceProvisionedController, mHeadsUpManager,
                mStatusBarStateController, mDeviceProvisionedController, mHeadsUpManager,
                mBatteryController, mScrimController, () -> mBiometricUnlockController,
                mBatteryController, mScrimController, () -> mBiometricUnlockController,
                mKeyguardViewMediator, () -> mAssistManager, mDozeScrimController,
                mKeyguardViewMediator, () -> mAssistManager, mDozeScrimController,
                mKeyguardUpdateMonitor, mPulseExpansionHandler,
                mKeyguardUpdateMonitor, mPulseExpansionHandler, Optional.empty(),
                mNotificationShadeWindowController, mNotificationWakeUpCoordinator,
                mNotificationShadeWindowController, mNotificationWakeUpCoordinator,
                mAuthController, mNotificationIconAreaController);
                mAuthController, mNotificationIconAreaController);