diff options
Diffstat (limited to 'src/com/android/settings/LanguageSettings.java')
-rw-r--r-- | src/com/android/settings/LanguageSettings.java | 161 |
1 files changed, 160 insertions, 1 deletions
diff --git a/src/com/android/settings/LanguageSettings.java b/src/com/android/settings/LanguageSettings.java index b406df6..8463d26 100644 --- a/src/com/android/settings/LanguageSettings.java +++ b/src/com/android/settings/LanguageSettings.java @@ -17,14 +17,24 @@ package com.android.settings; import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; +import android.os.SystemProperties; +import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; -import android.preference.CheckBoxPreference; +import android.provider.Settings; import android.provider.Settings.System; +import android.text.TextUtils; +import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodManager; + +import java.util.HashSet; +import java.util.List; public class LanguageSettings extends PreferenceActivity { @@ -48,6 +58,18 @@ public class LanguageSettings extends PreferenceActivity { 1, }; + private List<InputMethodInfo> mInputMethodProperties; + + final TextUtils.SimpleStringSplitter mStringColonSplitter + = new TextUtils.SimpleStringSplitter(':'); + + private String mLastInputMethodId; + private String mLastTickedInputMethodId; + + static public String getInputMethodIdFromKey(String key) { + return key; + } + @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -71,10 +93,117 @@ public class LanguageSettings extends PreferenceActivity { mSettingsDefault[i]) > 0); } } + + onCreateIMM(); + } + + private void onCreateIMM() { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + + mInputMethodProperties = imm.getInputMethodList(); + + mLastInputMethodId = Settings.Secure.getString(getContentResolver(), + Settings.Secure.DEFAULT_INPUT_METHOD); + + PreferenceGroup textCategory = (PreferenceGroup) findPreference("text_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(getPackageManager()); + + // Add a check box. + CheckBoxPreference chkbxPref = new CheckBoxPreference(this); + chkbxPref.setKey(prefKey); + chkbxPref.setTitle(label); + textCategory.addPreference(chkbxPref); + + // If setting activity is available, add a setting screen entry. + if (null != property.getSettingsActivity()) { + PreferenceScreen prefScreen = new PreferenceScreen(this, null); + prefScreen.setKey(property.getSettingsActivity()); + CharSequence settingsLabel = getResources().getString( + R.string.input_methods_settings_label_format, label); + prefScreen.setTitle(settingsLabel); + textCategory.addPreference(prefScreen); + } + } } @Override + protected void onResume() { + super.onResume(); + + final HashSet<String> enabled = new HashSet<String>(); + String enabledStr = Settings.Secure.getString(getContentResolver(), + Settings.Secure.ENABLED_INPUT_METHODS); + if (enabledStr != null) { + final TextUtils.SimpleStringSplitter splitter = mStringColonSplitter; + splitter.setString(enabledStr); + while (splitter.hasNext()) { + enabled.add(splitter.next()); + } + } + + // Update the statuses of the Check Boxes. + int N = mInputMethodProperties.size(); + for (int i = 0; i < N; ++i) { + final String id = mInputMethodProperties.get(i).getId(); + CheckBoxPreference pref = (CheckBoxPreference) findPreference(mInputMethodProperties + .get(i).getId()); + pref.setChecked(enabled.contains(id)); + } + mLastTickedInputMethodId = null; + } + + @Override + protected void onPause() { + super.onPause(); + + StringBuilder builder = new StringBuilder(256); + + boolean haveLastInputMethod = false; + + int firstEnabled = -1; + int N = mInputMethodProperties.size(); + for (int i = 0; i < N; ++i) { + final String id = mInputMethodProperties.get(i).getId(); + CheckBoxPreference pref = (CheckBoxPreference) findPreference(id); + boolean hasIt = id.equals(mLastInputMethodId); + if (pref.isChecked()) { + if (builder.length() > 0) builder.append(':'); + builder.append(id); + if (firstEnabled < 0) { + firstEnabled = i; + } + if (hasIt) haveLastInputMethod = true; + } else if (hasIt) { + mLastInputMethodId = mLastTickedInputMethodId; + } + } + + // If the last input method is unset, set it as the first enabled one. + if (null == mLastInputMethodId || "".equals(mLastInputMethodId)) { + if (firstEnabled >= 0) { + mLastInputMethodId = mInputMethodProperties.get(firstEnabled).getId(); + } else { + mLastInputMethodId = null; + } + } + + Settings.Secure.putString(getContentResolver(), + Settings.Secure.ENABLED_INPUT_METHODS, builder.toString()); + Settings.Secure.putString(getContentResolver(), + Settings.Secure.DEFAULT_INPUT_METHOD, mLastInputMethodId); + } + + @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + + // Physical keyboard stuff for (int i = 0; i < mSettingsUiKey.length; i++) { if (mSettingsUiKey[i].equals(preference.getKey())) { System.putInt(getContentResolver(), mSettingsSystemId[i], @@ -82,6 +211,36 @@ public class LanguageSettings extends PreferenceActivity { return true; } } + + // Input Method stuff + // Those monkeys kept committing suicide, so we add this property + // to disable this functionality + if (!TextUtils.isEmpty(SystemProperties.get("ro.monkey"))) { + return false; + } + + if (preference instanceof CheckBoxPreference) { + CheckBoxPreference chkPref = (CheckBoxPreference) preference; + String id = getInputMethodIdFromKey(chkPref.getKey()); + if (chkPref.isChecked()) { + mLastTickedInputMethodId = id; + } else if (id.equals(mLastTickedInputMethodId)) { + mLastTickedInputMethodId = null; + } + } else if (preference instanceof PreferenceScreen) { + if (preference.getIntent() == null) { + PreferenceScreen pref = (PreferenceScreen) preference; + String activityName = pref.getKey(); + String packageName = activityName.substring(0, activityName + .lastIndexOf(".")); + if (activityName.length() > 0) { + Intent i = new Intent(Intent.ACTION_MAIN); + i.setClassName(packageName, activityName); + startActivity(i); + } + } + } + return super.onPreferenceTreeClick(preferenceScreen, preference); } |