summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/ViewRootImpl.java21
-rw-r--r--graphics/java/android/graphics/HardwareRenderer.java7
2 files changed, 27 insertions, 1 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 9213f32326b4..9a317db84f5d 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -2289,6 +2289,7 @@ public final class ViewRootImpl implements ViewParent,
surfaceChanged |= surfaceSizeChanged;
final boolean alwaysConsumeNavBarChanged =
mPendingAlwaysConsumeNavBar != mAttachInfo.mAlwaysConsumeNavBar;
+ final boolean colorModeChanged = hasColorModeChanged(lp.getColorMode());
if (contentInsetsChanged) {
mAttachInfo.mContentInsets.set(mPendingContentInsets);
if (DEBUG_LAYOUT) Log.v(mTag, "Content insets changing to: "
@@ -2335,6 +2336,10 @@ public final class ViewRootImpl implements ViewParent,
if (DEBUG_LAYOUT) Log.v(mTag, "Visible insets changing to: "
+ mAttachInfo.mVisibleInsets);
}
+ if (colorModeChanged && mAttachInfo.mThreadedRenderer != null) {
+ mAttachInfo.mThreadedRenderer.setWideGamut(
+ lp.getColorMode() == ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT);
+ }
if (!hadSurface) {
if (mSurface.isValid()) {
@@ -2387,7 +2392,7 @@ public final class ViewRootImpl implements ViewParent,
mAttachInfo.mThreadedRenderer.destroy();
}
} else if ((surfaceGenerationId != mSurface.getGenerationId()
- || surfaceSizeChanged || windowRelayoutWasForced)
+ || surfaceSizeChanged || windowRelayoutWasForced || colorModeChanged)
&& mSurfaceHolder == null
&& mAttachInfo.mThreadedRenderer != null) {
mFullRedrawNeeded = true;
@@ -4009,6 +4014,20 @@ public final class ViewRootImpl implements ViewParent,
}
}
+ private boolean hasColorModeChanged(int colorMode) {
+ if (mAttachInfo.mThreadedRenderer == null) {
+ return false;
+ }
+ final boolean isWideGamut = colorMode == ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT;
+ if (mAttachInfo.mThreadedRenderer.isWideGamut() == isWideGamut) {
+ return false;
+ }
+ if (isWideGamut && !mContext.getResources().getConfiguration().isScreenWideColorGamut()) {
+ return false;
+ }
+ return true;
+ }
+
@Override
public void requestChildFocus(View child, View focused) {
if (DEBUG_INPUT_RESIZE) {
diff --git a/graphics/java/android/graphics/HardwareRenderer.java b/graphics/java/android/graphics/HardwareRenderer.java
index c4ddd50616e8..7ec76d79dfb1 100644
--- a/graphics/java/android/graphics/HardwareRenderer.java
+++ b/graphics/java/android/graphics/HardwareRenderer.java
@@ -154,6 +154,7 @@ public class HardwareRenderer {
private boolean mOpaque = true;
private boolean mForceDark = false;
private FrameInfo mScratchInfo;
+ private boolean mIsWideGamut = false;
/**
* Creates a new instance of a HardwareRenderer. The HardwareRenderer will default
@@ -498,6 +499,7 @@ public class HardwareRenderer {
* @hide
*/
public void setWideGamut(boolean wideGamut) {
+ mIsWideGamut = wideGamut;
nSetWideGamut(mNativeProxy, wideGamut);
}
@@ -673,6 +675,11 @@ public class HardwareRenderer {
nSetPictureCaptureCallback(mNativeProxy, callback);
}
+ /** @hide */
+ public boolean isWideGamut() {
+ return mIsWideGamut;
+ }
+
/** called by native */
static void invokePictureCapturedCallback(long picturePtr, PictureCapturedCallback callback) {
Picture picture = new Picture(picturePtr);