Disable fixed rotation for starting window with ime surface
The IME window may show later depends on whether the task snapshot
contains the snapshot of IME surface, and whether the edit view
is still focused. If display orientation is changed, IME window may
take longer time to redraw. That requires to adjust the timing
of the removal starting window to avoid flickering.
For short term, just fallback the case to legacy behavior that
applies normal screen rotation animation.
Bug: 160451808
Test: Launch a landscape app which opens IME from portrait home.
Return to home and launch it again. The IME window isn't
flickering in 2 orientations.
Change-Id: Idfdf129adbfbee6634d8a27aa78da1f631bd213b
This commit is contained in:
@@ -1538,6 +1538,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
// to cover the activity configuration change.
|
||||
return false;
|
||||
}
|
||||
if (r.mStartingData != null && r.mStartingData.hasImeSurface()) {
|
||||
// Currently it is unknown that when will IME window be ready. Reject the case to
|
||||
// avoid flickering by showing IME in inconsistent orientation.
|
||||
return false;
|
||||
}
|
||||
if (checkOpening) {
|
||||
if (!mAppTransition.isTransitionSet() || !mOpeningApps.contains(r)) {
|
||||
// Apply normal rotation animation in case of the activity set different requested
|
||||
|
||||
@@ -39,4 +39,9 @@ class SnapshotStartingData extends StartingData {
|
||||
return mService.mStartingSurfaceController.createTaskSnapshotSurface(activity,
|
||||
mSnapshot);
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean hasImeSurface() {
|
||||
return mSnapshot.hasImeSurface();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,4 +40,9 @@ public abstract class StartingData {
|
||||
* {@link StartingSurface#remove}
|
||||
*/
|
||||
abstract StartingSurface createStartingSurface(ActivityRecord activity);
|
||||
|
||||
/** @see android.window.TaskSnapshot#hasImeSurface() */
|
||||
boolean hasImeSurface() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +118,9 @@ public class StartingSurfaceController {
|
||||
return null;
|
||||
}
|
||||
if (topFullscreenActivity.getWindowConfiguration().getRotation()
|
||||
!= taskSnapshot.getRotation()) {
|
||||
!= taskSnapshot.getRotation()
|
||||
// Use normal rotation to avoid flickering of IME window in old orientation.
|
||||
&& !taskSnapshot.hasImeSurface()) {
|
||||
// The snapshot should have been checked by ActivityRecord#isSnapshotCompatible
|
||||
// that the activity will be updated to the same rotation as the snapshot. Since
|
||||
// the transition is not started yet, fixed rotation transform needs to be applied
|
||||
|
||||
Reference in New Issue
Block a user