InputMethodAndLanguageSettings.java revision 0f2e6dec7c8dc136783eacb5b62c9d3248c4845a
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 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Projectimport android.app.AlertDialog; 20e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Projectimport android.app.Dialog; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 22e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Projectimport android.content.DialogInterface; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 24e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Projectimport android.content.pm.ApplicationInfo; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Configuration; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 2780a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Projectimport android.os.Environment; 28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemProperties; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceActivity; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceGroup; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextUtils; 36e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Projectimport android.view.View.OnClickListener; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.inputmethod.InputMethodInfo; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.inputmethod.InputMethodManager; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4086997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Projectimport java.util.ArrayList; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.HashSet; 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.List; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class LanguageSettings extends PreferenceActivity { 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 460f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani private static final String KEY_PHONE_LANGUAGE = "phone_language"; 4786997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project private boolean mHaveHardKeyboard; 4886997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private List<InputMethodInfo> mInputMethodProperties; 5086997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project private List<CheckBoxPreference> mCheckboxes; 510f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani private Preference mLanguagePref; 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final TextUtils.SimpleStringSplitter mStringColonSplitter 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project = new TextUtils.SimpleStringSplitter(':'); 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String mLastInputMethodId; 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String mLastTickedInputMethodId; 5880a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project static public String getInputMethodIdFromKey(String key) { 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return key; 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle icicle) { 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.language_settings); 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (getAssets().getLocales().length == 1) { 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getPreferenceScreen(). 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project removePreference(findPreference("language_category")); 720f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani } else { 730f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani mLanguagePref = findPreference(KEY_PHONE_LANGUAGE); 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 7586997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Configuration config = getResources().getConfiguration(); 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (config.keyboard != Configuration.KEYBOARD_QWERTY) { 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getPreferenceScreen().removePreference( 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getPreferenceScreen().findPreference("hardkeyboard_category")); 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 8186997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project mHaveHardKeyboard = true; 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 8386997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project mCheckboxes = new ArrayList<CheckBoxPreference>(); 84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project onCreateIMM(); 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 8780a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project private boolean isSystemIme(InputMethodInfo property) { 88e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project return (property.getServiceInfo().applicationInfo.flags 89e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project & ApplicationInfo.FLAG_SYSTEM) != 0; 9080a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project } 9180a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project 92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void onCreateIMM() { 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mInputMethodProperties = imm.getInputMethodList(); 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastInputMethodId = Settings.Secure.getString(getContentResolver(), 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.DEFAULT_INPUT_METHOD); 99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceGroup textCategory = (PreferenceGroup) findPreference("text_category"); 101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int N = (mInputMethodProperties == null ? 0 : mInputMethodProperties 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .size()); 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project for (int i = 0; i < N; ++i) { 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project InputMethodInfo property = mInputMethodProperties.get(i); 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String prefKey = property.getId(); 107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CharSequence label = property.loadLabel(getPackageManager()); 10980a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project boolean systemIME = isSystemIme(property); 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Add a check box. 11180a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project // Don't show the toggle if it's the only keyboard in the system, or it's a system IME. 11280a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project if (mHaveHardKeyboard || (N > 1 && !systemIME)) { 11386997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project CheckBoxPreference chkbxPref = new CheckBoxPreference(this); 11486997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project chkbxPref.setKey(prefKey); 11586997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project chkbxPref.setTitle(label); 11686997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project textCategory.addPreference(chkbxPref); 11786997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project mCheckboxes.add(chkbxPref); 11886997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project } 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // If setting activity is available, add a setting screen entry. 121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (null != property.getSettingsActivity()) { 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen prefScreen = new PreferenceScreen(this, null); 123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project prefScreen.setKey(property.getSettingsActivity()); 12486997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project prefScreen.setTitle(label); 12586997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project if (N == 1) { 12686997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project prefScreen.setSummary(getString(R.string.onscreen_keyboard_settings_summary)); 12786997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project } else { 12886997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project CharSequence settingsLabel = getResources().getString( 12986997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project R.string.input_methods_settings_label_format, label); 13086997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project prefScreen.setSummary(settingsLabel); 13186997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project } 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project textCategory.addPreference(prefScreen); 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 13680a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onResume() { 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final HashSet<String> enabled = new HashSet<String>(); 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String enabledStr = Settings.Secure.getString(getContentResolver(), 143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.ENABLED_INPUT_METHODS); 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (enabledStr != null) { 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final TextUtils.SimpleStringSplitter splitter = mStringColonSplitter; 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project splitter.setString(enabledStr); 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project while (splitter.hasNext()) { 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project enabled.add(splitter.next()); 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Update the statuses of the Check Boxes. 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int N = mInputMethodProperties.size(); 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project for (int i = 0; i < N; ++i) { 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String id = mInputMethodProperties.get(i).getId(); 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference pref = (CheckBoxPreference) findPreference(mInputMethodProperties 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .get(i).getId()); 15886997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project if (pref != null) { 15986997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project pref.setChecked(enabled.contains(id)); 16086997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project } 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastTickedInputMethodId = null; 1630f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani 1640f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani if (mLanguagePref != null) { 1650f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani Configuration conf = getResources().getConfiguration(); 1660f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani String locale = conf.locale.getDisplayName(conf.locale); 1670f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani if (locale != null && locale.length() > 1) { 1680f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani locale = Character.toUpperCase(locale.charAt(0)) + locale.substring(1); 1690f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani mLanguagePref.setSummary(locale); 1700f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani } 1710f2e6dec7c8dc136783eacb5b62c9d3248c4845aAmith Yamasani } 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onPause() { 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project StringBuilder builder = new StringBuilder(256); 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int firstEnabled = -1; 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int N = mInputMethodProperties.size(); 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project for (int i = 0; i < N; ++i) { 18380a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project final InputMethodInfo property = mInputMethodProperties.get(i); 18480a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project final String id = property.getId(); 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference pref = (CheckBoxPreference) findPreference(id); 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project boolean hasIt = id.equals(mLastInputMethodId); 18780a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project boolean systemIme = isSystemIme(property); 18880a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project if (((N == 1 || systemIme) && !mHaveHardKeyboard) 18980a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project || (pref != null && pref.isChecked())) { 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (builder.length() > 0) builder.append(':'); 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project builder.append(id); 192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (firstEnabled < 0) { 193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project firstEnabled = i; 194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (hasIt) { 196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastInputMethodId = mLastTickedInputMethodId; 197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // If the last input method is unset, set it as the first enabled one. 201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (null == mLastInputMethodId || "".equals(mLastInputMethodId)) { 202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (firstEnabled >= 0) { 203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastInputMethodId = mInputMethodProperties.get(firstEnabled).getId(); 204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastInputMethodId = null; 206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.putString(getContentResolver(), 210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.ENABLED_INPUT_METHODS, builder.toString()); 211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.putString(getContentResolver(), 212e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project Settings.Secure.DEFAULT_INPUT_METHOD, 213e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project mLastInputMethodId != null ? mLastInputMethodId : ""); 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 21686997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project @Override 21786997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 21886997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project 219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Input Method stuff 220a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang if (Utils.isMonkeyRunning()) { 221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (preference instanceof CheckBoxPreference) { 225e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project final CheckBoxPreference chkPref = (CheckBoxPreference) preference; 226e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project final String id = getInputMethodIdFromKey(chkPref.getKey()); 227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (chkPref.isChecked()) { 228e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project InputMethodInfo selImi = null; 229e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project final int N = mInputMethodProperties.size(); 230e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project for (int i=0; i<N; i++) { 231e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project InputMethodInfo imi = mInputMethodProperties.get(i); 232e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project if (id.equals(imi.getId())) { 233e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project selImi = imi; 234e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project if (isSystemIme(imi)) { 235e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project // This is a built-in IME, so no need to warn. 236e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project mLastTickedInputMethodId = id; 237e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 238e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 239e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 240e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 241e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project chkPref.setChecked(false); 242e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project if (selImi == null) { 243e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 244e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 245e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project AlertDialog d = (new AlertDialog.Builder(this)) 246e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setTitle(android.R.string.dialog_alert_title) 247e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setIcon(android.R.drawable.ic_dialog_alert) 248e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setMessage(getString(R.string.ime_security_warning, 249e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project selImi.getServiceInfo().applicationInfo.loadLabel( 250e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project getPackageManager()))) 251e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setCancelable(true) 252e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setPositiveButton(android.R.string.ok, 253e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project new DialogInterface.OnClickListener() { 254e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 255e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project chkPref.setChecked(true); 256e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project mLastTickedInputMethodId = id; 257e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 258e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project 259e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project }) 260e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setNegativeButton(android.R.string.cancel, 261e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project new DialogInterface.OnClickListener() { 262e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 263e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 264e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project 265e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project }) 266e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .create(); 267e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project d.show(); 268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (id.equals(mLastTickedInputMethodId)) { 269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastTickedInputMethodId = null; 270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference instanceof PreferenceScreen) { 272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (preference.getIntent() == null) { 273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen pref = (PreferenceScreen) preference; 274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String activityName = pref.getKey(); 275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String packageName = activityName.substring(0, activityName 276afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .lastIndexOf(".")); 277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (activityName.length() > 0) { 278afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent i = new Intent(Intent.ACTION_MAIN); 279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project i.setClassName(packageName, activityName); 280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project startActivity(i); 281afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 288