OSDN Git Service

Move caption style to its own class, add presets
authorAlan Viverette <alanv@google.com>
Fri, 2 Aug 2013 23:45:03 +0000 (16:45 -0700)
committerAlan Viverette <alanv@google.com>
Fri, 2 Aug 2013 23:45:03 +0000 (16:45 -0700)
BUG: 9926077
Change-Id: I14e809c5a95103e57d30f4273399e9914af52b56

api/current.txt
core/java/android/provider/Settings.java
core/java/android/view/accessibility/CaptioningManager.java [new file with mode: 0644]
core/java/android/view/accessibility/CaptioningPreferences.java [deleted file]

index 402c2dc..2b5e08a 100644 (file)
@@ -28351,18 +28351,22 @@ package android.view.accessibility {
 
   public class CaptioningPreferences {
     ctor public CaptioningPreferences();
-    method public static final int getBackgroundColor(android.content.ContentResolver);
-    method public static final int getEdgeColor(android.content.ContentResolver);
-    method public static final int getEdgeType(android.content.ContentResolver);
     method public static final float getFontSize(android.content.ContentResolver);
-    method public static final int getForegroundColor(android.content.ContentResolver);
     method public static final java.util.Locale getLocale(android.content.ContentResolver);
-    method public static final android.graphics.Typeface getTypeface(android.content.ContentResolver);
     method public static final boolean isEnabled(android.content.ContentResolver);
     field public static final java.lang.String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
-    field public static final int EDGE_TYPE_DROP_SHADOWED = 2; // 0x2
+  }
+
+  public static final class CaptioningPreferences.CaptionStyle {
+    method public static android.view.accessibility.CaptioningPreferences.CaptionStyle defaultUserStyle(android.content.ContentResolver);
+    method public android.graphics.Typeface getTypeface();
+    field public static final int EDGE_TYPE_DROP_SHADOW = 2; // 0x2
     field public static final int EDGE_TYPE_NONE = 0; // 0x0
-    field public static final int EDGE_TYPE_UNIFORM = 1; // 0x1
+    field public static final int EDGE_TYPE_OUTLINE = 1; // 0x1
+    field public final int backgroundColor;
+    field public final int edgeColor;
+    field public final int edgeType;
+    field public final int foregroundColor;
   }
 
 }
index 138b6e4..f9bf946 100644 (file)
@@ -3539,6 +3539,21 @@ public final class Settings {
                 "accessibility_captioning_locale";
 
         /**
+         * Integer property that specifies the preset style for captions, one
+         * of:
+         * <ul>
+         * <li>{@link android.view.accessibility.CaptioningManager#PRESET_WHITE_ON_BLACK}
+         * <li>{@link android.view.accessibility.CaptioningManager#PRESET_BLACK_ON_WHITE}
+         * <li>{@link android.view.accessibility.CaptioningManager#PRESET_CUSTOM}
+         * </ul>
+         *
+         * @see java.util.Locale#toString
+         * @hide
+         */
+        public static final String ACCESSIBILITY_CAPTIONING_PRESET =
+                "accessibility_captioning_preset";
+
+        /**
          * Integer property that specifes the background color for captions as a
          * packed 32-bit color.
          *
@@ -3561,9 +3576,9 @@ public final class Settings {
         /**
          * Integer property that specifes the edge type for captions, one of:
          * <ul>
-         * <li>{@link android.view.accessibility.CaptioningPreferences#EDGE_TYPE_NONE}
-         * <li>{@link android.view.accessibility.CaptioningPreferences#EDGE_TYPE_UNIFORM}
-         * <li>{@link android.view.accessibility.CaptioningPreferences#EDGE_TYPE_DROP_SHADOWED}
+         * <li>{@link android.view.accessibility.CaptioningManager#EDGE_TYPE_NONE}
+         * <li>{@link android.view.accessibility.CaptioningManager#EDGE_TYPE_OUTLINE}
+         * <li>{@link android.view.accessibility.CaptioningManager#EDGE_TYPE_DROP_SHADOWED}
          * </ul>
          *
          * @see #ACCESSIBILITY_CAPTIONING_EDGE_COLOR
diff --git a/core/java/android/view/accessibility/CaptioningManager.java b/core/java/android/view/accessibility/CaptioningManager.java
new file mode 100644 (file)
index 0000000..b1be24c
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view.accessibility;
+
+import android.content.ContentResolver;
+import android.graphics.Color;
+import android.graphics.Typeface;
+import android.provider.Settings.Secure;
+import android.text.TextUtils;
+
+import java.util.Locale;
+
+/**
+ * Contains methods for accessing preferred video captioning state and
+ * properties.
+ */
+public class CaptioningManager {
+    /**
+     * Activity Action: Show settings for video captioning.
+     * <p>
+     * In some cases, a matching Activity may not exist, so ensure you safeguard
+     * against this.
+     * <p>
+     * Input: Nothing.
+     * <p>
+     * Output: Nothing.
+     */
+    public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
+
+    private static final int DEFAULT_PRESET = 0;
+    private static final int DEFAULT_ENABLED = 0;
+    private static final float DEFAULT_FONT_SIZE = 24;
+
+    /**
+     * @param cr Resolver to access the database with.
+     * @return The user's preferred caption enabled state.
+     */
+    public static final boolean isEnabled(ContentResolver cr) {
+        return Secure.getInt(cr, Secure.ACCESSIBILITY_CAPTIONING_ENABLED, DEFAULT_ENABLED) == 1;
+    }
+
+    /**
+     * @param cr Resolver to access the database with.
+     * @return The raw locale string for the user's preferred caption language.
+     * @hide
+     */
+    public static final String getRawLocale(ContentResolver cr) {
+        return Secure.getString(cr, Secure.ACCESSIBILITY_CAPTIONING_LOCALE);
+    }
+
+    /**
+     * @param cr Resolver to access the database with.
+     * @return The locale for the user's preferred caption language, or null if
+     *         not specified.
+     */
+    public static final Locale getLocale(ContentResolver cr) {
+        final String rawLocale = getRawLocale(cr);
+        if (!TextUtils.isEmpty(rawLocale)) {
+            final String[] splitLocale = rawLocale.split("_");
+            switch (splitLocale.length) {
+                case 3:
+                    return new Locale(splitLocale[0], splitLocale[1], splitLocale[2]);
+                case 2:
+                    return new Locale(splitLocale[0], splitLocale[1]);
+                case 1:
+                    return new Locale(splitLocale[0]);
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * @param cr Resolver to access the database with.
+     * @return The user's preferred font size for video captions, or 0 if not
+     *         specified.
+     */
+    public static final float getFontSize(ContentResolver cr) {
+        return Secure.getFloat(cr, Secure.ACCESSIBILITY_CAPTIONING_FONT_SIZE, DEFAULT_FONT_SIZE);
+    }
+
+    public static final class CaptionStyle {
+        private static final CaptionStyle WHITE_ON_BLACK;
+        private static final CaptionStyle BLACK_ON_WHITE;
+        private static final CaptionStyle YELLOW_ON_BLACK;
+        private static final CaptionStyle YELLOW_ON_BLUE;
+        private static final CaptionStyle DEFAULT_CUSTOM;
+
+        /** @hide */
+        public static final CaptionStyle[] PRESETS;
+
+        /** @hide */
+        public static final int PRESET_CUSTOM = -1;
+
+        /** Edge type value specifying no character edges. */
+        public static final int EDGE_TYPE_NONE = 0;
+
+        /** Edge type value specifying uniformly outlined character edges. */
+        public static final int EDGE_TYPE_OUTLINE = 1;
+
+        /** Edge type value specifying drop-shadowed character edges. */
+        public static final int EDGE_TYPE_DROP_SHADOW = 2;
+
+        /** The preferred foreground color for video captions. */
+        public final int foregroundColor;
+
+        /** The preferred background color for video captions. */
+        public final int backgroundColor;
+
+        /**
+         * The preferred edge type for video captions, one of:
+         * <ul>
+         * <li>{@link #EDGE_TYPE_NONE}
+         * <li>{@link #EDGE_TYPE_OUTLINE}
+         * <li>{@link #EDGE_TYPE_DROP_SHADOW}
+         * </ul>
+         */
+        public final int edgeType;
+
+        /**
+         * The preferred edge color for video captions, if using an edge type
+         * other than {@link #EDGE_TYPE_NONE}.
+         */
+        public final int edgeColor;
+
+        /**
+         * @hide
+         */
+        public final String mRawTypeface;
+
+        private Typeface mParsedTypeface;
+
+        private CaptionStyle(int foregroundColor, int backgroundColor, int edgeType, int edgeColor,
+                String rawTypeface) {
+            this.foregroundColor = foregroundColor;
+            this.backgroundColor = backgroundColor;
+            this.edgeType = edgeType;
+            this.edgeColor = edgeColor;
+
+            mRawTypeface = rawTypeface;
+        }
+
+        /**
+         * @return The preferred {@link Typeface} for video captions, or null if
+         *         not specified.
+         */
+        public Typeface getTypeface() {
+            if (mParsedTypeface == null && !TextUtils.isEmpty(mRawTypeface)) {
+                mParsedTypeface = Typeface.create(mRawTypeface, Typeface.NORMAL);
+            }
+            return mParsedTypeface;
+        }
+
+        /**
+         * @hide
+         */
+        public static int getRawPreset(ContentResolver cr) {
+            return Secure.getInt(cr, Secure.ACCESSIBILITY_CAPTIONING_PRESET, DEFAULT_PRESET);
+        }
+
+        /**
+         * @param cr Resolver to access the database with.
+         * @return The user's preferred caption style.
+         */
+        public static CaptionStyle defaultUserStyle(ContentResolver cr) {
+            final int preset = getRawPreset(cr);
+            if (preset == PRESET_CUSTOM) {
+                return getCustomStyle(cr);
+            }
+
+            return PRESETS[preset];
+        }
+
+        /**
+         * @hide
+         */
+        public static CaptionStyle getCustomStyle(ContentResolver cr) {
+            final int foregroundColor = Secure.getInt(
+                    cr, Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR,
+                    DEFAULT_CUSTOM.foregroundColor);
+            final int backgroundColor = Secure.getInt(cr,
+                    Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR,
+                    DEFAULT_CUSTOM.backgroundColor);
+            final int edgeType = Secure.getInt(
+                    cr, Secure.ACCESSIBILITY_CAPTIONING_EDGE_TYPE, DEFAULT_CUSTOM.edgeType);
+            final int edgeColor = Secure.getInt(
+                    cr, Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR, DEFAULT_CUSTOM.edgeColor);
+
+            String rawTypeface = Secure.getString(cr, Secure.ACCESSIBILITY_CAPTIONING_TYPEFACE);
+            if (rawTypeface == null) {
+                rawTypeface = DEFAULT_CUSTOM.mRawTypeface;
+            }
+
+            return new CaptionStyle(
+                    foregroundColor, backgroundColor, edgeType, edgeColor, rawTypeface);
+        }
+
+        static {
+            WHITE_ON_BLACK = new CaptionStyle(
+                    Color.WHITE, Color.BLACK, EDGE_TYPE_NONE, Color.BLACK, null);
+            BLACK_ON_WHITE = new CaptionStyle(
+                    Color.BLACK, Color.WHITE, EDGE_TYPE_NONE, Color.BLACK, null);
+            YELLOW_ON_BLACK = new CaptionStyle(
+                    Color.YELLOW, Color.BLACK, EDGE_TYPE_NONE, Color.BLACK, null);
+            YELLOW_ON_BLUE = new CaptionStyle(
+                    Color.YELLOW, Color.BLUE, EDGE_TYPE_NONE, Color.BLACK, null);
+
+            PRESETS = new CaptionStyle[] {
+                    WHITE_ON_BLACK, BLACK_ON_WHITE, YELLOW_ON_BLACK, YELLOW_ON_BLUE
+            };
+
+            DEFAULT_CUSTOM = WHITE_ON_BLACK;
+        }
+    }
+}
diff --git a/core/java/android/view/accessibility/CaptioningPreferences.java b/core/java/android/view/accessibility/CaptioningPreferences.java
deleted file mode 100644 (file)
index 48dc3ad..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.view.accessibility;
-
-import android.content.ContentResolver;
-import android.graphics.Color;
-import android.graphics.Typeface;
-import android.provider.Settings;
-
-import java.util.Locale;
-
-/**
- * Contains methods for accessing preferred video captioning state and
- * properties.
- */
-public class CaptioningPreferences {
-    /**
-     * Activity Action: Show settings for video captioning.
-     * <p>
-     * In some cases, a matching Activity may not exist, so ensure you safeguard
-     * against this.
-     * <p>
-     * Input: Nothing.
-     * <p>
-     * Output: Nothing.
-     */
-    public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
-
-    /**
-     * Value specifying no character edges.
-     *
-     * @see #getEdgeType
-     */
-    public static final int EDGE_TYPE_NONE = 0;
-
-    /**
-     * Value specifying uniform (outlined) character edges.
-     *
-     * @see #getEdgeType
-     */
-    public static final int EDGE_TYPE_UNIFORM = 1;
-
-    /**
-     * Value specifying drop-shadowed character edges.
-     *
-     * @see #getEdgeType
-     */
-    public static final int EDGE_TYPE_DROP_SHADOWED = 2;
-
-    // Typeface values MUST be synced with arrays.xml
-    private static final String TYPEFACE_DEFAULT = "DEFAULT";
-    private static final String TYPEFACE_MONOSPACE = "MONOSPACE";
-    private static final String TYPEFACE_SANS_SERIF = "SANS_SERIF";
-    private static final String TYPEFACE_SERIF = "SERIF";
-
-    private static final int DEFAULT_ENABLED = 0;
-    private static final int DEFAULT_FOREGROUND_COLOR = Color.WHITE;
-    private static final int DEFAULT_BACKGROUND_COLOR = Color.TRANSPARENT;
-    private static final int DEFAULT_EDGE_TYPE = EDGE_TYPE_UNIFORM;
-    private static final int DEFAULT_EDGE_COLOR = Color.BLACK;
-    private static final Typeface DEFAULT_TYPEFACE = Typeface.DEFAULT;
-    private static final int DEFAULT_FONT_SIZE = 24;
-    private static final String DEFAULT_LOCALE = "";
-
-    /**
-     * Returns the preferred enabled state for video captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return True if captions should be shown in supported video players.
-     */
-    public static final boolean isEnabled(ContentResolver cr) {
-        return Settings.Secure.getInt(
-                cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, DEFAULT_ENABLED) == 1;
-    }
-
-    /**
-     * Returns the preferred foreground color for video captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The preferred foreground color for video captions.
-     */
-    public static final int getForegroundColor(ContentResolver cr) {
-        return Settings.Secure.getInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR,
-                DEFAULT_FOREGROUND_COLOR);
-    }
-
-    /**
-     * Returns the preferred background color for video captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The preferred background color for video captions.
-     */
-    public static final int getBackgroundColor(ContentResolver cr) {
-        return Settings.Secure.getInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR,
-                DEFAULT_BACKGROUND_COLOR);
-    }
-
-    /**
-     * Returns the preferred edge type for video captions, one of:
-     * <ul>
-     * <li>{@link #EDGE_TYPE_NONE}
-     * <li>{@link #EDGE_TYPE_UNIFORM}
-     * <li>{@link #EDGE_TYPE_DROP_SHADOWED}
-     * </ul>
-     *
-     * @param cr Resolver to access the database with.
-     * @return The preferred edge type for video captions.
-     */
-    public static final int getEdgeType(ContentResolver cr) {
-        return Settings.Secure.getInt(
-                cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_TYPE, DEFAULT_EDGE_TYPE);
-    }
-
-    /**
-     * Returns the preferred shadow color for video captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The preferred shadow color for video captions.
-     */
-    public static final int getEdgeColor(ContentResolver cr) {
-        return Settings.Secure.getInt(
-                cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR, DEFAULT_EDGE_COLOR);
-    }
-
-    /**
-     * Returns the raw value representing the preferred typeface for video
-     * captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The raw value representing the preferred typeface for video
-     *         captions.
-     * @hide
-     */
-    public static final String getRawTypeface(ContentResolver cr) {
-        final String rawTypeface = Settings.Secure.getString(
-                cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_TYPEFACE);
-        if (rawTypeface != null) {
-            return rawTypeface;
-        }
-
-        return TYPEFACE_DEFAULT;
-    }
-
-    /**
-     * Returns the preferred typeface for video captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The preferred typeface for video captions.
-     */
-    public static final Typeface getTypeface(ContentResolver cr) {
-        final String rawTypeface = getRawTypeface(cr);
-        if (TYPEFACE_DEFAULT.equals(rawTypeface)) {
-            return Typeface.DEFAULT;
-        } else if (TYPEFACE_MONOSPACE.equals(rawTypeface)) {
-            return Typeface.MONOSPACE;
-        } else if (TYPEFACE_SANS_SERIF.equals(rawTypeface)) {
-            return Typeface.SANS_SERIF;
-        } else if (TYPEFACE_SERIF.equals(rawTypeface)) {
-            return Typeface.SERIF;
-        }
-
-        return DEFAULT_TYPEFACE;
-    }
-
-    /**
-     * Returns the raw value representing the preferred font size for video
-     * captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The raw value representing the preferred font size for video
-     *         captions.
-     * @hide
-     */
-    public static final int getRawFontSize(ContentResolver cr) {
-        return Settings.Secure.getInt(
-                cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FONT_SIZE, DEFAULT_FONT_SIZE);
-    }
-
-    /**
-     * Returns the preferred font size for video captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The preferred font size for video captions.
-     */
-    public static final float getFontSize(ContentResolver cr) {
-        return getRawFontSize(cr);
-    }
-
-    /**
-     * Returns the raw value representing the preferred locale for video
-     * captions.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The raw value representing the preferred locale for video
-     *         captions.
-     * @hide
-     */
-    public static final String getRawLocale(ContentResolver cr) {
-        final String rawLocale = Settings.Secure.getString(
-                cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_LOCALE);
-        if (rawLocale != null) {
-            return rawLocale;
-        }
-
-        return DEFAULT_LOCALE;
-    }
-
-    /**
-     * Returns the preferred locale for video captions, or null to use the
-     * device locale.
-     *
-     * @param cr Resolver to access the database with.
-     * @return The preferred locale for video captions, or null to use the
-     *         device locale.
-     */
-    public static final Locale getLocale(ContentResolver cr) {
-        final String rawLocale = getRawLocale(cr);
-        if (rawLocale.length() > 0) {
-            final String[] splitLocale = rawLocale.split("_");
-            switch (splitLocale.length) {
-                case 3:
-                    return new Locale(splitLocale[0], splitLocale[1], splitLocale[2]);
-                case 2:
-                    return new Locale(splitLocale[0], splitLocale[1]);
-                case 1:
-                    return new Locale(splitLocale[0]);
-            }
-        }
-
-        return null;
-    }
-}