Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit faf136b1 authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊 Committed by Bruno Martins
Browse files

SystemUI: support black theme for dark mode [1/4]



Co-authored-by: default avatarJesse Chan <jc@lineageos.org>
Change-Id: I57cd53de8f2c1e4d445441b514875b6af915b858
parent 0956c4dc
Loading
Loading
Loading
Loading
+43 −5
Original line number Diff line number Diff line
@@ -71,6 +71,9 @@ import com.android.systemui.statusbar.policy.ConfigurationController.Configurati
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.util.settings.SystemSettings;

import lineageos.providers.LineageSettings;

import org.json.JSONException;
import org.json.JSONObject;
@@ -99,6 +102,8 @@ import javax.inject.Inject;
@SysUISingleton
public class ThemeOverlayController extends SystemUI implements Dumpable {
    protected static final String TAG = "ThemeOverlayController";
    protected static final String OVERLAY_BERRY_BLACK_THEME =
            "org.lineageos.overlay.customization.blacktheme";
    private static final boolean DEBUG = true;

    protected static final int NEUTRAL = 0;
@@ -109,6 +114,7 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
    private final BroadcastDispatcher mBroadcastDispatcher;
    private final Executor mBgExecutor;
    private final SecureSettings mSecureSettings;
    private final SystemSettings mSystemSettings;
    private final Executor mMainExecutor;
    private final Handler mBgHandler;
    private final boolean mIsMonetEnabled;
@@ -245,6 +251,11 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
        return false;
    }

    private boolean isNightMode() {
        return (mContext.getResources().getConfiguration().uiMode
                & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
    }

    private void handleWallpaperColors(WallpaperColors wallpaperColors, int flags, int userId) {
        final int currentUser = mUserTracker.getUserId();
        final boolean hadWallpaperColors = mCurrentColors.get(userId) != null;
@@ -355,7 +366,7 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
            UserManager userManager, DeviceProvisionedController deviceProvisionedController,
            UserTracker userTracker, DumpManager dumpManager, FeatureFlags featureFlags,
            WakefulnessLifecycle wakefulnessLifecycle, ConfigurationController
            configurationController) {
            configurationController, SystemSettings systemSettings) {
        super(context);

        mIsMonetEnabled = featureFlags.isMonetEnabled();
@@ -368,6 +379,7 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
        mBgHandler = bgHandler;
        mThemeManager = themeOverlayApplier;
        mSecureSettings = secureSettings;
        mSystemSettings = systemSettings;
        mWallpaperManager = wallpaperManager;
        mUserTracker = userTracker;
        mWakefulnessLifecycle = wakefulnessLifecycle;
@@ -408,6 +420,27 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
                },
                UserHandle.USER_ALL);

        mSystemSettings.registerContentObserverForUser(
                LineageSettings.System.getUriFor(LineageSettings.System.BERRY_BLACK_THEME),
                false,
                new ContentObserver(mBgHandler) {
                    @Override
                    public void onChange(boolean selfChange, Collection<Uri> collection, int flags,
                            int userId) {
                        if (DEBUG) Log.d(TAG, "Overlay changed for user: " + userId);
                        if (mUserTracker.getUserId() != userId) {
                            return;
                        }
                        if (!mDeviceProvisionedController.isUserSetup(userId)) {
                            Log.i(TAG, "Theme application deferred when setting changed.");
                            mDeferredThemeEvaluation = true;
                            return;
                        }
                        reevaluateSystemTheme(true /* forceReload */);
                    }
                },
                UserHandle.USER_ALL);

        if (!mIsMonetEnabled) {
            return;
        }
@@ -507,10 +540,7 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
     * Given a color candidate, return an overlay definition.
     */
    protected @Nullable FabricatedOverlay getOverlay(int color, int type) {
        boolean nightMode = (mContext.getResources().getConfiguration().uiMode
                & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;

        mColorScheme = new ColorScheme(color, nightMode);
        mColorScheme = new ColorScheme(color, isNightMode());
        List<Integer> colorShades = type == ACCENT
                ? mColorScheme.getAllAccentColors() : mColorScheme.getAllNeutralColors();
        String name = type == ACCENT ? "accent" : "neutral";
@@ -625,6 +655,14 @@ public class ThemeOverlayController extends SystemUI implements Dumpable {
            categoryToPackage.put(OVERLAY_CATEGORY_ACCENT_COLOR, mSecondaryOverlay.getIdentifier());
        }

        boolean isBlackMode = (LineageSettings.System.getIntForUser(
                mContext.getContentResolver(), LineageSettings.System.BERRY_BLACK_THEME,
                0, currentUser) == 1) && isNightMode();
        if (categoryToPackage.containsKey(OVERLAY_CATEGORY_SYSTEM_PALETTE) && isBlackMode) {
            OverlayIdentifier blackTheme = new OverlayIdentifier(OVERLAY_BERRY_BLACK_THEME);
            categoryToPackage.put(OVERLAY_CATEGORY_SYSTEM_PALETTE, blackTheme);
        }

        Set<UserHandle> managedProfiles = new HashSet<>();
        for (UserInfo userInfo : mUserManager.getEnabledProfiles(currentUser)) {
            if (userInfo.isManagedProfile()) {