Fix display brightness scaling

Bug: 80498984
Test: Settings app
Change-Id: I009ce2df5f003255c4ebefff6876aa1c38037897
Merged-In: Ifdfb1340ee0236a77664d11676082d60db4b1663
diff --git a/service/Android.mk b/service/Android.mk
index c03042d..d9ae9ec 100644
--- a/service/Android.mk
+++ b/service/Android.mk
@@ -27,6 +27,8 @@
 
 LOCAL_SRC_FILES := $(car_service_sources)
 
+LOCAL_USE_AAPT2 := true
+
 LOCAL_PACKAGE_NAME := CarService
 LOCAL_PRIVATE_PLATFORM_APIS := true
 
@@ -47,6 +49,8 @@
         car-systemtest \
         com.android.car.procfsinspector-client \
 
+include frameworks/base/packages/SettingsLib/common.mk
+
 include $(BUILD_PACKAGE)
 
 #####################################################################################
@@ -72,6 +76,8 @@
         car-systemtest \
         com.android.car.procfsinspector-client \
 
+include frameworks/base/packages/SettingsLib/common.mk
+
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/service/src/com/android/car/systeminterface/DisplayInterface.java b/service/src/com/android/car/systeminterface/DisplayInterface.java
index 015f54d..8dc7bd4 100644
--- a/service/src/com/android/car/systeminterface/DisplayInterface.java
+++ b/service/src/com/android/car/systeminterface/DisplayInterface.java
@@ -16,6 +16,10 @@
 
 package com.android.car.systeminterface;
 
+import static com.android.settingslib.display.BrightnessUtils.GAMMA_SPACE_MAX;
+import static com.android.settingslib.display.BrightnessUtils.convertGammaToLinear;
+import static com.android.settingslib.display.BrightnessUtils.convertLinearToGamma;
+
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.ContentObserver;
@@ -60,20 +64,18 @@
                 new ContentObserver(new Handler(Looper.getMainLooper())) {
                     @Override
                     public void onChange(boolean selfChange) {
-                        int brightness = mMinimumBacklight;
-                        int range = mMaximumBacklight - mMinimumBacklight;
+                        int linear = GAMMA_SPACE_MAX;
 
                         try {
-                            brightness = System.getInt(mContentResolver, System.SCREEN_BRIGHTNESS);
+                            linear = System.getInt(mContentResolver, System.SCREEN_BRIGHTNESS);
                         } catch (SettingNotFoundException e) {
                             Log.e(CarLog.TAG_POWER, "Could not get SCREEN_BRIGHTNESS:  " + e);
                         }
-                        // Convert brightness from 0-255 to 0-100%
-                        brightness -= mMinimumBacklight;
-                        brightness *= 100;
-                        brightness += (range + 1) / 2;
-                        brightness /= range;
-                        mService.sendDisplayBrightness(brightness);
+                        int gamma = convertLinearToGamma(linear, mMinimumBacklight,
+                                                         mMaximumBacklight);
+                        int percentBright = (gamma * 100 + ((GAMMA_SPACE_MAX + 1) / 2))
+                                / GAMMA_SPACE_MAX;
+                        mService.sendDisplayBrightness(percentBright);
                     }
                 };
 
@@ -124,26 +126,10 @@
         }
 
         @Override
-        public void setDisplayBrightness(int brightness) {
-            // Brightness is set in percent.  Need to convert this into 0-255 scale.  The actual
-            //  brightness algorithm should look like this:
-            //
-            //      newBrightness = (brightness * (max - min)) + min
-            //
-            //  Since we're using integer arithmetic, do the multiplication first, then add 50 to
-            //  round up as needed.
-            brightness *= mMaximumBacklight - mMinimumBacklight;    // Multiply by full range
-            brightness += 50;                                       // Integer rounding
-            brightness /= 100;                                      // Divide by 100
-            brightness += mMinimumBacklight;
-            // Range checking
-            if (brightness < mMinimumBacklight) {
-                brightness = mMinimumBacklight;
-            } else if (brightness > mMaximumBacklight) {
-                brightness = mMaximumBacklight;
-            }
-            // Set the brightness
-            System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS, brightness);
+        public void setDisplayBrightness(int percentBright) {
+            int gamma = (percentBright * GAMMA_SPACE_MAX + 50) / 100;
+            int linear = convertGammaToLinear(gamma, mMinimumBacklight, mMaximumBacklight);
+            System.putInt(mContentResolver, System.SCREEN_BRIGHTNESS, linear);
         }
 
         @Override