diff options
| -rw-r--r-- | core/java/android/view/SurfaceControl.java | 23 | ||||
| -rw-r--r-- | core/jni/android_view_SurfaceControl.cpp | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/ScreenRotationAnimation.java | 4 |
3 files changed, 37 insertions, 1 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index da582c5b4b2f..b5bbc7537391 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -221,6 +221,8 @@ public final class SurfaceControl implements Parcelable { @DataSpace.NamedDataSpace int dataSpace); private static native void nativeSetDamageRegion(long transactionObj, long nativeObject, Region region); + private static native void nativeSetDimmingEnabled(long transactionObj, long nativeObject, + boolean dimmingEnabled); private static native void nativeOverrideHdrTypes(IBinder displayToken, int[] modes); @@ -3838,6 +3840,27 @@ public final class SurfaceControl implements Parcelable { } /** + * Set if the layer can be dimmed. + * + * <p>Dimming is to adjust brightness of the layer. + * Default value is {@code true}, which means the layer can be dimmed. + * Disabling dimming means the brightness of the layer can not be changed, i.e., + * keep the white point for the layer same as the display brightness.</p> + * + * @param sc The SurfaceControl on which to enable or disable dimming. + * @param dimmingEnabled The dimming flag. + * @return this. + * + * @hide + */ + public @NonNull Transaction setDimmingEnabled(@NonNull SurfaceControl sc, + boolean dimmingEnabled) { + checkPreconditions(sc); + nativeSetDimmingEnabled(mNativeObject, sc.mNativeObject, dimmingEnabled); + return this; + } + + /** * Set the color space for the SurfaceControl. The supported color spaces are SRGB * and Display P3, other color spaces will be treated as SRGB. This can only be used for * SurfaceControls that were created as type {@link #FX_SURFACE_BLAST} diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 39f192b662ee..518fc09dee5a 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -851,6 +851,14 @@ static void nativeSetDamageRegion(JNIEnv* env, jclass clazz, jlong transactionOb transaction->setSurfaceDamageRegion(surfaceControl, region); } +static void nativeSetDimmingEnabled(JNIEnv* env, jclass clazz, jlong transactionObj, + jlong nativeObject, jboolean dimmingEnabled) { + auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); + + SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl*>(nativeObject); + transaction->setDimmingEnabled(ctrl, dimmingEnabled); +} + static void nativeSetAlpha(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject, jfloat alpha) { auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj); @@ -2095,8 +2103,9 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetSize }, {"nativeSetTransparentRegionHint", "(JJLandroid/graphics/Region;)V", (void*)nativeSetTransparentRegionHint }, - { "nativeSetDamageRegion", "(JJLandroid/graphics/Region;)V", + {"nativeSetDamageRegion", "(JJLandroid/graphics/Region;)V", (void*)nativeSetDamageRegion }, + {"nativeSetDimmingEnabled", "(JJZ)V", (void*)nativeSetDimmingEnabled }, {"nativeSetAlpha", "(JJF)V", (void*)nativeSetAlpha }, {"nativeSetColor", "(JJ[F)V", diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java index 6bb63d933353..65ae3fcb4c90 100644 --- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java +++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java @@ -216,6 +216,10 @@ class ScreenRotationAnimation { t.setLayer(mScreenshotLayer, SCREEN_FREEZE_LAYER_BASE); t.reparent(mBackColorSurface, displayContent.getSurfaceControl()); + // If hdr layers are on-screen, e.g. picture-in-picture mode, the screenshot of + // rotation animation is an sdr image containing tone-mapping hdr content, then + // disable dimming effect to get avoid of hdr content being dimmed during animation. + t.setDimmingEnabled(mScreenshotLayer, false); t.setLayer(mBackColorSurface, -1); t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma}); t.setAlpha(mBackColorSurface, 1); |