Create plumbing for disabling force-dark
Test: sysui's rounded corners are no longer white
Bug: 102591313
Change-Id: Id99ae38c354cef06b94a5fb79b5b1a9a216a514c
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 26e5cea..9cfaa6a 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -112,7 +112,9 @@
LOG_ALWAYS_FATAL_IF(!info.damageAccumulator, "DamageAccumulator missing");
MarkAndSweepRemoved observer(&info);
+ const int before = info.disableForceDark;
prepareTreeImpl(observer, info, false);
+ LOG_ALWAYS_FATAL_IF(before != info.disableForceDark, "Mis-matched force dark");
}
void RenderNode::addAnimator(const sp<BaseRenderNodeAnimator>& animator) {
@@ -195,6 +197,11 @@
if (info.mode == TreeInfo::MODE_FULL) {
pushStagingPropertiesChanges(info);
}
+
+ if (!mProperties.getAllowForceDark()) {
+ info.disableForceDark++;
+ }
+
uint32_t animatorDirtyMask = 0;
if (CC_LIKELY(info.runAnimations)) {
animatorDirtyMask = mAnimatorManager.animate(info);
@@ -232,6 +239,9 @@
}
pushLayerUpdate(info);
+ if (!mProperties.getAllowForceDark()) {
+ info.disableForceDark--;
+ }
info.damageAccumulator->popTransform();
}
@@ -273,7 +283,7 @@
if (mDisplayList) {
mDisplayList->syncContents();
- if (CC_UNLIKELY(Properties::forceDarkMode)) {
+ if (CC_UNLIKELY(info && !info->disableForceDark)) {
auto usage = usageHint();
if (mDisplayList->hasText()) {
usage = UsageHint::Foreground;
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h
index 7966845..04379ae 100644
--- a/libs/hwui/RenderProperties.h
+++ b/libs/hwui/RenderProperties.h
@@ -535,6 +535,14 @@
return CC_UNLIKELY(promotedToLayer()) ? LayerType::RenderLayer : mLayerProperties.mType;
}
+ bool setAllowForceDark(bool allow) {
+ return RP_SET(mPrimitiveFields.mAllowForceDark, allow);
+ }
+
+ bool getAllowForceDark() const {
+ return mPrimitiveFields.mAllowForceDark;
+ }
+
private:
// Rendering properties
struct PrimitiveFields {
@@ -554,6 +562,7 @@
bool mMatrixOrPivotDirty = false;
bool mProjectBackwards = false;
bool mProjectionReceiver = false;
+ bool mAllowForceDark = true;
Rect mClipBounds;
Outline mOutline;
RevealClip mRevealClip;
diff --git a/libs/hwui/TreeInfo.h b/libs/hwui/TreeInfo.h
index f2766d6..caa5762 100644
--- a/libs/hwui/TreeInfo.h
+++ b/libs/hwui/TreeInfo.h
@@ -17,6 +17,7 @@
#pragma once
#include "utils/Macros.h"
+#include "Properties.h"
#include <utils/Timers.h>
@@ -93,6 +94,8 @@
bool updateWindowPositions = false;
+ int disableForceDark = Properties::forceDarkMode ? 0 : 1;
+
struct Out {
bool hasFunctors = false;
// This is only updated if evaluateAnimations is true