Merge "Adding display commands for hostSide CTS tests"
This commit is contained in:
@@ -1072,6 +1072,13 @@ public final class DisplayManagerService extends SystemService {
|
||||
+ "setUserDisabledHdrTypesInternal");
|
||||
return;
|
||||
}
|
||||
|
||||
// Verify if userDisabledHdrTypes contains expected HDR types
|
||||
if (!isSubsetOf(Display.HdrCapabilities.HDR_TYPES, userDisabledHdrTypes)) {
|
||||
Slog.e(TAG, "userDisabledHdrTypes contains unexpected types");
|
||||
return;
|
||||
}
|
||||
|
||||
Arrays.sort(userDisabledHdrTypes);
|
||||
if (Arrays.equals(mUserDisabledHdrTypes, userDisabledHdrTypes)) {
|
||||
return;
|
||||
@@ -1094,6 +1101,15 @@ public final class DisplayManagerService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isSubsetOf(int[] sortedSuperset, int[] subset) {
|
||||
for (int i : subset) {
|
||||
if (Arrays.binarySearch(sortedSuperset, i) < 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void setAreUserDisabledHdrTypesAllowedInternal(
|
||||
boolean areUserDisabledHdrTypesAllowed) {
|
||||
synchronized (mSyncRoot) {
|
||||
|
||||
@@ -20,9 +20,11 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.hardware.display.DisplayManager;
|
||||
import android.os.ShellCommand;
|
||||
import android.util.Slog;
|
||||
import android.view.Display;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Arrays;
|
||||
|
||||
class DisplayManagerShellCommand extends ShellCommand {
|
||||
private static final String TAG = "DisplayManagerShellCommand";
|
||||
@@ -60,6 +62,20 @@ class DisplayManagerShellCommand extends ShellCommand {
|
||||
return setAmbientColorTemperatureOverride();
|
||||
case "constrain-launcher-metrics":
|
||||
return setConstrainLauncherMetrics();
|
||||
case "set-user-preferred-display-mode":
|
||||
return setUserPreferredDisplayMode();
|
||||
case "clear-user-preferred-display-mode":
|
||||
return clearUserPreferredDisplayMode();
|
||||
case "get-user-preferred-display-mode":
|
||||
return getUserPreferredDisplayMode();
|
||||
case "set-match-content-frame-rate-pref":
|
||||
return setMatchContentFrameRateUserPreference();
|
||||
case "get-match-content-frame-rate-pref":
|
||||
return getMatchContentFrameRateUserPreference();
|
||||
case "set-user-disabled-hdr-types":
|
||||
return setUserDisabledHdrTypes();
|
||||
case "get-user-disabled-hdr-types":
|
||||
return getUserDisabledHdrTypes();
|
||||
default:
|
||||
return handleDefaultCommands(cmd);
|
||||
}
|
||||
@@ -93,6 +109,21 @@ class DisplayManagerShellCommand extends ShellCommand {
|
||||
pw.println(" constrain-launcher-metrics [true|false]");
|
||||
pw.println(" Sets if Display#getRealSize and getRealMetrics should be constrained for ");
|
||||
pw.println(" Launcher.");
|
||||
pw.println(" set-user-preferred-display-mode WIDTH HEIGHT REFRESH-RATE");
|
||||
pw.println(" Sets the user preferred display mode which has fields WIDTH, HEIGHT and "
|
||||
+ "REFRESH-RATE");
|
||||
pw.println(" clear-user-preferred-display-mode");
|
||||
pw.println(" Clears the user preferred display mode");
|
||||
pw.println(" get-user-preferred-display-mode");
|
||||
pw.println(" Returns the user preferred display mode or null id no mode is set by user");
|
||||
pw.println(" set-match-content-frame-rate-pref PREFERENCE");
|
||||
pw.println(" Sets the match content frame rate preference as PREFERENCE ");
|
||||
pw.println(" get-match-content-frame-rate-pref");
|
||||
pw.println(" Returns the match content frame rate preference");
|
||||
pw.println(" set-user-disabled-hdr-types TYPES...");
|
||||
pw.println(" Sets the user disabled HDR types as TYPES");
|
||||
pw.println(" get-user-disabled-hdr-types");
|
||||
pw.println(" Returns the user disabled HDR types");
|
||||
pw.println();
|
||||
Intent.printIntentArgsHelp(pw , "");
|
||||
}
|
||||
@@ -166,4 +197,152 @@ class DisplayManagerShellCommand extends ShellCommand {
|
||||
mService.setShouldConstrainMetricsForLauncher(constrain);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int setUserPreferredDisplayMode() {
|
||||
final String widthText = getNextArg();
|
||||
if (widthText == null) {
|
||||
getErrPrintWriter().println("Error: no width specified");
|
||||
return 1;
|
||||
}
|
||||
|
||||
final String heightText = getNextArg();
|
||||
if (heightText == null) {
|
||||
getErrPrintWriter().println("Error: no height specified");
|
||||
return 1;
|
||||
}
|
||||
|
||||
final String refreshRateText = getNextArg();
|
||||
if (refreshRateText == null) {
|
||||
getErrPrintWriter().println("Error: no refresh-rate specified");
|
||||
return 1;
|
||||
}
|
||||
|
||||
final int width, height;
|
||||
final float refreshRate;
|
||||
try {
|
||||
width = Integer.parseInt(widthText);
|
||||
height = Integer.parseInt(heightText);
|
||||
refreshRate = Float.parseFloat(refreshRateText);
|
||||
} catch (NumberFormatException e) {
|
||||
getErrPrintWriter().println("Error: invalid format of width, height or refresh rate");
|
||||
return 1;
|
||||
}
|
||||
if (width < 0 || height < 0 || refreshRate <= 0.0f) {
|
||||
getErrPrintWriter().println("Error: invalid value of width, height or refresh rate");
|
||||
return 1;
|
||||
}
|
||||
|
||||
final Context context = mService.getContext();
|
||||
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
||||
dm.setUserPreferredDisplayMode(new Display.Mode(width, height, refreshRate));
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int clearUserPreferredDisplayMode() {
|
||||
final Context context = mService.getContext();
|
||||
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
||||
dm.clearUserPreferredDisplayMode();
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int getUserPreferredDisplayMode() {
|
||||
final Context context = mService.getContext();
|
||||
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
||||
final Display.Mode mode = dm.getUserPreferredDisplayMode();
|
||||
if (mode == null) {
|
||||
getOutPrintWriter().println("User preferred display mode: null");
|
||||
return 0;
|
||||
}
|
||||
|
||||
getOutPrintWriter().println("User preferred display mode: " + mode.getPhysicalWidth() + " "
|
||||
+ mode.getPhysicalHeight() + " " + mode.getRefreshRate());
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int setMatchContentFrameRateUserPreference() {
|
||||
final String matchContentFrameRatePrefText = getNextArg();
|
||||
if (matchContentFrameRatePrefText == null) {
|
||||
getErrPrintWriter().println("Error: no matchContentFrameRatePref specified");
|
||||
return 1;
|
||||
}
|
||||
|
||||
final int matchContentFrameRatePreference;
|
||||
try {
|
||||
matchContentFrameRatePreference = Integer.parseInt(matchContentFrameRatePrefText);
|
||||
} catch (NumberFormatException e) {
|
||||
getErrPrintWriter().println("Error: invalid format of matchContentFrameRatePreference");
|
||||
return 1;
|
||||
}
|
||||
if (matchContentFrameRatePreference < 0) {
|
||||
getErrPrintWriter().println("Error: invalid value of matchContentFrameRatePreference");
|
||||
return 1;
|
||||
}
|
||||
|
||||
final Context context = mService.getContext();
|
||||
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
||||
|
||||
final int refreshRateSwitchingType =
|
||||
toRefreshRateSwitchingType(matchContentFrameRatePreference);
|
||||
dm.setRefreshRateSwitchingType(refreshRateSwitchingType);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int getMatchContentFrameRateUserPreference() {
|
||||
final Context context = mService.getContext();
|
||||
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
||||
getOutPrintWriter().println("Match content frame rate type: "
|
||||
+ dm.getMatchContentFrameRateUserPreference());
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int setUserDisabledHdrTypes() {
|
||||
final String[] userDisabledHdrTypesText = getAllArgs();
|
||||
if (userDisabledHdrTypesText == null) {
|
||||
getErrPrintWriter().println("Error: no userDisabledHdrTypes specified");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int[] userDisabledHdrTypes = new int[userDisabledHdrTypesText.length];
|
||||
try {
|
||||
int index = 0;
|
||||
for (String userDisabledHdrType : userDisabledHdrTypesText) {
|
||||
userDisabledHdrTypes[index++] = Integer.parseInt(userDisabledHdrType);
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
getErrPrintWriter().println("Error: invalid format of userDisabledHdrTypes");
|
||||
return 1;
|
||||
}
|
||||
|
||||
final Context context = mService.getContext();
|
||||
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
||||
dm.setUserDisabledHdrTypes(userDisabledHdrTypes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int getUserDisabledHdrTypes() {
|
||||
final Context context = mService.getContext();
|
||||
final DisplayManager dm = context.getSystemService(DisplayManager.class);
|
||||
final int[] userDisabledHdrTypes = dm.getUserDisabledHdrTypes();
|
||||
getOutPrintWriter().println("User disabled HDR types: "
|
||||
+ Arrays.toString(userDisabledHdrTypes));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@DisplayManager.SwitchingType
|
||||
private int toRefreshRateSwitchingType(
|
||||
@DisplayManager.MatchContentFrameRateType int matchContentFrameRateType) {
|
||||
switch (matchContentFrameRateType) {
|
||||
case DisplayManager.MATCH_CONTENT_FRAMERATE_NEVER:
|
||||
return DisplayManager.SWITCHING_TYPE_NONE;
|
||||
case DisplayManager.MATCH_CONTENT_FRAMERATE_SEAMLESSS_ONLY:
|
||||
return DisplayManager.SWITCHING_TYPE_WITHIN_GROUPS;
|
||||
case DisplayManager.MATCH_CONTENT_FRAMERATE_ALWAYS:
|
||||
return DisplayManager.SWITCHING_TYPE_ACROSS_AND_WITHIN_GROUPS;
|
||||
case DisplayManager.MATCH_CONTENT_FRAMERATE_UNKNOWN:
|
||||
default:
|
||||
Slog.e(TAG, matchContentFrameRateType + " is not a valid value of "
|
||||
+ "matchContentFrameRate type.");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user