Merge "Make overrideHdrTypes per display"
This commit is contained in:
committed by
Android (Google) Code Review
commit
a42581f513
@@ -1223,6 +1223,7 @@ package android.hardware.display {
|
||||
method @Nullable public android.view.Display.Mode getGlobalUserPreferredDisplayMode();
|
||||
method @NonNull public int[] getUserDisabledHdrTypes();
|
||||
method public boolean isMinimalPostProcessingRequested(int);
|
||||
method @RequiresPermission(android.Manifest.permission.ACCESS_SURFACE_FLINGER) public void overrideHdrTypes(int, @NonNull int[]);
|
||||
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setAreUserDisabledHdrTypesAllowed(boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE) public void setGlobalUserPreferredDisplayMode(@NonNull android.view.Display.Mode);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE) public void setRefreshRateSwitchingType(int);
|
||||
@@ -2885,7 +2886,6 @@ package android.view {
|
||||
ctor public SurfaceControl(@NonNull android.view.SurfaceControl, @NonNull String);
|
||||
method @NonNull public static android.os.IBinder getInternalDisplayToken();
|
||||
method public boolean isSameSurface(@NonNull android.view.SurfaceControl);
|
||||
method public static void overrideHdrTypes(@NonNull android.os.IBinder, @NonNull int[]);
|
||||
}
|
||||
|
||||
public class SurfaceControlViewHost {
|
||||
|
||||
@@ -855,6 +855,16 @@ public final class DisplayManager {
|
||||
return mGlobal.getUserDisabledHdrTypes();
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides HDR modes for a display device.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.ACCESS_SURFACE_FLINGER)
|
||||
@TestApi
|
||||
public void overrideHdrTypes(int displayId, @NonNull int[] modes) {
|
||||
mGlobal.overrideHdrTypes(displayId, modes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a virtual display.
|
||||
|
||||
@@ -20,9 +20,11 @@ package android.hardware.display;
|
||||
import static android.hardware.display.DisplayManager.EventsMask;
|
||||
import static android.view.Display.HdrCapabilities.HdrType;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.app.PropertyInvalidatedCache;
|
||||
import android.compat.annotation.UnsupportedAppUsage;
|
||||
import android.content.Context;
|
||||
@@ -577,6 +579,20 @@ public final class DisplayManagerGlobal {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides HDR modes for a display device.
|
||||
*
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.ACCESS_SURFACE_FLINGER)
|
||||
public void overrideHdrTypes(int displayId, int[] modes) {
|
||||
try {
|
||||
mDm.overrideHdrTypes(displayId, modes);
|
||||
} catch (RemoteException ex) {
|
||||
throw ex.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void requestColorMode(int displayId, int colorMode) {
|
||||
try {
|
||||
mDm.requestColorMode(displayId, colorMode);
|
||||
|
||||
@@ -83,6 +83,9 @@ interface IDisplayManager {
|
||||
// No permissions required.
|
||||
int[] getUserDisabledHdrTypes();
|
||||
|
||||
// Requires ACCESS_SURFACE_FLINGER permission.
|
||||
void overrideHdrTypes(int displayId, in int[] modes);
|
||||
|
||||
// Requires CONFIGURE_DISPLAY_COLOR_MODE
|
||||
void requestColorMode(int displayId, int colorMode);
|
||||
|
||||
|
||||
@@ -225,8 +225,6 @@ public final class SurfaceControl implements Parcelable {
|
||||
private static native void nativeSetDimmingEnabled(long transactionObj, long nativeObject,
|
||||
boolean dimmingEnabled);
|
||||
|
||||
private static native void nativeOverrideHdrTypes(IBinder displayToken, int[] modes);
|
||||
|
||||
private static native void nativeSetInputWindowInfo(long transactionObj, long nativeObject,
|
||||
InputWindowHandle handle);
|
||||
|
||||
@@ -2037,18 +2035,6 @@ public final class SurfaceControl implements Parcelable {
|
||||
IVirtualDisplayCallback.Stub.asInterface(displayToken));
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides HDR modes for a display device.
|
||||
*
|
||||
* If the caller does not have ACCESS_SURFACE_FLINGER permission, this will throw a Security
|
||||
* Exception.
|
||||
* @hide
|
||||
*/
|
||||
@TestApi
|
||||
public static void overrideHdrTypes(@NonNull IBinder displayToken, @NonNull int[] modes) {
|
||||
nativeOverrideHdrTypes(displayToken, modes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
|
||||
@@ -1528,27 +1528,6 @@ static void nativeReparent(JNIEnv* env, jclass clazz, jlong transactionObj,
|
||||
transaction->reparent(ctrl, newParent);
|
||||
}
|
||||
|
||||
static void nativeOverrideHdrTypes(JNIEnv* env, jclass clazz, jobject tokenObject,
|
||||
jintArray jHdrTypes) {
|
||||
sp<IBinder> token(ibinderForJavaObject(env, tokenObject));
|
||||
if (token == nullptr || jHdrTypes == nullptr) return;
|
||||
|
||||
int* hdrTypes = env->GetIntArrayElements(jHdrTypes, 0);
|
||||
int numHdrTypes = env->GetArrayLength(jHdrTypes);
|
||||
|
||||
std::vector<ui::Hdr> hdrTypesVector;
|
||||
for (int i = 0; i < numHdrTypes; i++) {
|
||||
hdrTypesVector.push_back(static_cast<ui::Hdr>(hdrTypes[i]));
|
||||
}
|
||||
env->ReleaseIntArrayElements(jHdrTypes, hdrTypes, 0);
|
||||
|
||||
status_t error = SurfaceComposerClient::overrideHdrTypes(token, hdrTypesVector);
|
||||
if (error != NO_ERROR) {
|
||||
jniThrowExceptionFmt(env, "java/lang/SecurityException",
|
||||
"ACCESS_SURFACE_FLINGER is missing");
|
||||
}
|
||||
}
|
||||
|
||||
static jboolean nativeGetBootDisplayModeSupport(JNIEnv* env, jclass clazz) {
|
||||
bool isBootDisplayModeSupported = false;
|
||||
SurfaceComposerClient::getBootDisplayModeSupport(&isBootDisplayModeSupported);
|
||||
@@ -2056,8 +2035,6 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
|
||||
(void*)nativeSetGameContentType },
|
||||
{"nativeGetCompositionDataspaces", "()[I",
|
||||
(void*)nativeGetCompositionDataspaces},
|
||||
{"nativeOverrideHdrTypes", "(Landroid/os/IBinder;[I)V",
|
||||
(void*)nativeOverrideHdrTypes },
|
||||
{"nativeClearContentFrameStats", "(J)Z",
|
||||
(void*)nativeClearContentFrameStats },
|
||||
{"nativeGetContentFrameStats", "(JLandroid/view/WindowContentFrameStats;)Z",
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
|
||||
package com.android.server.display;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.os.IBinder;
|
||||
|
||||
import java.util.Objects;
|
||||
@@ -26,6 +29,7 @@ import java.util.Objects;
|
||||
public class DisplayControl {
|
||||
private static native IBinder nativeCreateDisplay(String name, boolean secure);
|
||||
private static native void nativeDestroyDisplay(IBinder displayToken);
|
||||
private static native void nativeOverrideHdrTypes(IBinder displayToken, int[] modes);
|
||||
|
||||
/**
|
||||
* Create a display in SurfaceFlinger.
|
||||
@@ -52,4 +56,11 @@ public class DisplayControl {
|
||||
nativeDestroyDisplay(displayToken);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides HDR modes for a display device.
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.ACCESS_SURFACE_FLINGER)
|
||||
public static void overrideHdrTypes(@NonNull IBinder displayToken, @NonNull int[] modes) {
|
||||
nativeOverrideHdrTypes(displayToken, modes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3000,6 +3000,19 @@ public final class DisplayManagerService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void overrideHdrTypes(int displayId, int[] modes) {
|
||||
IBinder displayToken;
|
||||
synchronized (mSyncRoot) {
|
||||
displayToken = getDisplayToken(displayId);
|
||||
if (displayToken == null) {
|
||||
throw new IllegalArgumentException("Invalid display: " + displayId);
|
||||
}
|
||||
}
|
||||
|
||||
DisplayControl.overrideHdrTypes(displayToken, modes);
|
||||
}
|
||||
|
||||
@Override // Binder call
|
||||
public void setAreUserDisabledHdrTypesAllowed(boolean areUserDisabledHdrTypesAllowed) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <android_util_Binder.h>
|
||||
#include <gui/SurfaceComposerClient.h>
|
||||
#include <jni.h>
|
||||
#include <nativehelper/ScopedPrimitiveArray.h>
|
||||
#include <nativehelper/ScopedUtfChars.h>
|
||||
|
||||
namespace android {
|
||||
@@ -33,6 +34,27 @@ static void nativeDestroyDisplay(JNIEnv* env, jclass clazz, jobject tokenObj) {
|
||||
SurfaceComposerClient::destroyDisplay(token);
|
||||
}
|
||||
|
||||
static void nativeOverrideHdrTypes(JNIEnv* env, jclass clazz, jobject tokenObject,
|
||||
jintArray jHdrTypes) {
|
||||
sp<IBinder> token(ibinderForJavaObject(env, tokenObject));
|
||||
if (token == nullptr || jHdrTypes == nullptr) return;
|
||||
|
||||
ScopedIntArrayRO hdrTypes(env, jHdrTypes);
|
||||
size_t numHdrTypes = hdrTypes.size();
|
||||
|
||||
std::vector<ui::Hdr> hdrTypesVector;
|
||||
hdrTypesVector.reserve(numHdrTypes);
|
||||
for (int i = 0; i < numHdrTypes; i++) {
|
||||
hdrTypesVector.push_back(static_cast<ui::Hdr>(hdrTypes[i]));
|
||||
}
|
||||
|
||||
status_t error = SurfaceComposerClient::overrideHdrTypes(token, hdrTypesVector);
|
||||
if (error != NO_ERROR) {
|
||||
jniThrowExceptionFmt(env, "java/lang/SecurityException",
|
||||
"ACCESS_SURFACE_FLINGER is missing");
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
static const JNINativeMethod sDisplayMethods[] = {
|
||||
@@ -41,6 +63,8 @@ static const JNINativeMethod sDisplayMethods[] = {
|
||||
(void*)nativeCreateDisplay },
|
||||
{"nativeDestroyDisplay", "(Landroid/os/IBinder;)V",
|
||||
(void*)nativeDestroyDisplay },
|
||||
{"nativeOverrideHdrTypes", "(Landroid/os/IBinder;[I)V",
|
||||
(void*)nativeOverrideHdrTypes },
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user