diff options
| -rw-r--r-- | services/core/java/com/android/server/display/DisplayManagerService.java | 15 | ||||
| -rw-r--r-- | services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java | 69 |
2 files changed, 75 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 2b732eab67cc..bed012bddf90 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -134,6 +134,7 @@ import android.util.ArraySet; import android.util.EventLog; import android.util.IndentingPrintWriter; import android.util.IntArray; +import android.util.MathUtils; import android.util.Pair; import android.util.Slog; import android.util.SparseArray; @@ -3098,6 +3099,7 @@ public final class DisplayManagerService extends SystemService { /** * Get internal or external viewport. Create it if does not currently exist. + * * @param viewportType - either INTERNAL or EXTERNAL * @return the viewport with the requested type */ @@ -4413,7 +4415,6 @@ public final class DisplayManagerService extends SystemService { } - @Override // Binder call public BrightnessConfiguration getBrightnessConfigurationForUser(int userId) { final String uniqueId; @@ -4492,10 +4493,12 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call public void setBrightness(int displayId, float brightness) { setBrightness_enforcePermission(); - if (!isValidBrightness(brightness)) { - Slog.w(TAG, "Attempted to set invalid brightness" + brightness); + if (Float.isNaN(brightness)) { + Slog.w(TAG, "Attempted to set invalid brightness: " + brightness); return; } + MathUtils.constrain(brightness, PowerManager.BRIGHTNESS_MIN, + PowerManager.BRIGHTNESS_MAX); final long token = Binder.clearCallingIdentity(); try { synchronized (mSyncRoot) { @@ -4791,12 +4794,6 @@ public final class DisplayManagerService extends SystemService { } } - private static boolean isValidBrightness(float brightness) { - return !Float.isNaN(brightness) - && (brightness >= PowerManager.BRIGHTNESS_MIN) - && (brightness <= PowerManager.BRIGHTNESS_MAX); - } - @VisibleForTesting void overrideSensorManager(SensorManager sensorManager) { synchronized (mSyncRoot) { diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java index 5bb8ded6920e..52f1cbd89e13 100644 --- a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java +++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java @@ -107,6 +107,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.MessageQueue; +import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.SystemProperties; @@ -3053,6 +3054,74 @@ public class DisplayManagerServiceTest { } @Test + public void testBrightnessUpdates() { + DisplayManagerService displayManager = + new DisplayManagerService(mContext, mShortMockedInjector); + DisplayManagerInternal localService = displayManager.new LocalService(); + DisplayManagerService.BinderService displayManagerBinderService = + displayManager.new BinderService(); + registerDefaultDisplays(displayManager); + initDisplayPowerController(localService); + + final float invalidBrightness = -0.3f; + final float brightnessOff = -1.0f; + final float minimumBrightness = 0.0f; + final float validBrightness = 0.5f; + + Settings.System.putInt(mContext.getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS_MODE, + Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); + + // set and check valid brightness + waitForIdleHandler(mPowerHandler); + displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, validBrightness); + waitForIdleHandler(mPowerHandler); + assertEquals(validBrightness, + displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY), + FLOAT_TOLERANCE); + + // set and check invalid brightness + waitForIdleHandler(mPowerHandler); + displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, invalidBrightness); + waitForIdleHandler(mPowerHandler); + assertEquals(PowerManager.BRIGHTNESS_MIN, + displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY), + FLOAT_TOLERANCE); + + // reset and check valid brightness + waitForIdleHandler(mPowerHandler); + displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, validBrightness); + waitForIdleHandler(mPowerHandler); + assertEquals(validBrightness, + displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY), + FLOAT_TOLERANCE); + + // set and check brightness off + waitForIdleHandler(mPowerHandler); + displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, brightnessOff); + waitForIdleHandler(mPowerHandler); + assertEquals(PowerManager.BRIGHTNESS_MIN, + displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY), + FLOAT_TOLERANCE); + + // reset and check valid brightness + waitForIdleHandler(mPowerHandler); + displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, validBrightness); + waitForIdleHandler(mPowerHandler); + assertEquals(validBrightness, + displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY), + FLOAT_TOLERANCE); + + // set and check minimum brightness + waitForIdleHandler(mPowerHandler); + displayManagerBinderService.setBrightness(Display.DEFAULT_DISPLAY, minimumBrightness); + waitForIdleHandler(mPowerHandler); + assertEquals(PowerManager.BRIGHTNESS_MIN, + displayManagerBinderService.getBrightness(Display.DEFAULT_DISPLAY), + FLOAT_TOLERANCE); + } + + @Test public void testResolutionChangeGetsBackedUp() throws Exception { when(mMockFlags.isResolutionBackupRestoreEnabled()).thenReturn(true); DisplayManagerService displayManager = |