summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/LetterboxConfiguration.java52
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerShellCommand.java96
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/LetterboxConfigurationTest.java38
3 files changed, 185 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/LetterboxConfiguration.java b/services/core/java/com/android/server/wm/LetterboxConfiguration.java
index 9e3a611c0e70..97b3e3280f2b 100644
--- a/services/core/java/com/android/server/wm/LetterboxConfiguration.java
+++ b/services/core/java/com/android/server/wm/LetterboxConfiguration.java
@@ -880,6 +880,58 @@ final class LetterboxConfiguration {
false /* forTabletopMode */);
}
+ /**
+ * Overrides persistent horizontal position of the letterboxed app window when horizontal
+ * reachability is enabled.
+ */
+ void setPersistentLetterboxPositionForHorizontalReachability(boolean forBookMode,
+ @LetterboxHorizontalReachabilityPosition int position) {
+ mLetterboxConfigurationPersister.setLetterboxPositionForHorizontalReachability(
+ forBookMode, position);
+ }
+
+ /**
+ * Overrides persistent vertical position of the letterboxed app window when vertical
+ * reachability is enabled.
+ */
+ void setPersistentLetterboxPositionForVerticalReachability(boolean forTabletopMode,
+ @LetterboxVerticalReachabilityPosition int position) {
+ mLetterboxConfigurationPersister.setLetterboxPositionForVerticalReachability(
+ forTabletopMode, position);
+ }
+
+ /**
+ * Resets persistent horizontal position of the letterboxed app window when horizontal
+ * reachability
+ * is enabled to default position.
+ */
+ void resetPersistentLetterboxPositionForHorizontalReachability() {
+ mLetterboxConfigurationPersister.setLetterboxPositionForHorizontalReachability(
+ false /* forBookMode */,
+ readLetterboxHorizontalReachabilityPositionFromConfig(mContext,
+ false /* forBookMode */));
+ mLetterboxConfigurationPersister.setLetterboxPositionForHorizontalReachability(
+ true /* forBookMode */,
+ readLetterboxHorizontalReachabilityPositionFromConfig(mContext,
+ true /* forBookMode */));
+ }
+
+ /**
+ * Resets persistent vertical position of the letterboxed app window when vertical reachability
+ * is
+ * enabled to default position.
+ */
+ void resetPersistentLetterboxPositionForVerticalReachability() {
+ mLetterboxConfigurationPersister.setLetterboxPositionForVerticalReachability(
+ false /* forTabletopMode */,
+ readLetterboxVerticalReachabilityPositionFromConfig(mContext,
+ false /* forTabletopMode */));
+ mLetterboxConfigurationPersister.setLetterboxPositionForVerticalReachability(
+ true /* forTabletopMode */,
+ readLetterboxVerticalReachabilityPositionFromConfig(mContext,
+ true /* forTabletopMode */));
+ }
+
@LetterboxHorizontalReachabilityPosition
private static int readLetterboxHorizontalReachabilityPositionFromConfig(Context context,
boolean forBookMode) {
diff --git a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
index ceebb27642ce..bfe055354b9c 100644
--- a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
+++ b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
@@ -911,6 +911,70 @@ public class WindowManagerShellCommand extends ShellCommand {
return 0;
}
+ private int runSetPersistentLetterboxPositionForHorizontalReachability(PrintWriter pw)
+ throws RemoteException {
+ @LetterboxHorizontalReachabilityPosition final int position;
+ try {
+ String arg = getNextArgRequired();
+ switch (arg) {
+ case "left":
+ position = LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT;
+ break;
+ case "center":
+ position = LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER;
+ break;
+ case "right":
+ position = LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT;
+ break;
+ default:
+ getErrPrintWriter().println(
+ "Error: 'left', 'center' or 'right' are expected as an argument");
+ return -1;
+ }
+ } catch (IllegalArgumentException e) {
+ getErrPrintWriter().println(
+ "Error: 'left', 'center' or 'right' are expected as an argument" + e);
+ return -1;
+ }
+ synchronized (mInternal.mGlobalLock) {
+ mLetterboxConfiguration.setPersistentLetterboxPositionForHorizontalReachability(
+ false /* IsInBookMode */, position);
+ }
+ return 0;
+ }
+
+ private int runSetPersistentLetterboxPositionForVerticalReachability(PrintWriter pw)
+ throws RemoteException {
+ @LetterboxVerticalReachabilityPosition final int position;
+ try {
+ String arg = getNextArgRequired();
+ switch (arg) {
+ case "top":
+ position = LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP;
+ break;
+ case "center":
+ position = LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER;
+ break;
+ case "bottom":
+ position = LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM;
+ break;
+ default:
+ getErrPrintWriter().println(
+ "Error: 'top', 'center' or 'bottom' are expected as an argument");
+ return -1;
+ }
+ } catch (IllegalArgumentException e) {
+ getErrPrintWriter().println(
+ "Error: 'top', 'center' or 'bottom' are expected as an argument" + e);
+ return -1;
+ }
+ synchronized (mInternal.mGlobalLock) {
+ mLetterboxConfiguration.setPersistentLetterboxPositionForVerticalReachability(
+ false /* forTabletopMode */, position);
+ }
+ return 0;
+ }
+
private int runSetBooleanFlag(PrintWriter pw, Consumer<Boolean> setter)
throws RemoteException {
String arg = getNextArg();
@@ -994,6 +1058,12 @@ public class WindowManagerShellCommand extends ShellCommand {
case "--defaultPositionForVerticalReachability":
runSetLetterboxDefaultPositionForVerticalReachability(pw);
break;
+ case "--persistentPositionForHorizontalReachability":
+ runSetPersistentLetterboxPositionForHorizontalReachability(pw);
+ break;
+ case "--persistentPositionForVerticalReachability":
+ runSetPersistentLetterboxPositionForVerticalReachability(pw);
+ break;
case "--isEducationEnabled":
runSetBooleanFlag(pw, mLetterboxConfiguration::setIsEducationEnabled);
break;
@@ -1080,6 +1150,14 @@ public class WindowManagerShellCommand extends ShellCommand {
case "defaultPositionForVerticalReachability":
mLetterboxConfiguration.resetDefaultPositionForVerticalReachability();
break;
+ case "persistentPositionForHorizontalReachability":
+ mLetterboxConfiguration
+ .resetPersistentLetterboxPositionForHorizontalReachability();
+ break;
+ case "persistentPositionForVerticalReachability":
+ mLetterboxConfiguration
+ .resetPersistentLetterboxPositionForVerticalReachability();
+ break;
case "isEducationEnabled":
mLetterboxConfiguration.resetIsEducationEnabled();
break;
@@ -1206,6 +1284,8 @@ public class WindowManagerShellCommand extends ShellCommand {
mLetterboxConfiguration.resetEnabledAutomaticReachabilityInBookMode();
mLetterboxConfiguration.resetDefaultPositionForHorizontalReachability();
mLetterboxConfiguration.resetDefaultPositionForVerticalReachability();
+ mLetterboxConfiguration.resetPersistentLetterboxPositionForHorizontalReachability();
+ mLetterboxConfiguration.resetPersistentLetterboxPositionForVerticalReachability();
mLetterboxConfiguration.resetIsEducationEnabled();
mLetterboxConfiguration.resetIsSplitScreenAspectRatioForUnresizableAppsEnabled();
mLetterboxConfiguration.resetIsDisplayAspectRatioEnabledForFixedOrientationLetterbox();
@@ -1233,6 +1313,12 @@ public class WindowManagerShellCommand extends ShellCommand {
pw.println("Vertical position multiplier (tabletop mode): "
+ mLetterboxConfiguration.getLetterboxVerticalPositionMultiplier(
true /* isInTabletopMode */));
+ pw.println("Horizontal position multiplier for reachability: "
+ + mLetterboxConfiguration.getHorizontalMultiplierForReachability(
+ false /* isInBookMode */));
+ pw.println("Vertical position multiplier for reachability: "
+ + mLetterboxConfiguration.getVerticalMultiplierForReachability(
+ false /* isInTabletopMode */));
pw.println("Aspect ratio: "
+ mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio());
pw.println("Default min aspect ratio for unresizable apps: "
@@ -1472,6 +1558,12 @@ public class WindowManagerShellCommand extends ShellCommand {
pw.println(" --defaultPositionForVerticalReachability [top|center|bottom]");
pw.println(" Default position of app window when vertical reachability is.");
pw.println(" enabled.");
+ pw.println(" --persistentPositionForHorizontalReachability [left|center|right]");
+ pw.println(" Persistent position of app window when horizontal reachability is.");
+ pw.println(" enabled.");
+ pw.println(" --persistentPositionForVerticalReachability [top|center|bottom]");
+ pw.println(" Persistent position of app window when vertical reachability is.");
+ pw.println(" enabled.");
pw.println(" --isEducationEnabled [true|1|false|0]");
pw.println(" Whether education is allowed for letterboxed fullscreen apps.");
pw.println(" --isSplitScreenAspectRatioForUnresizableAppsEnabled [true|1|false|0]");
@@ -1493,8 +1585,10 @@ public class WindowManagerShellCommand extends ShellCommand {
pw.println(" |backgroundColor|wallpaperBlurRadius|wallpaperDarkScrimAlpha");
pw.println(" |horizontalPositionMultiplier|verticalPositionMultiplier");
pw.println(" |isHorizontalReachabilityEnabled|isVerticalReachabilityEnabled");
- pw.println(" |isEducationEnabled||defaultPositionMultiplierForHorizontalReachability");
+ pw.println(" |isEducationEnabled|defaultPositionMultiplierForHorizontalReachability");
pw.println(" |isTranslucentLetterboxingEnabled|isUserAppAspectRatioSettingsEnabled");
+ pw.println(" |persistentPositionMultiplierForHorizontalReachability");
+ pw.println(" |persistentPositionMultiplierForVerticalReachability");
pw.println(" |defaultPositionMultiplierForVerticalReachability]");
pw.println(" Resets overrides to default values for specified properties separated");
pw.println(" by space, e.g. 'reset-letterbox-style aspectRatio cornerRadius'.");
diff --git a/services/tests/wmtests/src/com/android/server/wm/LetterboxConfigurationTest.java b/services/tests/wmtests/src/com/android/server/wm/LetterboxConfigurationTest.java
index e1fc0cfdc317..80e169d8d579 100644
--- a/services/tests/wmtests/src/com/android/server/wm/LetterboxConfigurationTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/LetterboxConfigurationTest.java
@@ -250,4 +250,42 @@ public class LetterboxConfigurationTest {
times(expectedTime)).setLetterboxPositionForVerticalReachability(halfFoldPose,
expected);
}
+
+ @Test
+ public void test_letterboxPositionWhenReachabilityEnabledIsReset() {
+ // Check that horizontal reachability is set with correct arguments
+ mLetterboxConfiguration.resetPersistentLetterboxPositionForHorizontalReachability();
+ verify(mLetterboxConfigurationPersister).setLetterboxPositionForHorizontalReachability(
+ false /* forBookMode */,
+ LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER);
+ verify(mLetterboxConfigurationPersister).setLetterboxPositionForHorizontalReachability(
+ true /* forBookMode */,
+ LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT);
+
+ // Check that vertical reachability is set with correct arguments
+ mLetterboxConfiguration.resetPersistentLetterboxPositionForVerticalReachability();
+ verify(mLetterboxConfigurationPersister).setLetterboxPositionForVerticalReachability(
+ false /* forTabletopMode */,
+ LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER);
+ verify(mLetterboxConfigurationPersister).setLetterboxPositionForVerticalReachability(
+ true /* forTabletopMode */,
+ LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP);
+ }
+
+ @Test
+ public void test_lettterboxPositionWhenReachabilityEnabledIsSet() {
+ // Check that horizontal reachability is set with correct arguments
+ mLetterboxConfiguration.setPersistentLetterboxPositionForHorizontalReachability(
+ false /* forBookMode */, LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT);
+ verify(mLetterboxConfigurationPersister).setLetterboxPositionForHorizontalReachability(
+ false /* forBookMode */,
+ LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT);
+
+ // Check that vertical reachability is set with correct arguments
+ mLetterboxConfiguration.setPersistentLetterboxPositionForVerticalReachability(
+ false /* forTabletopMode */, LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP);
+ verify(mLetterboxConfigurationPersister).setLetterboxPositionForVerticalReachability(
+ false /* forTabletopMode */,
+ LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP);
+ }
}