Home | History | Annotate | Download | only in accessibility
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.settings.accessibility;
     18 
     19 import android.app.ActionBar;
     20 import android.app.Activity;
     21 import android.app.Fragment;
     22 import android.content.ContentResolver;
     23 import android.content.Context;
     24 import android.os.Bundle;
     25 import android.preference.PreferenceFrameLayout;
     26 import android.provider.Settings;
     27 import android.view.Gravity;
     28 import android.view.LayoutInflater;
     29 import android.view.View;
     30 import android.view.ViewGroup;
     31 import android.view.accessibility.CaptioningManager;
     32 
     33 import com.android.internal.widget.SubtitleView;
     34 import com.android.settings.R;
     35 import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener;
     36 
     37 import java.util.Locale;
     38 
     39 public class ToggleCaptioningPreferenceFragment extends Fragment {
     40     private static final float DEFAULT_FONT_SIZE = 48f;
     41 
     42     private CaptionPropertiesFragment mPropsFragment;
     43     private SubtitleView mPreviewText;
     44     private CaptioningManager mCaptioningManager;
     45 
     46     @Override
     47     public void onCreate(Bundle savedInstanceState) {
     48         super.onCreate(savedInstanceState);
     49 
     50         mCaptioningManager = (CaptioningManager) getActivity()
     51                 .getSystemService(Context.CAPTIONING_SERVICE);
     52     }
     53 
     54     @Override
     55     public View onCreateView(
     56             LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     57         final View rootView = inflater.inflate(R.layout.captioning_preview, container, false);
     58 
     59         // We have to do this now because PreferenceFrameLayout looks at it
     60         // only when the view is added.
     61         if (container instanceof PreferenceFrameLayout) {
     62             ((PreferenceFrameLayout.LayoutParams) rootView.getLayoutParams()).removeBorders = true;
     63         }
     64 
     65         return rootView;
     66     }
     67 
     68     @Override
     69     public void onViewCreated(View view, Bundle savedInstanceState) {
     70         super.onViewCreated(view, savedInstanceState);
     71 
     72         mPropsFragment = ((CaptionPropertiesFragment) getFragmentManager()
     73                 .findFragmentById(R.id.properties_fragment));
     74         mPropsFragment.setParent(this);
     75 
     76         mPreviewText = (SubtitleView) view.findViewById(R.id.preview_text);
     77 
     78         installActionBarToggleSwitch();
     79         refreshPreviewText();
     80     }
     81 
     82     public void refreshPreviewText() {
     83         final SubtitleView preview = mPreviewText;
     84         if (preview != null) {
     85             final Activity activity = getActivity();
     86             final ContentResolver cr = activity.getContentResolver();
     87             final int styleId = mCaptioningManager.getRawUserStyle();
     88             applyCaptionProperties(mCaptioningManager, preview, styleId);
     89 
     90             final Locale locale = mCaptioningManager.getLocale();
     91             if (locale != null) {
     92                 final CharSequence localizedText = AccessibilityUtils.getTextForLocale(
     93                         activity, locale, R.string.captioning_preview_text);
     94                 preview.setText(localizedText);
     95             } else {
     96                 preview.setText(R.string.captioning_preview_text);
     97             }
     98         }
     99     }
    100 
    101     public static void applyCaptionProperties(
    102             CaptioningManager manager, SubtitleView previewText, int styleId) {
    103         previewText.setStyle(styleId);
    104 
    105         final Context context = previewText.getContext();
    106         final ContentResolver cr = context.getContentResolver();
    107         final float fontScale = manager.getFontScale();
    108         previewText.setTextSize(fontScale * DEFAULT_FONT_SIZE);
    109 
    110         final Locale locale = manager.getLocale();
    111         if (locale != null) {
    112             final CharSequence localizedText = AccessibilityUtils.getTextForLocale(
    113                     context, locale, R.string.captioning_preview_characters);
    114             previewText.setText(localizedText);
    115         } else {
    116             previewText.setText(R.string.captioning_preview_characters);
    117         }
    118     }
    119 
    120     private void installActionBarToggleSwitch() {
    121         final Activity activity = getActivity();
    122         final ToggleSwitch toggleSwitch = new ToggleSwitch(activity);
    123 
    124         final int padding = getResources().getDimensionPixelSize(
    125                 R.dimen.action_bar_switch_padding);
    126         toggleSwitch.setPaddingRelative(0, 0, padding, 0);
    127 
    128         final ActionBar actionBar = activity.getActionBar();
    129         actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);
    130 
    131         final ActionBar.LayoutParams params = new ActionBar.LayoutParams(
    132                 ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT,
    133                         Gravity.CENTER_VERTICAL | Gravity.END);
    134         actionBar.setCustomView(toggleSwitch, params);
    135 
    136         final boolean enabled = mCaptioningManager.isEnabled();
    137         mPropsFragment.getPreferenceScreen().setEnabled(enabled);
    138         mPreviewText.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE);
    139         toggleSwitch.setCheckedInternal(enabled);
    140         toggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
    141             @Override
    142             public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) {
    143                 toggleSwitch.setCheckedInternal(checked);
    144                 Settings.Secure.putInt(getActivity().getContentResolver(),
    145                         Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, checked ? 1 : 0);
    146                 mPropsFragment.getPreferenceScreen().setEnabled(checked);
    147                 mPreviewText.setVisibility(checked ? View.VISIBLE : View.INVISIBLE);
    148                 return false;
    149             }
    150         });
    151     }
    152 }
    153