summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2020-06-24 10:03:41 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-06-24 10:03:41 +0000
commite99df6dbec822db6321340a35c8fabc289c4e320 (patch)
tree35f2bde7385a9763fcf2d721cd5dfb2f0d8998ec
parent18905eb623ee5b30c1538a0add0ee1aec33df4be (diff)
parent7b5b8cfbcf77b06c12e741e246aaa521bdb89d9d (diff)
Merge "Use rotation animation for orientation change of non-occluded activity" into rvc-dev
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java15
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java1
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java1
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java1
5 files changed, 28 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 9b5d94ebb1ac..afe40b8d8016 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -1185,6 +1185,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
activity.onRemovedFromDisplay();
+ if (activity == mFixedRotationLaunchingApp) {
+ setFixedRotationLaunchingAppUnchecked(null);
+ }
}
@Override
@@ -1468,6 +1471,12 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
// It has been set and not yet finished.
return true;
}
+ if (!r.occludesParent() || r.isVisible()) {
+ // While entering or leaving a translucent or floating activity (e.g. dialog style),
+ // there is a visible activity in the background. Then it still needs rotation animation
+ // to cover the activity configuration change.
+ return false;
+ }
if (checkOpening) {
if (!mAppTransition.isTransitionSet() || !mOpeningApps.contains(r)) {
// Apply normal rotation animation in case of the activity set different requested
@@ -5636,6 +5645,12 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
*/
void onStartRecentsAnimation(@NonNull ActivityRecord r) {
mAnimatingRecents = r;
+ if (r.isVisible() && mFocusedApp != null && !mFocusedApp.occludesParent()) {
+ // The recents activity has shown with the orientation determined by the top
+ // activity, keep its current orientation to avoid flicking by the configuration
+ // change of visible activity.
+ return;
+ }
rotateInDifferentOrientationIfNeeded(r);
if (r.hasFixedRotationTransform()) {
// Set the record so we can recognize it to continue to update display orientation
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index 2171d75256f2..668f04785bbc 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -1506,6 +1506,7 @@ public class ActivityRecordTests extends ActivityTestsBase {
.setRotation((mActivity.getWindowConfiguration().getRotation() + 1) % 4)
.build();
setRotatedScreenOrientationSilently(mActivity);
+ mActivity.setVisible(false);
final IWindowSession session = WindowManagerGlobal.getWindowSession();
spyOn(session);
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
index 4dbf79a4a5a6..1d13788bc523 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java
@@ -456,6 +456,7 @@ public class AppWindowTokenTests extends WindowTestsBase {
@Test
public void testTransferStartingWindowSetFixedRotation() {
final ActivityRecord topActivity = createTestActivityRecordForGivenTask(mTask);
+ topActivity.setVisible(false);
mTask.positionChildAt(topActivity, POSITION_TOP);
mActivity.addStartingWindow(mPackageName,
android.R.style.Theme, null, "Test", 0, 0, 0, 0, null, true, true, false, true,
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index 689674011d30..105af4fce394 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -1081,6 +1081,7 @@ public class DisplayContentTests extends WindowTestsBase {
mDisplayContent.onRequestedOverrideConfigurationChanged(config);
final ActivityRecord app = mAppWindow.mActivityRecord;
+ app.setVisible(false);
mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
false /* alwaysKeepCurrent */);
mDisplayContent.mOpeningApps.add(app);
@@ -1135,6 +1136,7 @@ public class DisplayContentTests extends WindowTestsBase {
// Launch another activity before the transition is finished.
final ActivityRecord app2 = new ActivityTestsBase.StackBuilder(mWm.mRoot)
.setDisplay(mDisplayContent).build().getTopMostActivity();
+ app2.setVisible(false);
mDisplayContent.mOpeningApps.add(app2);
app2.setRequestedOrientation(newOrientation);
@@ -1277,6 +1279,14 @@ public class DisplayContentTests extends WindowTestsBase {
mDisplayContent.setFixedRotationLaunchingAppUnchecked(mAppWindow.mActivityRecord);
displayRotation.setRotation((displayRotation.getRotation() + 1) % 4);
assertTrue(displayRotation.updateRotationUnchecked(false));
+
+ // The recents activity should not apply fixed rotation if the top activity is not opaque.
+ mDisplayContent.mFocusedApp = mAppWindow.mActivityRecord;
+ doReturn(false).when(mDisplayContent.mFocusedApp).occludesParent();
+ doReturn(ROTATION_90).when(mDisplayContent).rotationForActivityInDifferentOrientation(
+ eq(recentsActivity));
+ mDisplayContent.mFixedRotationTransitionListener.onStartRecentsAnimation(recentsActivity);
+ assertFalse(recentsActivity.hasFixedRotationTransform());
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index 130e5550b2a2..3c98272311f7 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -517,6 +517,7 @@ public class SizeCompatTests extends ActivityTestsBase {
setUpApp(new TestDisplayContent.Builder(mService, dw, dh).setNotch(notchHeight).build());
addStatusBar(mActivity.mDisplayContent);
+ mActivity.setVisible(false);
mActivity.mDisplayContent.prepareAppTransition(WindowManager.TRANSIT_ACTIVITY_OPEN,
false /* alwaysKeepCurrent */);
mActivity.mDisplayContent.mOpeningApps.add(mActivity);