am d96f63d2: am e2bee5b1: am ede3db51: Merge "Fix a crash on a secondary user" into jb-mr2-dev

* commit 'd96f63d2ed2dfcdfe8c83ed8b9020c2aae5b351d':
  Fix a crash on a secondary user
main
Jean Chalard 2013-05-20 21:34:17 -07:00 committed by Android Git Automerger
commit bab46b4ae2
2 changed files with 16 additions and 2 deletions

View File

@ -54,6 +54,13 @@ public final class RichInputMethodManager {
return sInstance; return sInstance;
} }
// Caveat: This may cause IPC
public static boolean isInputMethodManagerValidForUserOfThisProcess(final Context context) {
// Basically called to check whether this IME has been triggered by the current user or not
return !((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)).
getInputMethodList().isEmpty();
}
public static void init(final Context context) { public static void init(final Context context) {
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
sInstance.initInternal(context, prefs); sInstance.initInternal(context, prefs);

View File

@ -68,8 +68,15 @@ public final class LauncherIconVisibilityManager extends BroadcastReceiver {
// 1) the package has been re-installed, 2) the device has been booted, // 1) the package has been re-installed, 2) the device has been booted,
// 3) a multiuser has been created. // 3) a multiuser has been created.
// There is no good reason to keep the process alive if this IME isn't a current IME. // There is no good reason to keep the process alive if this IME isn't a current IME.
final boolean isCurrentImeOfCurrentUser;
if (RichInputMethodManager.isInputMethodManagerValidForUserOfThisProcess(context)) {
RichInputMethodManager.init(context); RichInputMethodManager.init(context);
if (!SetupActivity.isThisImeCurrent(context)) { isCurrentImeOfCurrentUser = SetupActivity.isThisImeCurrent(context);
} else {
isCurrentImeOfCurrentUser = false;
}
if (!isCurrentImeOfCurrentUser) {
final int myPid = Process.myPid(); final int myPid = Process.myPid();
Log.i(TAG, "Killing my process: pid=" + myPid); Log.i(TAG, "Killing my process: pid=" + myPid);
Process.killProcess(myPid); Process.killProcess(myPid);