summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/WindowManager.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java2
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java10
4 files changed, 17 insertions, 6 deletions
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 1b37ed47c392..eb6b17e08f46 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -1581,6 +1581,15 @@ public interface WindowManager extends ViewManager {
public static final int ROTATION_ANIMATION_JUMPCUT = 2;
/**
+ * Value for {@link #rotationAnimation} to specify seamless rotation mode.
+ * This works like JUMPCUT but will fall back to CROSSFADE if rotation
+ * can't be applied without pausing the screen.
+ *
+ * @hide
+ */
+ public static final int ROTATION_ANIMATION_SEAMLESS = 3;
+
+ /**
* Define the exit and entry animations used on this window when the device is rotated.
* This only has an affect if the incoming and outgoing topmost
* opaque windows have the #FLAG_FULLSCREEN bit set and are not covered
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index 048c4bd4a770..8cabfb93bf32 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -461,7 +461,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
// happens to occur during the launch.
ActivityOptions o = ActivityOptions.makeBasic();
o.setRotationAnimationHint(
- WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE);
+ WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS);
try {
result = ActivityManagerNative.getDefault().startActivityAsUser(
null, getContext().getBasePackageName(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index b4368d69343d..447a343897b3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -3419,7 +3419,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
// force the crossfade animation if an orientation change
// happens to occur during the launch.
options.setRotationAnimationHint(
- WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE);
+ WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS);
}
try {
result = ActivityManagerNative.getDefault().startActivityAsUser(
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index f7454a3a5170..0b07902eb440 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -2891,6 +2891,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
switch (animationHint) {
case ROTATION_ANIMATION_CROSSFADE:
+ case ROTATION_ANIMATION_SEAMLESS: // Crossfade is fallback for seamless.
anim[0] = R.anim.rotation_animation_xfade_exit;
anim[1] = R.anim.rotation_animation_enter;
break;
@@ -7751,14 +7752,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
return false;
}
+ final WindowState w = mTopFullscreenOpaqueWindowState;
+
// We only enable seamless rotation if the top window has requested
// it and is in the fullscreen opaque state. Seamless rotation
// requires freezing various Surface states and won't work well
// with animations, so we disable it in the animation case for now.
- if (mTopFullscreenOpaqueWindowState != null && mTopIsFullscreen &&
- !mTopFullscreenOpaqueWindowState.isAnimatingLw() &&
- mTopFullscreenOpaqueWindowState.getAttrs().rotationAnimation ==
- ROTATION_ANIMATION_JUMPCUT) {
+ if (w != null && mTopIsFullscreen && !w.isAnimatingLw() &&
+ ((w.getAttrs().rotationAnimation == ROTATION_ANIMATION_JUMPCUT) ||
+ (w.getAttrs().rotationAnimation == ROTATION_ANIMATION_SEAMLESS))) {
return true;
}
return false;