InputMethodAndLanguageSettings.java revision a718832e28095219a897c6e95e903c1a3fe57c12
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 4686997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project private boolean mHaveHardKeyboard; 4786997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private List<InputMethodInfo> mInputMethodProperties; 4986997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project private List<CheckBoxPreference> mCheckboxes; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final TextUtils.SimpleStringSplitter mStringColonSplitter 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project = new TextUtils.SimpleStringSplitter(':'); 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String mLastInputMethodId; 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String mLastTickedInputMethodId; 5680a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project static public String getInputMethodIdFromKey(String key) { 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return key; 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle icicle) { 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.language_settings); 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (getAssets().getLocales().length == 1) { 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getPreferenceScreen(). 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project removePreference(findPreference("language_category")); 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 7186997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Configuration config = getResources().getConfiguration(); 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (config.keyboard != Configuration.KEYBOARD_QWERTY) { 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getPreferenceScreen().removePreference( 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getPreferenceScreen().findPreference("hardkeyboard_category")); 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 7786997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project mHaveHardKeyboard = true; 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 7986997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project mCheckboxes = new ArrayList<CheckBoxPreference>(); 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project onCreateIMM(); 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 8380a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project private boolean isSystemIme(InputMethodInfo property) { 84e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project return (property.getServiceInfo().applicationInfo.flags 85e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project & ApplicationInfo.FLAG_SYSTEM) != 0; 8680a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project } 8780a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void onCreateIMM() { 89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mInputMethodProperties = imm.getInputMethodList(); 92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastInputMethodId = Settings.Secure.getString(getContentResolver(), 94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.DEFAULT_INPUT_METHOD); 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceGroup textCategory = (PreferenceGroup) findPreference("text_category"); 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int N = (mInputMethodProperties == null ? 0 : mInputMethodProperties 99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .size()); 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project for (int i = 0; i < N; ++i) { 101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project InputMethodInfo property = mInputMethodProperties.get(i); 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String prefKey = property.getId(); 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CharSequence label = property.loadLabel(getPackageManager()); 10580a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project boolean systemIME = isSystemIme(property); 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Add a check box. 10780a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project // Don't show the toggle if it's the only keyboard in the system, or it's a system IME. 10880a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project if (mHaveHardKeyboard || (N > 1 && !systemIME)) { 10986997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project CheckBoxPreference chkbxPref = new CheckBoxPreference(this); 11086997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project chkbxPref.setKey(prefKey); 11186997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project chkbxPref.setTitle(label); 11286997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project textCategory.addPreference(chkbxPref); 11386997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project mCheckboxes.add(chkbxPref); 11486997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project } 115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // If setting activity is available, add a setting screen entry. 117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (null != property.getSettingsActivity()) { 118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen prefScreen = new PreferenceScreen(this, null); 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project prefScreen.setKey(property.getSettingsActivity()); 12086997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project prefScreen.setTitle(label); 12186997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project if (N == 1) { 12286997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project prefScreen.setSummary(getString(R.string.onscreen_keyboard_settings_summary)); 12386997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project } else { 12486997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project CharSequence settingsLabel = getResources().getString( 12586997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project R.string.input_methods_settings_label_format, label); 12686997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project prefScreen.setSummary(settingsLabel); 12786997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project } 128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project textCategory.addPreference(prefScreen); 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 13280a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onResume() { 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final HashSet<String> enabled = new HashSet<String>(); 138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String enabledStr = Settings.Secure.getString(getContentResolver(), 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.ENABLED_INPUT_METHODS); 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (enabledStr != null) { 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final TextUtils.SimpleStringSplitter splitter = mStringColonSplitter; 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project splitter.setString(enabledStr); 143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project while (splitter.hasNext()) { 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project enabled.add(splitter.next()); 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Update the statuses of the Check Boxes. 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int N = mInputMethodProperties.size(); 150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project for (int i = 0; i < N; ++i) { 151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String id = mInputMethodProperties.get(i).getId(); 152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference pref = (CheckBoxPreference) findPreference(mInputMethodProperties 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .get(i).getId()); 15486997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project if (pref != null) { 15586997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project pref.setChecked(enabled.contains(id)); 15686997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project } 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastTickedInputMethodId = null; 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onPause() { 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project StringBuilder builder = new StringBuilder(256); 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int firstEnabled = -1; 168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int N = mInputMethodProperties.size(); 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project for (int i = 0; i < N; ++i) { 17080a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project final InputMethodInfo property = mInputMethodProperties.get(i); 17180a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project final String id = property.getId(); 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference pref = (CheckBoxPreference) findPreference(id); 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project boolean hasIt = id.equals(mLastInputMethodId); 17480a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project boolean systemIme = isSystemIme(property); 17580a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project if (((N == 1 || systemIme) && !mHaveHardKeyboard) 17680a7a1dbf22d689723d39bad9ba319b6f4b0201dThe Android Open Source Project || (pref != null && pref.isChecked())) { 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (builder.length() > 0) builder.append(':'); 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project builder.append(id); 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (firstEnabled < 0) { 180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project firstEnabled = i; 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (hasIt) { 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastInputMethodId = mLastTickedInputMethodId; 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // If the last input method is unset, set it as the first enabled one. 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (null == mLastInputMethodId || "".equals(mLastInputMethodId)) { 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (firstEnabled >= 0) { 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastInputMethodId = mInputMethodProperties.get(firstEnabled).getId(); 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastInputMethodId = null; 193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.putString(getContentResolver(), 197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.ENABLED_INPUT_METHODS, builder.toString()); 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.putString(getContentResolver(), 199e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project Settings.Secure.DEFAULT_INPUT_METHOD, 200e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project mLastInputMethodId != null ? mLastInputMethodId : ""); 201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 20386997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project @Override 20486997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 20586997beac8ccd3d9e1deedb4a7afe6ddeb3a0bd7The Android Open Source Project 206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Input Method stuff 207a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang if (Utils.isMonkeyRunning()) { 208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (preference instanceof CheckBoxPreference) { 212e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project final CheckBoxPreference chkPref = (CheckBoxPreference) preference; 213e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project final String id = getInputMethodIdFromKey(chkPref.getKey()); 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (chkPref.isChecked()) { 215e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project InputMethodInfo selImi = null; 216e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project final int N = mInputMethodProperties.size(); 217e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project for (int i=0; i<N; i++) { 218e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project InputMethodInfo imi = mInputMethodProperties.get(i); 219e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project if (id.equals(imi.getId())) { 220e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project selImi = imi; 221e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project if (isSystemIme(imi)) { 222e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project // This is a built-in IME, so no need to warn. 223e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project mLastTickedInputMethodId = id; 224e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 225e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 226e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 227e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 228e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project chkPref.setChecked(false); 229e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project if (selImi == null) { 230e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 231e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 232e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project AlertDialog d = (new AlertDialog.Builder(this)) 233e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setTitle(android.R.string.dialog_alert_title) 234e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setIcon(android.R.drawable.ic_dialog_alert) 235e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setMessage(getString(R.string.ime_security_warning, 236e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project selImi.getServiceInfo().applicationInfo.loadLabel( 237e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project getPackageManager()))) 238e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setCancelable(true) 239e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setPositiveButton(android.R.string.ok, 240e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project new DialogInterface.OnClickListener() { 241e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 242e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project chkPref.setChecked(true); 243e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project mLastTickedInputMethodId = id; 244e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 245e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project 246e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project }) 247e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .setNegativeButton(android.R.string.cancel, 248e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project new DialogInterface.OnClickListener() { 249e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 250e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project } 251e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project 252e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project }) 253e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project .create(); 254e6dd1fa1851302710ac7845d25d8ad8a5b6ee438The Android Open Source Project d.show(); 255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (id.equals(mLastTickedInputMethodId)) { 256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLastTickedInputMethodId = null; 257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference instanceof PreferenceScreen) { 259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (preference.getIntent() == null) { 260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen pref = (PreferenceScreen) preference; 261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String activityName = pref.getKey(); 262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String packageName = activityName.substring(0, activityName 263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .lastIndexOf(".")); 264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (activityName.length() > 0) { 265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent i = new Intent(Intent.ACTION_MAIN); 266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project i.setClassName(packageName, activityName); 267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project startActivity(i); 268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 275