diff options
| author | John Reck <jreck@google.com> | 2018-10-25 16:35:10 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-10-25 16:35:10 +0000 |
| commit | fcf14cfd944900bd7190715c7bc018a75959f7ea (patch) | |
| tree | b2c24dbebc1b3ffec7c1d11633e9d9bc8fff7fae /core/java/android | |
| parent | 1d63e024deeac791375b6a909471c014ce7722e4 (diff) | |
| parent | a2d20b447a003251f42195dfb7fa41671f89b673 (diff) | |
Merge "Add theme & View API to control force-dark"
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/Surface.java | 2 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 18 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 20 |
3 files changed, 23 insertions, 17 deletions
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index f17a45800aeb..f3cb3767ec9d 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -897,7 +897,7 @@ public class Surface implements Parcelable { HwuiContext(boolean isWideColorGamut) { mRenderNode = RenderNode.create("HwuiCanvas", null); mRenderNode.setClipToBounds(false); - mRenderNode.setAllowForceDark(false); + mRenderNode.setForceDarkAllowed(false); mIsWideColorGamut = isWideColorGamut; mHwuiRenderer = nHwuiCreate(mRenderNode.mNativeRenderNode, mNativeObject, isWideColorGamut); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index c82918249531..1157b287e550 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -5542,6 +5542,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, break; case com.android.internal.R.styleable.View_accessibilityHeading: setAccessibilityHeading(a.getBoolean(attr, false)); + break; + case R.styleable.View_forceDarkAllowed: + mRenderNode.setForceDarkAllowed(a.getBoolean(attr, true)); + break; } } @@ -15286,11 +15290,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * If a theme is isLightTheme="false", then force dark is globally disabled for that theme. * * @param allow Whether or not to allow force dark. - * - * @hide */ - public void setAllowForceDark(boolean allow) { - if (mRenderNode.setAllowForceDark(allow)) { + public void setForceDarkAllowed(boolean allow) { + if (mRenderNode.setForceDarkAllowed(allow)) { // Currently toggling force-dark requires a new display list push to apply // TODO: Make it not clobber the display list so this is just a damageSelf() instead invalidate(); @@ -15298,15 +15300,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** - * See {@link #setAllowForceDark(boolean)} + * See {@link #setForceDarkAllowed(boolean)} * * @return true if force dark is allowed (default), false if it is disabled - * - * @hide */ @ViewDebug.ExportedProperty(category = "drawing") - public boolean getAllowForceDark() { - return mRenderNode.getAllowForceDark(); + public boolean isForceDarkAllowed() { + return mRenderNode.isForceDarkAllowed(); } /** diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 7da31ebe4a17..170c78367643 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1096,15 +1096,21 @@ public final class ViewRootImpl implements ViewParent, private void updateForceDarkMode() { if (mAttachInfo.mThreadedRenderer == null) return; - boolean nightMode = getNightMode() == Configuration.UI_MODE_NIGHT_YES; - TypedArray a = mContext.obtainStyledAttributes(R.styleable.Theme); - boolean isLightTheme = a.getBoolean(R.styleable.Theme_isLightTheme, false); - a.recycle(); + boolean useAutoDark = getNightMode() == Configuration.UI_MODE_NIGHT_YES; - boolean changed = mAttachInfo.mThreadedRenderer.setForceDark(nightMode); - changed |= mAttachInfo.mThreadedRenderer.getRootNode().setAllowForceDark(isLightTheme); + // Allow debug.hwui.force_dark to override the target SDK check + if (useAutoDark && !SystemProperties.getBoolean("debug.hwui.force_dark", false)) { + useAutoDark = mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q; + } + + if (useAutoDark) { + TypedArray a = mContext.obtainStyledAttributes(R.styleable.Theme); + useAutoDark = a.getBoolean(R.styleable.Theme_isLightTheme, true) + && a.getBoolean(R.styleable.Theme_forceDarkAllowed, true); + a.recycle(); + } - if (changed) { + if (mAttachInfo.mThreadedRenderer.setForceDark(useAutoDark)) { // TODO: Don't require regenerating all display lists to apply this setting invalidateWorld(mView); } |
