DO NOT MERGE Clean up ADB commands for letterbox and display API sandboxing.

Changes that introduced these commands: ag/13754186 and ag/14161637.

Fix: 184936789
Test: atest WmTests:SizeCompatTests
Change-Id: Ic834525078931b4928b2144fb6be8ce2e683b38b
This commit is contained in:
Mariia Sandrikova
2021-05-27 23:33:43 +01:00
parent 216d32af4d
commit 200431be5c
6 changed files with 3 additions and 542 deletions

View File

@@ -7504,10 +7504,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
if (getUid() == SYSTEM_UID) { if (getUid() == SYSTEM_UID) {
return false; return false;
} }
// Do not sandbox to activity window bounds if the feature is disabled.
if (mDisplayContent != null && !mDisplayContent.sandboxDisplayApis()) {
return false;
}
// Never apply sandboxing to an app that should be explicitly excluded from the config. // Never apply sandboxing to an app that should be explicitly excluded from the config.
if (info != null && info.neverSandboxDisplayApis()) { if (info != null && info.neverSandboxDisplayApis()) {
return false; return false;

View File

@@ -357,13 +357,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
int mBaseDisplayHeight = 0; int mBaseDisplayHeight = 0;
boolean mIsSizeForced = false; boolean mIsSizeForced = false;
/**
* Overridden display size and metrics to activity window bounds. Set via
* "adb shell wm set-sandbox-display-apis". Default to true, since only disable for debugging.
* @see WindowManagerService#setSandboxDisplayApis(int, boolean)
*/
private boolean mSandboxDisplayApis = true;
/** /**
* Overridden display density for current user. Initialized with {@link #mInitialDisplayDensity} * Overridden display density for current user. Initialized with {@link #mInitialDisplayDensity}
* but can be set from Settings or via shell command "adb shell wm density". * but can be set from Settings or via shell command "adb shell wm density".
@@ -5810,21 +5803,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
return true; return true;
} }
/**
* Sets if Display APIs should be sandboxed to the activity window bounds.
*/
void setSandboxDisplayApis(boolean sandboxDisplayApis) {
mSandboxDisplayApis = sandboxDisplayApis;
}
/**
* Returns {@code true} is Display APIs should be sandboxed to the activity window bounds,
* {@code false} otherwise. Default to true, unless set for debugging purposes.
*/
boolean sandboxDisplayApis() {
return mSandboxDisplayApis;
}
/** The entry for proceeding to handle {@link #mFixedRotationLaunchingApp}. */ /** The entry for proceeding to handle {@link #mFixedRotationLaunchingApp}. */
class FixedRotationTransitionListener extends WindowManagerInternal.AppTransitionListener { class FixedRotationTransitionListener extends WindowManagerInternal.AppTransitionListener {

View File

@@ -21,6 +21,7 @@ import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import com.android.internal.R; import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
@@ -104,19 +105,11 @@ final class LetterboxConfiguration {
* com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio} will be ignored and * com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio} will be ignored and
* the framework implementation will be used to determine the aspect ratio. * the framework implementation will be used to determine the aspect ratio.
*/ */
@VisibleForTesting
void setFixedOrientationLetterboxAspectRatio(float aspectRatio) { void setFixedOrientationLetterboxAspectRatio(float aspectRatio) {
mFixedOrientationLetterboxAspectRatio = aspectRatio; mFixedOrientationLetterboxAspectRatio = aspectRatio;
} }
/**
* Resets the aspect ratio of letterbox for fixed orientation to {@link
* com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio}.
*/
void resetFixedOrientationLetterboxAspectRatio() {
mFixedOrientationLetterboxAspectRatio = mContext.getResources().getFloat(
com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio);
}
/** /**
* Gets the aspect ratio of letterbox for fixed orientation. * Gets the aspect ratio of letterbox for fixed orientation.
*/ */
@@ -124,25 +117,6 @@ final class LetterboxConfiguration {
return mFixedOrientationLetterboxAspectRatio; return mFixedOrientationLetterboxAspectRatio;
} }
/**
* Overrides corners raidus for activities presented in the letterbox mode. If given value < 0,
* both it and a value of {@link
* com.android.internal.R.integer.config_letterboxActivityCornersRadius} will be ignored and
* and corners of the activity won't be rounded.
*/
void setLetterboxActivityCornersRadius(int cornersRadius) {
mLetterboxActivityCornersRadius = cornersRadius;
}
/**
* Resets corners raidus for activities presented in the letterbox mode to {@link
* com.android.internal.R.integer.config_letterboxActivityCornersRadius}.
*/
void resetLetterboxActivityCornersRadius() {
mLetterboxActivityCornersRadius = mContext.getResources().getInteger(
com.android.internal.R.integer.config_letterboxActivityCornersRadius);
}
/** /**
* Whether corners of letterboxed activities are rounded. * Whether corners of letterboxed activities are rounded.
*/ */
@@ -166,25 +140,6 @@ final class LetterboxConfiguration {
return mLetterboxBackgroundColor; return mLetterboxBackgroundColor;
} }
/**
* Sets color of letterbox background which is used when {@link
* #getLetterboxBackgroundType()} is {@link #LETTERBOX_BACKGROUND_SOLID_COLOR} or as
* fallback for other backfround types.
*/
void setLetterboxBackgroundColor(Color color) {
mLetterboxBackgroundColor = color;
}
/**
* Resets color of letterbox background to {@link
* com.android.internal.R.color.config_letterboxBackgroundColor}.
*/
void resetLetterboxBackgroundColor() {
mLetterboxBackgroundColor = Color.valueOf(mContext.getResources().getColor(
com.android.internal.R.color.config_letterboxBackgroundColor));
}
/** /**
* Gets {@link LetterboxBackgroundType} specified in {@link * Gets {@link LetterboxBackgroundType} specified in {@link
* com.android.internal.R.integer.config_letterboxBackgroundType} or over via ADB command. * com.android.internal.R.integer.config_letterboxBackgroundType} or over via ADB command.
@@ -194,19 +149,6 @@ final class LetterboxConfiguration {
return mLetterboxBackgroundType; return mLetterboxBackgroundType;
} }
/** Sets letterbox background type. */
void setLetterboxBackgroundType(@LetterboxBackgroundType int backgroundType) {
mLetterboxBackgroundType = backgroundType;
}
/**
* Resets cletterbox background type to {@link
* com.android.internal.R.integer.config_letterboxBackgroundType}.
*/
void resetLetterboxBackgroundType() {
mLetterboxBackgroundType = readLetterboxBackgroundTypeFromConfig(mContext);
}
/** Returns a string representing the given {@link LetterboxBackgroundType}. */ /** Returns a string representing the given {@link LetterboxBackgroundType}. */
static String letterboxBackgroundTypeToString( static String letterboxBackgroundTypeToString(
@LetterboxBackgroundType int backgroundType) { @LetterboxBackgroundType int backgroundType) {
@@ -235,27 +177,6 @@ final class LetterboxConfiguration {
? backgroundType : LETTERBOX_BACKGROUND_SOLID_COLOR; ? backgroundType : LETTERBOX_BACKGROUND_SOLID_COLOR;
} }
/**
* Overrides alpha of a black scrim shown over wallpaper for {@link
* #LETTERBOX_BACKGROUND_WALLPAPER} option in {@link mLetterboxBackgroundType}.
*
* <p>If given value is < 0 or >= 1, both it and a value of {@link
* com.android.internal.R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha} are ignored
* and 0.0 (transparent) is instead.
*/
void setLetterboxBackgroundWallpaperDarkScrimAlpha(float alpha) {
mLetterboxBackgroundWallpaperDarkScrimAlpha = alpha;
}
/**
* Resets alpha of a black scrim shown over wallpaper letterbox background to {@link
* com.android.internal.R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha}.
*/
void resetLetterboxBackgroundWallpaperDarkScrimAlpha() {
mLetterboxBackgroundWallpaperDarkScrimAlpha = mContext.getResources().getFloat(
com.android.internal.R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha);
}
/** /**
* Gets alpha of a black scrim shown over wallpaper letterbox background. * Gets alpha of a black scrim shown over wallpaper letterbox background.
*/ */
@@ -263,28 +184,6 @@ final class LetterboxConfiguration {
return mLetterboxBackgroundWallpaperDarkScrimAlpha; return mLetterboxBackgroundWallpaperDarkScrimAlpha;
} }
/**
* Overrides blur radius for {@link #LETTERBOX_BACKGROUND_WALLPAPER} option in
* {@link mLetterboxBackgroundType}.
*
* <p> If given value <= 0, both it and a value of {@link
* com.android.internal.R.dimen.config_letterboxBackgroundWallpaperBlurRadius} are ignored
* and 0 is used instead.
*/
void setLetterboxBackgroundWallpaperBlurRadius(int radius) {
mLetterboxBackgroundWallpaperBlurRadius = radius;
}
/**
* Resets blur raidus for {@link #LETTERBOX_BACKGROUND_WALLPAPER} option in {@link
* mLetterboxBackgroundType} to {@link
* com.android.internal.R.dimen.config_letterboxBackgroundWallpaperBlurRadius}.
*/
void resetLetterboxBackgroundWallpaperBlurRadius() {
mLetterboxBackgroundWallpaperBlurRadius = mContext.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.config_letterboxBackgroundWallpaperBlurRadius);
}
/** /**
* Gets blur raidus for {@link #LETTERBOX_BACKGROUND_WALLPAPER} option in {@link * Gets blur raidus for {@link #LETTERBOX_BACKGROUND_WALLPAPER} option in {@link
* mLetterboxBackgroundType}. * mLetterboxBackgroundType}.
@@ -312,17 +211,9 @@ final class LetterboxConfiguration {
* com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier} are ignored and * com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier} are ignored and
* central position (0.5) is used. * central position (0.5) is used.
*/ */
@VisibleForTesting
void setLetterboxHorizontalPositionMultiplier(float multiplier) { void setLetterboxHorizontalPositionMultiplier(float multiplier) {
mLetterboxHorizontalPositionMultiplier = multiplier; mLetterboxHorizontalPositionMultiplier = multiplier;
} }
/**
* Resets horizontal position of a center of the letterboxed app window to {@link
* com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier}.
*/
void resetLetterboxHorizontalPositionMultiplier() {
mLetterboxHorizontalPositionMultiplier = mContext.getResources().getFloat(
com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier);
}
} }

View File

@@ -5391,25 +5391,6 @@ public class WindowManagerService extends IWindowManager.Stub
} }
} }
void setSandboxDisplayApis(int displayId, boolean sandboxDisplayApis) {
if (mContext.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Must hold permission " + WRITE_SECURE_SETTINGS);
}
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
if (displayContent != null) {
displayContent.setSandboxDisplayApis(sandboxDisplayApis);
}
}
} finally {
Binder.restoreCallingIdentity(ident);
}
}
/** The global settings only apply to default display. */ /** The global settings only apply to default display. */
private boolean applyForcedPropertiesForDefaultDisplay() { private boolean applyForcedPropertiesForDefaultDisplay() {
boolean changed = false; boolean changed = false;

View File

@@ -19,12 +19,6 @@ package com.android.server.wm;
import static android.os.Build.IS_USER; import static android.os.Build.IS_USER;
import static android.view.CrossWindowBlurListeners.CROSS_WINDOW_BLUR_SUPPORTED; import static android.view.CrossWindowBlurListeners.CROSS_WINDOW_BLUR_SUPPORTED;
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR;
import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_WALLPAPER;
import android.graphics.Color;
import android.graphics.Point; import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
@@ -42,7 +36,6 @@ import com.android.internal.os.ByteTransferPipe;
import com.android.internal.protolog.ProtoLogImpl; import com.android.internal.protolog.ProtoLogImpl;
import com.android.server.LocalServices; import com.android.server.LocalServices;
import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.wm.LetterboxConfiguration.LetterboxBackgroundType;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -65,12 +58,10 @@ public class WindowManagerShellCommand extends ShellCommand {
// Internal service impl -- must perform security checks before touching. // Internal service impl -- must perform security checks before touching.
private final WindowManagerService mInternal; private final WindowManagerService mInternal;
private final LetterboxConfiguration mLetterboxConfiguration;
public WindowManagerShellCommand(WindowManagerService service) { public WindowManagerShellCommand(WindowManagerService service) {
mInterface = service; mInterface = service;
mInternal = service; mInternal = service;
mLetterboxConfiguration = service.mLetterboxConfiguration;
} }
@Override @Override
@@ -122,14 +113,6 @@ public class WindowManagerShellCommand extends ShellCommand {
return runGetIgnoreOrientationRequest(pw); return runGetIgnoreOrientationRequest(pw);
case "dump-visible-window-views": case "dump-visible-window-views":
return runDumpVisibleWindowViews(pw); return runDumpVisibleWindowViews(pw);
case "set-letterbox-style":
return runSetLetterboxStyle(pw);
case "get-letterbox-style":
return runGetLetterboxStyle(pw);
case "reset-letterbox-style":
return runResetLetterboxStyle(pw);
case "set-sandbox-display-apis":
return runSandboxDisplayApis(pw);
case "set-multi-window-config": case "set-multi-window-config":
return runSetMultiWindowConfig(); return runSetMultiWindowConfig();
case "get-multi-window-config": case "get-multi-window-config":
@@ -348,37 +331,6 @@ public class WindowManagerShellCommand extends ShellCommand {
return 0; return 0;
} }
/**
* Override display size and metrics to reflect the DisplayArea of the calling activity.
*/
private int runSandboxDisplayApis(PrintWriter pw) throws RemoteException {
int displayId = Display.DEFAULT_DISPLAY;
String arg = getNextArgRequired();
if ("-d".equals(arg)) {
displayId = Integer.parseInt(getNextArgRequired());
arg = getNextArgRequired();
}
final boolean sandboxDisplayApis;
switch (arg) {
case "true":
case "1":
sandboxDisplayApis = true;
break;
case "false":
case "0":
sandboxDisplayApis = false;
break;
default:
getErrPrintWriter().println("Error: expecting true, 1, false, 0, but we "
+ "get " + arg);
return -1;
}
mInternal.setSandboxDisplayApis(displayId, sandboxDisplayApis);
return 0;
}
private int runDismissKeyguard(PrintWriter pw) throws RemoteException { private int runDismissKeyguard(PrintWriter pw) throws RemoteException {
mInterface.dismissKeyguard(null /* callback */, null /* message */); mInterface.dismissKeyguard(null /* callback */, null /* message */);
return 0; return 0;
@@ -596,231 +548,6 @@ public class WindowManagerShellCommand extends ShellCommand {
return 0; return 0;
} }
private int runSetFixedOrientationLetterboxAspectRatio(PrintWriter pw) throws RemoteException {
final float aspectRatio;
try {
String arg = getNextArgRequired();
aspectRatio = Float.parseFloat(arg);
} catch (NumberFormatException e) {
getErrPrintWriter().println("Error: bad aspect ratio format " + e);
return -1;
} catch (IllegalArgumentException e) {
getErrPrintWriter().println(
"Error: 'reset' or aspect ratio should be provided as an argument " + e);
return -1;
}
synchronized (mInternal.mGlobalLock) {
mLetterboxConfiguration.setFixedOrientationLetterboxAspectRatio(aspectRatio);
}
return 0;
}
private int runSetLetterboxActivityCornersRadius(PrintWriter pw) throws RemoteException {
final int cornersRadius;
try {
String arg = getNextArgRequired();
cornersRadius = Integer.parseInt(arg);
} catch (NumberFormatException e) {
getErrPrintWriter().println("Error: bad corners radius format " + e);
return -1;
} catch (IllegalArgumentException e) {
getErrPrintWriter().println(
"Error: 'reset' or corners radius should be provided as an argument " + e);
return -1;
}
synchronized (mInternal.mGlobalLock) {
mLetterboxConfiguration.setLetterboxActivityCornersRadius(cornersRadius);
}
return 0;
}
private int runSetLetterboxBackgroundType(PrintWriter pw) throws RemoteException {
@LetterboxBackgroundType final int backgroundType;
try {
String arg = getNextArgRequired();
switch (arg) {
case "solid_color":
backgroundType = LETTERBOX_BACKGROUND_SOLID_COLOR;
break;
case "app_color_background":
backgroundType = LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
break;
case "app_color_background_floating":
backgroundType = LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
break;
case "wallpaper":
backgroundType = LETTERBOX_BACKGROUND_WALLPAPER;
break;
default:
getErrPrintWriter().println(
"Error: 'reset', 'solid_color', 'app_color_background' or "
+ "'wallpaper' should be provided as an argument");
return -1;
}
} catch (IllegalArgumentException e) {
getErrPrintWriter().println(
"Error: 'reset', 'solid_color', 'app_color_background' or "
+ "'wallpaper' should be provided as an argument" + e);
return -1;
}
synchronized (mInternal.mGlobalLock) {
mLetterboxConfiguration.setLetterboxBackgroundType(backgroundType);
}
return 0;
}
private int runSetLetterboxBackgroundColor(PrintWriter pw) throws RemoteException {
final Color color;
try {
String arg = getNextArgRequired();
color = Color.valueOf(Color.parseColor(arg));
} catch (IllegalArgumentException e) {
getErrPrintWriter().println(
"Error: 'reset' or color in #RRGGBB format should be provided as "
+ "an argument " + e);
return -1;
}
synchronized (mInternal.mGlobalLock) {
mLetterboxConfiguration.setLetterboxBackgroundColor(color);
}
return 0;
}
private int runSetLetterboxBackgroundWallpaperBlurRadius(PrintWriter pw)
throws RemoteException {
final int radius;
try {
String arg = getNextArgRequired();
radius = Integer.parseInt(arg);
} catch (NumberFormatException e) {
getErrPrintWriter().println("Error: blur radius format " + e);
return -1;
} catch (IllegalArgumentException e) {
getErrPrintWriter().println(
"Error: 'reset' or blur radius should be provided as an argument " + e);
return -1;
}
synchronized (mInternal.mGlobalLock) {
mLetterboxConfiguration.setLetterboxBackgroundWallpaperBlurRadius(radius);
}
return 0;
}
private int runSetLetterboxBackgroundWallpaperDarkScrimAlpha(PrintWriter pw)
throws RemoteException {
final float alpha;
try {
String arg = getNextArgRequired();
alpha = Float.parseFloat(arg);
} catch (NumberFormatException e) {
getErrPrintWriter().println("Error: bad alpha format " + e);
return -1;
} catch (IllegalArgumentException e) {
getErrPrintWriter().println(
"Error: 'reset' or alpha should be provided as an argument " + e);
return -1;
}
synchronized (mInternal.mGlobalLock) {
mLetterboxConfiguration.setLetterboxBackgroundWallpaperDarkScrimAlpha(alpha);
}
return 0;
}
private int runSeLetterboxHorizontalPositionMultiplier(PrintWriter pw) throws RemoteException {
final float multiplier;
try {
String arg = getNextArgRequired();
multiplier = Float.parseFloat(arg);
} catch (NumberFormatException e) {
getErrPrintWriter().println("Error: bad multiplier format " + e);
return -1;
} catch (IllegalArgumentException e) {
getErrPrintWriter().println(
"Error: 'reset' or multiplier should be provided as an argument " + e);
return -1;
}
synchronized (mInternal.mGlobalLock) {
mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(multiplier);
}
return 0;
}
private int runSetLetterboxStyle(PrintWriter pw) throws RemoteException {
if (peekNextArg() == null) {
getErrPrintWriter().println("Error: No arguments provided.");
}
while (peekNextArg() != null) {
String arg = getNextArg();
switch (arg) {
case "--aspectRatio":
runSetFixedOrientationLetterboxAspectRatio(pw);
break;
case "--cornerRadius":
runSetLetterboxActivityCornersRadius(pw);
break;
case "--backgroundType":
runSetLetterboxBackgroundType(pw);
break;
case "--backgroundColor":
runSetLetterboxBackgroundColor(pw);
break;
case "--wallpaperBlurRadius":
runSetLetterboxBackgroundWallpaperBlurRadius(pw);
break;
case "--wallpaperDarkScrimAlpha":
runSetLetterboxBackgroundWallpaperDarkScrimAlpha(pw);
break;
case "--horizontalPositionMultiplier":
runSeLetterboxHorizontalPositionMultiplier(pw);
break;
default:
getErrPrintWriter().println(
"Error: Unrecognized letterbox style option: " + arg);
return -1;
}
}
return 0;
}
private int runResetLetterboxStyle(PrintWriter pw) throws RemoteException {
if (peekNextArg() == null) {
resetLetterboxStyle();
}
synchronized (mInternal.mGlobalLock) {
while (peekNextArg() != null) {
String arg = getNextArg();
switch (arg) {
case "aspectRatio":
mLetterboxConfiguration.resetFixedOrientationLetterboxAspectRatio();
break;
case "cornerRadius":
mLetterboxConfiguration.resetLetterboxActivityCornersRadius();
break;
case "backgroundType":
mLetterboxConfiguration.resetLetterboxBackgroundType();
break;
case "backgroundColor":
mLetterboxConfiguration.resetLetterboxBackgroundColor();
break;
case "wallpaperBlurRadius":
mLetterboxConfiguration.resetLetterboxBackgroundWallpaperBlurRadius();
break;
case "wallpaperDarkScrimAlpha":
mLetterboxConfiguration.resetLetterboxBackgroundWallpaperDarkScrimAlpha();
break;
case "horizontalPositionMultiplier":
mLetterboxConfiguration.resetLetterboxHorizontalPositionMultiplier();
break;
default:
getErrPrintWriter().println(
"Error: Unrecognized letterbox style option: " + arg);
return -1;
}
}
}
return 0;
}
private int runSetMultiWindowConfig() { private int runSetMultiWindowConfig() {
if (peekNextArg() == null) { if (peekNextArg() == null) {
getErrPrintWriter().println("Error: No arguments provided."); getErrPrintWriter().println("Error: No arguments provided.");
@@ -895,40 +622,6 @@ public class WindowManagerShellCommand extends ShellCommand {
return 0; return 0;
} }
private void resetLetterboxStyle() {
synchronized (mInternal.mGlobalLock) {
mLetterboxConfiguration.resetFixedOrientationLetterboxAspectRatio();
mLetterboxConfiguration.resetLetterboxActivityCornersRadius();
mLetterboxConfiguration.resetLetterboxBackgroundType();
mLetterboxConfiguration.resetLetterboxBackgroundColor();
mLetterboxConfiguration.resetLetterboxBackgroundWallpaperBlurRadius();
mLetterboxConfiguration.resetLetterboxBackgroundWallpaperDarkScrimAlpha();
mLetterboxConfiguration.resetLetterboxHorizontalPositionMultiplier();
}
}
private int runGetLetterboxStyle(PrintWriter pw) throws RemoteException {
synchronized (mInternal.mGlobalLock) {
pw.println("Corner radius: "
+ mLetterboxConfiguration.getLetterboxActivityCornersRadius());
pw.println("Horizontal position multiplier: "
+ mLetterboxConfiguration.getLetterboxHorizontalPositionMultiplier());
pw.println("Aspect ratio: "
+ mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio());
pw.println("Background type: "
+ LetterboxConfiguration.letterboxBackgroundTypeToString(
mLetterboxConfiguration.getLetterboxBackgroundType()));
pw.println(" Background color: " + Integer.toHexString(
mLetterboxConfiguration.getLetterboxBackgroundColor().toArgb()));
pw.println(" Wallpaper blur radius: "
+ mLetterboxConfiguration.getLetterboxBackgroundWallpaperBlurRadius());
pw.println(" Wallpaper dark scrim alpha: "
+ mLetterboxConfiguration.getLetterboxBackgroundWallpaperDarkScrimAlpha());
}
return 0;
}
private int runReset(PrintWriter pw) throws RemoteException { private int runReset(PrintWriter pw) throws RemoteException {
int displayId = getDisplayId(getNextArg()); int displayId = getDisplayId(getNextArg());
@@ -953,12 +646,6 @@ public class WindowManagerShellCommand extends ShellCommand {
// set-ignore-orientation-request // set-ignore-orientation-request
mInterface.setIgnoreOrientationRequest(displayId, false /* ignoreOrientationRequest */); mInterface.setIgnoreOrientationRequest(displayId, false /* ignoreOrientationRequest */);
// set-letterbox-style
resetLetterboxStyle();
// set-sandbox-display-apis
mInternal.setSandboxDisplayApis(displayId, /* sandboxDisplayApis= */ true);
// set-multi-window-config // set-multi-window-config
runResetMultiWindowConfig(); runResetMultiWindowConfig();
@@ -993,12 +680,7 @@ public class WindowManagerShellCommand extends ShellCommand {
pw.println(" set-ignore-orientation-request [-d DISPLAY_ID] [true|1|false|0]"); pw.println(" set-ignore-orientation-request [-d DISPLAY_ID] [true|1|false|0]");
pw.println(" get-ignore-orientation-request [-d DISPLAY_ID] "); pw.println(" get-ignore-orientation-request [-d DISPLAY_ID] ");
pw.println(" If app requested orientation should be ignored."); pw.println(" If app requested orientation should be ignored.");
pw.println(" set-sandbox-display-apis [true|1|false|0]");
pw.println(" Sets override of Display APIs getRealSize / getRealMetrics to reflect ");
pw.println(" DisplayArea of the activity, or the window bounds if in letterbox or");
pw.println(" Size Compat Mode.");
printLetterboxHelp(pw);
printMultiWindowConfigHelp(pw); printMultiWindowConfigHelp(pw);
pw.println(" reset [-d DISPLAY_ID]"); pw.println(" reset [-d DISPLAY_ID]");
@@ -1011,49 +693,6 @@ public class WindowManagerShellCommand extends ShellCommand {
} }
} }
private void printLetterboxHelp(PrintWriter pw) {
pw.println(" set-letterbox-style");
pw.println(" Sets letterbox style using the following options:");
pw.println(" --aspectRatio aspectRatio");
pw.println(" Aspect ratio of letterbox for fixed orientation. If aspectRatio <= "
+ LetterboxConfiguration.MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO);
pw.println(" both it and R.dimen.config_fixedOrientationLetterboxAspectRatio will");
pw.println(" be ignored and framework implementation will determine aspect ratio.");
pw.println(" --cornerRadius radius");
pw.println(" Corners radius for activities in the letterbox mode. If radius < 0,");
pw.println(" both it and R.integer.config_letterboxActivityCornersRadius will be");
pw.println(" ignored and corners of the activity won't be rounded.");
pw.println(" --backgroundType [reset|solid_color|app_color_background");
pw.println(" |app_color_background_floating|wallpaper]");
pw.println(" Type of background used in the letterbox mode.");
pw.println(" --backgroundColor color");
pw.println(" Color of letterbox which is be used when letterbox background type");
pw.println(" is 'solid-color'. Use (set)get-letterbox-style to check and control");
pw.println(" letterbox background type. See Color#parseColor for allowed color");
pw.println(" formats (#RRGGBB and some colors by name, e.g. magenta or olive).");
pw.println(" --wallpaperBlurRadius radius");
pw.println(" Blur radius for 'wallpaper' letterbox background. If radius <= 0");
pw.println(" both it and R.dimen.config_letterboxBackgroundWallpaperBlurRadius");
pw.println(" are ignored and 0 is used.");
pw.println(" --wallpaperDarkScrimAlpha alpha");
pw.println(" Alpha of a black translucent scrim shown over 'wallpaper'");
pw.println(" letterbox background. If alpha < 0 or >= 1 both it and");
pw.println(" R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha are ignored");
pw.println(" and 0.0 (transparent) is used instead.");
pw.println(" --horizontalPositionMultiplier multiplier");
pw.println(" Horizontal position of app window center. If multiplier < 0 or > 1,");
pw.println(" both it and R.dimen.config_letterboxHorizontalPositionMultiplier");
pw.println(" are ignored and central position (0.5) is used.");
pw.println(" reset-letterbox-style [aspectRatio|cornerRadius|backgroundType");
pw.println(" |backgroundColor|wallpaperBlurRadius|wallpaperDarkScrimAlpha");
pw.println(" |horizontalPositionMultiplier]");
pw.println(" Resets overrides to default values for specified properties separated");
pw.println(" by space, e.g. 'reset-letterbox-style aspectRatio cornerRadius'.");
pw.println(" If no arguments provided, all values will be reset.");
pw.println(" get-letterbox-style");
pw.println(" Prints letterbox style configuration.");
}
private void printMultiWindowConfigHelp(PrintWriter pw) { private void printMultiWindowConfigHelp(PrintWriter pw) {
pw.println(" set-multi-window-config"); pw.println(" set-multi-window-config");
pw.println(" Sets options to determine if activity should be shown in multi window:"); pw.println(" Sets options to determine if activity should be shown in multi window:");

View File

@@ -1533,30 +1533,6 @@ public class SizeCompatTests extends WindowTestsBase {
assertActivityMaxBoundsSandboxed(); assertActivityMaxBoundsSandboxed();
} }
@Test
public void testSandboxDisplayApis_unresizableAppNotSandboxed() {
// Set up a display in landscape with an unresizable app.
setUpDisplaySizeWithApp(2500, 1000);
mActivity.mDisplayContent.setSandboxDisplayApis(false /* sandboxDisplayApis */);
prepareUnresizable(mActivity, 1.5f, SCREEN_ORIENTATION_LANDSCAPE);
assertFitted();
// Activity max bounds not be sandboxed since sandboxing is disabled.
assertMaxBoundsInheritDisplayAreaBounds();
}
@Test
public void testSandboxDisplayApis_unresizableAppSandboxed() {
// Set up a display in landscape with an unresizable app.
setUpDisplaySizeWithApp(2500, 1000);
mActivity.mDisplayContent.setSandboxDisplayApis(true /* sandboxDisplayApis */);
prepareUnresizable(mActivity, 1.5f, SCREEN_ORIENTATION_LANDSCAPE);
assertFitted();
// Activity max bounds should be sandboxed since sandboxing is enabled.
assertActivityMaxBoundsSandboxed();
}
@Test @Test
public void testResizableApp_notSandboxed() { public void testResizableApp_notSandboxed() {
// Set up a display in landscape with a fully resizable app. // Set up a display in landscape with a fully resizable app.