Loading core/api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -1444,6 +1444,7 @@ package android.hardware.display { method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setUserDisabledHdrTypes(@NonNull int[]); method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public boolean shouldAlwaysRespectAppRequestedMode(); field public static final String DISPLAY_CATEGORY_REAR = "android.hardware.display.category.REAR"; field public static final String HDR_OUTPUT_CONTROL_FLAG = "enable_hdr_output_control"; field public static final int SWITCHING_TYPE_ACROSS_AND_WITHIN_GROUPS = 2; // 0x2 field public static final int SWITCHING_TYPE_NONE = 0; // 0x0 field public static final int SWITCHING_TYPE_RENDER_FRAME_RATE_ONLY = 3; // 0x3 Loading core/java/android/hardware/display/DisplayManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,15 @@ public final class DisplayManager { private static final boolean DEBUG = false; private static final boolean ENABLE_VIRTUAL_DISPLAY_REFRESH_RATE = true; /** * The hdr output control feature flag, the value should be read via * {@link android.provider.DeviceConfig#getBoolean(String, String, boolean)} with * {@link android.provider.DeviceConfig#NAMESPACE_DISPLAY_MANAGER} as the namespace. * @hide */ @TestApi public static final String HDR_OUTPUT_CONTROL_FLAG = "enable_hdr_output_control"; private final Context mContext; private final DisplayManagerGlobal mGlobal; Loading services/core/java/com/android/server/display/DisplayManagerService.java +39 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_GONE; import static android.hardware.display.DisplayManager.EventsMask; import static android.hardware.display.DisplayManager.HDR_OUTPUT_CONTROL_FLAG; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_ALWAYS_UNLOCKED; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; Loading @@ -38,8 +39,10 @@ import static android.hardware.display.DisplayManagerGlobal.DisplayEvent; import static android.hardware.display.DisplayViewport.VIEWPORT_EXTERNAL; import static android.hardware.display.DisplayViewport.VIEWPORT_INTERNAL; import static android.hardware.display.DisplayViewport.VIEWPORT_VIRTUAL; import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_UNSUPPORTED; import static android.os.Process.FIRST_APPLICATION_UID; import static android.os.Process.ROOT_UID; import static android.provider.DeviceConfig.NAMESPACE_DISPLAY_MANAGER; import android.Manifest; import android.annotation.NonNull; Loading Loading @@ -137,6 +140,7 @@ import android.window.ScreenCapture; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.display.BrightnessSynchronizer; import com.android.internal.os.BackgroundThread; import com.android.internal.util.DumpUtils; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.IndentingPrintWriter; Loading Loading @@ -232,6 +236,9 @@ public final class DisplayManagerService extends SystemService { private static final int MSG_LOAD_BRIGHTNESS_CONFIGURATIONS = 6; private static final int MSG_DELIVER_DISPLAY_EVENT_FRAME_RATE_OVERRIDE = 7; private static final int MSG_DELIVER_DISPLAY_GROUP_EVENT = 8; private static final int[] EMPTY_ARRAY = new int[0]; private static final HdrConversionMode HDR_CONVERSION_MODE_UNSUPPORTED = new HdrConversionMode( HDR_CONVERSION_UNSUPPORTED); private final Context mContext; private final DisplayManagerHandler mHandler; Loading @@ -250,6 +257,10 @@ public final class DisplayManagerService extends SystemService { @GuardedBy("mSyncRoot") private boolean mAreUserDisabledHdrTypesAllowed = true; // This value indicates whether or not HDR output control is enabled. // It is read from DeviceConfig and is updated via a listener if the config changes. private volatile boolean mIsHdrOutputControlEnabled; // Display mode chosen by user. private Display.Mode mUserPreferredMode; // HDR conversion mode chosen by user Loading Loading @@ -674,6 +685,11 @@ public final class DisplayManagerService extends SystemService { synchronized (mSyncRoot) { mSafeMode = safeMode; mSystemReady = true; mIsHdrOutputControlEnabled = isDeviceConfigHdrOutputControlEnabled(); DeviceConfig.addOnPropertiesChangedListener(NAMESPACE_DISPLAY_MANAGER, BackgroundThread.getExecutor(), properties -> mIsHdrOutputControlEnabled = isDeviceConfigHdrOutputControlEnabled()); // Just in case the top inset changed before the system was ready. At this point, any // relevant configuration should be in place. recordTopInsetLocked(mLogicalDisplayMapper.getDisplayLocked(Display.DEFAULT_DISPLAY)); Loading @@ -681,8 +697,10 @@ public final class DisplayManagerService extends SystemService { updateSettingsLocked(); updateUserDisabledHdrTypesFromSettingsLocked(); updateUserPreferredDisplayModeSettingsLocked(); if (mIsHdrOutputControlEnabled) { updateHdrConversionModeSettingsLocked(); } } mDisplayModeDirector.setDesiredDisplayModeSpecsListener( new DesiredDisplayModeSpecsObserver()); Loading @@ -702,6 +720,12 @@ public final class DisplayManagerService extends SystemService { mContext.registerReceiver(mIdleModeReceiver, filter); } private boolean isDeviceConfigHdrOutputControlEnabled() { return DeviceConfig.getBoolean(NAMESPACE_DISPLAY_MANAGER, HDR_OUTPUT_CONTROL_FLAG, true); } @VisibleForTesting Handler getDisplayHandler() { return mHandler; Loading Loading @@ -2117,7 +2141,7 @@ public final class DisplayManagerService extends SystemService { private HdrConversionMode getHdrConversionModeSettingInternal() { if (!mInjector.getHdrOutputConversionSupport()) { return new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_UNSUPPORTED); return HDR_CONVERSION_MODE_UNSUPPORTED; } synchronized (mSyncRoot) { if (mHdrConversionMode != null) { Loading @@ -2129,7 +2153,7 @@ public final class DisplayManagerService extends SystemService { private HdrConversionMode getHdrConversionModeInternal() { if (!mInjector.getHdrOutputConversionSupport()) { return new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_UNSUPPORTED); return HDR_CONVERSION_MODE_UNSUPPORTED; } HdrConversionMode mode; synchronized (mSyncRoot) { Loading Loading @@ -3948,6 +3972,9 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call public void setHdrConversionMode(HdrConversionMode hdrConversionMode) { if (!mIsHdrOutputControlEnabled) { return; } mContext.enforceCallingOrSelfPermission( Manifest.permission.MODIFY_HDR_CONVERSION_MODE, "Permission required to set the HDR conversion mode."); Loading @@ -3961,6 +3988,9 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call public HdrConversionMode getHdrConversionModeSetting() { if (!mIsHdrOutputControlEnabled) { return HDR_CONVERSION_MODE_UNSUPPORTED; } final long token = Binder.clearCallingIdentity(); try { return getHdrConversionModeSettingInternal(); Loading @@ -3971,6 +4001,9 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call public HdrConversionMode getHdrConversionMode() { if (!mIsHdrOutputControlEnabled) { return HDR_CONVERSION_MODE_UNSUPPORTED; } final long token = Binder.clearCallingIdentity(); try { return getHdrConversionModeInternal(); Loading @@ -3982,6 +4015,9 @@ public final class DisplayManagerService extends SystemService { @Display.HdrCapabilities.HdrType @Override // Binder call public int[] getSupportedHdrOutputTypes() { if (!mIsHdrOutputControlEnabled) { return EMPTY_ARRAY; } final long token = Binder.clearCallingIdentity(); try { return getSupportedHdrOutputTypesInternal(); Loading Loading
core/api/test-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -1444,6 +1444,7 @@ package android.hardware.display { method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setUserDisabledHdrTypes(@NonNull int[]); method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public boolean shouldAlwaysRespectAppRequestedMode(); field public static final String DISPLAY_CATEGORY_REAR = "android.hardware.display.category.REAR"; field public static final String HDR_OUTPUT_CONTROL_FLAG = "enable_hdr_output_control"; field public static final int SWITCHING_TYPE_ACROSS_AND_WITHIN_GROUPS = 2; // 0x2 field public static final int SWITCHING_TYPE_NONE = 0; // 0x0 field public static final int SWITCHING_TYPE_RENDER_FRAME_RATE_ONLY = 3; // 0x3 Loading
core/java/android/hardware/display/DisplayManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,15 @@ public final class DisplayManager { private static final boolean DEBUG = false; private static final boolean ENABLE_VIRTUAL_DISPLAY_REFRESH_RATE = true; /** * The hdr output control feature flag, the value should be read via * {@link android.provider.DeviceConfig#getBoolean(String, String, boolean)} with * {@link android.provider.DeviceConfig#NAMESPACE_DISPLAY_MANAGER} as the namespace. * @hide */ @TestApi public static final String HDR_OUTPUT_CONTROL_FLAG = "enable_hdr_output_control"; private final Context mContext; private final DisplayManagerGlobal mGlobal; Loading
services/core/java/com/android/server/display/DisplayManagerService.java +39 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_GONE; import static android.hardware.display.DisplayManager.EventsMask; import static android.hardware.display.DisplayManager.HDR_OUTPUT_CONTROL_FLAG; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_ALWAYS_UNLOCKED; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; Loading @@ -38,8 +39,10 @@ import static android.hardware.display.DisplayManagerGlobal.DisplayEvent; import static android.hardware.display.DisplayViewport.VIEWPORT_EXTERNAL; import static android.hardware.display.DisplayViewport.VIEWPORT_INTERNAL; import static android.hardware.display.DisplayViewport.VIEWPORT_VIRTUAL; import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_UNSUPPORTED; import static android.os.Process.FIRST_APPLICATION_UID; import static android.os.Process.ROOT_UID; import static android.provider.DeviceConfig.NAMESPACE_DISPLAY_MANAGER; import android.Manifest; import android.annotation.NonNull; Loading Loading @@ -137,6 +140,7 @@ import android.window.ScreenCapture; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.display.BrightnessSynchronizer; import com.android.internal.os.BackgroundThread; import com.android.internal.util.DumpUtils; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.IndentingPrintWriter; Loading Loading @@ -232,6 +236,9 @@ public final class DisplayManagerService extends SystemService { private static final int MSG_LOAD_BRIGHTNESS_CONFIGURATIONS = 6; private static final int MSG_DELIVER_DISPLAY_EVENT_FRAME_RATE_OVERRIDE = 7; private static final int MSG_DELIVER_DISPLAY_GROUP_EVENT = 8; private static final int[] EMPTY_ARRAY = new int[0]; private static final HdrConversionMode HDR_CONVERSION_MODE_UNSUPPORTED = new HdrConversionMode( HDR_CONVERSION_UNSUPPORTED); private final Context mContext; private final DisplayManagerHandler mHandler; Loading @@ -250,6 +257,10 @@ public final class DisplayManagerService extends SystemService { @GuardedBy("mSyncRoot") private boolean mAreUserDisabledHdrTypesAllowed = true; // This value indicates whether or not HDR output control is enabled. // It is read from DeviceConfig and is updated via a listener if the config changes. private volatile boolean mIsHdrOutputControlEnabled; // Display mode chosen by user. private Display.Mode mUserPreferredMode; // HDR conversion mode chosen by user Loading Loading @@ -674,6 +685,11 @@ public final class DisplayManagerService extends SystemService { synchronized (mSyncRoot) { mSafeMode = safeMode; mSystemReady = true; mIsHdrOutputControlEnabled = isDeviceConfigHdrOutputControlEnabled(); DeviceConfig.addOnPropertiesChangedListener(NAMESPACE_DISPLAY_MANAGER, BackgroundThread.getExecutor(), properties -> mIsHdrOutputControlEnabled = isDeviceConfigHdrOutputControlEnabled()); // Just in case the top inset changed before the system was ready. At this point, any // relevant configuration should be in place. recordTopInsetLocked(mLogicalDisplayMapper.getDisplayLocked(Display.DEFAULT_DISPLAY)); Loading @@ -681,8 +697,10 @@ public final class DisplayManagerService extends SystemService { updateSettingsLocked(); updateUserDisabledHdrTypesFromSettingsLocked(); updateUserPreferredDisplayModeSettingsLocked(); if (mIsHdrOutputControlEnabled) { updateHdrConversionModeSettingsLocked(); } } mDisplayModeDirector.setDesiredDisplayModeSpecsListener( new DesiredDisplayModeSpecsObserver()); Loading @@ -702,6 +720,12 @@ public final class DisplayManagerService extends SystemService { mContext.registerReceiver(mIdleModeReceiver, filter); } private boolean isDeviceConfigHdrOutputControlEnabled() { return DeviceConfig.getBoolean(NAMESPACE_DISPLAY_MANAGER, HDR_OUTPUT_CONTROL_FLAG, true); } @VisibleForTesting Handler getDisplayHandler() { return mHandler; Loading Loading @@ -2117,7 +2141,7 @@ public final class DisplayManagerService extends SystemService { private HdrConversionMode getHdrConversionModeSettingInternal() { if (!mInjector.getHdrOutputConversionSupport()) { return new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_UNSUPPORTED); return HDR_CONVERSION_MODE_UNSUPPORTED; } synchronized (mSyncRoot) { if (mHdrConversionMode != null) { Loading @@ -2129,7 +2153,7 @@ public final class DisplayManagerService extends SystemService { private HdrConversionMode getHdrConversionModeInternal() { if (!mInjector.getHdrOutputConversionSupport()) { return new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_UNSUPPORTED); return HDR_CONVERSION_MODE_UNSUPPORTED; } HdrConversionMode mode; synchronized (mSyncRoot) { Loading Loading @@ -3948,6 +3972,9 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call public void setHdrConversionMode(HdrConversionMode hdrConversionMode) { if (!mIsHdrOutputControlEnabled) { return; } mContext.enforceCallingOrSelfPermission( Manifest.permission.MODIFY_HDR_CONVERSION_MODE, "Permission required to set the HDR conversion mode."); Loading @@ -3961,6 +3988,9 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call public HdrConversionMode getHdrConversionModeSetting() { if (!mIsHdrOutputControlEnabled) { return HDR_CONVERSION_MODE_UNSUPPORTED; } final long token = Binder.clearCallingIdentity(); try { return getHdrConversionModeSettingInternal(); Loading @@ -3971,6 +4001,9 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call public HdrConversionMode getHdrConversionMode() { if (!mIsHdrOutputControlEnabled) { return HDR_CONVERSION_MODE_UNSUPPORTED; } final long token = Binder.clearCallingIdentity(); try { return getHdrConversionModeInternal(); Loading @@ -3982,6 +4015,9 @@ public final class DisplayManagerService extends SystemService { @Display.HdrCapabilities.HdrType @Override // Binder call public int[] getSupportedHdrOutputTypes() { if (!mIsHdrOutputControlEnabled) { return EMPTY_ARRAY; } final long token = Binder.clearCallingIdentity(); try { return getSupportedHdrOutputTypesInternal(); Loading