summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2018-10-25 16:35:10 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-10-25 16:35:10 +0000
commitfcf14cfd944900bd7190715c7bc018a75959f7ea (patch)
treeb2c24dbebc1b3ffec7c1d11633e9d9bc8fff7fae /core/java/android
parent1d63e024deeac791375b6a909471c014ce7722e4 (diff)
parenta2d20b447a003251f42195dfb7fa41671f89b673 (diff)
Merge "Add theme & View API to control force-dark"
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/view/Surface.java2
-rw-r--r--core/java/android/view/View.java18
-rw-r--r--core/java/android/view/ViewRootImpl.java20
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);
}