SpellCheckersSettings.java revision 9d1bfd1e8de6e46137a9571507c03526880d6a46
1e077d2b607032fb66a4a046aa4b46945d32d281esatok/* 2e077d2b607032fb66a4a046aa4b46945d32d281esatok * Copyright (C) 2011 The Android Open Source Project 3e077d2b607032fb66a4a046aa4b46945d32d281esatok * 4e077d2b607032fb66a4a046aa4b46945d32d281esatok * Licensed under the Apache License, Version 2.0 (the "License"); 5e077d2b607032fb66a4a046aa4b46945d32d281esatok * you may not use this file except in compliance with the License. 6e077d2b607032fb66a4a046aa4b46945d32d281esatok * You may obtain a copy of the License at 7e077d2b607032fb66a4a046aa4b46945d32d281esatok * 8e077d2b607032fb66a4a046aa4b46945d32d281esatok * http://www.apache.org/licenses/LICENSE-2.0 9e077d2b607032fb66a4a046aa4b46945d32d281esatok * 10e077d2b607032fb66a4a046aa4b46945d32d281esatok * Unless required by applicable law or agreed to in writing, software 11e077d2b607032fb66a4a046aa4b46945d32d281esatok * distributed under the License is distributed on an "AS IS" BASIS, 12e077d2b607032fb66a4a046aa4b46945d32d281esatok * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e077d2b607032fb66a4a046aa4b46945d32d281esatok * See the License for the specific language governing permissions and 14e077d2b607032fb66a4a046aa4b46945d32d281esatok * limitations under the License. 15e077d2b607032fb66a4a046aa4b46945d32d281esatok */ 16e077d2b607032fb66a4a046aa4b46945d32d281esatok 17e077d2b607032fb66a4a046aa4b46945d32d281esatokpackage com.android.settings.inputmethod; 18e077d2b607032fb66a4a046aa4b46945d32d281esatok 19a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satokimport android.app.AlertDialog; 20c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatokimport android.content.Context; 21a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satokimport android.content.DialogInterface; 22a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satokimport android.content.pm.ApplicationInfo; 23e077d2b607032fb66a4a046aa4b46945d32d281esatokimport android.os.Bundle; 2439b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 2539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference.OnPreferenceClickListener; 2639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen; 27ef283b41b09aaca9e1f5005133ecf317e37a4959satokimport android.util.Log; 28e077d2b607032fb66a4a046aa4b46945d32d281esatokimport android.view.textservice.SpellCheckerInfo; 29cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaokaimport android.view.textservice.SpellCheckerSubtype; 30c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatokimport android.view.textservice.TextServicesManager; 31cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaokaimport android.widget.Switch; 32e077d2b607032fb66a4a046aa4b46945d32d281esatok 339d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 3447f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaokaimport com.android.settings.R; 35cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaokaimport com.android.settings.SettingsActivity; 3647f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaokaimport com.android.settings.SettingsPreferenceFragment; 37cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaokaimport com.android.settings.inputmethod.SpellCheckerPreference.OnRadioButtonPreferenceListener; 38cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaokaimport com.android.settings.widget.SwitchBar; 39cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaokaimport com.android.settings.widget.SwitchBar.OnSwitchChangeListener; 40ffc731207f2ed42f6e00541cdebc7e89ec6e9616satok 41e077d2b607032fb66a4a046aa4b46945d32d281esatokpublic class SpellCheckersSettings extends SettingsPreferenceFragment 42cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka implements OnSwitchChangeListener, OnPreferenceClickListener, 43cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka OnRadioButtonPreferenceListener { 44ef283b41b09aaca9e1f5005133ecf317e37a4959satok private static final String TAG = SpellCheckersSettings.class.getSimpleName(); 45ef283b41b09aaca9e1f5005133ecf317e37a4959satok private static final boolean DBG = false; 46e077d2b607032fb66a4a046aa4b46945d32d281esatok 47cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private static final String KEY_SPELL_CHECKER_LANGUAGE = "spellchecker_language"; 48cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private static final int ITEM_ID_USE_SYSTEM_LANGUAGE = 0; 49cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 50cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private SwitchBar mSwitchBar; 51cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private Preference mSpellCheckerLanaguagePref; 52a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok private AlertDialog mDialog = null; 53e077d2b607032fb66a4a046aa4b46945d32d281esatok private SpellCheckerInfo mCurrentSci; 54e077d2b607032fb66a4a046aa4b46945d32d281esatok private SpellCheckerInfo[] mEnabledScis; 55c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatok private TextServicesManager mTsm; 56e077d2b607032fb66a4a046aa4b46945d32d281esatok 57e077d2b607032fb66a4a046aa4b46945d32d281esatok @Override 588a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 599d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.INPUTMETHOD_SPELL_CHECKERS; 608a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 618a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 628a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 6347f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka public void onCreate(final Bundle icicle) { 64e077d2b607032fb66a4a046aa4b46945d32d281esatok super.onCreate(icicle); 65cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 66e077d2b607032fb66a4a046aa4b46945d32d281esatok addPreferencesFromResource(R.xml.spellchecker_prefs); 67cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mSpellCheckerLanaguagePref = findPreference(KEY_SPELL_CHECKER_LANGUAGE); 68cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mSpellCheckerLanaguagePref.setOnPreferenceClickListener(this); 69cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 70cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mTsm = (TextServicesManager) getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE); 71cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mCurrentSci = mTsm.getCurrentSpellChecker(); 72cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mEnabledScis = mTsm.getEnabledSpellCheckers(); 73cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka populatePreferenceScreen(); 74e077d2b607032fb66a4a046aa4b46945d32d281esatok } 75e077d2b607032fb66a4a046aa4b46945d32d281esatok 76cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private void populatePreferenceScreen() { 77cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final PreferenceScreen screen = getPreferenceScreen(); 78cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final Context context = getActivity(); 79cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final int count = (mEnabledScis == null) ? 0 : mEnabledScis.length; 80cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka for (int index = 0; index < count; ++index) { 81cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerInfo sci = mEnabledScis[index]; 8239b467482d1bf256a111c757e9b7621c6f523271Jason Monk final SpellCheckerPreference pref = new SpellCheckerPreference(getPrefContext(), sci, 8339b467482d1bf256a111c757e9b7621c6f523271Jason Monk this); 84cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka screen.addPreference(pref); 85cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka InputMethodAndSubtypeUtil.removeUnnecessaryNonPersistentPreference(pref); 86cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 87e077d2b607032fb66a4a046aa4b46945d32d281esatok } 88e077d2b607032fb66a4a046aa4b46945d32d281esatok 89e077d2b607032fb66a4a046aa4b46945d32d281esatok @Override 90e077d2b607032fb66a4a046aa4b46945d32d281esatok public void onResume() { 91c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatok super.onResume(); 92cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mSwitchBar = ((SettingsActivity)getActivity()).getSwitchBar(); 93cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mSwitchBar.show(); 94cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mSwitchBar.addOnSwitchChangeListener(this); 95cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka updatePreferenceScreen(); 96e077d2b607032fb66a4a046aa4b46945d32d281esatok } 97e077d2b607032fb66a4a046aa4b46945d32d281esatok 98cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka @Override 99cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka public void onPause() { 100cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka super.onPause(); 101cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mSwitchBar.removeOnSwitchChangeListener(this); 102e077d2b607032fb66a4a046aa4b46945d32d281esatok } 103e077d2b607032fb66a4a046aa4b46945d32d281esatok 104cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka @Override 105cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka public void onSwitchChanged(final Switch switchView, final boolean isChecked) { 106cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mTsm.setSpellCheckerEnabled(isChecked); 107cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka updatePreferenceScreen(); 108cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 109cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 110cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private void updatePreferenceScreen() { 11147f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka mCurrentSci = mTsm.getCurrentSpellChecker(); 112cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final boolean isSpellCheckerEnabled = mTsm.isSpellCheckerEnabled(); 113cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mSwitchBar.setChecked(isSpellCheckerEnabled); 114cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 115cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerSubtype currentScs = mTsm.getCurrentSpellCheckerSubtype( 116cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka false /* allowImplicitlySelectedSubtype */); 117cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mSpellCheckerLanaguagePref.setSummary(getSpellCheckerSubtypeLabel(mCurrentSci, currentScs)); 118cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 119cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final PreferenceScreen screen = getPreferenceScreen(); 120cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final int count = screen.getPreferenceCount(); 121cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka for (int index = 0; index < count; index++) { 122cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final Preference preference = screen.getPreference(index); 123cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka preference.setEnabled(isSpellCheckerEnabled); 124cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (preference instanceof SpellCheckerPreference) { 125cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerPreference pref = (SpellCheckerPreference)preference; 126cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerInfo sci = pref.getSpellCheckerInfo(); 127cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka pref.setSelected(mCurrentSci != null && mCurrentSci.getId().equals(sci.getId())); 128cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 129e077d2b607032fb66a4a046aa4b46945d32d281esatok } 130cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 131cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 132cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private CharSequence getSpellCheckerSubtypeLabel(final SpellCheckerInfo sci, 133cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerSubtype subtype) { 134cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (sci == null) { 135cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka return null; 136ffc731207f2ed42f6e00541cdebc7e89ec6e9616satok } 137cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (subtype == null) { 138cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka return getString(R.string.use_system_language_to_select_input_method_subtypes); 139cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 140cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka return subtype.getDisplayName( 141cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka getActivity(), sci.getPackageName(), sci.getServiceInfo().applicationInfo); 142ffc731207f2ed42f6e00541cdebc7e89ec6e9616satok } 143ffc731207f2ed42f6e00541cdebc7e89ec6e9616satok 144ffc731207f2ed42f6e00541cdebc7e89ec6e9616satok @Override 14547f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka public boolean onPreferenceClick(final Preference pref) { 146cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (pref == mSpellCheckerLanaguagePref) { 147cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka showChooseLanguageDialog(); 148cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka return true; 149cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 150cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka return false; 151cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 152cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 153cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka @Override 154cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka public void onRadioButtonClicked(final SpellCheckerPreference pref) { 155cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerInfo sci = pref.getSpellCheckerInfo(); 156cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final boolean isSystemApp = 157cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka (sci.getServiceInfo().applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; 158cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (isSystemApp) { 159cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka changeCurrentSpellChecker(sci); 160cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } else { 161cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka showSecurityWarnDialog(pref); 162cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 163cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 164cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 165cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private static int convertSubtypeIndexToDialogItemId(final int index) { return index + 1; } 166cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private static int convertDialogItemIdToSubtypeIndex(final int item) { return item - 1; } 167cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka 168cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private void showChooseLanguageDialog() { 169cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (mDialog != null && mDialog.isShowing()) { 170cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mDialog.dismiss(); 171cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 172cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerInfo currentSci = mTsm.getCurrentSpellChecker(); 173cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerSubtype currentScs = mTsm.getCurrentSpellCheckerSubtype( 174cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka false /* allowImplicitlySelectedSubtype */); 175cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 176cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka builder.setTitle(R.string.phone_language); 177cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final int subtypeCount = currentSci.getSubtypeCount(); 178cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final CharSequence[] items = new CharSequence[subtypeCount + 1 /* default */ ]; 179cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka items[ITEM_ID_USE_SYSTEM_LANGUAGE] = getSpellCheckerSubtypeLabel(currentSci, null); 180cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka int checkedItemId = ITEM_ID_USE_SYSTEM_LANGUAGE; 181cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka for (int index = 0; index < subtypeCount; ++index) { 182cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerSubtype subtype = currentSci.getSubtypeAt(index); 183cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final int itemId = convertSubtypeIndexToDialogItemId(index); 184cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka items[itemId] = getSpellCheckerSubtypeLabel(currentSci, subtype); 185cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (subtype.equals(currentScs)) { 186cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka checkedItemId = itemId; 187cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 188cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 189cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka builder.setSingleChoiceItems(items, checkedItemId, new AlertDialog.OnClickListener() { 190cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka @Override 191cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka public void onClick(final DialogInterface dialog, final int item) { 192cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (item == ITEM_ID_USE_SYSTEM_LANGUAGE) { 193cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mTsm.setSpellCheckerSubtype(null); 19447f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka } else { 195cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final int index = convertDialogItemIdToSubtypeIndex(item); 196cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mTsm.setSpellCheckerSubtype(currentSci.getSubtypeAt(index)); 197cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka } 198cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka if (DBG) { 199cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerSubtype subtype = mTsm.getCurrentSpellCheckerSubtype( 200cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka true /* allowImplicitlySelectedSubtype */); 201cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka Log.d(TAG, "Current spell check locale is " 202cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka + subtype == null ? "null" : subtype.getLocale()); 20347f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka } 204cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka dialog.dismiss(); 205cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka updatePreferenceScreen(); 206a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok } 207cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka }); 208cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mDialog = builder.create(); 209cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mDialog.show(); 210a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok } 211a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok 212cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private void showSecurityWarnDialog(final SpellCheckerPreference pref) { 213a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok if (mDialog != null && mDialog.isShowing()) { 214a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok mDialog.dismiss(); 215a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok } 216cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka final SpellCheckerInfo sci = pref.getSpellCheckerInfo(); 21747f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 21847f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka builder.setTitle(android.R.string.dialog_alert_title); 219cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka builder.setMessage(getString(R.string.spellchecker_security_warning, pref.getTitle())); 22047f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka builder.setCancelable(true); 22147f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 22247f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka @Override 22347f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka public void onClick(final DialogInterface dialog, final int which) { 224cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka changeCurrentSpellChecker(sci); 22547f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka } 22647f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka }); 22747f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { 22847f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka @Override 22947f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka public void onClick(final DialogInterface dialog, final int which) { 23047f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka } 23147f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka }); 23247f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka mDialog = builder.create(); 233a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok mDialog.show(); 234a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok } 235a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91satok 236cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka private void changeCurrentSpellChecker(final SpellCheckerInfo sci) { 237cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka mTsm.setCurrentSpellChecker(sci); 238ef283b41b09aaca9e1f5005133ecf317e37a4959satok if (DBG) { 23947f6f81b729f828914c807aa015e260d57b34ae8Tadashi G. Takaoka Log.d(TAG, "Current spell check is " + mTsm.getCurrentSpellChecker().getId()); 240ef283b41b09aaca9e1f5005133ecf317e37a4959satok } 241cd6fdead7c7a42f4a18a37523bb4feef230559c0Tadashi G. Takaoka updatePreferenceScreen(); 242e077d2b607032fb66a4a046aa4b46945d32d281esatok } 243e077d2b607032fb66a4a046aa4b46945d32d281esatok} 244