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