SurfaceControl: add setAllowedDisplayConfigs
expose ISurfaceComposer::setAllowedDisplayConfigs to SurfaceControl. This API is expected to be called by DisplayManager depends on the current policy in place. Once setAllowedDisplayConfigs is called, SF can only set a new display config if it is part of the allowed configurations list. Test: call setAllowedDisplayConfigs() from SurfaceControl and observe config change. Bug: 122905403 Change-Id: I7f8cc09dbec352701f5dcf2595bee66b8380bc00
This commit is contained in:
@@ -157,6 +157,8 @@ public final class SurfaceControl implements Parcelable {
|
||||
IBinder displayToken, long numFrames, long timestamp);
|
||||
private static native int nativeGetActiveConfig(IBinder displayToken);
|
||||
private static native boolean nativeSetActiveConfig(IBinder displayToken, int id);
|
||||
private static native boolean nativeSetAllowedDisplayConfigs(IBinder displayToken,
|
||||
int[] allowedConfigs);
|
||||
private static native int[] nativeGetDisplayColorModes(IBinder displayToken);
|
||||
private static native SurfaceControl.DisplayPrimaries nativeGetDisplayNativePrimaries(
|
||||
IBinder displayToken);
|
||||
@@ -1518,6 +1520,20 @@ public final class SurfaceControl implements Parcelable {
|
||||
return nativeSetActiveConfig(displayToken, id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public static boolean setAllowedDisplayConfigs(IBinder displayToken, int[] allowedConfigs) {
|
||||
if (displayToken == null) {
|
||||
throw new IllegalArgumentException("displayToken must not be null");
|
||||
}
|
||||
if (allowedConfigs == null) {
|
||||
throw new IllegalArgumentException("allowedConfigs must not be null");
|
||||
}
|
||||
|
||||
return nativeSetAllowedDisplayConfigs(displayToken, allowedConfigs);
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
|
||||
@@ -698,6 +698,25 @@ static jobjectArray nativeGetDisplayConfigs(JNIEnv* env, jclass clazz,
|
||||
return configArray;
|
||||
}
|
||||
|
||||
static jboolean nativeSetAllowedDisplayConfigs(JNIEnv* env, jclass clazz,
|
||||
jobject tokenObj, jintArray configArray) {
|
||||
sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
|
||||
if (token == nullptr) return JNI_FALSE;
|
||||
|
||||
std::vector<int32_t> allowedConfigs;
|
||||
jsize configArraySize = env->GetArrayLength(configArray);
|
||||
allowedConfigs.reserve(configArraySize);
|
||||
|
||||
jint* configArrayElements = env->GetIntArrayElements(configArray, 0);
|
||||
for (int i = 0; i < configArraySize; i++) {
|
||||
allowedConfigs.push_back(configArrayElements[i]);
|
||||
}
|
||||
env->ReleaseIntArrayElements(configArray, configArrayElements, 0);
|
||||
|
||||
size_t result = SurfaceComposerClient::setAllowedDisplayConfigs(token, allowedConfigs);
|
||||
return result == NO_ERROR ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static jint nativeGetActiveConfig(JNIEnv* env, jclass clazz, jobject tokenObj) {
|
||||
sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
|
||||
if (token == NULL) return -1;
|
||||
@@ -1194,6 +1213,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
|
||||
(void*)nativeGetActiveConfig },
|
||||
{"nativeSetActiveConfig", "(Landroid/os/IBinder;I)Z",
|
||||
(void*)nativeSetActiveConfig },
|
||||
{"nativeSetAllowedDisplayConfigs", "(Landroid/os/IBinder;[I)Z",
|
||||
(void*)nativeSetAllowedDisplayConfigs },
|
||||
{"nativeGetDisplayColorModes", "(Landroid/os/IBinder;)[I",
|
||||
(void*)nativeGetDisplayColorModes},
|
||||
{"nativeGetDisplayNativePrimaries", "(Landroid/os/IBinder;)Landroid/view/SurfaceControl$DisplayPrimaries;",
|
||||
|
||||
Reference in New Issue
Block a user