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

Commit 8840aa4c authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

Merge "DO NOT MERGE Add preference for caption text opacity" into klp-dev

parents d43d5bec 00f221dc
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3330,6 +3330,8 @@
    <string name="captioning_background_opacity">Background opacity</string>
    <!-- Title for the preference to change video caption text color. [CHAR LIMIT=35] -->
    <string name="captioning_foreground_color">Text color</string>
    <!-- Title for the preference to change video caption text opacity. [CHAR LIMIT=35] -->
    <string name="captioning_foreground_opacity">Text opacity</string>
    <!-- Title for the preference to change video caption edge color. [CHAR LIMIT=35] -->
    <string name="captioning_edge_color">Edge color</string>
    <!-- Title for the preference to change video caption edge type. [CHAR LIMIT=35] -->
+4 −0
Original line number Diff line number Diff line
@@ -58,6 +58,10 @@
            android:key="captioning_foreground_color"
            android:persistent="false"
            android:title="@string/captioning_foreground_color" />
        <com.android.settings.accessibility.ColorPreference
            android:key="captioning_foreground_opacity"
            android:persistent="false"
            android:title="@string/captioning_foreground_opacity" />

        <com.android.settings.accessibility.EdgeTypePreference
            android:key="captioning_edge_type"
+65 −38
Original line number Diff line number Diff line
@@ -50,6 +50,18 @@ import java.util.Locale;
 */
public class CaptionPropertiesFragment extends SettingsPreferenceFragment
        implements OnPreferenceChangeListener, OnValueChangedListener {
    private static final String PREF_BACKGROUND_COLOR = "captioning_background_color";
    private static final String PREF_BACKGROUND_OPACITY = "captioning_background_opacity";
    private static final String PREF_FOREGROUND_COLOR = "captioning_foreground_color";
    private static final String PREF_FOREGROUND_OPACITY = "captioning_foreground_opacity";
    private static final String PREF_EDGE_COLOR = "captioning_edge_color";
    private static final String PREF_EDGE_TYPE = "captioning_edge_type";
    private static final String PREF_FONT_SIZE = "captioning_font_size";
    private static final String PREF_TYPEFACE = "captioning_typeface";
    private static final String PREF_LOCALE = "captioning_locale";
    private static final String PREF_PRESET = "captioning_preset";
    private static final String PREF_CUSTOM = "custom";

    private static final float DEFAULT_FONT_SIZE = 48f;

    private CaptioningManager mCaptioningManager;
@@ -63,6 +75,7 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment
    // Custom options.
    private ListPreference mTypeface;
    private ColorPreference mForegroundColor;
    private ColorPreference mForegroundOpacity;
    private EdgeTypePreference mEdgeType;
    private ColorPreference mEdgeColor;
    private ColorPreference mBackgroundColor;
@@ -188,25 +201,33 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment
    }

    private void initializeAllPreferences() {
        mLocale = (LocalePreference) findPreference("captioning_locale");
        mFontSize = (ListPreference) findPreference("captioning_font_size");
        mLocale = (LocalePreference) findPreference(PREF_LOCALE);
        mFontSize = (ListPreference) findPreference(PREF_FONT_SIZE);

        final Resources res = getResources();
        final int[] presetValues = res.getIntArray(R.array.captioning_preset_selector_values);
        final String[] presetTitles = res.getStringArray(R.array.captioning_preset_selector_titles);
        mPreset = (PresetPreference) findPreference("captioning_preset");
        mPreset = (PresetPreference) findPreference(PREF_PRESET);
        mPreset.setValues(presetValues);
        mPreset.setTitles(presetTitles);

        mCustom = (PreferenceCategory) findPreference("custom");
        mCustom = (PreferenceCategory) findPreference(PREF_CUSTOM);
        mShowingCustom = true;

        final int[] colorValues = res.getIntArray(R.array.captioning_color_selector_values);
        final String[] colorTitles = res.getStringArray(R.array.captioning_color_selector_titles);
        mForegroundColor = (ColorPreference) mCustom.findPreference("captioning_foreground_color");
        mForegroundColor = (ColorPreference) mCustom.findPreference(PREF_FOREGROUND_COLOR);
        mForegroundColor.setTitles(colorTitles);
        mForegroundColor.setValues(colorValues);
        mEdgeColor = (ColorPreference) mCustom.findPreference("captioning_edge_color");

        final int[] opacityValues = res.getIntArray(R.array.captioning_opacity_selector_values);
        final String[] opacityTitles = res.getStringArray(
                R.array.captioning_opacity_selector_titles);
        mForegroundOpacity = (ColorPreference) mCustom.findPreference(PREF_FOREGROUND_OPACITY);
        mForegroundOpacity.setTitles(opacityTitles);
        mForegroundOpacity.setValues(opacityValues);

        mEdgeColor = (ColorPreference) mCustom.findPreference(PREF_EDGE_COLOR);
        mEdgeColor.setTitles(colorTitles);
        mEdgeColor.setValues(colorValues);

@@ -217,25 +238,22 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment
        System.arraycopy(colorTitles, 0, bgColorTitles, 1, colorTitles.length);
        bgColorValues[0] = Color.TRANSPARENT;
        bgColorTitles[0] = getString(R.string.color_none);
        mBackgroundColor = (ColorPreference) mCustom.findPreference("captioning_background_color");
        mBackgroundColor = (ColorPreference) mCustom.findPreference(PREF_BACKGROUND_COLOR);
        mBackgroundColor.setTitles(bgColorTitles);
        mBackgroundColor.setValues(bgColorValues);

        final int[] opacityValues = res.getIntArray(R.array.captioning_opacity_selector_values);
        final String[] opacityTitles = res.getStringArray(
                R.array.captioning_opacity_selector_titles);
        mBackgroundOpacity = (ColorPreference) mCustom.findPreference(
                "captioning_background_opacity");
        mBackgroundOpacity = (ColorPreference) mCustom.findPreference(PREF_BACKGROUND_OPACITY);
        mBackgroundOpacity.setTitles(opacityTitles);
        mBackgroundOpacity.setValues(opacityValues);

        mEdgeType = (EdgeTypePreference) mCustom.findPreference("captioning_edge_type");
        mTypeface = (ListPreference) mCustom.findPreference("captioning_typeface");
        mEdgeType = (EdgeTypePreference) mCustom.findPreference(PREF_EDGE_TYPE);
        mTypeface = (ListPreference) mCustom.findPreference(PREF_TYPEFACE);
    }

    private void installUpdateListeners() {
        mPreset.setOnValueChangedListener(this);
        mForegroundColor.setOnValueChangedListener(this);
        mForegroundOpacity.setOnValueChangedListener(this);
        mEdgeColor.setOnValueChangedListener(this);
        mBackgroundColor.setOnValueChangedListener(this);
        mBackgroundOpacity.setOnValueChangedListener(this);
@@ -255,22 +273,11 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment

        final ContentResolver cr = getContentResolver();
        final CaptionStyle attrs = CaptionStyle.getCustomStyle(cr);
        mForegroundColor.setValue(attrs.foregroundColor);
        mEdgeType.setValue(attrs.edgeType);
        mEdgeColor.setValue(attrs.edgeColor);

        final int backgroundColor = attrs.backgroundColor;
        final int bgColor;
        final int bgAlpha;
        if (Color.alpha(backgroundColor) == 0) {
            bgColor = Color.TRANSPARENT;
            bgAlpha = (backgroundColor & 0xFF) << 24;
        } else {
            bgColor = backgroundColor | 0xFF000000;
            bgAlpha = backgroundColor & 0xFF000000;
        }
        mBackgroundColor.setValue(bgColor);
        mBackgroundOpacity.setValue(bgAlpha | 0xFFFFFF);
        parseColorOpacity(mForegroundColor, mForegroundOpacity, attrs.foregroundColor);
        parseColorOpacity(mBackgroundColor, mBackgroundOpacity, attrs.backgroundColor);

        final String rawTypeface = attrs.mRawTypeface;
        mTypeface.setValue(rawTypeface == null ? "" : rawTypeface);
@@ -279,6 +286,32 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment
        mLocale.setValue(rawLocale == null ? "" : rawLocale);
    }

    private void parseColorOpacity(ColorPreference color, ColorPreference opacity, int value) {
        final int colorValue;
        final int opacityValue;
        if (Color.alpha(value) == 0) {
            colorValue = Color.TRANSPARENT;
            opacityValue = (value & 0xFF) << 24;
        } else {
            colorValue = value | 0xFF000000;
            opacityValue = value & 0xFF000000;
        }
        color.setValue(colorValue);
        opacity.setValue(opacityValue | 0xFFFFFF);
    }

    private int mergeColorOpacity(ColorPreference color, ColorPreference opacity) {
        final int colorValue = color.getValue();
        final int opacityValue = opacity.getValue();
        final int value;
        if (Color.alpha(colorValue) == 0) {
            value = Color.alpha(opacityValue);
        } else {
            value = colorValue & 0x00FFFFFF | opacityValue & 0xFF000000;
        }
        return value;
    }

    private void refreshShowingCustom() {
        final boolean customPreset = mPreset.getValue() == CaptionStyle.PRESET_CUSTOM;
        if (!customPreset && mShowingCustom) {
@@ -293,20 +326,14 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment
    @Override
    public void onValueChanged(ListDialogPreference preference, int value) {
        final ContentResolver cr = getActivity().getContentResolver();
        if (mForegroundColor == preference) {
        if (mForegroundColor == preference || mForegroundOpacity == preference) {
            final int merged = mergeColorOpacity(mForegroundColor, mForegroundOpacity);
            Settings.Secure.putInt(
                    cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, value);
                    cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, merged);
        } else if (mBackgroundColor == preference || mBackgroundOpacity == preference) {
            final int bgColor = mBackgroundColor.getValue();
            final int bgAlpha = mBackgroundOpacity.getValue();
            final int argb;
            if (Color.alpha(bgColor) == 0) {
                argb = Color.alpha(bgAlpha);
            } else {
                argb = bgColor & 0x00FFFFFF | bgAlpha & 0xFF000000;
            }
            final int merged = mergeColorOpacity(mBackgroundColor, mBackgroundOpacity);
            Settings.Secure.putInt(
                    cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, argb);
                    cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, merged);
        } else if (mEdgeColor == preference) {
            Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR, value);
        } else if (mPreset == preference) {