Loading services/core/java/com/android/server/wm/DisplayContent.java +6 −6 Original line number Diff line number Diff line Loading @@ -1572,12 +1572,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } final int rotation = rotationForActivityInDifferentOrientation(r); if (rotation == ROTATION_UNDEFINED) { // The display rotation won't be changed by current top activity. If there was fixed // rotation activity, its rotated state should be cleared to cancel the adjustments. if (hasTopFixedRotationLaunchingApp() // Avoid breaking recents animation. && !mFixedRotationLaunchingApp.getTask().isAnimatingByRecents()) { clearFixedRotationLaunchingApp(); // The display rotation won't be changed by current top activity. The client side // adjustments of previous rotated activity should be cleared earlier. Otherwise if // the current top is in the same process, it may get the rotated state. The transform // will be cleared later with transition callback to ensure smooth animation. if (hasTopFixedRotationLaunchingApp()) { mFixedRotationLaunchingApp.notifyFixedRotationTransform(false /* enabled */); } return false; } Loading services/core/java/com/android/server/wm/WindowToken.java +1 −1 Original line number Diff line number Diff line Loading @@ -549,7 +549,7 @@ class WindowToken extends WindowContainer<WindowState> { } /** Notifies application side to enable or disable the rotation adjustment of display info. */ private void notifyFixedRotationTransform(boolean enabled) { void notifyFixedRotationTransform(boolean enabled) { FixedRotationAdjustments adjustments = null; // A token may contain windows of the same processes or different processes. The list is // used to avoid sending the same adjustments to a process multiple times. Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +3 −2 Original line number Diff line number Diff line Loading @@ -1489,7 +1489,7 @@ public class DisplayContentTests extends WindowTestsBase { } @Test public void testClearIntermediateFixedRotation() throws RemoteException { public void testClearIntermediateFixedRotationAdjustments() throws RemoteException { final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build(); mDisplayContent.setFixedRotationLaunchingApp(activity, (mDisplayContent.getRotation() + 1) % 4); Loading @@ -1508,7 +1508,8 @@ public class DisplayContentTests extends WindowTestsBase { ArgumentCaptor.forClass(FixedRotationAdjustmentsItem.class); verify(mAtm.getLifecycleManager(), atLeastOnce()).scheduleTransaction( eq(activity.app.getThread()), adjustmentsCaptor.capture()); assertFalse(activity.hasFixedRotationTransform()); // The transformation is kept for animation in real case. assertTrue(activity.hasFixedRotationTransform()); final FixedRotationAdjustmentsItem clearAdjustments = FixedRotationAdjustmentsItem.obtain( activity.token, null /* fixedRotationAdjustments */); // The captor may match other items. The first one must be the item to clear adjustments. Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +6 −6 Original line number Diff line number Diff line Loading @@ -1572,12 +1572,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } final int rotation = rotationForActivityInDifferentOrientation(r); if (rotation == ROTATION_UNDEFINED) { // The display rotation won't be changed by current top activity. If there was fixed // rotation activity, its rotated state should be cleared to cancel the adjustments. if (hasTopFixedRotationLaunchingApp() // Avoid breaking recents animation. && !mFixedRotationLaunchingApp.getTask().isAnimatingByRecents()) { clearFixedRotationLaunchingApp(); // The display rotation won't be changed by current top activity. The client side // adjustments of previous rotated activity should be cleared earlier. Otherwise if // the current top is in the same process, it may get the rotated state. The transform // will be cleared later with transition callback to ensure smooth animation. if (hasTopFixedRotationLaunchingApp()) { mFixedRotationLaunchingApp.notifyFixedRotationTransform(false /* enabled */); } return false; } Loading
services/core/java/com/android/server/wm/WindowToken.java +1 −1 Original line number Diff line number Diff line Loading @@ -549,7 +549,7 @@ class WindowToken extends WindowContainer<WindowState> { } /** Notifies application side to enable or disable the rotation adjustment of display info. */ private void notifyFixedRotationTransform(boolean enabled) { void notifyFixedRotationTransform(boolean enabled) { FixedRotationAdjustments adjustments = null; // A token may contain windows of the same processes or different processes. The list is // used to avoid sending the same adjustments to a process multiple times. Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +3 −2 Original line number Diff line number Diff line Loading @@ -1489,7 +1489,7 @@ public class DisplayContentTests extends WindowTestsBase { } @Test public void testClearIntermediateFixedRotation() throws RemoteException { public void testClearIntermediateFixedRotationAdjustments() throws RemoteException { final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build(); mDisplayContent.setFixedRotationLaunchingApp(activity, (mDisplayContent.getRotation() + 1) % 4); Loading @@ -1508,7 +1508,8 @@ public class DisplayContentTests extends WindowTestsBase { ArgumentCaptor.forClass(FixedRotationAdjustmentsItem.class); verify(mAtm.getLifecycleManager(), atLeastOnce()).scheduleTransaction( eq(activity.app.getThread()), adjustmentsCaptor.capture()); assertFalse(activity.hasFixedRotationTransform()); // The transformation is kept for animation in real case. assertTrue(activity.hasFixedRotationTransform()); final FixedRotationAdjustmentsItem clearAdjustments = FixedRotationAdjustmentsItem.obtain( activity.token, null /* fixedRotationAdjustments */); // The captor may match other items. The first one must be the item to clear adjustments. Loading