diff options
| author | 2020-05-08 17:44:38 +0000 | |
|---|---|---|
| committer | 2020-05-08 17:44:38 +0000 | |
| commit | 1d555b86cb24d7c00593ff5f0f42d25f149cf02c (patch) | |
| tree | 49331c5641f6ad587d691401457be0f4184572c2 | |
| parent | 5c8dd641bae6ca09a61ba9b6dae76789d9b8e399 (diff) | |
| parent | 3a3cc4a20f2c1d5d4711db1a202cb98dfb09b700 (diff) | |
Merge "Revert "Allow SUW to change dark theme"" into rvc-dev
| -rw-r--r-- | services/core/java/com/android/server/UiModeManagerService.java | 84 | ||||
| -rw-r--r-- | services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java | 4 | 
2 files changed, 71 insertions, 17 deletions
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java index 26cb208a3d47..dd3de359a01e 100644 --- a/services/core/java/com/android/server/UiModeManagerService.java +++ b/services/core/java/com/android/server/UiModeManagerService.java @@ -122,6 +122,7 @@ final class UiModeManagerService extends SystemService {      private boolean mVrHeadset;      private boolean mComputedNightMode;      private int mCarModeEnableFlags; +    private boolean mSetupWizardComplete;      // flag set by resource, whether to enable Car dock launch when starting car mode.      private boolean mEnableCarDockLaunch = true; @@ -163,6 +164,12 @@ final class UiModeManagerService extends SystemService {          mConfiguration.setToDefaults();      } +    @VisibleForTesting +    protected UiModeManagerService(Context context, boolean setupWizardComplete) { +        this(context); +        mSetupWizardComplete = setupWizardComplete; +    } +      private static Intent buildHomeIntent(String category) {          Intent intent = new Intent(Intent.ACTION_MAIN);          intent.addCategory(category); @@ -276,6 +283,25 @@ final class UiModeManagerService extends SystemService {          }      }; +    private final ContentObserver mSetupWizardObserver = new ContentObserver(mHandler) { +        @Override +        public void onChange(boolean selfChange, Uri uri) { +            synchronized (mLock) { +                // setup wizard is done now so we can unblock +                if (setupWizardCompleteForCurrentUser() && !selfChange) { +                    mSetupWizardComplete = true; +                    getContext().getContentResolver() +                            .unregisterContentObserver(mSetupWizardObserver); +                    // update night mode +                    Context context = getContext(); +                    updateNightModeFromSettingsLocked(context, context.getResources(), +                            UserHandle.getCallingUserId()); +                    updateLocked(0, 0); +                } +            } +        } +    }; +      private final ContentObserver mDarkThemeObserver = new ContentObserver(mHandler) {          @Override          public void onChange(boolean selfChange, Uri uri) { @@ -293,6 +319,13 @@ final class UiModeManagerService extends SystemService {      }      @Override +    public void onSwitchUser(int userHandle) { +        super.onSwitchUser(userHandle); +        getContext().getContentResolver().unregisterContentObserver(mSetupWizardObserver); +        verifySetupWizardCompleted(); +    } + +    @Override      public void onBootPhase(int phase) {          if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {              synchronized (mLock) { @@ -330,8 +363,13 @@ final class UiModeManagerService extends SystemService {      @Override      public void onStart() {          final Context context = getContext(); +        // If setup isn't complete for this user listen for completion so we can unblock +        // being able to send a night mode configuration change event +        verifySetupWizardCompleted();          final Resources res = context.getResources(); +        mNightMode = res.getInteger( +                com.android.internal.R.integer.config_defaultNightMode);          mDefaultUiModeType = res.getInteger(                  com.android.internal.R.integer.config_defaultUiModeType);          mCarModeKeepsScreenOn = (res.getInteger( @@ -404,6 +442,20 @@ final class UiModeManagerService extends SystemService {          return mConfiguration;      } +    // Records whether setup wizard has happened or not and adds an observer for this user if not. +    private void verifySetupWizardCompleted() { +        final Context context = getContext(); +        final int userId = UserHandle.getCallingUserId(); +        if (!setupWizardCompleteForCurrentUser()) { +            mSetupWizardComplete = false; +            context.getContentResolver().registerContentObserver( +                    Secure.getUriFor( +                            Secure.USER_SETUP_COMPLETE), false, mSetupWizardObserver, userId); +        } else { +            mSetupWizardComplete = true; +        } +    } +      private boolean setupWizardCompleteForCurrentUser() {          return Secure.getIntForUser(getContext().getContentResolver(),                  Secure.USER_SETUP_COMPLETE, 0, UserHandle.getCallingUserId()) == 1; @@ -429,23 +481,23 @@ final class UiModeManagerService extends SystemService {       * @return True if the new value is different from the old value. False otherwise.       */      private boolean updateNightModeFromSettingsLocked(Context context, Resources res, int userId) { -        final int defaultNightMode = res.getInteger( -                com.android.internal.R.integer.config_defaultNightMode);          int oldNightMode = mNightMode; -        mNightMode = Secure.getIntForUser(context.getContentResolver(), -                Secure.UI_NIGHT_MODE, defaultNightMode, userId); -        mOverrideNightModeOn = Secure.getIntForUser(context.getContentResolver(), -                Secure.UI_NIGHT_MODE_OVERRIDE_ON, 0, userId) != 0; -        mOverrideNightModeOff = Secure.getIntForUser(context.getContentResolver(), -                Secure.UI_NIGHT_MODE_OVERRIDE_OFF, 0, userId) != 0; -        mCustomAutoNightModeStartMilliseconds = LocalTime.ofNanoOfDay( -                Secure.getLongForUser(context.getContentResolver(), -                        Secure.DARK_THEME_CUSTOM_START_TIME, -                        DEFAULT_CUSTOM_NIGHT_START_TIME.toNanoOfDay() / 1000L, userId) * 1000); -        mCustomAutoNightModeEndMilliseconds = LocalTime.ofNanoOfDay( -                Secure.getLongForUser(context.getContentResolver(), -                        Secure.DARK_THEME_CUSTOM_END_TIME, -                        DEFAULT_CUSTOM_NIGHT_END_TIME.toNanoOfDay() / 1000L, userId) * 1000); +        if (mSetupWizardComplete) { +            mNightMode = Secure.getIntForUser(context.getContentResolver(), +                    Secure.UI_NIGHT_MODE, mNightMode, userId); +            mOverrideNightModeOn = Secure.getIntForUser(context.getContentResolver(), +                    Secure.UI_NIGHT_MODE_OVERRIDE_ON, 0, userId) != 0; +            mOverrideNightModeOff = Secure.getIntForUser(context.getContentResolver(), +                    Secure.UI_NIGHT_MODE_OVERRIDE_OFF, 0, userId) != 0; +            mCustomAutoNightModeStartMilliseconds = LocalTime.ofNanoOfDay( +                    Secure.getLongForUser(context.getContentResolver(), +                            Secure.DARK_THEME_CUSTOM_START_TIME, +                            DEFAULT_CUSTOM_NIGHT_START_TIME.toNanoOfDay() / 1000L, userId) * 1000); +            mCustomAutoNightModeEndMilliseconds = LocalTime.ofNanoOfDay( +                    Secure.getLongForUser(context.getContentResolver(), +                            Secure.DARK_THEME_CUSTOM_END_TIME, +                            DEFAULT_CUSTOM_NIGHT_END_TIME.toNanoOfDay() / 1000L, userId) * 1000); +        }          return oldNightMode != mNightMode;      } diff --git a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java index df92b6ed95e8..69ef499749a9 100644 --- a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java @@ -31,6 +31,7 @@ import android.os.PowerManager;  import android.os.PowerManagerInternal;  import android.os.PowerSaveState;  import android.os.RemoteException; +import android.provider.Settings;  import android.testing.AndroidTestingRunner;  import android.testing.TestableLooper;  import com.android.server.twilight.TwilightManager; @@ -54,6 +55,7 @@ import static junit.framework.TestCase.assertFalse;  import static junit.framework.TestCase.assertTrue;  import static org.junit.Assert.assertEquals;  import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.anyLong;  import static org.mockito.ArgumentMatchers.anyString; @@ -144,7 +146,7 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {          addLocalService(PowerManagerInternal.class, mLocalPowerManager);          addLocalService(TwilightManager.class, mTwilightManager); -        mUiManagerService = new UiModeManagerService(mContext); +        mUiManagerService = new UiModeManagerService(mContext, true);          try {              mUiManagerService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);          } catch (SecurityException e) {/* ignore for permission denial */}  |