From c88a7ff1efd10374974e45768bde1658cc1d8483 Mon Sep 17 00:00:00 2001 From: satok Date: Wed, 15 Dec 2010 04:57:24 +0900 Subject: Implement new design for settings of InputMethods Change-Id: I82392e4a028abe2d588622a7e89fd035966f603a --- .../InputMethodAndLanguageSettings.java | 216 ++++++--------------- 1 file changed, 57 insertions(+), 159 deletions(-) (limited to 'src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java') 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 mInputMethodProperties; - private List 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(); - 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 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; } } -- cgit v1.2.3