Rely on SystemService#onSwitchUser() in TSMS.

SystemService class has already provided SystemService#onSwitchUser()
callback event.  We do not need to set up SynchronousUserSwitchObserver
separately in TextServicesManagerService.

Bug: 25816558
Bug: 27456430
Change-Id: I2d6f9932f30b72cf4ae4bc0c41810f75e2667478
This commit is contained in:
Yohei Yukawa
2016-03-07 13:42:07 -08:00
parent a6a152e7de
commit 9faa2aeb8a

View File

@@ -27,9 +27,9 @@ import com.android.internal.textservice.ITextServicesSessionListener;
import org.xmlpull.v1.XmlPullParserException;
import android.annotation.UserIdInt;
import android.app.ActivityManagerNative;
import android.app.AppGlobals;
import android.app.SynchronousUserSwitchObserver;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -96,6 +96,13 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
publishBinderService(Context.TEXT_SERVICES_MANAGER_SERVICE, mService);
}
@Override
public void onSwitchUser(@UserIdInt int userHandle) {
// Called on the system server's main looper thread.
// TODO: Dispatch this to a worker thread as needed.
mService.onSwitchUser(userHandle);
}
@Override
public void onBootPhase(int phase) {
// Called on the system server's main looper thread.
@@ -114,6 +121,12 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
}
}
void onSwitchUser(@UserIdInt int userId) {
synchronized (mSpellCheckerMap) {
switchUserLocked(userId);
}
}
public TextServicesManagerService(Context context) {
mSystemReady = false;
mContext = context;
@@ -125,24 +138,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
int userId = UserHandle.USER_SYSTEM;
try {
ActivityManagerNative.getDefault().registerUserSwitchObserver(
new SynchronousUserSwitchObserver() {
@Override
public void onUserSwitching(int newUserId) throws RemoteException {
synchronized(mSpellCheckerMap) {
switchUserLocked(newUserId);
}
}
@Override
public void onUserSwitchComplete(int newUserId) throws RemoteException {
}
@Override
public void onForegroundProfileSwitch(int newProfileId) {
// Ignore.
}
});
userId = ActivityManagerNative.getDefault().getCurrentUser().id;
} catch (RemoteException e) {
Slog.w(TAG, "Couldn't get current user ID; guessing it's 0", e);
@@ -155,7 +150,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
switchUserLocked(userId);
}
private void switchUserLocked(int userId) {
private void switchUserLocked(@UserIdInt int userId) {
mSettings.setCurrentUserId(userId);
updateCurrentProfileIds();
unbindServiceLocked();
@@ -1040,17 +1035,18 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
private static class TextServicesSettings {
private final ContentResolver mResolver;
@UserIdInt
private int mCurrentUserId;
@GuardedBy("mLock")
private int[] mCurrentProfileIds = new int[0];
private Object mLock = new Object();
public TextServicesSettings(ContentResolver resolver, int userId) {
public TextServicesSettings(ContentResolver resolver, @UserIdInt int userId) {
mResolver = resolver;
mCurrentUserId = userId;
}
public void setCurrentUserId(int userId) {
public void setCurrentUserId(@UserIdInt int userId) {
if (DBG) {
Slog.d(TAG, "--- Swtich the current user from " + mCurrentUserId + " to "
+ userId + ", new ime = " + getSelectedSpellChecker());
@@ -1065,7 +1061,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
}
}
public boolean isCurrentProfile(int userId) {
public boolean isCurrentProfile(@UserIdInt int userId) {
synchronized (mLock) {
if (userId == mCurrentUserId) return true;
for (int i = 0; i < mCurrentProfileIds.length; i++) {
@@ -1075,6 +1071,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
}
}
@UserIdInt
public int getCurrentUserId() {
return mCurrentUserId;
}