Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11f232ce authored by Riddle Hsu's avatar Riddle Hsu
Browse files

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
parent 5b6127df
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
@@ -39,4 +39,9 @@ class SnapshotStartingData extends StartingData {
        return mService.mStartingSurfaceController.createTaskSnapshotSurface(activity,
                mSnapshot);
    }

    @Override
    boolean hasImeSurface() {
        return mSnapshot.hasImeSurface();
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -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