Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57b380f4 authored by Fiona Campbell's avatar Fiona Campbell
Browse files

Add display specific brightness configurations

Add brightness configuration to display state, within the persistentDataStore. The original brightness configurations remain under the name "mGlobalBrightnessConfigurations".
Expose methods to get and set brightness configurations specific to each display. Indexed by uniqueId of the physical display. Where necessary, the primary physical display device of the logical display is used when identifying this.

Bug: 181767734
Test: atest PersistentDataStoreTest BrightnessConfigurationTest BrightnessTest

Change-Id: Idaed53e8f4abe548784781c4fb610dbada46ab19
parent eef3d751
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3262,11 +3262,13 @@ package android.hardware.display {
  public final class DisplayManager {
    method @RequiresPermission(android.Manifest.permission.ACCESS_AMBIENT_LIGHT_STATS) public java.util.List<android.hardware.display.AmbientBrightnessDayStats> getAmbientBrightnessStats();
    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getBrightnessConfiguration();
    method @Nullable @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getBrightnessConfigurationForDisplay(@NonNull String);
    method @RequiresPermission(android.Manifest.permission.BRIGHTNESS_SLIDER_USAGE) public java.util.List<android.hardware.display.BrightnessChangeEvent> getBrightnessEvents();
    method @Nullable @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getDefaultBrightnessConfiguration();
    method public android.util.Pair<float[],float[]> getMinimumBrightnessCurve();
    method public android.graphics.Point getStableDisplaySize();
    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public void setBrightnessConfiguration(android.hardware.display.BrightnessConfiguration);
    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public void setBrightnessConfigurationForDisplay(@NonNull android.hardware.display.BrightnessConfiguration, @NonNull String);
    method @Deprecated @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_SATURATION) public void setSaturationLevel(float);
  }
+28 −0
Original line number Diff line number Diff line
@@ -939,6 +939,34 @@ public final class DisplayManager {
        setBrightnessConfigurationForUser(c, mContext.getUserId(), mContext.getPackageName());
    }

    /**
     * Sets the brightness configuration for the specified display.
     * If the specified display doesn't exist, then this will return and do nothing.
     *
     * @hide
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
    public void setBrightnessConfigurationForDisplay(@NonNull BrightnessConfiguration c,
            @NonNull String uniqueId) {
        mGlobal.setBrightnessConfigurationForDisplay(c, uniqueId, mContext.getUserId(),
                mContext.getPackageName());
    }

    /**
     * Gets the brightness configuration for the specified display and default user.
     * Returns the default configuration if unset or display is invalid.
     *
     * @hide
     */
    @Nullable
    @SystemApi
    @RequiresPermission(Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
    public BrightnessConfiguration getBrightnessConfigurationForDisplay(
            @NonNull String uniqueId) {
        return mGlobal.getBrightnessConfigurationForDisplay(uniqueId, mContext.getUserId());
    }

    /**
     * Sets the global display brightness configuration for a specific user.
     *
+28 −0
Original line number Diff line number Diff line
@@ -704,6 +704,34 @@ public final class DisplayManagerGlobal {
        }
    }

    /**
     * Sets the brightness configuration for a given display.
     *
     * @hide
     */
    public void setBrightnessConfigurationForDisplay(BrightnessConfiguration c,
            String uniqueDisplayId, int userId, String packageName) {
        try {
            mDm.setBrightnessConfigurationForDisplay(c, uniqueDisplayId, userId, packageName);
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
    }

    /**
     * Gets the brightness configuration for a given display or null if one hasn't been set.
     *
     * @hide
     */
    public BrightnessConfiguration getBrightnessConfigurationForDisplay(String uniqueDisplayId,
            int userId) {
        try {
            return mDm.getBrightnessConfigurationForDisplay(uniqueDisplayId, userId);
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
    }

    /**
     * Gets the global brightness configuration for a given user or null if one hasn't been set.
     *
+10 −0
Original line number Diff line number Diff line
@@ -118,6 +118,16 @@ interface IDisplayManager {
    void setBrightnessConfigurationForUser(in BrightnessConfiguration c, int userId,
            String packageName);

    // Sets the global brightness configuration for a given display. Requires
    // CONFIGURE_DISPLAY_BRIGHTNESS.
    void setBrightnessConfigurationForDisplay(in BrightnessConfiguration c, String uniqueDisplayId,
            int userId, String packageName);

    // Gets the brightness configuration for a given display. Requires
    // CONFIGURE_DISPLAY_BRIGHTNESS.
    BrightnessConfiguration getBrightnessConfigurationForDisplay(String uniqueDisplayId,
            int userId);

    // 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.
+11 −0
Original line number Diff line number Diff line
@@ -123,6 +123,17 @@ class DisplayDeviceRepository implements DisplayAdapter.Listener {
        return null;
    }

    // String uniqueId -> DisplayDevice object with that given uniqueId
    public DisplayDevice getByUniqueIdLocked(@NonNull String uniqueId) {
        for (int i = mDisplayDevices.size() - 1; i >= 0; i--) {
            final DisplayDevice displayDevice = mDisplayDevices.get(i);
            if (displayDevice.getUniqueId().equals(uniqueId)) {
                return displayDevice;
            }
        }
        return null;
    }

    private void handleDisplayDeviceAdded(DisplayDevice device) {
        synchronized (mSyncRoot) {
            DisplayDeviceInfo info = device.getDisplayDeviceInfoLocked();
Loading