Access IMMS#mSettings only inside the lock
This is a preparation CL before addresssing Bug 35361128.
IMMS.MyPackageMonitor#isChangingPackagesOfCurrentUser() needs to be
called after taking a lock for IMMS#mMethodMap because it internally
relies on InputMethodManagerService#mSettings.
Test: Made sure that the device can boot and the IME is available.
Bug: 35361128
Change-Id: I66752a275f20f6ba33bc211ffb8d6fd269250c0d
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 2aa17c0..101b738 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -727,7 +727,8 @@
mPackagesToMonitorComponentChange.add(packageName);
}
- private boolean isChangingPackagesOfCurrentUser() {
+ @GuardedBy("mMethodMap")
+ private boolean isChangingPackagesOfCurrentUserLocked() {
final int userId = getChangingUserId();
final boolean retval = userId == mSettings.getCurrentUserId();
if (DEBUG) {
@@ -740,10 +741,10 @@
@Override
public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) {
- if (!isChangingPackagesOfCurrentUser()) {
- return false;
- }
synchronized (mMethodMap) {
+ if (!isChangingPackagesOfCurrentUserLocked()) {
+ return false;
+ }
String curInputMethodId = mSettings.getSelectedInputMethod();
final int N = mMethodList.size();
if (curInputMethodId != null) {
@@ -777,10 +778,10 @@
@Override
public void onSomePackagesChanged() {
- if (!isChangingPackagesOfCurrentUser()) {
- return;
- }
synchronized (mMethodMap) {
+ if (!isChangingPackagesOfCurrentUserLocked()) {
+ return;
+ }
InputMethodInfo curIm = null;
String curInputMethodId = mSettings.getSelectedInputMethod();
final int N = mMethodList.size();