diff --git a/api/system-current.txt b/api/system-current.txt index 038c6edc23cde..cd934bd654923 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -1233,7 +1233,9 @@ package android.hardware.display { public final class DisplayManager { method public java.util.List getAmbientBrightnessStats(); + method public android.hardware.display.BrightnessConfiguration getBrightnessConfiguration(); method public java.util.List getBrightnessEvents(); + method public android.hardware.display.BrightnessConfiguration getDefaultBrightnessConfiguration(); method public android.graphics.Point getStableDisplaySize(); method public void setBrightnessConfiguration(android.hardware.display.BrightnessConfiguration); } diff --git a/api/test-current.txt b/api/test-current.txt index e8d27a1e876cc..70e3cf34f6b04 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -370,7 +370,9 @@ package android.hardware.display { public final class DisplayManager { method public java.util.List getAmbientBrightnessStats(); + method public android.hardware.display.BrightnessConfiguration getBrightnessConfiguration(); method public java.util.List getBrightnessEvents(); + method public android.hardware.display.BrightnessConfiguration getDefaultBrightnessConfiguration(); method public android.graphics.Point getStableDisplaySize(); method public void setBrightnessConfiguration(android.hardware.display.BrightnessConfiguration); } diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index e81fbeed34b03..a3b2d22deccbf 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -667,6 +667,45 @@ public final class DisplayManager { mGlobal.setBrightnessConfigurationForUser(c, userId, packageName); } + /** + * Gets the global display brightness configuration or the default curve if one hasn't been set. + * + * @hide + */ + @SystemApi + @TestApi + @RequiresPermission(Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) + public BrightnessConfiguration getBrightnessConfiguration() { + return getBrightnessConfigurationForUser(mContext.getUserId()); + } + + /** + * Gets the global display brightness configuration or the default curve if one hasn't been set + * for a specific user. + * + * Note this requires the INTERACT_ACROSS_USERS permission if getting the configuration for a + * user other than the one you're currently running as. + * + * @hide + */ + public BrightnessConfiguration getBrightnessConfigurationForUser(int userId) { + return mGlobal.getBrightnessConfigurationForUser(userId); + } + + /** + * Gets the default global display brightness configuration or null one hasn't + * been configured. + * + * @hide + */ + @SystemApi + @TestApi + @RequiresPermission(Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) + @Nullable + public BrightnessConfiguration getDefaultBrightnessConfiguration() { + return mGlobal.getDefaultBrightnessConfiguration(); + } + /** * Temporarily sets the brightness of the display. *

diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index d7f7c865b8fb9..1f67a6bf71a72 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -489,6 +489,32 @@ public final class DisplayManagerGlobal { } } + /** + * Gets the global brightness configuration for a given user or null if one hasn't been set. + * + * @hide + */ + public BrightnessConfiguration getBrightnessConfigurationForUser(int userId) { + try { + return mDm.getBrightnessConfigurationForUser(userId); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + + /** + * Gets the default brightness configuration or null if one hasn't been configured. + * + * @hide + */ + public BrightnessConfiguration getDefaultBrightnessConfiguration() { + try { + return mDm.getDefaultBrightnessConfiguration(); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + /** * Temporarily sets the brightness of the display. *

diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index 0571ae1fe8256..9fcb9d3fc265a 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -96,6 +96,14 @@ interface IDisplayManager { void setBrightnessConfigurationForUser(in BrightnessConfiguration c, int userId, String packageName); + // Gets the global brightness configuration for a given user. Requires + // CONFIGURE_DISPLAY_BRIGHTNESS, and INTERACT_ACROSS_USER if the user is not + // the same as the calling user. + BrightnessConfiguration getBrightnessConfigurationForUser(int userId); + + // Gets the default brightness configuration if configured. + BrightnessConfiguration getDefaultBrightnessConfiguration(); + // Temporarily sets the display brightness. void setTemporaryBrightness(int brightness); diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java index cb53521c5e7f6..5e1afeb571de6 100644 --- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java +++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java @@ -282,6 +282,10 @@ class AutomaticBrightnessController { return mBrightnessMapper.isDefaultConfig(); } + public BrightnessConfiguration getDefaultConfig() { + return mBrightnessMapper.getDefaultConfig(); + } + private boolean setDisplayPolicy(int policy) { if (mDisplayPolicy == policy) { return false; diff --git a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java index c0d259992a461..4313d17242143 100644 --- a/services/core/java/com/android/server/display/BrightnessMappingStrategy.java +++ b/services/core/java/com/android/server/display/BrightnessMappingStrategy.java @@ -206,6 +206,8 @@ public abstract class BrightnessMappingStrategy { /** @return true if the current brightness config is the default one */ public abstract boolean isDefaultConfig(); + public abstract BrightnessConfiguration getDefaultConfig(); + public abstract void dump(PrintWriter pw); private static float normalizeAbsoluteBrightness(int brightness) { @@ -405,6 +407,9 @@ public abstract class BrightnessMappingStrategy { return true; } + @Override + public BrightnessConfiguration getDefaultConfig() { return null; } + @Override public void dump(PrintWriter pw) { pw.println("SimpleMappingStrategy"); @@ -532,6 +537,9 @@ public abstract class BrightnessMappingStrategy { return mDefaultConfig.equals(mConfig); } + @Override + public BrightnessConfiguration getDefaultConfig() { return mDefaultConfig; } + @Override public void dump(PrintWriter pw) { pw.println("PhysicalMappingStrategy"); diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 9861ea7355704..c4b2b5ed3ccf8 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -1877,6 +1877,48 @@ public final class DisplayManagerService extends SystemService { } } + @Override // Binder call + public BrightnessConfiguration getBrightnessConfigurationForUser(int userId) { + mContext.enforceCallingOrSelfPermission( + Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS, + "Permission required to read the display's brightness configuration"); + if (userId != UserHandle.getCallingUserId()) { + mContext.enforceCallingOrSelfPermission( + Manifest.permission.INTERACT_ACROSS_USERS, + "Permission required to read the display brightness" + + " configuration of another user"); + } + final long token = Binder.clearCallingIdentity(); + try { + final int userSerial = getUserManager().getUserSerialNumber(userId); + synchronized (mSyncRoot) { + BrightnessConfiguration config = + mPersistentDataStore.getBrightnessConfiguration(userSerial); + if (config == null) { + config = mDisplayPowerController.getDefaultBrightnessConfiguration(); + } + return config; + } + } finally { + Binder.restoreCallingIdentity(token); + } + } + + @Override // Binder call + public BrightnessConfiguration getDefaultBrightnessConfiguration() { + mContext.enforceCallingOrSelfPermission( + Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS, + "Permission required to read the display's default brightness configuration"); + final long token = Binder.clearCallingIdentity(); + try { + synchronized (mSyncRoot) { + return mDisplayPowerController.getDefaultBrightnessConfiguration(); + } + } finally { + Binder.restoreCallingIdentity(token); + } + } + @Override // Binder call public void setTemporaryBrightness(int brightness) { mContext.enforceCallingOrSelfPermission( diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index fa39ce4f85033..ff8b88bfa79ce 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -567,6 +567,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } } + public BrightnessConfiguration getDefaultBrightnessConfiguration() { + return mAutomaticBrightnessController.getDefaultConfig(); + } + private void sendUpdatePowerState() { synchronized (mLock) { sendUpdatePowerStateLocked();