Merge "Revert "Allow SUW to change dark theme"" into rvc-dev
This commit is contained in:
@@ -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) {
|
||||
@@ -292,6 +318,13 @@ final class UiModeManagerService extends SystemService {
|
||||
SystemProperties.set(SYSTEM_PROPERTY_DEVICE_THEME, Integer.toString(mode));
|
||||
}
|
||||
|
||||
@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) {
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 */}
|
||||
|
||||
Reference in New Issue
Block a user