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.
This commit is contained in:
Android (Google) Code Review
2009-10-21 22:58:39 -04:00

View File

@ -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();
}
}
}
// ----------------------------------------------------------------------