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

Commit 4832745b authored by Romain Guy's avatar Romain Guy
Browse files

Add color mode to activity/window

The color mode lets an application request a wide color gamut for
a specific window. This will also be used in the future to request
HDR. The color mode is currently either default (sRGB) or an undefined
wide gamut color space chosen by the platform. These attributes could
later be used to choose a specific color space if we deem this important
or useful.

This change also renames the various "colorimetry" attributes and
constants to "color mode" for consistency. These symbols were
added in O and can be safely renamed.

Test: CtsColorModeTestCases
Bug: 32984164
Change-Id: I4d4691dd12dbe3f3aa6a5cf893cff39aa16c739e
parent a393ff7d
Loading
Loading
Loading
Loading
+21 −12
Original line number Diff line number Diff line
@@ -408,6 +408,7 @@ package android {
    field public static final int colorForeground = 16842800; // 0x1010030
    field public static final int colorForegroundInverse = 16843270; // 0x1010206
    field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
    field public static final int colorMode = 16844108; // 0x101054c
    field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
    field public static final int colorPressedHighlight = 16843661; // 0x101038d
    field public static final int colorPrimary = 16843827; // 0x1010433
@@ -9575,7 +9576,10 @@ package android.content.pm {
    method public int describeContents();
    method public void dump(android.util.Printer, java.lang.String);
    method public final int getThemeResource();
    field public static final int CONFIG_COLORIMETRY = 16384; // 0x4000
    field public static final int COLOR_MODE_DEFAULT = 0; // 0x0
    field public static final int COLOR_MODE_HDR = 2; // 0x2
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT = 1; // 0x1
    field public static final int CONFIG_COLOR_MODE = 16384; // 0x4000
    field public static final int CONFIG_DENSITY = 4096; // 0x1000
    field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000
    field public static final int CONFIG_KEYBOARD = 16; // 0x10
@@ -9636,6 +9640,7 @@ package android.content.pm {
    field public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11; // 0xb
    field public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12; // 0xc
    field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1
    field public int colorMode;
    field public int configChanges;
    field public int documentLaunchMode;
    field public int flags;
@@ -10611,16 +10616,16 @@ package android.content.res {
    method public void setToDefaults();
    method public int updateFrom(android.content.res.Configuration);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int COLORIMETRY_HDR_MASK = 12; // 0xc
    field public static final int COLORIMETRY_HDR_NO = 4; // 0x4
    field public static final int COLORIMETRY_HDR_SHIFT = 2; // 0x2
    field public static final int COLORIMETRY_HDR_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_HDR_YES = 8; // 0x8
    field public static final int COLORIMETRY_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_NO = 1; // 0x1
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_YES = 2; // 0x2
    field public static final int COLOR_MODE_HDR_MASK = 12; // 0xc
    field public static final int COLOR_MODE_HDR_NO = 4; // 0x4
    field public static final int COLOR_MODE_HDR_SHIFT = 2; // 0x2
    field public static final int COLOR_MODE_HDR_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_HDR_YES = 8; // 0x8
    field public static final int COLOR_MODE_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_NO = 1; // 0x1
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_YES = 2; // 0x2
    field public static final android.os.Parcelable.Creator<android.content.res.Configuration> CREATOR;
    field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0
    field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1
@@ -10686,7 +10691,7 @@ package android.content.res {
    field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
    field public static final int UI_MODE_TYPE_VR_HEADSET = 7; // 0x7
    field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6
    field public int colorimetry;
    field public int colorMode;
    field public int densityDpi;
    field public float fontScale;
    field public int hardKeyboardHidden;
@@ -45006,6 +45011,7 @@ package android.view {
    method public boolean getAllowReturnTransitionOverlap();
    method public final android.view.WindowManager.LayoutParams getAttributes();
    method public final android.view.Window.Callback getCallback();
    method public int getColorMode();
    method public final android.view.Window getContainer();
    method public android.transition.Scene getContentScene();
    method public final android.content.Context getContext();
@@ -45062,6 +45068,7 @@ package android.view {
    method public abstract void setChildDrawable(int, android.graphics.drawable.Drawable);
    method public abstract void setChildInt(int, int);
    method public void setClipToOutline(boolean);
    method public void setColorMode(int);
    method public void setContainer(android.view.Window);
    method public abstract void setContentView(int);
    method public abstract void setContentView(android.view.View);
@@ -45260,8 +45267,10 @@ package android.view {
    method public final int copyFrom(android.view.WindowManager.LayoutParams);
    method public java.lang.String debug(java.lang.String);
    method public int describeContents();
    method public int getColorMode();
    method public final java.lang.CharSequence getTitle();
    method public static boolean mayUseInputMethod(int);
    method public void setColorMode(int);
    method public final void setTitle(java.lang.CharSequence);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int ALPHA_CHANGED = 128; // 0x80
+21 −12
Original line number Diff line number Diff line
@@ -517,6 +517,7 @@ package android {
    field public static final int colorForeground = 16842800; // 0x1010030
    field public static final int colorForegroundInverse = 16843270; // 0x1010206
    field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
    field public static final int colorMode = 16844108; // 0x101054c
    field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
    field public static final int colorPressedHighlight = 16843661; // 0x101038d
    field public static final int colorPrimary = 16843827; // 0x1010433
@@ -9987,7 +9988,10 @@ package android.content.pm {
    method public int describeContents();
    method public void dump(android.util.Printer, java.lang.String);
    method public final int getThemeResource();
    field public static final int CONFIG_COLORIMETRY = 16384; // 0x4000
    field public static final int COLOR_MODE_DEFAULT = 0; // 0x0
    field public static final int COLOR_MODE_HDR = 2; // 0x2
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT = 1; // 0x1
    field public static final int CONFIG_COLOR_MODE = 16384; // 0x4000
    field public static final int CONFIG_DENSITY = 4096; // 0x1000
    field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000
    field public static final int CONFIG_KEYBOARD = 16; // 0x10
@@ -10048,6 +10052,7 @@ package android.content.pm {
    field public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11; // 0xb
    field public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12; // 0xc
    field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1
    field public int colorMode;
    field public int configChanges;
    field public int documentLaunchMode;
    field public int flags;
@@ -11167,16 +11172,16 @@ package android.content.res {
    method public void setToDefaults();
    method public int updateFrom(android.content.res.Configuration);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int COLORIMETRY_HDR_MASK = 12; // 0xc
    field public static final int COLORIMETRY_HDR_NO = 4; // 0x4
    field public static final int COLORIMETRY_HDR_SHIFT = 2; // 0x2
    field public static final int COLORIMETRY_HDR_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_HDR_YES = 8; // 0x8
    field public static final int COLORIMETRY_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_NO = 1; // 0x1
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_YES = 2; // 0x2
    field public static final int COLOR_MODE_HDR_MASK = 12; // 0xc
    field public static final int COLOR_MODE_HDR_NO = 4; // 0x4
    field public static final int COLOR_MODE_HDR_SHIFT = 2; // 0x2
    field public static final int COLOR_MODE_HDR_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_HDR_YES = 8; // 0x8
    field public static final int COLOR_MODE_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_NO = 1; // 0x1
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_YES = 2; // 0x2
    field public static final android.os.Parcelable.Creator<android.content.res.Configuration> CREATOR;
    field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0
    field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1
@@ -11242,7 +11247,7 @@ package android.content.res {
    field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
    field public static final int UI_MODE_TYPE_VR_HEADSET = 7; // 0x7
    field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6
    field public int colorimetry;
    field public int colorMode;
    field public int densityDpi;
    field public float fontScale;
    field public int hardKeyboardHidden;
@@ -48364,6 +48369,7 @@ package android.view {
    method public boolean getAllowReturnTransitionOverlap();
    method public final android.view.WindowManager.LayoutParams getAttributes();
    method public final android.view.Window.Callback getCallback();
    method public int getColorMode();
    method public final android.view.Window getContainer();
    method public android.transition.Scene getContentScene();
    method public final android.content.Context getContext();
@@ -48420,6 +48426,7 @@ package android.view {
    method public abstract void setChildDrawable(int, android.graphics.drawable.Drawable);
    method public abstract void setChildInt(int, int);
    method public void setClipToOutline(boolean);
    method public void setColorMode(int);
    method public void setContainer(android.view.Window);
    method public abstract void setContentView(int);
    method public abstract void setContentView(android.view.View);
@@ -48619,9 +48626,11 @@ package android.view {
    method public final int copyFrom(android.view.WindowManager.LayoutParams);
    method public java.lang.String debug(java.lang.String);
    method public int describeContents();
    method public int getColorMode();
    method public final java.lang.CharSequence getTitle();
    method public final long getUserActivityTimeout();
    method public static boolean mayUseInputMethod(int);
    method public void setColorMode(int);
    method public final void setTitle(java.lang.CharSequence);
    method public final void setUserActivityTimeout(long);
    method public void writeToParcel(android.os.Parcel, int);
+21 −12
Original line number Diff line number Diff line
@@ -408,6 +408,7 @@ package android {
    field public static final int colorForeground = 16842800; // 0x1010030
    field public static final int colorForegroundInverse = 16843270; // 0x1010206
    field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
    field public static final int colorMode = 16844108; // 0x101054c
    field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
    field public static final int colorPressedHighlight = 16843661; // 0x101038d
    field public static final int colorPrimary = 16843827; // 0x1010433
@@ -9600,7 +9601,10 @@ package android.content.pm {
    method public int describeContents();
    method public void dump(android.util.Printer, java.lang.String);
    method public final int getThemeResource();
    field public static final int CONFIG_COLORIMETRY = 16384; // 0x4000
    field public static final int COLOR_MODE_DEFAULT = 0; // 0x0
    field public static final int COLOR_MODE_HDR = 2; // 0x2
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT = 1; // 0x1
    field public static final int CONFIG_COLOR_MODE = 16384; // 0x4000
    field public static final int CONFIG_DENSITY = 4096; // 0x1000
    field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000
    field public static final int CONFIG_KEYBOARD = 16; // 0x10
@@ -9661,6 +9665,7 @@ package android.content.pm {
    field public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11; // 0xb
    field public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12; // 0xc
    field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1
    field public int colorMode;
    field public int configChanges;
    field public int documentLaunchMode;
    field public int flags;
@@ -10643,16 +10648,16 @@ package android.content.res {
    method public void setToDefaults();
    method public int updateFrom(android.content.res.Configuration);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int COLORIMETRY_HDR_MASK = 12; // 0xc
    field public static final int COLORIMETRY_HDR_NO = 4; // 0x4
    field public static final int COLORIMETRY_HDR_SHIFT = 2; // 0x2
    field public static final int COLORIMETRY_HDR_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_HDR_YES = 8; // 0x8
    field public static final int COLORIMETRY_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_NO = 1; // 0x1
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
    field public static final int COLORIMETRY_WIDE_COLOR_GAMUT_YES = 2; // 0x2
    field public static final int COLOR_MODE_HDR_MASK = 12; // 0xc
    field public static final int COLOR_MODE_HDR_NO = 4; // 0x4
    field public static final int COLOR_MODE_HDR_SHIFT = 2; // 0x2
    field public static final int COLOR_MODE_HDR_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_HDR_YES = 8; // 0x8
    field public static final int COLOR_MODE_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_NO = 1; // 0x1
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_YES = 2; // 0x2
    field public static final android.os.Parcelable.Creator<android.content.res.Configuration> CREATOR;
    field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0
    field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1
@@ -10718,7 +10723,7 @@ package android.content.res {
    field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
    field public static final int UI_MODE_TYPE_VR_HEADSET = 7; // 0x7
    field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6
    field public int colorimetry;
    field public int colorMode;
    field public int densityDpi;
    field public float fontScale;
    field public int hardKeyboardHidden;
@@ -45302,6 +45307,7 @@ package android.view {
    method public boolean getAllowReturnTransitionOverlap();
    method public final android.view.WindowManager.LayoutParams getAttributes();
    method public final android.view.Window.Callback getCallback();
    method public int getColorMode();
    method public final android.view.Window getContainer();
    method public android.transition.Scene getContentScene();
    method public final android.content.Context getContext();
@@ -45358,6 +45364,7 @@ package android.view {
    method public abstract void setChildDrawable(int, android.graphics.drawable.Drawable);
    method public abstract void setChildInt(int, int);
    method public void setClipToOutline(boolean);
    method public void setColorMode(int);
    method public void setContainer(android.view.Window);
    method public abstract void setContentView(int);
    method public abstract void setContentView(android.view.View);
@@ -45556,8 +45563,10 @@ package android.view {
    method public final int copyFrom(android.view.WindowManager.LayoutParams);
    method public java.lang.String debug(java.lang.String);
    method public int describeContents();
    method public int getColorMode();
    method public final java.lang.CharSequence getTitle();
    method public static boolean mayUseInputMethod(int);
    method public void setColorMode(int);
    method public final void setTitle(java.lang.CharSequence);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final int ALPHA_CHANGED = 128; // 0x80
+2 −0
Original line number Diff line number Diff line
@@ -6792,6 +6792,8 @@ public class Activity extends ContextThemeWrapper
        }
        mWindowManager = mWindow.getWindowManager();
        mCurrentConfig = config;

        mWindow.setColorMode(info.colorMode);
    }

    /** @hide */
+45 −4
Original line number Diff line number Diff line
@@ -219,6 +219,44 @@ public class ActivityInfo extends ComponentInfo
     */
    public String requestedVrComponent;

    /**
     * Value for {@link #colorMode} indicating that the activity should use the
     * default color mode (sRGB, low dynamic range).
     *
     * @see android.R.attr#colorMode
     */
    public static final int COLOR_MODE_DEFAULT = 0;
    /**
     * Value of {@link #colorMode} indicating that the activity should use a
     * wide color gamut if the presentation display supports it.
     *
     * @see android.R.attr#colorMode
     */
    public static final int COLOR_MODE_WIDE_COLOR_GAMUT = 1;
    /**
     * Value of {@link #colorMode} indicating that the activity should use a
     * high dynamic range if the presentation display supports it.
     *
     * @see android.R.attr#colorMode
     */
    public static final int COLOR_MODE_HDR = 2;

    /** @hide */
    @IntDef({
        COLOR_MODE_DEFAULT,
        COLOR_MODE_WIDE_COLOR_GAMUT,
        COLOR_MODE_HDR,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ColorMode {}

    /**
     * The color mode requested by this activity. The target display may not be
     * able to honor the request.
     */
    @ColorMode
    public int colorMode = COLOR_MODE_DEFAULT;

    /**
     * Bit in {@link #flags} indicating whether this activity is able to
     * run in multiple processes.  If
@@ -566,7 +604,7 @@ public class ActivityInfo extends ComponentInfo
                    CONFIG_SMALLEST_SCREEN_SIZE,
                    CONFIG_DENSITY,
                    CONFIG_LAYOUT_DIRECTION,
                    CONFIG_COLORIMETRY,
                    CONFIG_COLOR_MODE,
                    CONFIG_FONT_SCALE,
            })
    @Retention(RetentionPolicy.SOURCE)
@@ -675,7 +713,7 @@ public class ActivityInfo extends ComponentInfo
     * can itself handle the change to the display color gamut or dynamic
     * range. Set from the {@link android.R.attr#configChanges} attribute.
     */
    public static final int CONFIG_COLORIMETRY = 0x4000;
    public static final int CONFIG_COLOR_MODE = 0x4000;
    /**
     * Bit in {@link #configChanges} that indicates that the activity
     * can itself handle asset path changes.  Set from the {@link android.R.attr#configChanges}
@@ -713,7 +751,7 @@ public class ActivityInfo extends ComponentInfo
        Configuration.NATIVE_CONFIG_SMALLEST_SCREEN_SIZE,   // SMALLEST SCREEN SIZE
        Configuration.NATIVE_CONFIG_DENSITY,                // DENSITY
        Configuration.NATIVE_CONFIG_LAYOUTDIR,              // LAYOUT DIRECTION
        Configuration.NATIVE_CONFIG_COLORIMETRY,            // COLORIMETRY
        Configuration.NATIVE_CONFIG_COLOR_MODE,             // COLOR_MODE
    };

    /**
@@ -770,7 +808,7 @@ public class ActivityInfo extends ComponentInfo
     * {@link #CONFIG_KEYBOARD}, {@link #CONFIG_NAVIGATION},
     * {@link #CONFIG_ORIENTATION}, {@link #CONFIG_SCREEN_LAYOUT},
     * {@link #CONFIG_DENSITY}, {@link #CONFIG_LAYOUT_DIRECTION} and
     * {@link #CONFIG_COLORIMETRY}.
     * {@link #CONFIG_COLOR_MODE}.
     * Set from the {@link android.R.attr#configChanges} attribute.
     */
    public int configChanges;
@@ -873,6 +911,7 @@ public class ActivityInfo extends ComponentInfo
        resizeMode = orig.resizeMode;
        requestedVrComponent = orig.requestedVrComponent;
        rotationAnimation = orig.rotationAnimation;
        colorMode = orig.colorMode;
    }

    /**
@@ -1055,6 +1094,7 @@ public class ActivityInfo extends ComponentInfo
        dest.writeInt(resizeMode);
        dest.writeString(requestedVrComponent);
        dest.writeInt(rotationAnimation);
        dest.writeInt(colorMode);
    }

    public static final Parcelable.Creator<ActivityInfo> CREATOR
@@ -1090,6 +1130,7 @@ public class ActivityInfo extends ComponentInfo
        resizeMode = source.readInt();
        requestedVrComponent = source.readString();
        rotationAnimation = source.readInt();
        colorMode = source.readInt();
    }

    /**
Loading