Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0737b164 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I959a6f46 into eclair

* changes:
  Fix bug	2194213: Non-default system IMEs are enabled, but not initially shown in input method switcher.     - Ensure system IMEs are put on the enabled list at startup/install.     - If the default IME is not installed, choose another one whenever building input method list.
parents f702f1f3 6da35a0c
Loading
Loading
Loading
Loading
+33 −20
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.content.IntentFilter;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
@@ -366,16 +367,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                        // Uh oh, current input method is no longer around!
                        // Pick another one...
                        Log.i(TAG, "Current input method removed: " + curInputMethodId);
                        List<InputMethodInfo> enabled = getEnabledInputMethodListLocked();
                        if (enabled != null && enabled.size() > 0) {
                            changed = true;
                            curIm = enabled.get(0);
                            curInputMethodId = curIm.getId();
                            Log.i(TAG, "Switching to: " + curInputMethodId);
                            Settings.Secure.putString(mContext.getContentResolver(),
                                    Settings.Secure.DEFAULT_INPUT_METHOD,
                                    curInputMethodId);
                        } else if (curIm != null) {
                        if (!chooseNewDefaultIME()) {
                            changed = true;
                            curIm = null;
                            curInputMethodId = "";
@@ -389,16 +381,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                } else if (curIm == null) {
                    // We currently don't have a default input method... is
                    // one now available?
                    List<InputMethodInfo> enabled = getEnabledInputMethodListLocked();
                    if (enabled != null && enabled.size() > 0) {
                        changed = true;
                        curIm = enabled.get(0);
                        curInputMethodId = curIm.getId();
                        Log.i(TAG, "New default input method: " + curInputMethodId);
                        Settings.Secure.putString(mContext.getContentResolver(),
                                Settings.Secure.DEFAULT_INPUT_METHOD,
                                curInputMethodId);
                    }
                    changed = chooseNewDefaultIME();
                }
                
                if (changed) {
@@ -1369,6 +1352,23 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
        return false;
    }

    private boolean isSystemIme(InputMethodInfo inputMethod) {
        return (inputMethod.getServiceInfo().applicationInfo.flags
                & ApplicationInfo.FLAG_SYSTEM) != 0;
    }

    private boolean chooseNewDefaultIME() {
        List<InputMethodInfo> enabled = getEnabledInputMethodListLocked();
        if (enabled != null && enabled.size() > 0) {
            Settings.Secure.putString(mContext.getContentResolver(),
                    Settings.Secure.DEFAULT_INPUT_METHOD,
                    enabled.get(0).getId());
            return true;
        }

        return false;
    }

    void buildInputMethodListLocked(ArrayList<InputMethodInfo> list,
            HashMap<String, InputMethodInfo> map) {
        list.clear();
@@ -1399,6 +1399,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                list.add(p);
                map.put(p.getId(), p);

                // System IMEs are enabled by default
                if (isSystemIme(p)) {
                    setInputMethodEnabled(p.getId(), true);
                }

                if (DEBUG) {
                    Log.d(TAG, "Found a third-party input method " + p);
                }
@@ -1409,6 +1414,14 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                Log.w(TAG, "Unable to load input method " + compName, e);
            }
        }

        String defaultIme = Settings.Secure.getString(mContext
                .getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
        if (!map.containsKey(defaultIme)) {
            if (chooseNewDefaultIME()) {
                updateFromSettingsLocked();
            }
        }
    }
    
    // ----------------------------------------------------------------------