Fixed some rotation while unlocking screen issue.
- Don't use snapshot that is in different orientation than the current
display orientation. This is a follow up to a previous CL whose
implementation wasn't complete.
- Disabled fixed for unnecessary relaunches when unlocking with
fingerprint sensor introduced in ag/2310557. This causes regression in
the experience from N. We still have the relaunches, but we cover up the
delay by displaying the apps starting window.
- Added more trace log points.
Fixes: 62796190
Fixes: 62904487
Bug: 38494778
Test: go/wm-smoke and manual verification of bug.
Change-Id: Id161a334cb4455dd9eb25c6bb63d5bb3f8a6f1f0
diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java
index fe74947..5f34c60 100644
--- a/services/core/java/com/android/server/wm/AppWindowContainerController.java
+++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java
@@ -614,8 +614,8 @@
return STARTING_WINDOW_TYPE_SPLASH_SCREEN;
} else if (taskSwitch && allowTaskSnapshot) {
return snapshot == null ? STARTING_WINDOW_TYPE_NONE
- : snapshotFillsWidth(snapshot) || fromRecents ? STARTING_WINDOW_TYPE_SNAPSHOT
- : STARTING_WINDOW_TYPE_SPLASH_SCREEN;
+ : snapshotOrientationSameAsDisplay(snapshot) || fromRecents
+ ? STARTING_WINDOW_TYPE_SNAPSHOT : STARTING_WINDOW_TYPE_SPLASH_SCREEN;
} else {
return STARTING_WINDOW_TYPE_NONE;
}
@@ -640,7 +640,7 @@
return true;
}
- private boolean snapshotFillsWidth(TaskSnapshot snapshot) {
+ private boolean snapshotOrientationSameAsDisplay(TaskSnapshot snapshot) {
if (snapshot == null) {
return false;
}
@@ -655,7 +655,9 @@
mService.mPolicy.getStableInsetsLw(di.rotation, di.logicalWidth, di.logicalHeight,
stableInsets);
displayBounds.inset(stableInsets);
- return rect.width() >= displayBounds.width();
+ final boolean snapshotInLandscape = rect.width() >= rect.height();
+ final boolean displayInLandscape = displayBounds.width() >= displayBounds.height();
+ return snapshotInLandscape == displayInLandscape;
}
public void removeStartingWindow() {