Send -1.0 when brightness is off

Brightness was being sent as 0(MIN) previously, we want -1.0(OFF) to be sent to the display.

Bug: 185853190
Bug: 184908496
Test: manual
Change-Id: I14cff1a769e769fff1fa6e90ef0177c3b8518ba4
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
index d865dfb..0f9e604 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
@@ -74,6 +74,8 @@
     // so -2 is used instead
     private static final float INVALID_BRIGHTNESS_IN_CONFIG = -2f;
 
+    private static final float NITS_INVALID = -1;
+
     private final Context mContext;
 
     // The details of the ambient light sensor associated with this display.
@@ -230,7 +232,7 @@
     public float getNitsFromBacklight(float backlight) {
         if (mBacklightToNitsSpline == null) {
             Slog.wtf(TAG, "requesting nits when no mapping exists.");
-            return -1;
+            return NITS_INVALID;
         }
         backlight = Math.max(backlight, mBacklightMinimum);
         return mBacklightToNitsSpline.interpolate(backlight);
@@ -280,13 +282,6 @@
     }
 
     /**
-     * @return true if a nits to backlight mapping is defined in this config, false otherwise.
-     */
-    public boolean hasNitsMapping() {
-        return mBacklightToNitsSpline != null;
-    }
-
-    /**
      * @param quirkValue The quirk to test.
      * @return {@code true} if the specified quirk is present in this configuration,
      * {@code false} otherwise.
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index ec9bbf0..2f17481 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -67,8 +67,6 @@
 
     private static final int NO_DISPLAY_MODE_ID = 0;
 
-    private static final float NITS_INVALID = -1;
-
     private final LongSparseArray<LocalDisplayDevice> mDevices = new LongSparseArray<>();
 
     private final Injector mInjector;
@@ -770,48 +768,51 @@
                         }
                     }
 
-                    private void setDisplayBrightness(float brightness, float sdrBrightness) {
-                        // Ensure brightnessState is valid before processing and sending to
-                        // surface control
-                        if (Float.isNaN(brightness)) {
+                    private void setDisplayBrightness(float brightnessState,
+                            float sdrBrightnessState) {
+                        // brightnessState includes invalid, off and full range.
+                        if (Float.isNaN(brightnessState) || Float.isNaN(sdrBrightnessState)) {
                             return;
                         }
 
                         if (DEBUG) {
                             Slog.d(TAG, "setDisplayBrightness("
                                     + "id=" + physicalDisplayId
-                                    + ", brightness=" + brightness
-                                    + ", sdrBrightness=" + sdrBrightness + ")");
+                                    + ", brightnessState=" + brightnessState
+                                    + ", sdrBrightnessState=" + sdrBrightnessState + ")");
                         }
 
                         Trace.traceBegin(Trace.TRACE_TAG_POWER, "setDisplayBrightness("
-                                + "id=" + physicalDisplayId + ", brightness=" + brightness
-                                + ", sdrBrightness=" + sdrBrightness + ")");
+                                + "id=" + physicalDisplayId + ", brightnessState="
+                                + brightnessState + ", sdrBrightnessState=" + sdrBrightnessState
+                                + ")");
                         try {
-                            final float backlight = brightnessToBacklight(brightness);
-                            float nits = NITS_INVALID;
-                            float sdrBacklight = PowerManager.BRIGHTNESS_INVALID_FLOAT;
-                            float sdrNits = NITS_INVALID;
-                            if (getDisplayDeviceConfig().hasNitsMapping()
-                                    && sdrBrightness != PowerManager.BRIGHTNESS_INVALID_FLOAT) {
-                                nits = backlightToNits(backlight);
-                                sdrBacklight = brightnessToBacklight(sdrBrightness);
-                                sdrNits = backlightToNits(sdrBacklight);
-                            }
+                            final float backlight = brightnessToBacklight(brightnessState);
+                            final float sdrBacklight = brightnessToBacklight(sdrBrightnessState);
+
+                            final float nits = backlightToNits(backlight);
+                            final float sdrNits = backlightToNits(sdrBacklight);
+
                             mBacklightAdapter.setBacklight(sdrBacklight, sdrNits, backlight, nits);
                             Trace.traceCounter(Trace.TRACE_TAG_POWER,
                                     "ScreenBrightness",
-                                    BrightnessSynchronizer.brightnessFloatToInt(brightness));
+                                    BrightnessSynchronizer.brightnessFloatToInt(brightnessState));
                             Trace.traceCounter(Trace.TRACE_TAG_POWER,
                                     "SdrScreenBrightness",
-                                    BrightnessSynchronizer.brightnessFloatToInt(sdrBrightness));
+                                    BrightnessSynchronizer.brightnessFloatToInt(
+                                            sdrBrightnessState));
                         } finally {
                             Trace.traceEnd(Trace.TRACE_TAG_POWER);
                         }
                     }
 
                     private float brightnessToBacklight(float brightness) {
-                        return getDisplayDeviceConfig().getBacklightFromBrightness(brightness);
+                        if (BrightnessSynchronizer.floatEquals(
+                                brightness, PowerManager.BRIGHTNESS_OFF_FLOAT)) {
+                            return PowerManager.BRIGHTNESS_OFF_FLOAT;
+                        } else {
+                            return getDisplayDeviceConfig().getBacklightFromBrightness(brightness);
+                        }
                     }
 
                     private float backlightToNits(float backlight) {