[SurfaceFlinger] Fix color mode switch.

Previously we didn't take render intent into account when switch color mode,
switching from staturated to automatic and then to natural/boosted doesn't
work.

BUG: 73824924
BUG: 73825729
Test: Built, flashed to taimen, and verified with Color settings.
Change-Id: I4556e82e2bab10113d05c446fc4bb3351a3e65a6
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index abd3a9e..a8680e2 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1020,18 +1020,8 @@
     int32_t type = hw->getDisplayType();
     ColorMode currentMode = hw->getActiveColorMode();
     Dataspace currentDataSpace = hw->getCompositionDataSpace();
+    RenderIntent currentRenderIntent = hw->getActiveRenderIntent();
 
-    if (mode == currentMode && dataSpace == currentDataSpace) {
-        return;
-    }
-
-    if (type >= DisplayDevice::NUM_BUILTIN_DISPLAY_TYPES) {
-        ALOGW("Trying to set config for virtual display");
-        return;
-    }
-
-    hw->setActiveColorMode(mode);
-    hw->setCompositionDataSpace(dataSpace);
     // Natural Mode means it's color managed and the color must be right,
     // thus we pick RenderIntent::COLORIMETRIC as render intent.
     // Native Mode means the display is not color managed, and whichever
@@ -1046,6 +1036,19 @@
         hw->getDisplayType() == DisplayDevice::DISPLAY_PRIMARY) {
         renderIntent = RenderIntent::ENHANCE;
     }
+
+    if (mode == currentMode && dataSpace == currentDataSpace &&
+        renderIntent == currentRenderIntent) {
+        return;
+    }
+
+    if (type >= DisplayDevice::NUM_BUILTIN_DISPLAY_TYPES) {
+        ALOGW("Trying to set config for virtual display");
+        return;
+    }
+
+    hw->setActiveColorMode(mode);
+    hw->setCompositionDataSpace(dataSpace);
     hw->setActiveRenderIntent(renderIntent);
     getHwComposer().setActiveColorMode(type, mode, renderIntent);