From b9509d046c911b7b334aa45f693c49a7182ef470 Mon Sep 17 00:00:00 2001 From: satok Date: Mon, 12 Sep 2011 18:17:14 +0900 Subject: [PATCH] Update the current IME label Bug: 5069983 Change-Id: I84d6ac7c39b5f3a035aa04c35065280a14024c47 --- res/layout/preference_inputmethod.xml | 2 - .../InputMethodAndLanguageSettings.java | 41 ++++++++++++++++++- .../InputMethodAndSubtypeUtil.java | 25 +++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/res/layout/preference_inputmethod.xml b/res/layout/preference_inputmethod.xml index 0edc060de62..0e0c1ef209e 100644 --- a/res/layout/preference_inputmethod.xml +++ b/res/layout/preference_inputmethod.xml @@ -33,13 +33,11 @@ android:id="@android:id/widget_frame" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_marginLeft="10dip" android:gravity="center_vertical" android:orientation="vertical" /> mImis; private boolean mIsOnlyImeSettings; + private Handler mHandler; + @SuppressWarnings("unused") + private SettingsObserver mSettingsObserver; @Override public void onCreate(Bundle icicle) { @@ -122,6 +127,9 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment if (scp != null) { scp.setFragmentIntent(this, intent); } + + mHandler = new Handler(); + mSettingsObserver = new SettingsObserver(mHandler, getActivity()); } private void updateInputMethodSelectorSummary(int value) { @@ -269,6 +277,22 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment ((InputMethodPreference)pref).updateSummary(); } } + updateCurrentImeName(); + } + + private void updateCurrentImeName() { + final Context context = getActivity(); + if (context == null || mImm == null) return; + final Preference curPref = getPreferenceScreen().findPreference(KEY_CURRENT_INPUT_METHOD); + if (curPref != null) { + final CharSequence curIme = InputMethodAndSubtypeUtil.getCurrentInputMethodName( + context, getContentResolver(), mImm, mImis, getPackageManager()); + if (!TextUtils.isEmpty(curIme)) { + synchronized(this) { + curPref.setSummary(curIme); + } + } + } } private InputMethodPreference getInputMethodPreference(InputMethodInfo imi, int imiSize) { @@ -333,4 +357,19 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment root.addPreference(mInputMethodPreferenceList.get(i)); } } + + private class SettingsObserver extends ContentObserver { + public SettingsObserver(Handler handler, Context context) { + super(handler); + final ContentResolver cr = context.getContentResolver(); + cr.registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.DEFAULT_INPUT_METHOD), false, this); + cr.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE), false, this); + } + + @Override public void onChange(boolean selfChange) { + updateCurrentImeName(); + } + } } diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java index 413b5b4e9c3..df58ec0c90d 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java +++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java @@ -19,7 +19,9 @@ package com.android.settings.inputmethod; import com.android.settings.SettingsPreferenceFragment; import android.content.ContentResolver; +import android.content.Context; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceScreen; @@ -28,6 +30,7 @@ import android.provider.Settings.SettingNotFoundException; import android.text.TextUtils; import android.util.Log; import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; import java.util.HashMap; @@ -148,6 +151,28 @@ public class InputMethodAndSubtypeUtil { return set; } + public static CharSequence getCurrentInputMethodName(Context context, ContentResolver resolver, + InputMethodManager imm, List imis, PackageManager pm) { + if (resolver == null || imis == null) return null; + final String currentInputMethodId = Settings.Secure.getString(resolver, + Settings.Secure.DEFAULT_INPUT_METHOD); + if (TextUtils.isEmpty(currentInputMethodId)) return null; + for (InputMethodInfo imi : imis) { + if (currentInputMethodId.equals(imi.getId())) { + final InputMethodSubtype subtype = imm.getCurrentInputMethodSubtype(); + final CharSequence imiLabel = imi.loadLabel(pm); + final CharSequence summary = subtype != null + ? TextUtils.concat(subtype.getDisplayName(context, + imi.getPackageName(), imi.getServiceInfo().applicationInfo), + (TextUtils.isEmpty(imiLabel) ? + "" : " - " + imiLabel)) + : imiLabel; + return summary; + } + } + return null; + } + public static void saveInputMethodSubtypeList(SettingsPreferenceFragment context, ContentResolver resolver, List inputMethodInfos, boolean hasHardKeyboard) {