Loading services/core/java/com/android/server/wm/ActivityRecord.java +5 −0 Original line number Diff line number Diff line Loading @@ -6308,6 +6308,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A resolveSizeCompatModeConfiguration(newParentConfiguration); } else { super.resolveOverrideConfiguration(newParentConfiguration); // We ignore activities' requested orientation in multi-window modes. Task level may // take them into consideration when calculating bounds. if (getParent() != null && getParent().inMultiWindowMode()) { resolvedConfig.orientation = Configuration.ORIENTATION_UNDEFINED; } applyAspectRatio(resolvedConfig.windowConfiguration.getBounds(), newParentConfiguration.windowConfiguration.getAppBounds(), newParentConfiguration.windowConfiguration.getBounds()); Loading services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +61 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.wm; import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.os.Process.NOBODY_UID; Loading Loading @@ -62,6 +63,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.never; import android.app.ActivityOptions; import android.app.WindowConfiguration; import android.app.servertransaction.ActivityConfigurationChangeItem; import android.app.servertransaction.ClientTransaction; import android.app.servertransaction.PauseActivityItem; Loading @@ -70,6 +72,7 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Rect; import android.os.Bundle; import android.os.PersistableBundle; import android.platform.test.annotations.Presubmit; Loading Loading @@ -375,6 +378,64 @@ public class ActivityRecordTests extends ActivityTestsBase { eq(mActivity.appToken), eq(expected)); } @Test public void ignoreRequestedOrientationInFreeformWindows() { mStack.setWindowingMode(WindowConfiguration.WINDOWING_MODE_FREEFORM); final Rect stableRect = new Rect(); mStack.getDisplay().mDisplayContent.getStableRect(stableRect); final boolean isScreenPortrait = stableRect.width() <= stableRect.height(); final Rect bounds = new Rect(stableRect); if (isScreenPortrait) { // Landscape bounds final int newHeight = stableRect.width() - 10; bounds.top = stableRect.top + (stableRect.height() - newHeight) / 2; bounds.bottom = bounds.top + newHeight; } else { // Portrait bounds final int newWidth = stableRect.height() - 10; bounds.left = stableRect.left + (stableRect.width() - newWidth) / 2; bounds.right = bounds.left + newWidth; } mTask.setBounds(bounds); // Requests orientation that's different from its bounds. mActivity.setRequestedOrientation( isScreenPortrait ? SCREEN_ORIENTATION_PORTRAIT : SCREEN_ORIENTATION_LANDSCAPE); // Asserts it has orientation derived from bounds. assertEquals(isScreenPortrait ? ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT, mActivity.getConfiguration().orientation); } @Test public void ignoreRequestedOrientationInSplitWindows() { mStack.setWindowingMode(WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); final Rect stableRect = new Rect(); mStack.getDisplay().mDisplayContent.getStableRect(stableRect); final boolean isScreenPortrait = stableRect.width() <= stableRect.height(); final Rect bounds = new Rect(stableRect); if (isScreenPortrait) { // Landscape bounds final int newHeight = stableRect.width() - 10; bounds.top = stableRect.top + (stableRect.height() - newHeight) / 2; bounds.bottom = bounds.top + newHeight; } else { // Portrait bounds final int newWidth = stableRect.height() - 10; bounds.left = stableRect.left + (stableRect.width() - newWidth) / 2; bounds.right = bounds.left + newWidth; } mTask.setBounds(bounds); // Requests orientation that's different from its bounds. mActivity.setRequestedOrientation( isScreenPortrait ? SCREEN_ORIENTATION_PORTRAIT : SCREEN_ORIENTATION_LANDSCAPE); // Asserts it has orientation derived from bounds. assertEquals(isScreenPortrait ? ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT, mActivity.getConfiguration().orientation); } @Test public void testShouldMakeActive_deferredResume() { mActivity.setState(ActivityStack.ActivityState.STOPPED, "Testing"); Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +5 −0 Original line number Diff line number Diff line Loading @@ -6308,6 +6308,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A resolveSizeCompatModeConfiguration(newParentConfiguration); } else { super.resolveOverrideConfiguration(newParentConfiguration); // We ignore activities' requested orientation in multi-window modes. Task level may // take them into consideration when calculating bounds. if (getParent() != null && getParent().inMultiWindowMode()) { resolvedConfig.orientation = Configuration.ORIENTATION_UNDEFINED; } applyAspectRatio(resolvedConfig.windowConfiguration.getBounds(), newParentConfiguration.windowConfiguration.getAppBounds(), newParentConfiguration.windowConfiguration.getBounds()); Loading
services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +61 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.wm; import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.os.Process.NOBODY_UID; Loading Loading @@ -62,6 +63,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.never; import android.app.ActivityOptions; import android.app.WindowConfiguration; import android.app.servertransaction.ActivityConfigurationChangeItem; import android.app.servertransaction.ClientTransaction; import android.app.servertransaction.PauseActivityItem; Loading @@ -70,6 +72,7 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Rect; import android.os.Bundle; import android.os.PersistableBundle; import android.platform.test.annotations.Presubmit; Loading Loading @@ -375,6 +378,64 @@ public class ActivityRecordTests extends ActivityTestsBase { eq(mActivity.appToken), eq(expected)); } @Test public void ignoreRequestedOrientationInFreeformWindows() { mStack.setWindowingMode(WindowConfiguration.WINDOWING_MODE_FREEFORM); final Rect stableRect = new Rect(); mStack.getDisplay().mDisplayContent.getStableRect(stableRect); final boolean isScreenPortrait = stableRect.width() <= stableRect.height(); final Rect bounds = new Rect(stableRect); if (isScreenPortrait) { // Landscape bounds final int newHeight = stableRect.width() - 10; bounds.top = stableRect.top + (stableRect.height() - newHeight) / 2; bounds.bottom = bounds.top + newHeight; } else { // Portrait bounds final int newWidth = stableRect.height() - 10; bounds.left = stableRect.left + (stableRect.width() - newWidth) / 2; bounds.right = bounds.left + newWidth; } mTask.setBounds(bounds); // Requests orientation that's different from its bounds. mActivity.setRequestedOrientation( isScreenPortrait ? SCREEN_ORIENTATION_PORTRAIT : SCREEN_ORIENTATION_LANDSCAPE); // Asserts it has orientation derived from bounds. assertEquals(isScreenPortrait ? ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT, mActivity.getConfiguration().orientation); } @Test public void ignoreRequestedOrientationInSplitWindows() { mStack.setWindowingMode(WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); final Rect stableRect = new Rect(); mStack.getDisplay().mDisplayContent.getStableRect(stableRect); final boolean isScreenPortrait = stableRect.width() <= stableRect.height(); final Rect bounds = new Rect(stableRect); if (isScreenPortrait) { // Landscape bounds final int newHeight = stableRect.width() - 10; bounds.top = stableRect.top + (stableRect.height() - newHeight) / 2; bounds.bottom = bounds.top + newHeight; } else { // Portrait bounds final int newWidth = stableRect.height() - 10; bounds.left = stableRect.left + (stableRect.width() - newWidth) / 2; bounds.right = bounds.left + newWidth; } mTask.setBounds(bounds); // Requests orientation that's different from its bounds. mActivity.setRequestedOrientation( isScreenPortrait ? SCREEN_ORIENTATION_PORTRAIT : SCREEN_ORIENTATION_LANDSCAPE); // Asserts it has orientation derived from bounds. assertEquals(isScreenPortrait ? ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT, mActivity.getConfiguration().orientation); } @Test public void testShouldMakeActive_deferredResume() { mActivity.setState(ActivityStack.ActivityState.STOPPED, "Testing"); Loading