Reset NotificationPanelView when pressing power button before fold to AOD animation

When we hit power button during folding: before
fold to AOD transition starts but after we prepared
the starting params of NotificationPanelView it remained
in this state (alpha = 0, translation = -x). So it led
to an issue that user don't see the keyguard.

Added logic that resets this view to its original
state when we are waking up and the animation hasn't
started yet.

Bug: 215703534
Test: fold and quickly press power button
 => check that keyguard is visible
Test: fold to AOD and press power button => keyguard visible
Test: lock/unlock using power button
Change-Id: I88b79aca462137723e174f2f4196cbd08d71f664
This commit is contained in:
Nick Chameyev
2022-01-25 16:48:33 +00:00
parent 615951d16e
commit 0950ca8abc
3 changed files with 36 additions and 8 deletions

View File

@@ -3896,6 +3896,15 @@ public class NotificationPanelViewController extends PanelViewController {
mKeyguardStatusViewController.animateFoldToAod();
}
/**
* Cancels fold to AOD transition and resets view state
*/
public void cancelFoldToAodAnimation() {
cancelAnimation();
resetAlpha();
resetTranslation();
}
/** */
public void setImportantForAccessibility(int mode) {
mView.setImportantForAccessibility(mode);
@@ -4014,6 +4023,10 @@ public class NotificationPanelViewController extends PanelViewController {
mView.setTranslationX(0f);
}
public void resetAlpha() {
mView.setAlpha(1f);
}
public ViewPropertyAnimator fadeOut(long startDelayMs, long durationMs, Runnable endAction) {
return mView.animate().alpha(0).setStartDelay(startDelayMs).setDuration(
durationMs).setInterpolator(Interpolators.ALPHA_OUT).withLayer().withEndAction(

View File

@@ -3001,7 +3001,7 @@ public class StatusBar extends CoreStartable implements
}
private void onLaunchTransitionFadingEnded() {
mNotificationPanelViewController.setAlpha(1.0f);
mNotificationPanelViewController.resetAlpha();
mNotificationPanelViewController.onAffordanceLaunchEnded();
releaseGestureWakeLock();
runLaunchTransitionEndRunnable();
@@ -3032,7 +3032,7 @@ public class StatusBar extends CoreStartable implements
}
updateScrimController();
mPresenter.updateMediaMetaData(false, true);
mNotificationPanelViewController.setAlpha(1);
mNotificationPanelViewController.resetAlpha();
mNotificationPanelViewController.fadeOut(
FADE_KEYGUARD_START_DELAY, FADE_KEYGUARD_DURATION,
this::onLaunchTransitionFadingEnded);
@@ -3133,7 +3133,7 @@ public class StatusBar extends CoreStartable implements
releaseGestureWakeLock();
mNotificationPanelViewController.onAffordanceLaunchEnded();
mNotificationPanelViewController.cancelAnimation();
mNotificationPanelViewController.setAlpha(1f);
mNotificationPanelViewController.resetAlpha();
mNotificationPanelViewController.resetTranslation();
mNotificationPanelViewController.resetViewGroupFade();
updateDozingState();

View File

@@ -16,8 +16,10 @@
package com.android.systemui.unfold
import android.os.Handler
import android.os.PowerManager
import android.provider.Settings
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.statusbar.LightRevealScrim
@@ -37,6 +39,7 @@ import javax.inject.Inject
class FoldAodAnimationController
@Inject
constructor(
@Main private val handler: Handler,
private val keyguardViewMediatorLazy: Lazy<KeyguardViewMediator>,
private val wakefulnessLifecycle: WakefulnessLifecycle,
private val globalSettings: GlobalSettings
@@ -50,6 +53,14 @@ constructor(
private var shouldPlayAnimation = false
private val statusListeners = arrayListOf<FoldAodAnimationStatus>()
private val startAnimationRunnable = Runnable {
statusBar.notificationPanelViewController.startFoldToAodAnimation {
// End action
isAnimationPlaying = false
keyguardViewMediatorLazy.get().maybeHandlePendingLock()
}
}
private var isAnimationPlaying = false
override fun initialize(statusBar: StatusBar, lightRevealScrim: LightRevealScrim) {
@@ -79,6 +90,11 @@ constructor(
}
override fun onStartedWakingUp() {
if (isAnimationPlaying) {
handler.removeCallbacks(startAnimationRunnable)
statusBar.notificationPanelViewController.cancelFoldToAodAnimation();
}
shouldPlayAnimation = false
isAnimationPlaying = false
}
@@ -115,11 +131,10 @@ constructor(
fun onScreenTurnedOn() {
if (shouldPlayAnimation) {
statusBar.notificationPanelViewController.startFoldToAodAnimation {
// End action
isAnimationPlaying = false
keyguardViewMediatorLazy.get().maybeHandlePendingLock()
}
handler.removeCallbacks(startAnimationRunnable)
// Post starting the animation to the next frame to avoid junk due to inset changes
handler.post(startAnimationRunnable)
shouldPlayAnimation = false
}
}