summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
diff options
context:
space:
mode:
authorsatok <satok@google.com>2010-12-15 04:57:24 +0900
committersatok <satok@google.com>2010-12-17 18:32:36 +0900
commitc88a7ff1efd10374974e45768bde1658cc1d8483 (patch)
treec3b99796891021602f229f666147bd2e9cafc5fb /src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
parent9be84b15961e0ef452c8f859ffe1ba57581bb473 (diff)
downloadpackages_apps_Settings-c88a7ff1efd10374974e45768bde1658cc1d8483.tar.gz
packages_apps_Settings-c88a7ff1efd10374974e45768bde1658cc1d8483.tar.bz2
packages_apps_Settings-c88a7ff1efd10374974e45768bde1658cc1d8483.zip
Implement new design for settings of InputMethods
Change-Id: I82392e4a028abe2d588622a7e89fd035966f603a
Diffstat (limited to 'src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java')
-rw-r--r--src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java216
1 files changed, 57 insertions, 159 deletions
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index ef5920102..117bec5d2 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -26,127 +26,74 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
+import android.provider.Settings;
import android.text.TextUtils;
+import android.util.Log;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
-public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment {
+public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
+ implements Preference.OnPreferenceChangeListener{
private static final String KEY_PHONE_LANGUAGE = "phone_language";
- private static final String KEY_INPUT_METHOD = "input_method";
- private static final String KEY_KEYBOARD_SETTINGS_CATEGORY = "keyboard_settings_category";
- private static final String KEY_HARDKEYBOARD_CATEGORY = "hardkeyboard_category";
- private boolean mHaveHardKeyboard;
+ private static final String KEY_CURRENT_INPUT_METHOD = "current_input_method";
+ private static final String KEY_INPUT_METHOD_SELECTOR = "input_method_selector";
- private List<InputMethodInfo> mInputMethodProperties;
- private List<CheckBoxPreference> mCheckboxes;
+ private int mDefaultInputMethodSelectorVisibility = 0;
+ private ListPreference mShowInputMethodSelectorPref;
private Preference mLanguagePref;
- final TextUtils.SimpleStringSplitter mStringColonSplitter
- = new TextUtils.SimpleStringSplitter(':');
-
- private AlertDialog mDialog = null;
-
- static public String getInputMethodIdFromKey(String key) {
- return key;
- }
-
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.language_settings);
- if (getActivity().getAssets().getLocales().length == 1) {
- getPreferenceScreen().
- removePreference(findPreference(KEY_PHONE_LANGUAGE));
- } else {
- mLanguagePref = findPreference(KEY_PHONE_LANGUAGE);
+ try {
+ mDefaultInputMethodSelectorVisibility = Integer.valueOf(
+ getString(R.string.input_method_selector_visibility_default_value));
+ } catch (NumberFormatException e) {
}
- Configuration config = getResources().getConfiguration();
- if (config.keyboard != Configuration.KEYBOARD_QWERTY) {
- getPreferenceScreen().removePreference(
- getPreferenceScreen().findPreference(KEY_HARDKEYBOARD_CATEGORY));
+ if (getActivity().getAssets().getLocales().length == 1) {
+ // No "Select language" pref if there's only one system locale available.
+ getPreferenceScreen().removePreference(findPreference(KEY_PHONE_LANGUAGE));
} else {
- mHaveHardKeyboard = true;
+ mLanguagePref = findPreference(KEY_PHONE_LANGUAGE);
}
- mCheckboxes = new ArrayList<CheckBoxPreference>();
- onCreateIMM();
+ mShowInputMethodSelectorPref = (ListPreference)findPreference(
+ KEY_INPUT_METHOD_SELECTOR);
+ mShowInputMethodSelectorPref.setOnPreferenceChangeListener(this);
+ // TODO: Update current input method name on summary
+ updateInputMethodSelectorSummary(loadInputMethodSelectorVisibility());
new VoiceInputOutputSettings(this).onCreate();
}
- private boolean isSystemIme(InputMethodInfo property) {
- return (property.getServiceInfo().applicationInfo.flags
- & ApplicationInfo.FLAG_SYSTEM) != 0;
- }
-
- private void onCreateIMM() {
- InputMethodManager imm = (InputMethodManager) getSystemService(
- Context.INPUT_METHOD_SERVICE);
-
- mInputMethodProperties = imm.getInputMethodList();
-
- PreferenceGroup keyboardSettingsCategory = (PreferenceGroup) findPreference(
- KEY_KEYBOARD_SETTINGS_CATEGORY);
-
- int N = (mInputMethodProperties == null ? 0 : mInputMethodProperties
- .size());
- for (int i = 0; i < N; ++i) {
- InputMethodInfo property = mInputMethodProperties.get(i);
- String prefKey = property.getId();
-
- CharSequence label = property.loadLabel(getActivity().getPackageManager());
- boolean systemIME = isSystemIme(property);
- // Add a check box.
- // Don't show the toggle if it's the only keyboard in the system, or it's a system IME.
- if (mHaveHardKeyboard || (N > 1 && !systemIME)) {
- CheckBoxPreference chkbxPref = new CheckBoxPreference(getActivity());
- chkbxPref.setKey(prefKey);
- chkbxPref.setTitle(label);
- keyboardSettingsCategory.addPreference(chkbxPref);
- mCheckboxes.add(chkbxPref);
- }
-
- // If setting activity is available, add a setting screen entry.
- if (null != property.getSettingsActivity()) {
- PreferenceScreen prefScreen = new PreferenceScreen(getActivity(), null);
- String settingsActivity = property.getSettingsActivity();
- if (settingsActivity.lastIndexOf("/") < 0) {
- settingsActivity = property.getPackageName() + "/" + settingsActivity;
- }
- prefScreen.setKey(settingsActivity);
- prefScreen.setTitle(label);
- if (N == 1) {
- prefScreen.setSummary(getResources().getString(
- R.string.onscreen_keyboard_settings_summary));
- } else {
- CharSequence settingsLabel = getResources().getString(
- R.string.input_methods_settings_label_format, label);
- prefScreen.setSummary(settingsLabel);
- }
- keyboardSettingsCategory.addPreference(prefScreen);
- }
+ private void updateInputMethodSelectorSummary(int value) {
+ String[] inputMethodSelectorTitles = getResources().getStringArray(
+ R.array.input_method_selector_titles);
+ if (inputMethodSelectorTitles.length > value) {
+ mShowInputMethodSelectorPref.setSummary(inputMethodSelectorTitles[value]);
+ mShowInputMethodSelectorPref.setValue(String.valueOf(value));
}
}
@Override
public void onResume() {
super.onResume();
-
- InputMethodAndSubtypeUtil.loadInputMethodSubtypeList(
- this, getContentResolver(), mInputMethodProperties);
-
if (mLanguagePref != null) {
Configuration conf = getResources().getConfiguration();
String locale = conf.locale.getDisplayName(conf.locale);
@@ -155,107 +102,58 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment {
mLanguagePref.setSummary(locale);
}
}
+
+ mShowInputMethodSelectorPref.setOnPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
- InputMethodAndSubtypeUtil.saveInputMethodSubtypeList(this, getContentResolver(),
- mInputMethodProperties, mHaveHardKeyboard);
+ mShowInputMethodSelectorPref.setOnPreferenceChangeListener(null);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-
// Input Method stuff
if (Utils.isMonkeyRunning()) {
return false;
}
-
- if (preference instanceof CheckBoxPreference) {
- final CheckBoxPreference chkPref = (CheckBoxPreference) preference;
- final String id = getInputMethodIdFromKey(chkPref.getKey());
- if (chkPref.isChecked()) {
- InputMethodInfo selImi = null;
- final int N = mInputMethodProperties.size();
- for (int i=0; i<N; i++) {
- InputMethodInfo imi = mInputMethodProperties.get(i);
- if (id.equals(imi.getId())) {
- selImi = imi;
- if (isSystemIme(imi)) {
- // This is a built-in IME, so no need to warn.
- return super.onPreferenceTreeClick(preferenceScreen, preference);
- }
- }
- }
- chkPref.setChecked(false);
- if (selImi == null) {
- return super.onPreferenceTreeClick(preferenceScreen, preference);
- }
- if (mDialog == null) {
- // TODO: DialogFragment?
- mDialog = (new AlertDialog.Builder(getActivity()))
- .setTitle(android.R.string.dialog_alert_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setCancelable(true)
- .setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- chkPref.setChecked(true);
- }
-
- })
- .setNegativeButton(android.R.string.cancel,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- }
-
- })
- .create();
- } else {
- if (mDialog.isShowing()) {
- mDialog.dismiss();
- }
- }
- mDialog.setMessage(getResources().getString(
- R.string.ime_security_warning,
- selImi.getServiceInfo().applicationInfo.loadLabel(getPackageManager())));
- mDialog.show();
- }
- } else if (preference instanceof PreferenceScreen) {
+ if (preference instanceof PreferenceScreen) {
if (preference.getFragment() != null) {
// Fragment will be handled correctly by the super class.
- } else if (KEY_INPUT_METHOD.equals(preference.getKey())) {
+ } else if (KEY_CURRENT_INPUT_METHOD.equals(preference.getKey())) {
final InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showInputMethodPicker();
- } else if (preference.getIntent() == null) {
- PreferenceScreen pref = (PreferenceScreen) preference;
- String activityName = pref.getKey();
- String packageName = activityName.substring(0, activityName
- .lastIndexOf("."));
- int slash = activityName.indexOf("/");
- if (slash > 0) {
- packageName = activityName.substring(0, slash);
- activityName = activityName.substring(slash + 1);
- }
- if (activityName.length() > 0) {
- Intent i = new Intent(Intent.ACTION_MAIN);
- i.setClassName(packageName, activityName);
- startActivity(i);
- }
}
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
+ private void saveInputMethodSelectorVisibility(String value) {
+ try {
+ int intValue = Integer.valueOf(value);
+ Settings.Secure.putInt(getContentResolver(),
+ Settings.Secure.INPUT_METHOD_SELECTOR_VISIBILITY, intValue);
+ updateInputMethodSelectorSummary(intValue);
+ } catch(NumberFormatException e) {
+ }
+ }
+
+ private int loadInputMethodSelectorVisibility() {
+ return Settings.Secure.getInt(getContentResolver(),
+ Settings.Secure.INPUT_METHOD_SELECTOR_VISIBILITY,
+ mDefaultInputMethodSelectorVisibility);
+ }
+
@Override
- public void onDestroy() {
- super.onDestroy();
- if (mDialog != null) {
- mDialog.dismiss();
- mDialog = null;
+ public boolean onPreferenceChange(Preference preference, Object value) {
+ if (preference == mShowInputMethodSelectorPref) {
+ if (value instanceof String) {
+ saveInputMethodSelectorVisibility((String)value);
+ }
}
+ return false;
}
}