Hide HDR output control feature behind feature flag.
Bug: 234816344
Test: atest HdrConversionTest
Change-Id: I4209b0dbba7570ee850b2a9fda7b4af31d1f70ed
(cherry picked from commit 4a9cc91019)
Merged-In: I4209b0dbba7570ee850b2a9fda7b4af31d1f70ed
This commit is contained in:
committed by
Cherrypicker Worker
parent
9d0370089f
commit
4c4b4485f3
@@ -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.WRITE_SECURE_SETTINGS) public void setUserDisabledHdrTypes(@NonNull int[]);
|
||||||
method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public boolean shouldAlwaysRespectAppRequestedMode();
|
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 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_ACROSS_AND_WITHIN_GROUPS = 2; // 0x2
|
||||||
field public static final int SWITCHING_TYPE_NONE = 0; // 0x0
|
field public static final int SWITCHING_TYPE_NONE = 0; // 0x0
|
||||||
field public static final int SWITCHING_TYPE_RENDER_FRAME_RATE_ONLY = 3; // 0x3
|
field public static final int SWITCHING_TYPE_RENDER_FRAME_RATE_ONLY = 3; // 0x3
|
||||||
|
|||||||
@@ -68,6 +68,15 @@ public final class DisplayManager {
|
|||||||
private static final boolean DEBUG = false;
|
private static final boolean DEBUG = false;
|
||||||
private static final boolean ENABLE_VIRTUAL_DISPLAY_REFRESH_RATE = true;
|
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 Context mContext;
|
||||||
private final DisplayManagerGlobal mGlobal;
|
private final DisplayManagerGlobal mGlobal;
|
||||||
|
|
||||||
|
|||||||
@@ -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_CACHED;
|
||||||
import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_GONE;
|
import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_GONE;
|
||||||
import static android.hardware.display.DisplayManager.EventsMask;
|
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_ALWAYS_UNLOCKED;
|
||||||
import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR;
|
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;
|
import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD;
|
||||||
@@ -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_EXTERNAL;
|
||||||
import static android.hardware.display.DisplayViewport.VIEWPORT_INTERNAL;
|
import static android.hardware.display.DisplayViewport.VIEWPORT_INTERNAL;
|
||||||
import static android.hardware.display.DisplayViewport.VIEWPORT_VIRTUAL;
|
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.FIRST_APPLICATION_UID;
|
||||||
import static android.os.Process.ROOT_UID;
|
import static android.os.Process.ROOT_UID;
|
||||||
|
import static android.provider.DeviceConfig.NAMESPACE_DISPLAY_MANAGER;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
@@ -137,6 +140,7 @@ import android.window.ScreenCapture;
|
|||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.display.BrightnessSynchronizer;
|
import com.android.internal.display.BrightnessSynchronizer;
|
||||||
|
import com.android.internal.os.BackgroundThread;
|
||||||
import com.android.internal.util.DumpUtils;
|
import com.android.internal.util.DumpUtils;
|
||||||
import com.android.internal.util.FrameworkStatsLog;
|
import com.android.internal.util.FrameworkStatsLog;
|
||||||
import com.android.internal.util.IndentingPrintWriter;
|
import com.android.internal.util.IndentingPrintWriter;
|
||||||
@@ -232,6 +236,9 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
private static final int MSG_LOAD_BRIGHTNESS_CONFIGURATIONS = 6;
|
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_EVENT_FRAME_RATE_OVERRIDE = 7;
|
||||||
private static final int MSG_DELIVER_DISPLAY_GROUP_EVENT = 8;
|
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 Context mContext;
|
||||||
private final DisplayManagerHandler mHandler;
|
private final DisplayManagerHandler mHandler;
|
||||||
@@ -250,6 +257,10 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
@GuardedBy("mSyncRoot")
|
@GuardedBy("mSyncRoot")
|
||||||
private boolean mAreUserDisabledHdrTypesAllowed = true;
|
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.
|
// Display mode chosen by user.
|
||||||
private Display.Mode mUserPreferredMode;
|
private Display.Mode mUserPreferredMode;
|
||||||
// HDR conversion mode chosen by user
|
// HDR conversion mode chosen by user
|
||||||
@@ -674,6 +685,11 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
synchronized (mSyncRoot) {
|
synchronized (mSyncRoot) {
|
||||||
mSafeMode = safeMode;
|
mSafeMode = safeMode;
|
||||||
mSystemReady = true;
|
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
|
// Just in case the top inset changed before the system was ready. At this point, any
|
||||||
// relevant configuration should be in place.
|
// relevant configuration should be in place.
|
||||||
recordTopInsetLocked(mLogicalDisplayMapper.getDisplayLocked(Display.DEFAULT_DISPLAY));
|
recordTopInsetLocked(mLogicalDisplayMapper.getDisplayLocked(Display.DEFAULT_DISPLAY));
|
||||||
@@ -681,7 +697,9 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
updateSettingsLocked();
|
updateSettingsLocked();
|
||||||
updateUserDisabledHdrTypesFromSettingsLocked();
|
updateUserDisabledHdrTypesFromSettingsLocked();
|
||||||
updateUserPreferredDisplayModeSettingsLocked();
|
updateUserPreferredDisplayModeSettingsLocked();
|
||||||
updateHdrConversionModeSettingsLocked();
|
if (mIsHdrOutputControlEnabled) {
|
||||||
|
updateHdrConversionModeSettingsLocked();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mDisplayModeDirector.setDesiredDisplayModeSpecsListener(
|
mDisplayModeDirector.setDesiredDisplayModeSpecsListener(
|
||||||
@@ -702,6 +720,12 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
mContext.registerReceiver(mIdleModeReceiver, filter);
|
mContext.registerReceiver(mIdleModeReceiver, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isDeviceConfigHdrOutputControlEnabled() {
|
||||||
|
return DeviceConfig.getBoolean(NAMESPACE_DISPLAY_MANAGER,
|
||||||
|
HDR_OUTPUT_CONTROL_FLAG,
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
Handler getDisplayHandler() {
|
Handler getDisplayHandler() {
|
||||||
return mHandler;
|
return mHandler;
|
||||||
@@ -2117,7 +2141,7 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
|
|
||||||
private HdrConversionMode getHdrConversionModeSettingInternal() {
|
private HdrConversionMode getHdrConversionModeSettingInternal() {
|
||||||
if (!mInjector.getHdrOutputConversionSupport()) {
|
if (!mInjector.getHdrOutputConversionSupport()) {
|
||||||
return new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_UNSUPPORTED);
|
return HDR_CONVERSION_MODE_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
synchronized (mSyncRoot) {
|
synchronized (mSyncRoot) {
|
||||||
if (mHdrConversionMode != null) {
|
if (mHdrConversionMode != null) {
|
||||||
@@ -2129,7 +2153,7 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
|
|
||||||
private HdrConversionMode getHdrConversionModeInternal() {
|
private HdrConversionMode getHdrConversionModeInternal() {
|
||||||
if (!mInjector.getHdrOutputConversionSupport()) {
|
if (!mInjector.getHdrOutputConversionSupport()) {
|
||||||
return new HdrConversionMode(HdrConversionMode.HDR_CONVERSION_UNSUPPORTED);
|
return HDR_CONVERSION_MODE_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
HdrConversionMode mode;
|
HdrConversionMode mode;
|
||||||
synchronized (mSyncRoot) {
|
synchronized (mSyncRoot) {
|
||||||
@@ -3948,6 +3972,9 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
|
|
||||||
@Override // Binder call
|
@Override // Binder call
|
||||||
public void setHdrConversionMode(HdrConversionMode hdrConversionMode) {
|
public void setHdrConversionMode(HdrConversionMode hdrConversionMode) {
|
||||||
|
if (!mIsHdrOutputControlEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
mContext.enforceCallingOrSelfPermission(
|
mContext.enforceCallingOrSelfPermission(
|
||||||
Manifest.permission.MODIFY_HDR_CONVERSION_MODE,
|
Manifest.permission.MODIFY_HDR_CONVERSION_MODE,
|
||||||
"Permission required to set the HDR conversion mode.");
|
"Permission required to set the HDR conversion mode.");
|
||||||
@@ -3961,6 +3988,9 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
|
|
||||||
@Override // Binder call
|
@Override // Binder call
|
||||||
public HdrConversionMode getHdrConversionModeSetting() {
|
public HdrConversionMode getHdrConversionModeSetting() {
|
||||||
|
if (!mIsHdrOutputControlEnabled) {
|
||||||
|
return HDR_CONVERSION_MODE_UNSUPPORTED;
|
||||||
|
}
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
return getHdrConversionModeSettingInternal();
|
return getHdrConversionModeSettingInternal();
|
||||||
@@ -3971,6 +4001,9 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
|
|
||||||
@Override // Binder call
|
@Override // Binder call
|
||||||
public HdrConversionMode getHdrConversionMode() {
|
public HdrConversionMode getHdrConversionMode() {
|
||||||
|
if (!mIsHdrOutputControlEnabled) {
|
||||||
|
return HDR_CONVERSION_MODE_UNSUPPORTED;
|
||||||
|
}
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
return getHdrConversionModeInternal();
|
return getHdrConversionModeInternal();
|
||||||
@@ -3982,6 +4015,9 @@ public final class DisplayManagerService extends SystemService {
|
|||||||
@Display.HdrCapabilities.HdrType
|
@Display.HdrCapabilities.HdrType
|
||||||
@Override // Binder call
|
@Override // Binder call
|
||||||
public int[] getSupportedHdrOutputTypes() {
|
public int[] getSupportedHdrOutputTypes() {
|
||||||
|
if (!mIsHdrOutputControlEnabled) {
|
||||||
|
return EMPTY_ARRAY;
|
||||||
|
}
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
return getSupportedHdrOutputTypesInternal();
|
return getSupportedHdrOutputTypesInternal();
|
||||||
|
|||||||
Reference in New Issue
Block a user