Loading services/core/java/com/android/server/display/DisplayManagerService.java +16 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading services/core/java/com/android/server/display/DisplayManagerShellCommand.java +179 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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); } Loading Loading @@ -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 , ""); } Loading Loading @@ -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; } } } Loading
services/core/java/com/android/server/display/DisplayManagerService.java +16 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading
services/core/java/com/android/server/display/DisplayManagerShellCommand.java +179 −0 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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); } Loading Loading @@ -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 , ""); } Loading Loading @@ -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; } } }