Add color mode setting

The new setting appears on devices that support color management
and wide color gamut rendering. The setting allows the user to
choose between natural (sRGB), boosted (sRGB + 10% saturation)
and saturated (unmanaged colors; colors are remapped to the device's
native gamut).

This change adds a metric constant for analytics in Settings
and uses a persistent system property to know when to suppress
color management.

Bug: 68159303
Test: manual
Merged-In: I83cc972fc3a2290ff106eae0e76a3ee799503813
Change-Id: I83cc972fc3a2290ff106eae0e76a3ee799503813
(cherry picked from commit 62e8c175257d25c64ed19e5ccccd4e3cd987b8ad)
(cherry picked from commit af5e11245decf4f999768ddda9ba6804c040b61d)
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index a4849fc..c9acdc1 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -4219,6 +4219,11 @@
     // OS: O DR
     TRAMPOLINE_SETTINGS_EVENT = 1033;
 
+    // OPEN: Settings > Display > Colors
+    // CATEGORY: SETTINGS
+    // OS: O MR (backported for O DR)
+    COLOR_MODE_SETTINGS = 1143;
+
     // ---- End O-DR1 Constants, all O-DR1 constants go above this line ----
 
     // Add new aosp constants above this line.
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 765dc23..3e1c201 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -7670,7 +7670,8 @@
     }
 
     boolean hasWideColorGamutSupport() {
-        return mHasWideColorGamutSupport;
+        return mHasWideColorGamutSupport &&
+                !SystemProperties.getBoolean("persist.sys.sf.native_mode", false);
     }
 
     void updateNonSystemOverlayWindowsVisibilityIfNeeded(WindowState win, boolean surfaceShown) {