diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index 00374644d72c1..de5c9adbc599a 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -1205,6 +1205,17 @@ public final class DisplayManager { mGlobal.setRefreshRateSwitchingType(newValue); } + /** + * Returns whether the specified display supports DISPLAY_DECORATION. + * + * @param displayId The display to query support. + * + * @hide + */ + public boolean getDisplayDecorationSupport(int displayId) { + return mGlobal.getDisplayDecorationSupport(displayId); + } + /** * Returns the user preference for "Match content frame rate". *

diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index 616c42a909d36..bf6e6651741c8 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -811,6 +811,21 @@ public final class DisplayManagerGlobal { } } + /** + * Report whether the display supports DISPLAY_DECORATION. + * + * @param displayId The display whose support is being queried. + * + * @hide + */ + public boolean getDisplayDecorationSupport(int displayId) { + try { + return mDm.getDisplayDecorationSupport(displayId); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + /** * Gets the brightness of the display. * diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index 82b31d48d5feb..d38d388ca8a30 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -180,4 +180,7 @@ interface IDisplayManager { // Returns the refresh rate switching type. int getRefreshRateSwitchingType(); + + // Query for DISPLAY_DECORATION support. + boolean getDisplayDecorationSupport(int displayId); } diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index ab33feae7c567..b7f9be70f7ce2 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -231,6 +231,7 @@ public final class SurfaceControl implements Parcelable { float shadowRadius); private static native void nativeSetGlobalShadowSettings(@Size(4) float[] ambientColor, @Size(4) float[] spotColor, float lightPosY, float lightPosZ, float lightRadius); + private static native boolean nativeGetDisplayDecorationSupport(IBinder displayToken); private static native void nativeSetFrameRate(long transactionObj, long nativeObject, float frameRate, int compatibility, int changeFrameRateStrategy); @@ -2650,6 +2651,20 @@ public final class SurfaceControl implements Parcelable { nativeSetGlobalShadowSettings(ambientColor, spotColor, lightPosY, lightPosZ, lightRadius); } + /** + * Returns whether a display supports DISPLAY_DECORATION. + * + * @param displayToken + * The token for the display. + * + * @return Whether the display supports DISPLAY_DECORATION. + * + * @hide + */ + public static boolean getDisplayDecorationSupport(IBinder displayToken) { + return nativeGetDisplayDecorationSupport(displayToken); + } + /** * Adds a callback to be informed about SF's jank classification for a specific surface. * @hide diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 67d0c52960e02..dd5af0435accb 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -1768,6 +1768,15 @@ static void nativeSetGlobalShadowSettings(JNIEnv* env, jclass clazz, jfloatArray client->setGlobalShadowSettings(ambientColor, spotColor, lightPosY, lightPosZ, lightRadius); } +static jboolean nativeGetDisplayDecorationSupport(JNIEnv* env, jclass clazz, + jobject displayTokenObject) { + sp displayToken(ibinderForJavaObject(env, displayTokenObject)); + if (displayToken == nullptr) { + return JNI_FALSE; + } + return static_cast(SurfaceComposerClient::getDisplayDecorationSupport(displayToken)); +} + static jlong nativeGetHandle(JNIEnv* env, jclass clazz, jlong nativeObject) { SurfaceControl *surfaceControl = reinterpret_cast(nativeObject); return reinterpret_cast(surfaceControl->getHandle().get()); @@ -2092,6 +2101,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeMirrorSurface }, {"nativeSetGlobalShadowSettings", "([F[FFFF)V", (void*)nativeSetGlobalShadowSettings }, + {"nativeGetDisplayDecorationSupport", "(Landroid/os/IBinder;)Z", + (void*)nativeGetDisplayDecorationSupport}, {"nativeGetHandle", "(J)J", (void*)nativeGetHandle }, {"nativeSetFixedTransformHint", "(JJI)V", diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index c4f2b14e335bf..be889e47db019 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -1781,6 +1781,14 @@ public final class DisplayManagerService extends SystemService { return mDisplayModeDirector.getModeSwitchingType(); } + private boolean getDisplayDecorationSupportInternal(int displayId) { + final IBinder displayToken = getDisplayToken(displayId); + if (null == displayToken) { + return false; + } + return SurfaceControl.getDisplayDecorationSupport(displayToken); + } + private void setBrightnessConfigurationForDisplayInternal( @Nullable BrightnessConfiguration c, String uniqueId, @UserIdInt int userId, String packageName) { @@ -3441,6 +3449,16 @@ public final class DisplayManagerService extends SystemService { Binder.restoreCallingIdentity(token); } } + + @Override // Binder call + public boolean getDisplayDecorationSupport(int displayId) { + final long token = Binder.clearCallingIdentity(); + try { + return getDisplayDecorationSupportInternal(displayId); + } finally { + Binder.restoreCallingIdentity(token); + } + } } private static boolean isValidBrightness(float brightness) {