summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/SystemServiceRegistry.java7
-rw-r--r--core/java/android/view/textservice/SpellCheckerSession.java13
-rw-r--r--core/java/android/view/textservice/TextServicesManager.java56
3 files changed, 54 insertions, 22 deletions
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 3adafd725a10..2dc225af6482 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -439,10 +439,11 @@ final class SystemServiceRegistry {
}});
registerService(Context.TEXT_SERVICES_MANAGER_SERVICE, TextServicesManager.class,
- new StaticServiceFetcher<TextServicesManager>() {
+ new CachedServiceFetcher<TextServicesManager>() {
@Override
- public TextServicesManager createService() {
- return TextServicesManager.getInstance();
+ public TextServicesManager createService(ContextImpl ctx)
+ throws ServiceNotFoundException {
+ return TextServicesManager.createInstance(ctx);
}});
registerService(Context.KEYGUARD_SERVICE, KeyguardManager.class,
diff --git a/core/java/android/view/textservice/SpellCheckerSession.java b/core/java/android/view/textservice/SpellCheckerSession.java
index 9733701ee0f0..f553ca512881 100644
--- a/core/java/android/view/textservice/SpellCheckerSession.java
+++ b/core/java/android/view/textservice/SpellCheckerSession.java
@@ -27,7 +27,6 @@ import android.util.Log;
import com.android.internal.textservice.ISpellCheckerSession;
import com.android.internal.textservice.ISpellCheckerSessionListener;
-import com.android.internal.textservice.ITextServicesManager;
import com.android.internal.textservice.ITextServicesSessionListener;
import dalvik.system.CloseGuard;
@@ -96,7 +95,7 @@ public class SpellCheckerSession {
private static final int MSG_ON_GET_SUGGESTION_MULTIPLE_FOR_SENTENCE = 2;
private final InternalListener mInternalListener;
- private final ITextServicesManager mTextServicesManager;
+ private final TextServicesManager mTextServicesManager;
private final SpellCheckerInfo mSpellCheckerInfo;
@UnsupportedAppUsage
private final SpellCheckerSessionListener mSpellCheckerSessionListener;
@@ -124,7 +123,7 @@ public class SpellCheckerSession {
* @hide
*/
public SpellCheckerSession(
- SpellCheckerInfo info, ITextServicesManager tsm, SpellCheckerSessionListener listener) {
+ SpellCheckerInfo info, TextServicesManager tsm, SpellCheckerSessionListener listener) {
if (info == null || listener == null || tsm == null) {
throw new NullPointerException();
}
@@ -166,12 +165,8 @@ public class SpellCheckerSession {
*/
public void close() {
mGuard.close();
- try {
- mSpellCheckerSessionListenerImpl.close();
- mTextServicesManager.finishSpellCheckerService(mSpellCheckerSessionListenerImpl);
- } catch (RemoteException e) {
- // do nothing
- }
+ mSpellCheckerSessionListenerImpl.close();
+ mTextServicesManager.finishSpellCheckerService(mSpellCheckerSessionListenerImpl);
}
/**
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java
index 5dc8b19444b0..9ff64d9b268a 100644
--- a/core/java/android/view/textservice/TextServicesManager.java
+++ b/core/java/android/view/textservice/TextServicesManager.java
@@ -16,16 +16,20 @@
package android.view.textservice;
+import android.annotation.NonNull;
import android.annotation.SystemService;
import android.annotation.UnsupportedAppUsage;
+import android.annotation.UserIdInt;
import android.content.Context;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
+import android.os.UserHandle;
import android.util.Log;
import android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener;
+import com.android.internal.textservice.ISpellCheckerSessionListener;
import com.android.internal.textservice.ITextServicesManager;
import java.util.Locale;
@@ -67,17 +71,41 @@ public final class TextServicesManager {
private static final String TAG = TextServicesManager.class.getSimpleName();
private static final boolean DBG = false;
+ /**
+ * @deprecated Do not use. Just kept because of {@link UnsupportedAppUsage} in
+ * {@link #getInstance()}.
+ */
+ @Deprecated
private static TextServicesManager sInstance;
private final ITextServicesManager mService;
- private TextServicesManager() throws ServiceNotFoundException {
+ @UserIdInt
+ private final int mUserId;
+
+ private TextServicesManager(@UserIdInt int userId) throws ServiceNotFoundException {
mService = ITextServicesManager.Stub.asInterface(
ServiceManager.getServiceOrThrow(Context.TEXT_SERVICES_MANAGER_SERVICE));
+ mUserId = userId;
+ }
+
+ /**
+ * The factory method of {@link TextServicesManager}.
+ *
+ * @param context {@link Context} from which {@link TextServicesManager} should be instantiated.
+ * @return {@link TextServicesManager} that is associated with {@link Context#getUserId()}.
+ * @throws ServiceNotFoundException When {@link TextServicesManager} is not available.
+ * @hide
+ */
+ @NonNull
+ public static TextServicesManager createInstance(@NonNull Context context)
+ throws ServiceNotFoundException {
+ return new TextServicesManager(context.getUserId());
}
/**
- * Retrieve the global TextServicesManager instance, creating it if it doesn't already exist.
+ * @deprecated Do not use. Just kept because of {@link UnsupportedAppUsage} in
+ * {@link #getInstance()}.
* @hide
*/
@UnsupportedAppUsage
@@ -85,7 +113,7 @@ public final class TextServicesManager {
synchronized (TextServicesManager.class) {
if (sInstance == null) {
try {
- sInstance = new TextServicesManager();
+ sInstance = new TextServicesManager(UserHandle.myUserId());
} catch (ServiceNotFoundException e) {
throw new IllegalStateException(e);
}
@@ -136,7 +164,7 @@ public final class TextServicesManager {
final SpellCheckerInfo sci;
try {
- sci = mService.getCurrentSpellChecker(null);
+ sci = mService.getCurrentSpellChecker(mUserId, null);
} catch (RemoteException e) {
return null;
}
@@ -174,9 +202,9 @@ public final class TextServicesManager {
if (subtypeInUse == null) {
return null;
}
- final SpellCheckerSession session = new SpellCheckerSession(sci, mService, listener);
+ final SpellCheckerSession session = new SpellCheckerSession(sci, this, listener);
try {
- mService.getSpellCheckerService(sci.getId(), subtypeInUse.getLocale(),
+ mService.getSpellCheckerService(mUserId, sci.getId(), subtypeInUse.getLocale(),
session.getTextServicesSessionListener(),
session.getSpellCheckerSessionListener(), bundle);
} catch (RemoteException e) {
@@ -191,7 +219,7 @@ public final class TextServicesManager {
@UnsupportedAppUsage
public SpellCheckerInfo[] getEnabledSpellCheckers() {
try {
- final SpellCheckerInfo[] retval = mService.getEnabledSpellCheckers();
+ final SpellCheckerInfo[] retval = mService.getEnabledSpellCheckers(mUserId);
if (DBG) {
Log.d(TAG, "getEnabledSpellCheckers: " + (retval != null ? retval.length : "null"));
}
@@ -208,7 +236,7 @@ public final class TextServicesManager {
public SpellCheckerInfo getCurrentSpellChecker() {
try {
// Passing null as a locale for ICS
- return mService.getCurrentSpellChecker(null);
+ return mService.getCurrentSpellChecker(mUserId, null);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -221,7 +249,7 @@ public final class TextServicesManager {
public SpellCheckerSubtype getCurrentSpellCheckerSubtype(
boolean allowImplicitlySelectedSubtype) {
try {
- return mService.getCurrentSpellCheckerSubtype(allowImplicitlySelectedSubtype);
+ return mService.getCurrentSpellCheckerSubtype(mUserId, allowImplicitlySelectedSubtype);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -233,7 +261,15 @@ public final class TextServicesManager {
@UnsupportedAppUsage
public boolean isSpellCheckerEnabled() {
try {
- return mService.isSpellCheckerEnabled();
+ return mService.isSpellCheckerEnabled(mUserId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ void finishSpellCheckerService(ISpellCheckerSessionListener listener) {
+ try {
+ mService.finishSpellCheckerService(mUserId, listener);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}