Loading packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt +10 −4 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ interface ShadeViewController { val shadeHeadsUpTracker: ShadeHeadsUpTracker /** Returns the ShadeFoldAnimator. */ @Deprecated("This interface is deprecated in Scene Container") val shadeFoldAnimator: ShadeFoldAnimator companion object { Loading Loading @@ -142,9 +143,10 @@ interface ShadeHeadsUpTracker { } /** Handles the lifecycle of the shade's animation that happens when folding a foldable. */ @Deprecated("This interface should not be used in scene container.") interface ShadeFoldAnimator { /** Updates the views to the initial state for the fold to AOD animation. */ fun prepareFoldToAodAnimation() @Deprecated("Not used when migrateClocksToBlueprint enabled") fun prepareFoldToAodAnimation() /** * Starts fold to AOD animation. Loading @@ -153,21 +155,24 @@ interface ShadeFoldAnimator { * @param endAction invoked when the animation finishes, also if it was cancelled. * @param cancelAction invoked when the animation is cancelled, before endAction. */ @Deprecated("Not used when migrateClocksToBlueprint enabled") fun startFoldToAodAnimation(startAction: Runnable, endAction: Runnable, cancelAction: Runnable) /** Cancels fold to AOD transition and resets view state. */ fun cancelFoldToAodAnimation() @Deprecated("Not used when migrateClocksToBlueprint enabled") fun cancelFoldToAodAnimation() /** Returns the main view of the shade. */ val view: ViewGroup? @Deprecated("Not used in Scene Container") val view: ViewGroup? } /** * An interface that provides the current state of the notification panel and related views, which * is needed to calculate [KeyguardStatusBarView]'s state in [KeyguardStatusBarViewController]. */ @Deprecated("This interface should not be used in scene container.") interface ShadeViewStateProvider { /** Returns the expanded height of the panel view. */ @Deprecated("deprecated by migrate_keyguard_status_bar_view flag") val panelViewExpandedHeight: Float /** Loading @@ -176,8 +181,9 @@ interface ShadeViewStateProvider { * TODO(b/138786270): If HeadsUpAppearanceController was injectable, we could inject it into * [KeyguardStatusBarViewController] and remove this method. */ fun shouldHeadsUpBeVisible(): Boolean @Deprecated("deprecated in Flexiglass.") fun shouldHeadsUpBeVisible(): Boolean /** Return the fraction of the shade that's expanded, when in lockscreen. */ @Deprecated("deprecated by migrate_keyguard_status_bar_view flag") val lockscreenShadeDragProgress: Float } packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt +7 −21 Original line number Diff line number Diff line Loading @@ -21,15 +21,12 @@ import android.content.Context import android.hardware.devicestate.DeviceStateManager import android.os.PowerManager import android.provider.Settings import androidx.annotation.VisibleForTesting import androidx.core.view.OneShotPreDrawListener import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.internal.util.LatencyTracker import com.android.systemui.Flags.migrateClocksToBlueprint import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.shade.ShadeFoldAnimator import com.android.systemui.shade.ShadeViewController import com.android.systemui.statusbar.LightRevealScrim Loading @@ -40,9 +37,6 @@ import com.android.systemui.unfold.FoldAodAnimationController.FoldAodAnimationSt import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.settings.GlobalSettings import dagger.Lazy import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.launch import java.util.function.Consumer import javax.inject.Inject Loading @@ -69,7 +63,6 @@ constructor( private var isFoldHandled = true private var alwaysOnEnabled: Boolean = false private var isDozing: Boolean = false private var isScrimOpaque: Boolean = false private var pendingScrimReadyCallback: Runnable? = null Loading Loading @@ -97,11 +90,6 @@ constructor( deviceStateManager.registerCallback(mainExecutor, FoldListener()) wakefulnessLifecycle.addObserver(this) // TODO(b/254878364): remove this call to NPVC.getView() getShadeFoldAnimator().view?.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.STARTED) { listenForDozing(this) } } } /** Returns true if we should run fold to AOD animation */ Loading Loading @@ -158,7 +146,8 @@ constructor( } else { pendingScrimReadyCallback = onReady } } else if (isFolded && !isFoldHandled && alwaysOnEnabled && isDozing) { } else if (isFolded && !isFoldHandled && alwaysOnEnabled && keyguardInteractor.get().isDozing.value) { setAnimationState(playing = true) getShadeFoldAnimator().prepareFoldToAodAnimation() Loading @@ -166,9 +155,11 @@ constructor( // but we should wait for the initial animation preparations to be drawn // (setting initial alpha/translation) // TODO(b/254878364): remove this call to NPVC.getView() if (!migrateClocksToBlueprint()) { getShadeFoldAnimator().view?.let { OneShotPreDrawListener.add(it, onReady) } } } else { // No animation, call ready callback immediately onReady.run() Loading Loading @@ -233,11 +224,6 @@ constructor( statusListeners.remove(listener) } @VisibleForTesting internal suspend fun listenForDozing(scope: CoroutineScope): Job { return scope.launch { keyguardInteractor.get().isDozing.collect { isDozing = it } } } interface FoldAodAnimationStatus { fun onFoldToAodAnimationChanged() } Loading packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt +0 −25 Original line number Diff line number Diff line Loading @@ -133,47 +133,34 @@ class FoldAodAnimationControllerTest : SysuiTestCase() { @Test fun onFolded_aodDisabled_doesNotLogLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(true) setAodEnabled(enabled = false) yield() fold() simulateScreenTurningOn() verifyNoMoreInteractions(latencyTracker) job.cancel() } @Test fun onFolded_aodEnabled_logsLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(true) setAodEnabled(enabled = true) yield() fold() simulateScreenTurningOn() verify(latencyTracker).onActionStart(any()) verify(latencyTracker).onActionEnd(any()) job.cancel() } @Test fun onFolded_onScreenTurningOnInvokedTwice_doesNotLogLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(true) setAodEnabled(enabled = true) yield() fold() simulateScreenTurningOn() reset(latencyTracker) Loading @@ -183,19 +170,14 @@ class FoldAodAnimationControllerTest : SysuiTestCase() { verify(latencyTracker, never()).onActionStart(any()) verify(latencyTracker, never()).onActionEnd(any()) job.cancel() } @Test fun onFolded_onScreenTurningOnWithoutDozingThenWithDozing_doesNotLogLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(false) setAodEnabled(enabled = true) yield() fold() simulateScreenTurningOn() reset(latencyTracker) Loading @@ -208,19 +190,14 @@ class FoldAodAnimationControllerTest : SysuiTestCase() { verify(latencyTracker, never()).onActionStart(any()) verify(latencyTracker, never()).onActionEnd(any()) job.cancel() } @Test fun onFolded_animationCancelled_doesNotLogLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(true) setAodEnabled(enabled = true) yield() fold() underTest.onScreenTurningOn({}) // The body of onScreenTurningOn is executed on fakeExecutor, Loading @@ -230,8 +207,6 @@ class FoldAodAnimationControllerTest : SysuiTestCase() { verify(latencyTracker).onActionStart(any()) verify(latencyTracker).onActionCancel(any()) job.cancel() } private fun simulateScreenTurningOn() { Loading Loading
packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt +10 −4 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ interface ShadeViewController { val shadeHeadsUpTracker: ShadeHeadsUpTracker /** Returns the ShadeFoldAnimator. */ @Deprecated("This interface is deprecated in Scene Container") val shadeFoldAnimator: ShadeFoldAnimator companion object { Loading Loading @@ -142,9 +143,10 @@ interface ShadeHeadsUpTracker { } /** Handles the lifecycle of the shade's animation that happens when folding a foldable. */ @Deprecated("This interface should not be used in scene container.") interface ShadeFoldAnimator { /** Updates the views to the initial state for the fold to AOD animation. */ fun prepareFoldToAodAnimation() @Deprecated("Not used when migrateClocksToBlueprint enabled") fun prepareFoldToAodAnimation() /** * Starts fold to AOD animation. Loading @@ -153,21 +155,24 @@ interface ShadeFoldAnimator { * @param endAction invoked when the animation finishes, also if it was cancelled. * @param cancelAction invoked when the animation is cancelled, before endAction. */ @Deprecated("Not used when migrateClocksToBlueprint enabled") fun startFoldToAodAnimation(startAction: Runnable, endAction: Runnable, cancelAction: Runnable) /** Cancels fold to AOD transition and resets view state. */ fun cancelFoldToAodAnimation() @Deprecated("Not used when migrateClocksToBlueprint enabled") fun cancelFoldToAodAnimation() /** Returns the main view of the shade. */ val view: ViewGroup? @Deprecated("Not used in Scene Container") val view: ViewGroup? } /** * An interface that provides the current state of the notification panel and related views, which * is needed to calculate [KeyguardStatusBarView]'s state in [KeyguardStatusBarViewController]. */ @Deprecated("This interface should not be used in scene container.") interface ShadeViewStateProvider { /** Returns the expanded height of the panel view. */ @Deprecated("deprecated by migrate_keyguard_status_bar_view flag") val panelViewExpandedHeight: Float /** Loading @@ -176,8 +181,9 @@ interface ShadeViewStateProvider { * TODO(b/138786270): If HeadsUpAppearanceController was injectable, we could inject it into * [KeyguardStatusBarViewController] and remove this method. */ fun shouldHeadsUpBeVisible(): Boolean @Deprecated("deprecated in Flexiglass.") fun shouldHeadsUpBeVisible(): Boolean /** Return the fraction of the shade that's expanded, when in lockscreen. */ @Deprecated("deprecated by migrate_keyguard_status_bar_view flag") val lockscreenShadeDragProgress: Float }
packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt +7 −21 Original line number Diff line number Diff line Loading @@ -21,15 +21,12 @@ import android.content.Context import android.hardware.devicestate.DeviceStateManager import android.os.PowerManager import android.provider.Settings import androidx.annotation.VisibleForTesting import androidx.core.view.OneShotPreDrawListener import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.internal.util.LatencyTracker import com.android.systemui.Flags.migrateClocksToBlueprint import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.WakefulnessLifecycle import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.shade.ShadeFoldAnimator import com.android.systemui.shade.ShadeViewController import com.android.systemui.statusbar.LightRevealScrim Loading @@ -40,9 +37,6 @@ import com.android.systemui.unfold.FoldAodAnimationController.FoldAodAnimationSt import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.settings.GlobalSettings import dagger.Lazy import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.launch import java.util.function.Consumer import javax.inject.Inject Loading @@ -69,7 +63,6 @@ constructor( private var isFoldHandled = true private var alwaysOnEnabled: Boolean = false private var isDozing: Boolean = false private var isScrimOpaque: Boolean = false private var pendingScrimReadyCallback: Runnable? = null Loading Loading @@ -97,11 +90,6 @@ constructor( deviceStateManager.registerCallback(mainExecutor, FoldListener()) wakefulnessLifecycle.addObserver(this) // TODO(b/254878364): remove this call to NPVC.getView() getShadeFoldAnimator().view?.repeatWhenAttached { repeatOnLifecycle(Lifecycle.State.STARTED) { listenForDozing(this) } } } /** Returns true if we should run fold to AOD animation */ Loading Loading @@ -158,7 +146,8 @@ constructor( } else { pendingScrimReadyCallback = onReady } } else if (isFolded && !isFoldHandled && alwaysOnEnabled && isDozing) { } else if (isFolded && !isFoldHandled && alwaysOnEnabled && keyguardInteractor.get().isDozing.value) { setAnimationState(playing = true) getShadeFoldAnimator().prepareFoldToAodAnimation() Loading @@ -166,9 +155,11 @@ constructor( // but we should wait for the initial animation preparations to be drawn // (setting initial alpha/translation) // TODO(b/254878364): remove this call to NPVC.getView() if (!migrateClocksToBlueprint()) { getShadeFoldAnimator().view?.let { OneShotPreDrawListener.add(it, onReady) } } } else { // No animation, call ready callback immediately onReady.run() Loading Loading @@ -233,11 +224,6 @@ constructor( statusListeners.remove(listener) } @VisibleForTesting internal suspend fun listenForDozing(scope: CoroutineScope): Job { return scope.launch { keyguardInteractor.get().isDozing.collect { isDozing = it } } } interface FoldAodAnimationStatus { fun onFoldToAodAnimationChanged() } Loading
packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt +0 −25 Original line number Diff line number Diff line Loading @@ -133,47 +133,34 @@ class FoldAodAnimationControllerTest : SysuiTestCase() { @Test fun onFolded_aodDisabled_doesNotLogLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(true) setAodEnabled(enabled = false) yield() fold() simulateScreenTurningOn() verifyNoMoreInteractions(latencyTracker) job.cancel() } @Test fun onFolded_aodEnabled_logsLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(true) setAodEnabled(enabled = true) yield() fold() simulateScreenTurningOn() verify(latencyTracker).onActionStart(any()) verify(latencyTracker).onActionEnd(any()) job.cancel() } @Test fun onFolded_onScreenTurningOnInvokedTwice_doesNotLogLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(true) setAodEnabled(enabled = true) yield() fold() simulateScreenTurningOn() reset(latencyTracker) Loading @@ -183,19 +170,14 @@ class FoldAodAnimationControllerTest : SysuiTestCase() { verify(latencyTracker, never()).onActionStart(any()) verify(latencyTracker, never()).onActionEnd(any()) job.cancel() } @Test fun onFolded_onScreenTurningOnWithoutDozingThenWithDozing_doesNotLogLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(false) setAodEnabled(enabled = true) yield() fold() simulateScreenTurningOn() reset(latencyTracker) Loading @@ -208,19 +190,14 @@ class FoldAodAnimationControllerTest : SysuiTestCase() { verify(latencyTracker, never()).onActionStart(any()) verify(latencyTracker, never()).onActionEnd(any()) job.cancel() } @Test fun onFolded_animationCancelled_doesNotLogLatency() = runBlocking(IMMEDIATE) { val job = underTest.listenForDozing(this) keyguardRepository.setIsDozing(true) setAodEnabled(enabled = true) yield() fold() underTest.onScreenTurningOn({}) // The body of onScreenTurningOn is executed on fakeExecutor, Loading @@ -230,8 +207,6 @@ class FoldAodAnimationControllerTest : SysuiTestCase() { verify(latencyTracker).onActionStart(any()) verify(latencyTracker).onActionCancel(any()) job.cancel() } private fun simulateScreenTurningOn() { Loading