diff options
3 files changed, 29 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index b97de6511aed..c77ec20afa3b 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -1849,7 +1849,6 @@ public final class DisplayManagerService extends SystemService { if (packageName != null && !validatePackageName(getCallingUid(), packageName)) { packageName = null; } - Preconditions.checkNotNull(c); final long token = Binder.clearCallingIdentity(); try { setBrightnessConfigurationForUserInternal(c, userId, packageName); diff --git a/services/core/java/com/android/server/display/PersistentDataStore.java b/services/core/java/com/android/server/display/PersistentDataStore.java index f1ce5c5f0007..cbf46f832186 100644 --- a/services/core/java/com/android/server/display/PersistentDataStore.java +++ b/services/core/java/com/android/server/display/PersistentDataStore.java @@ -598,14 +598,20 @@ final class PersistentDataStore { private boolean setBrightnessConfigurationForUser(BrightnessConfiguration c, int userSerial, String packageName) { BrightnessConfiguration currentConfig = mConfigurations.get(userSerial); - if (currentConfig == null || !currentConfig.equals(c)) { - if (packageName == null) { - mPackageNames.remove(userSerial); + if (currentConfig != c && (currentConfig == null || !currentConfig.equals(c))) { + if (c != null) { + if (packageName == null) { + mPackageNames.remove(userSerial); + } else { + mPackageNames.put(userSerial, packageName); + } + mTimeStamps.put(userSerial, System.currentTimeMillis()); + mConfigurations.put(userSerial, c); } else { - mPackageNames.put(userSerial, packageName); + mPackageNames.remove(userSerial); + mTimeStamps.delete(userSerial); + mConfigurations.remove(userSerial); } - mTimeStamps.put(userSerial, System.currentTimeMillis()); - mConfigurations.put(userSerial, c); return true; } return false; diff --git a/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java b/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java index c5f8c90dd6c6..675000e91a1c 100644 --- a/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java @@ -171,6 +171,23 @@ public class PersistentDataStoreTest { newDataStore.getBrightnessConfiguration(0 /*userSerial*/)); } + @Test + public void testNullBrightnessConfiguration() { + final float[] lux = { 0f, 10f }; + final float[] nits = {1f, 100f }; + final BrightnessConfiguration config = new BrightnessConfiguration.Builder(lux, nits) + .setDescription("a description") + .build(); + mDataStore.loadIfNeeded(); + assertNull(mDataStore.getBrightnessConfiguration(0 /*userSerial*/)); + + mDataStore.setBrightnessConfigurationForUser(config, 0, "packagename"); + assertNotNull(mDataStore.getBrightnessConfiguration(0 /*userSerial*/)); + + mDataStore.setBrightnessConfigurationForUser(null, 0, "packagename"); + assertNull(mDataStore.getBrightnessConfiguration(0 /*userSerial*/)); + } + public class TestInjector extends PersistentDataStore.Injector { private InputStream mReadStream; private OutputStream mWriteStream; |