diff --git a/Android.bp b/Android.bp index 7d02d7d50f849..ee5db70b3ce13 100644 --- a/Android.bp +++ b/Android.bp @@ -109,6 +109,7 @@ filegroup { ":platform-compat-native-aidl", // AIDL sources from external directories + ":android.hardware.graphics.common-V3-java-source", ":android.hardware.security.keymint-V1-java-source", ":android.hardware.security.secureclock-V1-java-source", ":android.hardware.tv.tuner-V1-java-source", @@ -288,6 +289,7 @@ java_defaults { // TODO: remove when moved to the below package "frameworks/base/packages/ConnectivityT/framework-t/aidl-export", "packages/modules/Connectivity/framework/aidl-export", + "hardware/interfaces/graphics/common/aidl", ], }, dxflags: [ @@ -537,6 +539,7 @@ stubs_defaults { // TODO: remove when moved to the below package "frameworks/base/packages/ConnectivityT/framework-t/aidl-export", "packages/modules/Connectivity/framework/aidl-export", + "hardware/interfaces/graphics/common/aidl", ], }, // These are libs from framework-internal-utils that are required (i.e. being referenced) diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index eefa1d3279e37..623f38e3f48bd 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -1213,17 +1213,6 @@ 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 af8ec279ac307..7e7a64803dd9b 100644
--- a/core/java/android/hardware/display/DisplayManagerGlobal.java
+++ b/core/java/android/hardware/display/DisplayManagerGlobal.java
@@ -32,6 +32,7 @@ import android.content.res.Resources;
import android.graphics.ColorSpace;
import android.graphics.Point;
import android.hardware.display.DisplayManager.DisplayListener;
+import android.hardware.graphics.common.DisplayDecorationSupport;
import android.media.projection.IMediaProjection;
import android.media.projection.MediaProjection;
import android.os.Handler;
@@ -812,13 +813,13 @@ public final class DisplayManagerGlobal {
}
/**
- * Report whether the display supports DISPLAY_DECORATION.
+ * Report whether/how the display supports DISPLAY_DECORATION.
*
* @param displayId The display whose support is being queried.
*
* @hide
*/
- public boolean getDisplayDecorationSupport(int displayId) {
+ public DisplayDecorationSupport getDisplayDecorationSupport(int displayId) {
try {
return mDm.getDisplayDecorationSupport(displayId);
} catch (RemoteException ex) {
diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl
index b3af52b19063a..ddd18f4502e7a 100644
--- a/core/java/android/hardware/display/IDisplayManager.aidl
+++ b/core/java/android/hardware/display/IDisplayManager.aidl
@@ -22,6 +22,7 @@ import android.graphics.Point;
import android.hardware.display.BrightnessConfiguration;
import android.hardware.display.BrightnessInfo;
import android.hardware.display.Curve;
+import android.hardware.graphics.common.DisplayDecorationSupport;
import android.hardware.display.IDisplayManagerCallback;
import android.hardware.display.IVirtualDisplayCallback;
import android.hardware.display.VirtualDisplayConfig;
@@ -183,5 +184,5 @@ interface IDisplayManager {
int getRefreshRateSwitchingType();
// Query for DISPLAY_DECORATION support.
- boolean getDisplayDecorationSupport(int displayId);
+ DisplayDecorationSupport getDisplayDecorationSupport(int displayId);
}
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 246a8c9d17d3a..7d8e99840fb10 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -42,6 +42,7 @@ import android.hardware.display.BrightnessInfo;
import android.hardware.display.DeviceProductInfo;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerGlobal;
+import android.hardware.graphics.common.DisplayDecorationSupport;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
@@ -1855,6 +1856,19 @@ public final class Display {
return refreshRate > 0.0f;
}
+ /**
+ * Returns whether/how the specified display supports DISPLAY_DECORATION.
+ *
+ * Composition.DISPLAY_DECORATION is a special layer type which is used to
+ * render the screen decorations (i.e. antialiased rounded corners and
+ * cutouts) while taking advantage of specific hardware.
+ *
+ * @hide
+ */
+ public DisplayDecorationSupport getDisplayDecorationSupport() {
+ return mGlobal.getDisplayDecorationSupport(mDisplayId);
+ }
+
/**
* A mode supported by a given display.
*
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index d3061e21efeb6..3cd1e0fd71d21 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -49,6 +49,7 @@ import android.hardware.HardwareBuffer;
import android.hardware.display.DeviceProductInfo;
import android.hardware.display.DisplayedContentSample;
import android.hardware.display.DisplayedContentSamplingAttributes;
+import android.hardware.graphics.common.DisplayDecorationSupport;
import android.os.Build;
import android.os.IBinder;
import android.os.Parcel;
@@ -235,7 +236,8 @@ 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 DisplayDecorationSupport nativeGetDisplayDecorationSupport(
+ IBinder displayToken);
private static native void nativeSetFrameRate(long transactionObj, long nativeObject,
float frameRate, int compatibility, int changeFrameRateStrategy);
@@ -2694,16 +2696,18 @@ public final class SurfaceControl implements Parcelable {
}
/**
- * Returns whether a display supports DISPLAY_DECORATION.
+ * Returns whether/how a display supports DISPLAY_DECORATION.
*
* @param displayToken
* The token for the display.
*
- * @return Whether the display supports DISPLAY_DECORATION.
+ * @return A class describing how the display supports DISPLAY_DECORATION or null if it does
+ * not.
*
+ * TODO (b/218524164): Move this out of SurfaceControl.
* @hide
*/
- public static boolean getDisplayDecorationSupport(IBinder displayToken) {
+ public static DisplayDecorationSupport getDisplayDecorationSupport(IBinder displayToken) {
return nativeGetDisplayDecorationSupport(displayToken);
}
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 2488b57c7f2ac..336161c8c37e2 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -245,6 +245,13 @@ static struct {
jmethodID onTransactionCommitted;
} gTransactionCommittedListenerClassInfo;
+static struct {
+ jclass clazz;
+ jmethodID ctor;
+ jfieldID format;
+ jfieldID alphaInterpretation;
+} gDisplayDecorationSupportInfo;
+
class JNamedColorSpace {
public:
// ColorSpace.Named.SRGB.ordinal() = 0;
@@ -1792,13 +1799,29 @@ static void nativeSetGlobalShadowSettings(JNIEnv* env, jclass clazz, jfloatArray
client->setGlobalShadowSettings(ambientColor, spotColor, lightPosY, lightPosZ, lightRadius);
}
-static jboolean nativeGetDisplayDecorationSupport(JNIEnv* env, jclass clazz,
- jobject displayTokenObject) {
+static jobject nativeGetDisplayDecorationSupport(JNIEnv* env, jclass clazz,
+ jobject displayTokenObject) {
sp