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

Commit 99e38ca8 authored by Aurélien Pomini's avatar Aurélien Pomini Committed by Android (Google) Code Review
Browse files

Merge "Update contrast listener in systemui on user switch" into main

parents ee2736dd 2867c571
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ import com.android.systemui.monet.Style;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
import com.android.systemui.user.utils.UserScopedService;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.settings.SecureSettings;

@@ -137,6 +138,8 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
    @Mock
    private WakefulnessLifecycle mWakefulnessLifecycle;
    @Mock
    private UserScopedService<UiModeManager> mUiModeManagerProvider;
    @Mock
    private UiModeManager mUiModeManager;
    @Mock
    private ActivityManager mActivityManager;
@@ -162,6 +165,7 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {

        when(mFeatureFlags.isEnabled(Flags.MONET)).thenReturn(true);
        when(mWakefulnessLifecycle.getWakefulness()).thenReturn(WAKEFULNESS_AWAKE);
        when(mUiModeManagerProvider.forUser(any(UserHandle.class))).thenReturn(mUiModeManager);
        when(mUiModeManager.getContrast()).thenReturn(0.5f);

        when(mResources.getColor(eq(android.R.color.system_accent1_500), any()))
@@ -187,8 +191,8 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
                mBroadcastDispatcher, mBgHandler, mMainExecutor, mBgExecutor, mThemeOverlayApplier,
                mSecureSettings, mWallpaperManager, mUserManager, mDeviceProvisionedController,
                mUserTracker, mDumpManager, mFeatureFlags, mResources, mWakefulnessLifecycle,
                mJavaAdapter, mKeyguardTransitionInteractor, mUiModeManager, mActivityManager,
                mSystemProperties) {
                mJavaAdapter, mKeyguardTransitionInteractor, mUiModeManager, mUiModeManagerProvider,
                mActivityManager, mSystemProperties) {
            @VisibleForTesting
            protected boolean isNightMode() {
                return false;
@@ -925,8 +929,8 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
                mBroadcastDispatcher, mBgHandler, executor, executor, mThemeOverlayApplier,
                mSecureSettings, mWallpaperManager, mUserManager, mDeviceProvisionedController,
                mUserTracker, mDumpManager, mFeatureFlags, mResources, mWakefulnessLifecycle,
                mJavaAdapter, mKeyguardTransitionInteractor, mUiModeManager, mActivityManager,
                mSystemProperties) {
                mJavaAdapter, mKeyguardTransitionInteractor, mUiModeManager, mUiModeManagerProvider,
                mActivityManager, mSystemProperties) {
            @VisibleForTesting
            protected boolean isNightMode() {
                return false;
@@ -966,8 +970,8 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
                mBroadcastDispatcher, mBgHandler, executor, executor, mThemeOverlayApplier,
                mSecureSettings, mWallpaperManager, mUserManager, mDeviceProvisionedController,
                mUserTracker, mDumpManager, mFeatureFlags, mResources, mWakefulnessLifecycle,
                mJavaAdapter, mKeyguardTransitionInteractor, mUiModeManager, mActivityManager,
                mSystemProperties) {
                mJavaAdapter, mKeyguardTransitionInteractor, mUiModeManager, mUiModeManagerProvider,
                mActivityManager, mSystemProperties) {
            @VisibleForTesting
            protected boolean isNightMode() {
                return false;
+6 −0
Original line number Diff line number Diff line
@@ -571,6 +571,12 @@ public class FrameworkServicesModule {
        return context.getSystemService(UiModeManager.class);
    }

    @Provides
    @Singleton
    static UserScopedService<UiModeManager> provideUserScopedUiModeManager(Context context) {
        return new UserScopedServiceImpl<>(context, UiModeManager.class);
    }

    /** */
    @Provides
    @Singleton
+35 −11
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
 */

package com.android.systemui.theme;

import static android.app.Flags.fixContrastAndForceInvertStateForMultiUser;
import static android.util.TypedValue.TYPE_INT_COLOR_ARGB8;

import static com.android.systemui.Flags.hardwareColorStyles;
@@ -85,6 +85,7 @@ import com.android.systemui.monet.Style;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
import com.android.systemui.user.utils.UserScopedService;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.settings.SecureSettings;

@@ -173,6 +174,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
    private final KeyguardTransitionInteractor mKeyguardTransitionInteractor;
    private final StateFlow<Boolean> mIsKeyguardOnAsleepState;
    private final UiModeManager mUiModeManager;
    private final UserScopedService<UiModeManager> mUiModeManagerProvider;
    private ColorScheme mDarkColorScheme;
    private ColorScheme mLightColorScheme;

@@ -237,17 +239,32 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
    private final UserTracker.Callback mUserTrackerCallback = new UserTracker.Callback() {
        @Override
        public void onUserChanged(int newUser, @NonNull Context userContext) {
            if (fixContrastAndForceInvertStateForMultiUser()) {
                UiModeManager uiModeManager = mUiModeManagerProvider.forUser(
                        UserHandle.of(newUser));
                uiModeManager.removeContrastChangeListener(mContrastChangeListener);
                uiModeManager.addContrastChangeListener(mMainExecutor, mContrastChangeListener);
                mContrast = uiModeManager.getContrast();
            }

            boolean isManagedProfile = mUserManager.isManagedProfile(newUser);
            if (!mDeviceProvisionedController.isCurrentUserSetup() && isManagedProfile) {
                Log.i(TAG, "User setup not finished when new user event was received. "
                        + "Deferring... Managed profile? " + isManagedProfile);
                return;
            }

            if (DEBUG) Log.d(TAG, "Updating overlays for user switch / profile added.");
            reevaluateSystemTheme(true /* forceReload */);
        }
    };

    private final UiModeManager.ContrastChangeListener mContrastChangeListener = contrast -> {
        mContrast = contrast;
        // Force reload so that we update even when the main color has not changed
        reevaluateSystemTheme(true /* forceReload */);
    };

    private int getDefaultWallpaperColorsSource(int userId) {
        if (com.android.systemui.shared.Flags.newCustomizationPickerUi()) {
            // The wallpaper colors source is always the home wallpaper.
@@ -427,7 +444,8 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
            WakefulnessLifecycle wakefulnessLifecycle,
            JavaAdapter javaAdapter,
            KeyguardTransitionInteractor keyguardTransitionInteractor,
            UiModeManager uiModeManager,
            UiModeManager uiModeManager, // TODO(b/362682063) legacy argument, remove
            UserScopedService<UiModeManager> uiModeManagerProvider,
            ActivityManager activityManager,
            SystemPropertiesHelper systemPropertiesHelper
    ) {
@@ -448,6 +466,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
        mJavaAdapter = javaAdapter;
        mKeyguardTransitionInteractor = keyguardTransitionInteractor;
        mUiModeManager = uiModeManager;
        mUiModeManagerProvider = uiModeManagerProvider;
        mActivityManager = activityManager;
        mSystemPropertiesHelper = systemPropertiesHelper;
        dumpManager.registerDumpable(TAG, this);
@@ -490,12 +509,19 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
                    }
                },
                UserHandle.USER_ALL);
        int userId = mUserTracker.getUserId();
        if (fixContrastAndForceInvertStateForMultiUser()) {
            UiModeManager uiModeManager = mUiModeManagerProvider.forUser(UserHandle.of(userId));
            uiModeManager.addContrastChangeListener(mMainExecutor, mContrastChangeListener);
            mContrast = uiModeManager.getContrast();
        } else {
            mContrast = mUiModeManager.getContrast();
            mUiModeManager.addContrastChangeListener(mMainExecutor, contrast -> {
                mContrast = contrast;
                // Force reload so that we update even when the main color has not changed
                reevaluateSystemTheme(true /* forceReload */);
            });
        }

        // All wallpaper color and keyguard logic only applies when Monet is enabled.
        if (!mIsMonetEnabled) {
@@ -522,11 +548,10 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
            );

            /* We update the json in THEME_CUSTOMIZATION_OVERLAY_PACKAGES to reflect the preset. */
            final int currentUser = mUserTracker.getUserId();
            final String overlayPackageJson = Objects.requireNonNullElse(
                    mSecureSettings.getStringForUser(
                            Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES,
                            currentUser),
                            userId),
                    "{}"
            );

@@ -578,7 +603,6 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
                UserHandle.USER_ALL);

        Runnable whenAsleepHandler = () -> {
            final int userId = mUserTracker.getUserId();
            final WallpaperColors colors = mDeferredWallpaperColors.get(userId);
            if (colors != null) {
                int flags = mDeferredWallpaperColorsFlags.get(userId);