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 01833fda5b95f..888108740aac0 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