diff options
| author | 2024-05-22 18:08:09 +0000 | |
|---|---|---|
| committer | 2024-05-22 19:09:03 +0000 | |
| commit | bb217bc2316ddac9730e5a43d2181de692037762 (patch) | |
| tree | dd83f45a15b29224737500a161f80d906cbc4299 | |
| parent | fba10a4d593f44c611ce112360a30f7962615317 (diff) | |
Allow child layers to unset trusted overlay state 1/2
Test: presubmit
Bug: 339701674
Change-Id: Icacbb74125e70b9daeb4236b372ebe10c2800d11
| -rw-r--r-- | core/java/android/view/SurfaceControl.java | 33 | ||||
| -rw-r--r-- | core/jni/android_view_SurfaceControl.cpp | 6 |
2 files changed, 32 insertions, 7 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 1cd7d349a9af..cc8dd079a80f 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -47,6 +47,7 @@ import android.graphics.Rect; import android.graphics.Region; import android.gui.DropInputMode; import android.gui.StalledTransactionInfo; +import android.gui.TrustedOverlay; import android.hardware.DataSpace; import android.hardware.HardwareBuffer; import android.hardware.OverlayProperties; @@ -165,7 +166,7 @@ public final class SurfaceControl implements Parcelable { float maxStretchAmountX, float maxStretchAmountY, float childRelativeLeft, float childRelativeTop, float childRelativeRight, float childRelativeBottom); private static native void nativeSetTrustedOverlay(long transactionObj, long nativeObject, - boolean isTrustedOverlay); + int isTrustedOverlay); private static native void nativeSetDropInputMode( long transactionObj, long nativeObject, int flags); private static native void nativeSetCanOccludePresentation(long transactionObj, @@ -4303,13 +4304,37 @@ public final class SurfaceControl implements Parcelable { } /** - * Sets the trusted overlay state on this SurfaceControl and it is inherited to all the - * children. The caller must hold the ACCESS_SURFACE_FLINGER permission. + * @see Transaction#setTrustedOverlay(SurfaceControl, int) * @hide */ public Transaction setTrustedOverlay(SurfaceControl sc, boolean isTrustedOverlay) { + return setTrustedOverlay(sc, + isTrustedOverlay ? TrustedOverlay.ENABLED : TrustedOverlay.UNSET); + } + + /** + * Trusted overlay state prevents SurfaceControl from being considered as obscuring for + * input occlusion detection purposes. The caller must hold the + * ACCESS_SURFACE_FLINGER permission. See {@code TrustedOverlay}. + * <p> + * Arguments: + * {@code TrustedOverlay.UNSET} - The default value, SurfaceControl will inherit the state + * from its parents. If the parent state is also {@code TrustedOverlay.UNSET}, the layer + * will be considered as untrusted. + * <p> + * {@code TrustedOverlay.DISABLED} - Treats this SurfaceControl and all its children as an + * untrusted overlay. This will override any state set by its parent SurfaceControl. + * <p> + * {@code TrustedOverlay.ENABLED} - Treats this SurfaceControl and all its children as a + * trusted overlay unless the child SurfaceControl explicitly disables its trusted state + * via {@code TrustedOverlay.DISABLED}. + * <p> + * @hide + */ + public Transaction setTrustedOverlay(SurfaceControl sc, + @TrustedOverlay int trustedOverlay) { checkPreconditions(sc); - nativeSetTrustedOverlay(mNativeObject, sc.mNativeObject, isTrustedOverlay); + nativeSetTrustedOverlay(mNativeObject, sc.mNativeObject, trustedOverlay); return this; } diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 1aa635c6ceb7..de059dbb8d0d 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -1008,11 +1008,11 @@ static void nativeSetShadowRadius(JNIEnv* env, jclass clazz, jlong transactionOb } static void nativeSetTrustedOverlay(JNIEnv* env, jclass clazz, jlong transactionObj, - jlong nativeObject, jboolean isTrustedOverlay) { + jlong nativeObject, jint trustedOverlay) { auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject); - transaction->setTrustedOverlay(ctrl, isTrustedOverlay); + transaction->setTrustedOverlay(ctrl, static_cast<gui::TrustedOverlay>(trustedOverlay)); } static void nativeSetFrameRate(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject, @@ -2443,7 +2443,7 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetTransformHint }, {"nativeGetTransformHint", "(J)I", (void*)nativeGetTransformHint }, - {"nativeSetTrustedOverlay", "(JJZ)V", + {"nativeSetTrustedOverlay", "(JJI)V", (void*)nativeSetTrustedOverlay }, {"nativeGetLayerId", "(J)I", (void*)nativeGetLayerId }, |