SingleSpellCheckerPreference.java revision ef283b41b09aaca9e1f5005133ecf317e37a4959
1/* 2 * Copyright (C) 2011 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 17package com.android.settings.inputmethod; 18 19import com.android.settings.R; 20 21import android.app.AlertDialog; 22import android.content.DialogInterface; 23import android.content.Intent; 24import android.content.res.Resources; 25import android.preference.Preference; 26import android.provider.Settings; 27import android.text.TextUtils; 28import android.util.Log; 29import android.view.View; 30import android.view.View.OnClickListener; 31import android.view.textservice.SpellCheckerInfo; 32import android.view.textservice.SpellCheckerSubtype; 33import android.view.textservice.TextServicesManager; 34import android.widget.ImageView; 35import android.widget.RadioButton; 36import android.widget.TextView; 37 38public class SingleSpellCheckerPreference extends Preference { 39 private static final float DISABLED_ALPHA = 0.4f; 40 private static final String TAG = SingleSpellCheckerPreference.class.getSimpleName(); 41 private static final boolean DBG = false; 42 43 private final SpellCheckerInfo mSpellCheckerInfo; 44 45 private final SpellCheckersSettings mFragment; 46 private final Resources mRes; 47 private final TextServicesManager mTsm; 48 private TextView mTitleText; 49 private TextView mSummaryText; 50 private View mPrefAll; 51 private RadioButton mRadioButton; 52 private View mPrefLeftButton; 53 private View mSettingsButton; 54 private ImageView mSubtypeButton; 55 private Intent mSettingsIntent; 56 private boolean mSelected; 57 58 public SingleSpellCheckerPreference(SpellCheckersSettings fragment, Intent settingsIntent, 59 SpellCheckerInfo sci, TextServicesManager tsm) { 60 super(fragment.getActivity(), null, 0); 61 mFragment = fragment; 62 mRes = fragment.getActivity().getResources(); 63 mTsm = tsm; 64 setLayoutResource(R.layout.preference_spellchecker); 65 mSpellCheckerInfo = sci; 66 mSelected = false; 67 final String settingsActivity = mSpellCheckerInfo.getSettingsActivity(); 68 if (!TextUtils.isEmpty(settingsActivity)) { 69 mSettingsIntent = new Intent(Intent.ACTION_MAIN); 70 mSettingsIntent.setClassName(mSpellCheckerInfo.getPackageName(), settingsActivity); 71 } else { 72 mSettingsIntent = null; 73 } 74 } 75 76 @Override 77 protected void onBindView(View view) { 78 super.onBindView(view); 79 mPrefAll = view.findViewById(R.id.pref_all); 80 mRadioButton = (RadioButton)view.findViewById(R.id.pref_radio); 81 mPrefLeftButton = view.findViewById(R.id.pref_left_button); 82 mPrefLeftButton.setOnClickListener( 83 new OnClickListener() { 84 @Override 85 public void onClick(View arg0) { 86 onLeftButtonClicked(arg0); 87 } 88 }); 89 mTitleText = (TextView)view.findViewById(android.R.id.title); 90 mSummaryText = (TextView)view.findViewById(android.R.id.summary); 91 mSubtypeButton = (ImageView)view.findViewById(R.id.pref_right_button2); 92 mSubtypeButton.setOnClickListener( 93 new OnClickListener() { 94 @Override 95 public void onClick(View arg0) { 96 onSubtypeButtonClicked(arg0); 97 } 98 }); 99 mSettingsButton = view.findViewById(R.id.pref_right_button1); 100 mSettingsButton.setOnClickListener( 101 new OnClickListener() { 102 @Override 103 public void onClick(View arg0) { 104 onSettingsButtonClicked(arg0); 105 } 106 }); 107 updateSelectedState(mSelected); 108 } 109 110 private void onLeftButtonClicked(View arg0) { 111 mFragment.onPreferenceClick(this); 112 } 113 114 public SpellCheckerInfo getSpellCheckerInfo() { 115 return mSpellCheckerInfo; 116 } 117 118 private void updateSelectedState(boolean selected) { 119 if (mPrefAll != null) { 120 mRadioButton.setChecked(selected); 121 enableButtons(selected); 122 } 123 } 124 125 public void setSelected(boolean selected) { 126 mSelected = selected; 127 updateSelectedState(selected); 128 } 129 130 private void onSubtypeButtonClicked(View arg0) { 131 final AlertDialog.Builder builder = new AlertDialog.Builder(mFragment.getActivity()); 132 builder.setTitle(R.string.phone_language); 133 final int size = mSpellCheckerInfo.getSubtypeCount(); 134 final CharSequence[] items = new CharSequence[size + 1]; 135 items[0] = mRes.getString(R.string.use_system_language_to_select_input_method_subtypes); 136 for (int i = 0; i < size; ++i) { 137 final SpellCheckerSubtype subtype = mSpellCheckerInfo.getSubtypeAt(i); 138 final CharSequence label = subtype.getDisplayName( 139 mFragment.getActivity(), mSpellCheckerInfo.getPackageName(), 140 mSpellCheckerInfo.getServiceInfo().applicationInfo); 141 items[i + 1] = label; 142 } 143 // default: "Use system language" 144 int checkedItem = 0; 145 // Allow no implicitly selected subtypes 146 final SpellCheckerSubtype currentScs = mTsm.getCurrentSpellCheckerSubtype(false); 147 if (currentScs != null) { 148 for (int i = 0; i < size; ++i) { 149 if (mSpellCheckerInfo.getSubtypeAt(i).equals(currentScs)) { 150 checkedItem = i + 1; 151 break; 152 } 153 } 154 } 155 builder.setSingleChoiceItems(items, checkedItem, new AlertDialog.OnClickListener() { 156 @Override 157 public void onClick(DialogInterface dialog, int which) { 158 if (which == 0) { 159 mTsm.setSpellCheckerSubtype(null); 160 } else { 161 mTsm.setSpellCheckerSubtype(mSpellCheckerInfo.getSubtypeAt(which - 1)); 162 } 163 if (DBG) { 164 final SpellCheckerSubtype subtype = mTsm.getCurrentSpellCheckerSubtype(true); 165 Log.d(TAG, "Current spell check locale is " 166 + subtype == null ? "null" : subtype.getLocale()); 167 } 168 dialog.dismiss(); 169 } 170 }); 171 builder.show(); 172 } 173 174 private void onSettingsButtonClicked(View arg0) { 175 if (mFragment != null && mSettingsIntent != null) { 176 mFragment.startActivity(mSettingsIntent); 177 } 178 } 179 180 private void enableButtons(boolean enabled) { 181 if (mSettingsButton != null) { 182 if (mSettingsIntent == null) { 183 mSettingsButton.setVisibility(View.GONE); 184 } else { 185 mSettingsButton.setEnabled(enabled); 186 mSettingsButton.setClickable(enabled); 187 mSettingsButton.setFocusable(enabled); 188 if (!enabled) { 189 mSettingsButton.setAlpha(DISABLED_ALPHA); 190 } 191 } 192 } 193 if (mSubtypeButton != null) { 194 if (mSpellCheckerInfo.getSubtypeCount() <= 0) { 195 mSubtypeButton.setVisibility(View.GONE); 196 } else { 197 mSubtypeButton.setEnabled(enabled); 198 mSubtypeButton.setClickable(enabled); 199 mSubtypeButton.setFocusable(enabled); 200 if (!enabled) { 201 mSubtypeButton.setAlpha(DISABLED_ALPHA); 202 } 203 } 204 } 205 } 206} 207