mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-12-14 18:34:30 -05:00
44e57d0a5a
Signed-off-by: Tavi <tavi@divested.dev>
221 lines
11 KiB
Diff
221 lines
11 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: empratyush <codelab@pratyush.dev>
|
|
Date: Thu, 24 Mar 2022 11:55:21 +0530
|
|
Subject: [PATCH] make monet based theming user configurable
|
|
|
|
---
|
|
core/java/android/provider/Settings.java | 21 +++++
|
|
.../theme/ThemeOverlayController.java | 76 +++++++++++--------
|
|
2 files changed, 65 insertions(+), 32 deletions(-)
|
|
|
|
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
|
|
index 8cb77c608f4a..f4db96f153e4 100644
|
|
--- a/core/java/android/provider/Settings.java
|
|
+++ b/core/java/android/provider/Settings.java
|
|
@@ -6341,6 +6341,27 @@ public final class Settings {
|
|
return putStringForUser(cr, name, Float.toString(value), userHandle);
|
|
}
|
|
|
|
+ /**
|
|
+ * Control whether to enable dynamic monet based theming mode.
|
|
+ * @hide
|
|
+ */
|
|
+ @UnsupportedAppUsage
|
|
+ public static final String MONET_MODE = "monet_mode";
|
|
+
|
|
+ /**
|
|
+ * MONET_MODE value for enabled mode.
|
|
+ * @hide
|
|
+ */
|
|
+ @UnsupportedAppUsage
|
|
+ public static final int MONET_MODE_ENABLED = 1;
|
|
+
|
|
+ /**
|
|
+ * MONET_MODE value for disabled mode.
|
|
+ * @hide
|
|
+ */
|
|
+ @UnsupportedAppUsage
|
|
+ public static final int MONET_MODE_DISABLED = 0;
|
|
+
|
|
/**
|
|
* Control whether to enable adaptive sleep mode.
|
|
* @hide
|
|
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
|
|
index b732ef6b873a..d500270464c3 100644
|
|
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
|
|
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
|
|
@@ -117,7 +117,6 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
private final SystemSettings mSystemSettings;
|
|
private final Executor mMainExecutor;
|
|
private final Handler mBgHandler;
|
|
- private final boolean mIsMonetEnabled;
|
|
private final UserTracker mUserTracker;
|
|
private final ConfigurationController mConfigurationController;
|
|
private final DeviceProvisionedController mDeviceProvisionedController;
|
|
@@ -261,7 +260,11 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
final boolean hadWallpaperColors = mCurrentColors.get(userId) != null;
|
|
int latestWallpaperType = getLatestWallpaperType(userId);
|
|
if ((flags & latestWallpaperType) != 0) {
|
|
- mCurrentColors.put(userId, wallpaperColors);
|
|
+ if (isMonetEnabled(userId)){
|
|
+ mCurrentColors.put(userId, wallpaperColors);
|
|
+ }else{
|
|
+ mCurrentColors.put(userId, null);
|
|
+ }
|
|
if (DEBUG) Log.d(TAG, "got new colors: " + wallpaperColors + " where: " + flags);
|
|
}
|
|
|
|
@@ -358,6 +361,15 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
}
|
|
};
|
|
|
|
+ private boolean isMonetEnabled(int user){
|
|
+ return Settings.Secure.getIntForUser(
|
|
+ mContext.getContentResolver(),
|
|
+ Settings.Secure.MONET_MODE,
|
|
+ Settings.Secure.MONET_MODE_ENABLED,
|
|
+ user
|
|
+ ) == Settings.Secure.MONET_MODE_ENABLED;
|
|
+ }
|
|
+
|
|
@Inject
|
|
public ThemeOverlayController(Context context, BroadcastDispatcher broadcastDispatcher,
|
|
@Background Handler bgHandler, @Main Executor mainExecutor,
|
|
@@ -369,7 +381,6 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
configurationController, SystemSettings systemSettings) {
|
|
super(context);
|
|
|
|
- mIsMonetEnabled = featureFlags.isMonetEnabled();
|
|
mConfigurationController = configurationController;
|
|
mDeviceProvisionedController = deviceProvisionedController;
|
|
mBroadcastDispatcher = broadcastDispatcher;
|
|
@@ -468,10 +479,6 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
},
|
|
UserHandle.USER_ALL);
|
|
|
|
- if (!mIsMonetEnabled) {
|
|
- return;
|
|
- }
|
|
-
|
|
mUserTracker.addCallback(mUserTrackerCallback, mMainExecutor);
|
|
|
|
mConfigurationController.addCallback(mConfigurationListener);
|
|
@@ -479,8 +486,8 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
|
|
// Upon boot, make sure we have the most up to date colors
|
|
Runnable updateColors = () -> {
|
|
- WallpaperColors systemColor = mWallpaperManager.getWallpaperColors(
|
|
- getLatestWallpaperType(mUserTracker.getUserId()));
|
|
+ WallpaperColors systemColor =isMonetEnabled(mUserTracker.getUserId())? mWallpaperManager.getWallpaperColors(
|
|
+ getLatestWallpaperType(mUserTracker.getUserId())) : null;
|
|
Runnable applyColors = () -> {
|
|
if (DEBUG) Log.d(TAG, "Boot colors: " + systemColor);
|
|
mCurrentColors.put(mUserTracker.getUserId(), systemColor);
|
|
@@ -506,7 +513,7 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
@Override
|
|
public void onFinishedGoingToSleep() {
|
|
final int userId = mUserTracker.getUserId();
|
|
- final WallpaperColors colors = mDeferredWallpaperColors.get(userId);
|
|
+ final WallpaperColors colors =isMonetEnabled(mUserTracker.getUserId())? mDeferredWallpaperColors.get(userId) : null;
|
|
if (colors != null) {
|
|
int flags = mDeferredWallpaperColorsFlags.get(userId);
|
|
|
|
@@ -517,10 +524,27 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
}
|
|
}
|
|
});
|
|
+
|
|
+ mSecureSettings.registerContentObserverForUser(
|
|
+ Settings.Secure.getUriFor(Settings.Secure.MONET_MODE),
|
|
+ false,
|
|
+ new ContentObserver(mBgHandler) {
|
|
+ @Override
|
|
+ public void onChange(boolean selfChange) {
|
|
+ super.onChange(selfChange);
|
|
+ WallpaperColors color = isMonetEnabled(mUserTracker.getUserId())?
|
|
+ mWallpaperManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM, mUserTracker.getUserId())
|
|
+ : null;
|
|
+ handleWallpaperColors(color, WallpaperManager.FLAG_SYSTEM, mUserTracker.getUserId());
|
|
+ reevaluateSystemTheme(true);
|
|
+ }
|
|
+ },
|
|
+ UserHandle.USER_ALL
|
|
+ );
|
|
}
|
|
|
|
private void reevaluateSystemTheme(boolean forceReload) {
|
|
- final WallpaperColors currentColors = mCurrentColors.get(mUserTracker.getUserId());
|
|
+ final WallpaperColors currentColors =isMonetEnabled(mUserTracker.getUserId())? mCurrentColors.get(mUserTracker.getUserId()) : null;
|
|
final int mainColor;
|
|
final int accentCandidate;
|
|
if (currentColors == null) {
|
|
@@ -539,14 +563,12 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
mMainWallpaperColor = mainColor;
|
|
mWallpaperAccentColor = accentCandidate;
|
|
|
|
- if (mIsMonetEnabled) {
|
|
- mSecondaryOverlay = getOverlay(mWallpaperAccentColor, ACCENT);
|
|
- mNeutralOverlay = getOverlay(mMainWallpaperColor, NEUTRAL);
|
|
- mNeedsOverlayCreation = true;
|
|
- if (DEBUG) {
|
|
- Log.d(TAG, "fetched overlays. accent: " + mSecondaryOverlay
|
|
- + " neutral: " + mNeutralOverlay);
|
|
- }
|
|
+ mSecondaryOverlay = getOverlay(mWallpaperAccentColor, ACCENT);
|
|
+ mNeutralOverlay = getOverlay(mMainWallpaperColor, NEUTRAL);
|
|
+ mNeedsOverlayCreation = true;
|
|
+ if (DEBUG) {
|
|
+ Log.d(TAG, "fetched overlays. accent: " + mSecondaryOverlay
|
|
+ + " neutral: " + mNeutralOverlay);
|
|
}
|
|
|
|
updateThemeOverlays();
|
|
@@ -620,7 +642,7 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
|
|
// Let's generate system overlay if the style picker decided to override it.
|
|
OverlayIdentifier systemPalette = categoryToPackage.get(OVERLAY_CATEGORY_SYSTEM_PALETTE);
|
|
- if (mIsMonetEnabled && systemPalette != null && systemPalette.getPackageName() != null) {
|
|
+ if (systemPalette != null && systemPalette.getPackageName() != null) {
|
|
try {
|
|
String colorString = systemPalette.getPackageName().toLowerCase();
|
|
if (!colorString.startsWith("#")) {
|
|
@@ -634,20 +656,11 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
// Color.parseColor doesn't catch any exceptions from the calls it makes
|
|
Log.w(TAG, "Invalid color definition: " + systemPalette.getPackageName(), e);
|
|
}
|
|
- } else if (!mIsMonetEnabled && systemPalette != null) {
|
|
- try {
|
|
- // It's possible that we flipped the flag off and still have a @ColorInt in the
|
|
- // setting. We need to sanitize the input, otherwise the overlay transaction will
|
|
- // fail.
|
|
- categoryToPackage.remove(OVERLAY_CATEGORY_SYSTEM_PALETTE);
|
|
- } catch (NumberFormatException e) {
|
|
- // This is a package name. All good, let's continue
|
|
- }
|
|
}
|
|
|
|
// Same for accent color.
|
|
OverlayIdentifier accentPalette = categoryToPackage.get(OVERLAY_CATEGORY_ACCENT_COLOR);
|
|
- if (mIsMonetEnabled && accentPalette != null && accentPalette.getPackageName() != null) {
|
|
+ if (accentPalette != null && accentPalette.getPackageName() != null) {
|
|
try {
|
|
String colorString = accentPalette.getPackageName().toLowerCase();
|
|
if (!colorString.startsWith("#")) {
|
|
@@ -661,7 +674,7 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
// Color.parseColor doesn't catch any exceptions from the calls it makes
|
|
Log.w(TAG, "Invalid color definition: " + accentPalette.getPackageName(), e);
|
|
}
|
|
- } else if (!mIsMonetEnabled && accentPalette != null) {
|
|
+ } else if (accentPalette != null) {
|
|
try {
|
|
Integer.parseInt(accentPalette.getPackageName().toLowerCase(), 16);
|
|
categoryToPackage.remove(OVERLAY_CATEGORY_ACCENT_COLOR);
|
|
@@ -719,7 +732,6 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
|
|
pw.println("mWallpaperAccentColor=" + Integer.toHexString(mWallpaperAccentColor));
|
|
pw.println("mSecondaryOverlay=" + mSecondaryOverlay);
|
|
pw.println("mNeutralOverlay=" + mNeutralOverlay);
|
|
- pw.println("mIsMonetEnabled=" + mIsMonetEnabled);
|
|
pw.println("mColorScheme=" + mColorScheme);
|
|
pw.println("mNeedsOverlayCreation=" + mNeedsOverlayCreation);
|
|
pw.println("mAcceptColorEvents=" + mAcceptColorEvents);
|