diff options
| author | 2023-03-17 17:12:54 +0000 | |
|---|---|---|
| committer | 2023-03-17 17:12:54 +0000 | |
| commit | 6c340b3af34c35e9d2aef8e21a14ac7bb688560b (patch) | |
| tree | ef9f8cb66ed90c826f976153c4019ceea8edd529 /libs | |
| parent | 2c2239cca9d71871c62ea07f56e196936fc82647 (diff) | |
| parent | 2e27a9c9e7d3c5981aa3f84964c6f87bd74ff398 (diff) | |
Merge "Force Kids app to use LANDSCAPE when in REVERSE_LANDSCAPE" into tm-qpr-dev am: 4ad16867ee am: 2e27a9c9e7
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21798742
Change-Id: I1c10f7c2e9ae3def5b0e5062f48f7354b44dfd2e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'libs')
2 files changed, 36 insertions, 7 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java index 2d84d211e30a..318a49a8de31 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java @@ -21,6 +21,8 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; +import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; +import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; import static android.view.Display.DEFAULT_DISPLAY; import android.app.ActivityManager; @@ -33,6 +35,7 @@ import android.graphics.Rect; import android.os.Binder; import android.os.Handler; import android.os.IBinder; +import android.view.Display; import android.view.InsetsSource; import android.view.InsetsState; import android.view.SurfaceControl; @@ -44,6 +47,7 @@ import android.window.WindowContainerTransaction; import androidx.annotation.NonNull; +import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; @@ -80,6 +84,12 @@ public class KidsModeTaskOrganizer extends ShellTaskOrganizer { private final DisplayController mDisplayController; private final DisplayInsetsController mDisplayInsetsController; + /** + * The value of the {@link R.bool.config_reverseDefaultRotation} property which defines how + * {@link Display#getRotation} values are mapped to screen orientations + */ + private final boolean mReverseDefaultRotationEnabled; + @VisibleForTesting ActivityManager.RunningTaskInfo mLaunchRootTask; @VisibleForTesting @@ -188,6 +198,8 @@ public class KidsModeTaskOrganizer extends ShellTaskOrganizer { mDisplayInsetsController = displayInsetsController; mKidsModeSettingsObserver = kidsModeSettingsObserver; shellInit.addInitCallback(this::onInit, this); + mReverseDefaultRotationEnabled = context.getResources().getBoolean( + R.bool.config_reverseDefaultRotation); } public KidsModeTaskOrganizer( @@ -211,6 +223,8 @@ public class KidsModeTaskOrganizer extends ShellTaskOrganizer { mDisplayController = displayController; mDisplayInsetsController = displayInsetsController; shellInit.addInitCallback(this::onInit, this); + mReverseDefaultRotationEnabled = context.getResources().getBoolean( + R.bool.config_reverseDefaultRotation); } /** @@ -294,7 +308,14 @@ public class KidsModeTaskOrganizer extends ShellTaskOrganizer { // Needed since many Kids apps aren't optimised to support both orientations and it will be // hard for kids to understand the app compat mode. // TODO(229961548): Remove ignoreOrientationRequest exception for Kids Mode once possible. - setIsIgnoreOrientationRequestDisabled(true); + if (mReverseDefaultRotationEnabled) { + setOrientationRequestPolicy(/* isIgnoreOrientationRequestDisabled */ true, + /* fromOrientations */ new int[]{SCREEN_ORIENTATION_REVERSE_LANDSCAPE}, + /* toOrientations */ new int[]{SCREEN_ORIENTATION_LANDSCAPE}); + } else { + setOrientationRequestPolicy(/* isIgnoreOrientationRequestDisabled */ true, + /* fromOrientations */ null, /* toOrientations */ null); + } final DisplayLayout displayLayout = mDisplayController.getDisplayLayout(DEFAULT_DISPLAY); if (displayLayout != null) { mDisplayWidth = displayLayout.width(); @@ -315,7 +336,8 @@ public class KidsModeTaskOrganizer extends ShellTaskOrganizer { @VisibleForTesting void disable() { - setIsIgnoreOrientationRequestDisabled(false); + setOrientationRequestPolicy(/* isIgnoreOrientationRequestDisabled */ false, + /* fromOrientations */ null, /* toOrientations */ null); mDisplayInsetsController.removeInsetsChangedListener(DEFAULT_DISPLAY, mOnInsetsChangedListener); mDisplayController.removeDisplayWindowListener(mOnDisplaysChangedListener); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java index ecfb427dbced..58e91cb50c7a 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify; import android.app.ActivityManager; import android.content.Context; import android.content.pm.ParceledListSlice; +import android.content.res.Resources; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; @@ -77,6 +78,7 @@ public class KidsModeTaskOrganizerTest extends ShellTestCase { @Mock private ShellInit mShellInit; @Mock private ShellCommandHandler mShellCommandHandler; @Mock private DisplayInsetsController mDisplayInsetsController; + @Mock private Resources mResources; KidsModeTaskOrganizer mOrganizer; @@ -89,10 +91,12 @@ public class KidsModeTaskOrganizerTest extends ShellTestCase { } catch (RemoteException e) { } // NOTE: KidsModeTaskOrganizer should have a null CompatUIController. - mOrganizer = spy(new KidsModeTaskOrganizer(mContext, mShellInit, mShellCommandHandler, - mTaskOrganizerController, mSyncTransactionQueue, mDisplayController, - mDisplayInsetsController, Optional.empty(), Optional.empty(), mObserver, - mTestExecutor, mHandler)); + doReturn(mResources).when(mContext).getResources(); + final KidsModeTaskOrganizer kidsModeTaskOrganizer = new KidsModeTaskOrganizer(mContext, + mShellInit, mShellCommandHandler, mTaskOrganizerController, mSyncTransactionQueue, + mDisplayController, mDisplayInsetsController, Optional.empty(), Optional.empty(), + mObserver, mTestExecutor, mHandler); + mOrganizer = spy(kidsModeTaskOrganizer); doReturn(mTransaction).when(mOrganizer).getWindowContainerTransaction(); doReturn(new InsetsState()).when(mDisplayController).getInsetsState(DEFAULT_DISPLAY); } @@ -112,6 +116,8 @@ public class KidsModeTaskOrganizerTest extends ShellTestCase { verify(mOrganizer, times(1)).registerOrganizer(); verify(mOrganizer, times(1)).createRootTask( eq(DEFAULT_DISPLAY), eq(WINDOWING_MODE_FULLSCREEN), eq(mOrganizer.mCookie)); + verify(mOrganizer, times(1)) + .setOrientationRequestPolicy(eq(true), any(), any()); final ActivityManager.RunningTaskInfo rootTask = createTaskInfo(12, WINDOWING_MODE_FULLSCREEN, mOrganizer.mCookie); @@ -132,10 +138,11 @@ public class KidsModeTaskOrganizerTest extends ShellTestCase { doReturn(false).when(mObserver).isEnabled(); mOrganizer.updateKidsModeState(); - verify(mOrganizer, times(1)).disable(); verify(mOrganizer, times(1)).unregisterOrganizer(); verify(mOrganizer, times(1)).deleteRootTask(rootTask.token); + verify(mOrganizer, times(1)) + .setOrientationRequestPolicy(eq(false), any(), any()); assertThat(mOrganizer.mLaunchRootLeash).isNull(); assertThat(mOrganizer.mLaunchRootTask).isNull(); } |