InputMethodAndLanguageSettings.java revision c0b569c317fad96abbf0ea23d07eb6d19f634ccf
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 170417e4094713c5f4dac700b645000d0959bf62fasatokpackage com.android.settings.inputmethod; 180417e4094713c5f4dac700b645000d0959bf62fasatok 190417e4094713c5f4dac700b645000d0959bf62fasatokimport com.android.settings.R; 20e077d2b607032fb66a4a046aa4b46945d32d281esatokimport com.android.settings.Settings.SpellCheckersSettingsActivity; 210417e4094713c5f4dac700b645000d0959bf62fasatokimport com.android.settings.SettingsPreferenceFragment; 2271ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalardimport com.android.settings.UserDictionarySettings; 230417e4094713c5f4dac700b645000d0959bf62fasatokimport com.android.settings.Utils; 24b44161f3ed9b91f39086247d8efbdac42656b93bAmith Yamasaniimport com.android.settings.VoiceInputOutputSettings; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 26c087e35d7f9a968ea035e931aa318cf36a3e1b90Jean Chalardimport android.app.Activity; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 283fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport android.content.Intent; 293fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport android.content.pm.PackageManager; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Configuration; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 323fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport android.preference.CheckBoxPreference; 33c88a7ff1efd10374974e45768bde1658cc1d8483satokimport android.preference.ListPreference; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 353fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport android.preference.PreferenceCategory; 363fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport android.preference.PreferenceGroup; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 38c88a7ff1efd10374974e45768bde1658cc1d8483satokimport android.provider.Settings; 393fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport android.provider.Settings.System; 403fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport android.text.TextUtils; 413fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport android.view.inputmethod.InputMethodInfo; 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.inputmethod.InputMethodManager; 43c087e35d7f9a968ea035e931aa318cf36a3e1b90Jean Chalard 443fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport java.util.ArrayList; 453fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport java.util.Collections; 463fa13775e805df6cc7244d3f93105c5d3a5b748fsatokimport java.util.List; 4771ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalardimport java.util.Set; 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 49c88a7ff1efd10374974e45768bde1658cc1d8483satokpublic class InputMethodAndLanguageSettings extends SettingsPreferenceFragment 50c88a7ff1efd10374974e45768bde1658cc1d8483satok implements Preference.OnPreferenceChangeListener{ 510cc35e444bd71f117b6aed97e40ea4f3d82cd8faDaisuke Miyakawa 520f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani private static final String KEY_PHONE_LANGUAGE = "phone_language"; 53c88a7ff1efd10374974e45768bde1658cc1d8483satok private static final String KEY_CURRENT_INPUT_METHOD = "current_input_method"; 54c88a7ff1efd10374974e45768bde1658cc1d8483satok private static final String KEY_INPUT_METHOD_SELECTOR = "input_method_selector"; 5571ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard private static final String KEY_USER_DICTIONARY_SETTINGS = "key_user_dictionary_settings"; 563fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // false: on ICS or later 573fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private static final boolean SHOW_INPUT_METHOD_SWITCHER_SETTINGS = false; 5871ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard 593fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private static final String[] sSystemSettingNames = { 603fa13775e805df6cc7244d3f93105c5d3a5b748fsatok System.TEXT_AUTO_REPLACE, System.TEXT_AUTO_CAPS, System.TEXT_AUTO_PUNCTUATE, 613fa13775e805df6cc7244d3f93105c5d3a5b748fsatok }; 623fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 633fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private static final String[] sHardKeyboardKeys = { 643fa13775e805df6cc7244d3f93105c5d3a5b748fsatok "auto_replace", "auto_caps", "auto_punctuate", 653fa13775e805df6cc7244d3f93105c5d3a5b748fsatok }; 6686997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project 67c88a7ff1efd10374974e45768bde1658cc1d8483satok private int mDefaultInputMethodSelectorVisibility = 0; 68c88a7ff1efd10374974e45768bde1658cc1d8483satok private ListPreference mShowInputMethodSelectorPref; 690f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani private Preference mLanguagePref; 703fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private ArrayList<InputMethodPreference> mInputMethodPreferenceList = 713fa13775e805df6cc7244d3f93105c5d3a5b748fsatok new ArrayList<InputMethodPreference>(); 723fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private boolean mHaveHardKeyboard; 733fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private PreferenceCategory mHardKeyboardCategory; 743fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private InputMethodManager mImm; 753fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private List<InputMethodInfo> mImis; 763fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private boolean mIsOnlyImeSettings; 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 79d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle icicle) { 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.language_settings); 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 84c88a7ff1efd10374974e45768bde1658cc1d8483satok try { 85c88a7ff1efd10374974e45768bde1658cc1d8483satok mDefaultInputMethodSelectorVisibility = Integer.valueOf( 86c88a7ff1efd10374974e45768bde1658cc1d8483satok getString(R.string.input_method_selector_visibility_default_value)); 87c88a7ff1efd10374974e45768bde1658cc1d8483satok } catch (NumberFormatException e) { 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 8986997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project 90c88a7ff1efd10374974e45768bde1658cc1d8483satok if (getActivity().getAssets().getLocales().length == 1) { 91c88a7ff1efd10374974e45768bde1658cc1d8483satok // No "Select language" pref if there's only one system locale available. 92c88a7ff1efd10374974e45768bde1658cc1d8483satok getPreferenceScreen().removePreference(findPreference(KEY_PHONE_LANGUAGE)); 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 94c88a7ff1efd10374974e45768bde1658cc1d8483satok mLanguagePref = findPreference(KEY_PHONE_LANGUAGE); 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 963fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (SHOW_INPUT_METHOD_SWITCHER_SETTINGS) { 973fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mShowInputMethodSelectorPref = (ListPreference)findPreference( 983fa13775e805df6cc7244d3f93105c5d3a5b748fsatok KEY_INPUT_METHOD_SELECTOR); 993fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mShowInputMethodSelectorPref.setOnPreferenceChangeListener(this); 1003fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // TODO: Update current input method name on summary 1013fa13775e805df6cc7244d3f93105c5d3a5b748fsatok updateInputMethodSelectorSummary(loadInputMethodSelectorVisibility()); 1023fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 103b44161f3ed9b91f39086247d8efbdac42656b93bAmith Yamasani 104b44161f3ed9b91f39086247d8efbdac42656b93bAmith Yamasani new VoiceInputOutputSettings(this).onCreate(); 1053fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 1063fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // Hard keyboard 1073fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final Configuration config = getResources().getConfiguration(); 1083fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mHaveHardKeyboard = (config.keyboard == Configuration.KEYBOARD_QWERTY); 1093fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 1103fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // IME 1113fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mIsOnlyImeSettings = Settings.ACTION_INPUT_METHOD_SETTINGS.equals( 1123fa13775e805df6cc7244d3f93105c5d3a5b748fsatok getActivity().getIntent().getAction()); 1133fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mImm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 1143fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mImis = mImm.getInputMethodList(); 1153fa13775e805df6cc7244d3f93105c5d3a5b748fsatok createImePreferenceHierarchy((PreferenceGroup)findPreference("keyboard_settings_category")); 116e077d2b607032fb66a4a046aa4b46945d32d281esatok 117e077d2b607032fb66a4a046aa4b46945d32d281esatok final Intent intent = new Intent(Intent.ACTION_MAIN); 118e077d2b607032fb66a4a046aa4b46945d32d281esatok intent.setClass(getActivity(), SpellCheckersSettingsActivity.class); 119c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatok final SpellCheckersPreference scp = ((SpellCheckersPreference)findPreference( 120c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatok "spellcheckers_settings")); 121c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatok if (scp != null) { 122c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatok scp.setFragmentIntent(this, intent); 123c0b569c317fad96abbf0ea23d07eb6d19f634ccfsatok } 124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1259cd11a9aa5ac74ca89432655d019f68d789bc405satok 126c88a7ff1efd10374974e45768bde1658cc1d8483satok private void updateInputMethodSelectorSummary(int value) { 127c88a7ff1efd10374974e45768bde1658cc1d8483satok String[] inputMethodSelectorTitles = getResources().getStringArray( 128c88a7ff1efd10374974e45768bde1658cc1d8483satok R.array.input_method_selector_titles); 129c88a7ff1efd10374974e45768bde1658cc1d8483satok if (inputMethodSelectorTitles.length > value) { 130c88a7ff1efd10374974e45768bde1658cc1d8483satok mShowInputMethodSelectorPref.setSummary(inputMethodSelectorTitles[value]); 131c88a7ff1efd10374974e45768bde1658cc1d8483satok mShowInputMethodSelectorPref.setValue(String.valueOf(value)); 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 13480a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project 13571ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard private void updateUserDictionaryPreference(Preference userDictionaryPreference) { 136c087e35d7f9a968ea035e931aa318cf36a3e1b90Jean Chalard final Activity activity = getActivity(); 13771ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard final Set<String> localeList = UserDictionaryList.getUserDictionaryLocalesList(activity); 138410e75b15bd7ecfcb8985c4368fec5e355e2c099Jean Chalard if (null == localeList) { 139410e75b15bd7ecfcb8985c4368fec5e355e2c099Jean Chalard // The locale list is null if and only if the user dictionary service is 140410e75b15bd7ecfcb8985c4368fec5e355e2c099Jean Chalard // not present or disabled. In this case we need to remove the preference. 141410e75b15bd7ecfcb8985c4368fec5e355e2c099Jean Chalard ((PreferenceGroup)findPreference("language_settings_category")).removePreference( 142410e75b15bd7ecfcb8985c4368fec5e355e2c099Jean Chalard userDictionaryPreference); 143410e75b15bd7ecfcb8985c4368fec5e355e2c099Jean Chalard } else if (localeList.size() <= 1) { 14471ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard userDictionaryPreference.setTitle(R.string.user_dict_single_settings_title); 14571ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard userDictionaryPreference.setFragment(UserDictionarySettings.class.getName()); 14671ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard // If the size of localeList is 0, we don't set the locale parameter in the 14771ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard // extras. This will be interpreted by the UserDictionarySettings class as 14871ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard // meaning "the current locale". 14971ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard // Note that with the current code for UserDictionaryList#getUserDictionaryLocalesList() 15071ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard // the locale list always has at least one element, since it always includes the current 15171ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard // locale explicitly. @see UserDictionaryList.getUserDictionaryLocalesList(). 15271ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard if (localeList.size() == 1) { 15371ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard final String locale = (String)localeList.toArray()[0]; 15471ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard userDictionaryPreference.getExtras().putString("locale", locale); 15571ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard } 156c087e35d7f9a968ea035e931aa318cf36a3e1b90Jean Chalard } else { 15771ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard userDictionaryPreference.setTitle(R.string.user_dict_multiple_settings_title); 15871ad1f4e3e819a40a830a148a2d1bd7b10fed09dJean Chalard userDictionaryPreference.setFragment(UserDictionaryList.class.getName()); 159c087e35d7f9a968ea035e931aa318cf36a3e1b90Jean Chalard } 160c087e35d7f9a968ea035e931aa318cf36a3e1b90Jean Chalard } 161c087e35d7f9a968ea035e931aa318cf36a3e1b90Jean Chalard 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 163d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 1653fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (!mIsOnlyImeSettings) { 1663fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (mLanguagePref != null) { 1673fa13775e805df6cc7244d3f93105c5d3a5b748fsatok Configuration conf = getResources().getConfiguration(); 1683fa13775e805df6cc7244d3f93105c5d3a5b748fsatok String locale = conf.locale.getDisplayName(conf.locale); 1693fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (locale != null && locale.length() > 1) { 1703fa13775e805df6cc7244d3f93105c5d3a5b748fsatok locale = Character.toUpperCase(locale.charAt(0)) + locale.substring(1); 1713fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mLanguagePref.setSummary(locale); 1723fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 1733fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 1743fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 1753fa13775e805df6cc7244d3f93105c5d3a5b748fsatok updateUserDictionaryPreference(findPreference(KEY_USER_DICTIONARY_SETTINGS)); 1763fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (SHOW_INPUT_METHOD_SWITCHER_SETTINGS) { 1773fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mShowInputMethodSelectorPref.setOnPreferenceChangeListener(this); 1783fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 1793fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 1803fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 1813fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // Hard keyboard 1823fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (mHaveHardKeyboard) { 1833fa13775e805df6cc7244d3f93105c5d3a5b748fsatok for (int i = 0; i < sHardKeyboardKeys.length; ++i) { 1843fa13775e805df6cc7244d3f93105c5d3a5b748fsatok InputMethodPreference chkPref = (InputMethodPreference) 1853fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mHardKeyboardCategory.findPreference(sHardKeyboardKeys[i]); 1863fa13775e805df6cc7244d3f93105c5d3a5b748fsatok chkPref.setChecked( 1873fa13775e805df6cc7244d3f93105c5d3a5b748fsatok System.getInt(getContentResolver(), sSystemSettingNames[i], 1) > 0); 1880f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani } 1890f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani } 190c88a7ff1efd10374974e45768bde1658cc1d8483satok 1913fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // IME 1923fa13775e805df6cc7244d3f93105c5d3a5b748fsatok InputMethodAndSubtypeUtil.loadInputMethodSubtypeList( 1933fa13775e805df6cc7244d3f93105c5d3a5b748fsatok this, getContentResolver(), mImis, null); 1943fa13775e805df6cc7244d3f93105c5d3a5b748fsatok updateActiveInputMethodsSummary(); 195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 198d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onPause() { 199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 2003fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (SHOW_INPUT_METHOD_SWITCHER_SETTINGS) { 2013fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mShowInputMethodSelectorPref.setOnPreferenceChangeListener(null); 2023fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2033fa13775e805df6cc7244d3f93105c5d3a5b748fsatok InputMethodAndSubtypeUtil.saveInputMethodSubtypeList( 2043fa13775e805df6cc7244d3f93105c5d3a5b748fsatok this, getContentResolver(), mImis, mHaveHardKeyboard); 205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 20786997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project @Override 20886997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Input Method stuff 210a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang if (Utils.isMonkeyRunning()) { 211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 213c88a7ff1efd10374974e45768bde1658cc1d8483satok if (preference instanceof PreferenceScreen) { 214c88c6bbcd0d3901fe9f61bab82a17ec49ad62e6dDaisuke Miyakawa if (preference.getFragment() != null) { 215c88c6bbcd0d3901fe9f61bab82a17ec49ad62e6dDaisuke Miyakawa // Fragment will be handled correctly by the super class. 216c88a7ff1efd10374974e45768bde1658cc1d8483satok } else if (KEY_CURRENT_INPUT_METHOD.equals(preference.getKey())) { 217f58090d5224fa03e8f4d8a980306952686a152f0Daisuke Miyakawa final InputMethodManager imm = (InputMethodManager) 218f58090d5224fa03e8f4d8a980306952686a152f0Daisuke Miyakawa getSystemService(Context.INPUT_METHOD_SERVICE); 219103cc7da5f3ff9a46aa0b1dd9fcd0c7759c2d096satok imm.showInputMethodPicker(); 220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2213fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } else if (preference instanceof CheckBoxPreference) { 2223fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final CheckBoxPreference chkPref = (CheckBoxPreference) preference; 2233fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (mHaveHardKeyboard) { 2243fa13775e805df6cc7244d3f93105c5d3a5b748fsatok for (int i = 0; i < sHardKeyboardKeys.length; ++i) { 2253fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (chkPref == mHardKeyboardCategory.findPreference(sHardKeyboardKeys[i])) { 2263fa13775e805df6cc7244d3f93105c5d3a5b748fsatok System.putInt(getContentResolver(), sSystemSettingNames[i], 2273fa13775e805df6cc7244d3f93105c5d3a5b748fsatok chkPref.isChecked() ? 1 : 0); 2283fa13775e805df6cc7244d3f93105c5d3a5b748fsatok return true; 2293fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2303fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2313fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 236c88a7ff1efd10374974e45768bde1658cc1d8483satok private void saveInputMethodSelectorVisibility(String value) { 237c88a7ff1efd10374974e45768bde1658cc1d8483satok try { 238c88a7ff1efd10374974e45768bde1658cc1d8483satok int intValue = Integer.valueOf(value); 239c88a7ff1efd10374974e45768bde1658cc1d8483satok Settings.Secure.putInt(getContentResolver(), 240c88a7ff1efd10374974e45768bde1658cc1d8483satok Settings.Secure.INPUT_METHOD_SELECTOR_VISIBILITY, intValue); 241c88a7ff1efd10374974e45768bde1658cc1d8483satok updateInputMethodSelectorSummary(intValue); 242c88a7ff1efd10374974e45768bde1658cc1d8483satok } catch(NumberFormatException e) { 243c88a7ff1efd10374974e45768bde1658cc1d8483satok } 244c88a7ff1efd10374974e45768bde1658cc1d8483satok } 245c88a7ff1efd10374974e45768bde1658cc1d8483satok 246c88a7ff1efd10374974e45768bde1658cc1d8483satok private int loadInputMethodSelectorVisibility() { 247c88a7ff1efd10374974e45768bde1658cc1d8483satok return Settings.Secure.getInt(getContentResolver(), 248c88a7ff1efd10374974e45768bde1658cc1d8483satok Settings.Secure.INPUT_METHOD_SELECTOR_VISIBILITY, 249c88a7ff1efd10374974e45768bde1658cc1d8483satok mDefaultInputMethodSelectorVisibility); 250c88a7ff1efd10374974e45768bde1658cc1d8483satok } 251c88a7ff1efd10374974e45768bde1658cc1d8483satok 25220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai @Override 253c88a7ff1efd10374974e45768bde1658cc1d8483satok public boolean onPreferenceChange(Preference preference, Object value) { 2543fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (SHOW_INPUT_METHOD_SWITCHER_SETTINGS) { 2553fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (preference == mShowInputMethodSelectorPref) { 2563fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (value instanceof String) { 2573fa13775e805df6cc7244d3f93105c5d3a5b748fsatok saveInputMethodSelectorVisibility((String)value); 2583fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 259c88a7ff1efd10374974e45768bde1658cc1d8483satok } 26020108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai } 261c88a7ff1efd10374974e45768bde1658cc1d8483satok return false; 26220108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai } 26320108e2ed6d7fdc889d85702f7cbda906db141cfJiehua.Dai 2643fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private void updateActiveInputMethodsSummary() { 2653fa13775e805df6cc7244d3f93105c5d3a5b748fsatok for (Preference pref : mInputMethodPreferenceList) { 2663fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (pref instanceof InputMethodPreference) { 2673fa13775e805df6cc7244d3f93105c5d3a5b748fsatok ((InputMethodPreference)pref).updateSummary(); 2683fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2693fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2703fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2713fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 2723fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private InputMethodPreference getInputMethodPreference(InputMethodInfo imi, int imiSize) { 2733fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final PackageManager pm = getPackageManager(); 2743fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final CharSequence label = imi.loadLabel(pm); 2753fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // IME settings 2763fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final Intent intent; 2773fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final String settingsActivity = imi.getSettingsActivity(); 2783fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (!TextUtils.isEmpty(settingsActivity)) { 2793fa13775e805df6cc7244d3f93105c5d3a5b748fsatok intent = new Intent(Intent.ACTION_MAIN); 2803fa13775e805df6cc7244d3f93105c5d3a5b748fsatok intent.setClassName(imi.getPackageName(), settingsActivity); 2813fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } else { 2823fa13775e805df6cc7244d3f93105c5d3a5b748fsatok intent = null; 2833fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2843fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 2853fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // Add a check box for enabling/disabling IME 2863fa13775e805df6cc7244d3f93105c5d3a5b748fsatok InputMethodPreference pref = new InputMethodPreference(this, intent, mImm, imi, imiSize); 2873fa13775e805df6cc7244d3f93105c5d3a5b748fsatok pref.setKey(imi.getId()); 2883fa13775e805df6cc7244d3f93105c5d3a5b748fsatok pref.setTitle(label); 2893fa13775e805df6cc7244d3f93105c5d3a5b748fsatok return pref; 2903fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2913fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 2923fa13775e805df6cc7244d3f93105c5d3a5b748fsatok private void createImePreferenceHierarchy(PreferenceGroup root) { 2933fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final Preference hardKeyPref = findPreference("hard_keyboard"); 2943fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (mIsOnlyImeSettings) { 2953fa13775e805df6cc7244d3f93105c5d3a5b748fsatok getPreferenceScreen().removeAll(); 2963fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (hardKeyPref != null && mHaveHardKeyboard) { 2973fa13775e805df6cc7244d3f93105c5d3a5b748fsatok getPreferenceScreen().addPreference(hardKeyPref); 2983fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 2993fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (SHOW_INPUT_METHOD_SWITCHER_SETTINGS) { 3003fa13775e805df6cc7244d3f93105c5d3a5b748fsatok getPreferenceScreen().addPreference(mShowInputMethodSelectorPref); 3013fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 3023fa13775e805df6cc7244d3f93105c5d3a5b748fsatok getPreferenceScreen().addPreference(root); 3033fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 3043fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (hardKeyPref != null) { 3053fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (mHaveHardKeyboard) { 3063fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mHardKeyboardCategory = (PreferenceCategory) hardKeyPref; 3073fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } else { 3083fa13775e805df6cc7244d3f93105c5d3a5b748fsatok getPreferenceScreen().removePreference(hardKeyPref); 3093fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 3103fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 3113fa13775e805df6cc7244d3f93105c5d3a5b748fsatok root.removeAll(); 3123fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mInputMethodPreferenceList.clear(); 3133fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 3143fa13775e805df6cc7244d3f93105c5d3a5b748fsatok if (!mIsOnlyImeSettings) { 3153fa13775e805df6cc7244d3f93105c5d3a5b748fsatok // Current IME selection 3163fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final PreferenceScreen currentIme = new PreferenceScreen(getActivity(), null); 3173fa13775e805df6cc7244d3f93105c5d3a5b748fsatok currentIme.setKey(KEY_CURRENT_INPUT_METHOD); 3183fa13775e805df6cc7244d3f93105c5d3a5b748fsatok currentIme.setTitle(getResources().getString(R.string.current_input_method)); 3193fa13775e805df6cc7244d3f93105c5d3a5b748fsatok root.addPreference(currentIme); 3203fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 3213fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 3223fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final int N = (mImis == null ? 0 : mImis.size()); 3233fa13775e805df6cc7244d3f93105c5d3a5b748fsatok for (int i = 0; i < N; ++i) { 3243fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final InputMethodInfo imi = mImis.get(i); 3253fa13775e805df6cc7244d3f93105c5d3a5b748fsatok final InputMethodPreference pref = getInputMethodPreference(imi, N); 3263fa13775e805df6cc7244d3f93105c5d3a5b748fsatok mInputMethodPreferenceList.add(pref); 3273fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 3283fa13775e805df6cc7244d3f93105c5d3a5b748fsatok 3293fa13775e805df6cc7244d3f93105c5d3a5b748fsatok Collections.sort(mInputMethodPreferenceList); 3303fa13775e805df6cc7244d3f93105c5d3a5b748fsatok for (int i = 0; i < N; ++i) { 3313fa13775e805df6cc7244d3f93105c5d3a5b748fsatok root.addPreference(mInputMethodPreferenceList.get(i)); 3323fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 3333fa13775e805df6cc7244d3f93105c5d3a5b748fsatok } 334afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 335