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 mVrHeadset;
|
||||||
private boolean mComputedNightMode;
|
private boolean mComputedNightMode;
|
||||||
private int mCarModeEnableFlags;
|
private int mCarModeEnableFlags;
|
||||||
|
private boolean mSetupWizardComplete;
|
||||||
|
|
||||||
// flag set by resource, whether to enable Car dock launch when starting car mode.
|
// flag set by resource, whether to enable Car dock launch when starting car mode.
|
||||||
private boolean mEnableCarDockLaunch = true;
|
private boolean mEnableCarDockLaunch = true;
|
||||||
@@ -163,6 +164,12 @@ final class UiModeManagerService extends SystemService {
|
|||||||
mConfiguration.setToDefaults();
|
mConfiguration.setToDefaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
protected UiModeManagerService(Context context, boolean setupWizardComplete) {
|
||||||
|
this(context);
|
||||||
|
mSetupWizardComplete = setupWizardComplete;
|
||||||
|
}
|
||||||
|
|
||||||
private static Intent buildHomeIntent(String category) {
|
private static Intent buildHomeIntent(String category) {
|
||||||
Intent intent = new Intent(Intent.ACTION_MAIN);
|
Intent intent = new Intent(Intent.ACTION_MAIN);
|
||||||
intent.addCategory(category);
|
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) {
|
private final ContentObserver mDarkThemeObserver = new ContentObserver(mHandler) {
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange, Uri uri) {
|
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));
|
SystemProperties.set(SYSTEM_PROPERTY_DEVICE_THEME, Integer.toString(mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSwitchUser(int userHandle) {
|
||||||
|
super.onSwitchUser(userHandle);
|
||||||
|
getContext().getContentResolver().unregisterContentObserver(mSetupWizardObserver);
|
||||||
|
verifySetupWizardCompleted();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBootPhase(int phase) {
|
public void onBootPhase(int phase) {
|
||||||
if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
|
if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
|
||||||
@@ -330,8 +363,13 @@ final class UiModeManagerService extends SystemService {
|
|||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
final Context context = getContext();
|
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();
|
final Resources res = context.getResources();
|
||||||
|
mNightMode = res.getInteger(
|
||||||
|
com.android.internal.R.integer.config_defaultNightMode);
|
||||||
mDefaultUiModeType = res.getInteger(
|
mDefaultUiModeType = res.getInteger(
|
||||||
com.android.internal.R.integer.config_defaultUiModeType);
|
com.android.internal.R.integer.config_defaultUiModeType);
|
||||||
mCarModeKeepsScreenOn = (res.getInteger(
|
mCarModeKeepsScreenOn = (res.getInteger(
|
||||||
@@ -404,6 +442,20 @@ final class UiModeManagerService extends SystemService {
|
|||||||
return mConfiguration;
|
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() {
|
private boolean setupWizardCompleteForCurrentUser() {
|
||||||
return Secure.getIntForUser(getContext().getContentResolver(),
|
return Secure.getIntForUser(getContext().getContentResolver(),
|
||||||
Secure.USER_SETUP_COMPLETE, 0, UserHandle.getCallingUserId()) == 1;
|
Secure.USER_SETUP_COMPLETE, 0, UserHandle.getCallingUserId()) == 1;
|
||||||
@@ -429,11 +481,10 @@ final class UiModeManagerService extends SystemService {
|
|||||||
* @return True if the new value is different from the old value. False otherwise.
|
* @return True if the new value is different from the old value. False otherwise.
|
||||||
*/
|
*/
|
||||||
private boolean updateNightModeFromSettingsLocked(Context context, Resources res, int userId) {
|
private boolean updateNightModeFromSettingsLocked(Context context, Resources res, int userId) {
|
||||||
final int defaultNightMode = res.getInteger(
|
|
||||||
com.android.internal.R.integer.config_defaultNightMode);
|
|
||||||
int oldNightMode = mNightMode;
|
int oldNightMode = mNightMode;
|
||||||
|
if (mSetupWizardComplete) {
|
||||||
mNightMode = Secure.getIntForUser(context.getContentResolver(),
|
mNightMode = Secure.getIntForUser(context.getContentResolver(),
|
||||||
Secure.UI_NIGHT_MODE, defaultNightMode, userId);
|
Secure.UI_NIGHT_MODE, mNightMode, userId);
|
||||||
mOverrideNightModeOn = Secure.getIntForUser(context.getContentResolver(),
|
mOverrideNightModeOn = Secure.getIntForUser(context.getContentResolver(),
|
||||||
Secure.UI_NIGHT_MODE_OVERRIDE_ON, 0, userId) != 0;
|
Secure.UI_NIGHT_MODE_OVERRIDE_ON, 0, userId) != 0;
|
||||||
mOverrideNightModeOff = Secure.getIntForUser(context.getContentResolver(),
|
mOverrideNightModeOff = Secure.getIntForUser(context.getContentResolver(),
|
||||||
@@ -446,6 +497,7 @@ final class UiModeManagerService extends SystemService {
|
|||||||
Secure.getLongForUser(context.getContentResolver(),
|
Secure.getLongForUser(context.getContentResolver(),
|
||||||
Secure.DARK_THEME_CUSTOM_END_TIME,
|
Secure.DARK_THEME_CUSTOM_END_TIME,
|
||||||
DEFAULT_CUSTOM_NIGHT_END_TIME.toNanoOfDay() / 1000L, userId) * 1000);
|
DEFAULT_CUSTOM_NIGHT_END_TIME.toNanoOfDay() / 1000L, userId) * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
return oldNightMode != mNightMode;
|
return oldNightMode != mNightMode;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.os.PowerManager;
|
|||||||
import android.os.PowerManagerInternal;
|
import android.os.PowerManagerInternal;
|
||||||
import android.os.PowerSaveState;
|
import android.os.PowerSaveState;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableLooper;
|
import android.testing.TestableLooper;
|
||||||
import com.android.server.twilight.TwilightManager;
|
import com.android.server.twilight.TwilightManager;
|
||||||
@@ -54,6 +55,7 @@ import static junit.framework.TestCase.assertFalse;
|
|||||||
import static junit.framework.TestCase.assertTrue;
|
import static junit.framework.TestCase.assertTrue;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
@@ -144,7 +146,7 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
|
|||||||
addLocalService(PowerManagerInternal.class, mLocalPowerManager);
|
addLocalService(PowerManagerInternal.class, mLocalPowerManager);
|
||||||
addLocalService(TwilightManager.class, mTwilightManager);
|
addLocalService(TwilightManager.class, mTwilightManager);
|
||||||
|
|
||||||
mUiManagerService = new UiModeManagerService(mContext);
|
mUiManagerService = new UiModeManagerService(mContext, true);
|
||||||
try {
|
try {
|
||||||
mUiManagerService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
|
mUiManagerService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
|
||||||
} catch (SecurityException e) {/* ignore for permission denial */}
|
} catch (SecurityException e) {/* ignore for permission denial */}
|
||||||
|
|||||||
Reference in New Issue
Block a user