summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/InsetsController.java18
-rw-r--r--core/java/android/view/PendingInsetsController.java14
-rw-r--r--core/java/android/view/WindowInsetsController.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java12
-rw-r--r--services/core/java/com/android/server/wm/InsetsPolicy.java2
5 files changed, 49 insertions, 4 deletions
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java
index 8a2154388e03..de786bed3144 100644
--- a/core/java/android/view/InsetsController.java
+++ b/core/java/android/view/InsetsController.java
@@ -260,6 +260,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
private final boolean mHasAnimationCallbacks;
private final @InsetsType int mRequestedTypes;
private final long mDurationMs;
+ private final boolean mDisable;
private ThreadLocal<AnimationHandler> mSfAnimationHandlerThreadLocal =
new ThreadLocal<AnimationHandler>() {
@@ -272,11 +273,12 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
};
public InternalAnimationControlListener(boolean show, boolean hasAnimationCallbacks,
- int requestedTypes) {
+ int requestedTypes, boolean disable) {
mShow = show;
mHasAnimationCallbacks = hasAnimationCallbacks;
mRequestedTypes = requestedTypes;
mDurationMs = calculateDurationMs();
+ mDisable = disable;
}
@Override
@@ -284,6 +286,10 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
mController = controller;
if (DEBUG) Log.d(TAG, "default animation onReady types: " + types);
+ if (mDisable) {
+ onAnimationFinish();
+ return;
+ }
mAnimator = ValueAnimator.ofFloat(0f, 1f);
mAnimator.setDuration(mDurationMs);
mAnimator.setInterpolator(new LinearInterpolator());
@@ -477,6 +483,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
private DisplayCutout mLastDisplayCutout;
private boolean mStartingAnimation;
private int mCaptionInsetsHeight = 0;
+ private boolean mAnimationsDisabled;
private Runnable mPendingControlTimeout = this::abortPendingImeControlRequest;
private final ArrayList<OnControllableInsetsChangedListener> mControllableInsetsChangedListeners
@@ -1213,8 +1220,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
}
boolean hasAnimationCallbacks = mHost.hasAnimationCallbacks();
- final InternalAnimationControlListener listener =
- new InternalAnimationControlListener(show, hasAnimationCallbacks, types);
+ final InternalAnimationControlListener listener = new InternalAnimationControlListener(
+ show, hasAnimationCallbacks, types, mAnimationsDisabled);
// Show/hide animations always need to be relative to the display frame, in order that shown
// and hidden state insets are correct.
@@ -1329,6 +1336,11 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
return mHost.getSystemBarsBehavior();
}
+ @Override
+ public void setAnimationsDisabled(boolean disable) {
+ mAnimationsDisabled = disable;
+ }
+
private @InsetsType int calculateControllableTypes() {
@InsetsType int result = 0;
for (int i = mSourceConsumers.size() - 1; i >= 0; i--) {
diff --git a/core/java/android/view/PendingInsetsController.java b/core/java/android/view/PendingInsetsController.java
index 0283ada0dd40..c018d1cf1782 100644
--- a/core/java/android/view/PendingInsetsController.java
+++ b/core/java/android/view/PendingInsetsController.java
@@ -38,6 +38,7 @@ public class PendingInsetsController implements WindowInsetsController {
private @Appearance int mAppearance;
private @Appearance int mAppearanceMask;
private @Behavior int mBehavior = KEEP_BEHAVIOR;
+ private boolean mAnimationsDisabled;
private final InsetsState mDummyState = new InsetsState();
private InsetsController mReplayedInsetsController;
private ArrayList<OnControllableInsetsChangedListener> mControllableInsetsChangedListeners
@@ -103,6 +104,15 @@ public class PendingInsetsController implements WindowInsetsController {
}
@Override
+ public void setAnimationsDisabled(boolean disable) {
+ if (mReplayedInsetsController != null) {
+ mReplayedInsetsController.setAnimationsDisabled(disable);
+ } else {
+ mAnimationsDisabled = disable;
+ }
+ }
+
+ @Override
public InsetsState getState() {
return mDummyState;
}
@@ -151,6 +161,9 @@ public class PendingInsetsController implements WindowInsetsController {
if (mCaptionInsetsHeight != 0) {
controller.setCaptionInsetsHeight(mCaptionInsetsHeight);
}
+ if (mAnimationsDisabled) {
+ controller.setAnimationsDisabled(true);
+ }
int size = mRequests.size();
for (int i = 0; i < size; i++) {
mRequests.get(i).replay(controller);
@@ -167,6 +180,7 @@ public class PendingInsetsController implements WindowInsetsController {
mBehavior = KEEP_BEHAVIOR;
mAppearance = 0;
mAppearanceMask = 0;
+ mAnimationsDisabled = false;
// After replaying, we forward everything directly to the replayed instance.
mReplayedInsetsController = controller;
diff --git a/core/java/android/view/WindowInsetsController.java b/core/java/android/view/WindowInsetsController.java
index 3d348efc7f0f..1a9003581078 100644
--- a/core/java/android/view/WindowInsetsController.java
+++ b/core/java/android/view/WindowInsetsController.java
@@ -222,6 +222,13 @@ public interface WindowInsetsController {
@Behavior int getSystemBarsBehavior();
/**
+ * Disables or enables the animations.
+ *
+ * @hide
+ */
+ void setAnimationsDisabled(boolean disable);
+
+ /**
* @hide
*/
InsetsState getState();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index bc94cdeba37f..81d0699a29e6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -460,6 +460,18 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
}
@Override
+ public void onStartedWakingUp() {
+ mStatusBar.getNotificationShadeWindowView().getWindowInsetsController()
+ .setAnimationsDisabled(false);
+ }
+
+ @Override
+ public void onStartedGoingToSleep() {
+ mStatusBar.getNotificationShadeWindowView().getWindowInsetsController()
+ .setAnimationsDisabled(true);
+ }
+
+ @Override
public void onFinishedGoingToSleep() {
mBouncer.onScreenTurnedOff();
}
diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java
index be6e4b76e8ed..3d7873ad2f7c 100644
--- a/services/core/java/com/android/server/wm/InsetsPolicy.java
+++ b/services/core/java/com/android/server/wm/InsetsPolicy.java
@@ -384,7 +384,7 @@ class InsetsPolicy {
InsetsPolicyAnimationControlCallbacks mControlCallbacks;
InsetsPolicyAnimationControlListener(boolean show, Runnable finishCallback, int types) {
- super(show, false /* hasCallbacks */, types);
+ super(show, false /* hasCallbacks */, types, false /* disable */);
mFinishCallback = finishCallback;
mControlCallbacks = new InsetsPolicyAnimationControlCallbacks(this);
}