Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eaddb894 authored by satok's avatar satok
Browse files

Create TextServiceManager and SpellCheckerService

Bug: 4176026

Spec of TextServiceManager
- Chooses the most applicable TextService(e.g. SpellCheckerService, WordBreakIteratorService..)
    for each locale

Spec of SpellCheckerService
- Returns whether the given string is a correct word or not
- Returns Suggestions for the given string

Change-Id: Ia25e7b4f308778891929e31b8cbd741f6848cce4
parent 75a0e9c0
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -136,6 +136,7 @@ LOCAL_SRC_FILES += \
	core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl\
	core/java/android/view/accessibility/IAccessibilityManager.aidl \
	core/java/android/view/accessibility/IAccessibilityManagerClient.aidl \
	core/java/android/view/inputmethod/ISpellCheckerService.aidl \
	core/java/android/view/IApplicationToken.aidl \
	core/java/android/view/IOnKeyguardExitResult.aidl \
	core/java/android/view/IRotationWatcher.aidl \
@@ -163,6 +164,7 @@ LOCAL_SRC_FILES += \
	core/java/com/android/internal/view/IInputMethodClient.aidl \
	core/java/com/android/internal/view/IInputMethodManager.aidl \
	core/java/com/android/internal/view/IInputMethodSession.aidl \
	core/java/com/android/internal/view/ITextServiceManager.aidl \
	core/java/com/android/internal/widget/IRemoteViewsFactory.aidl \
	core/java/com/android/internal/widget/IRemoteViewsAdapterConnection.aidl \
	keystore/java/android/security/IKeyChainAliasCallback.aidl \
@@ -270,6 +272,7 @@ aidl_files := \
	frameworks/base/core/java/com/android/internal/view/IInputMethodClient.aidl \
	frameworks/base/core/java/com/android/internal/view/IInputMethodManager.aidl \
	frameworks/base/core/java/com/android/internal/view/IInputMethodSession.aidl \
	frameworks/base/core/java/com/android/internal/view/ITextServiceManager.aidl \
	frameworks/base/graphics/java/android/graphics/Bitmap.aidl \
	frameworks/base/graphics/java/android/graphics/Rect.aidl \
	frameworks/base/graphics/java/android/graphics/Region.aidl \
+48 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ package android {
    field public static final java.lang.String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN";
    field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
    field public static final java.lang.String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
    field public static final java.lang.String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE";
    field public static final java.lang.String BIND_WALLPAPER = "android.permission.BIND_WALLPAPER";
    field public static final java.lang.String BLUETOOTH = "android.permission.BLUETOOTH";
    field public static final java.lang.String BLUETOOTH_ADMIN = "android.permission.BLUETOOTH_ADMIN";
@@ -4731,6 +4732,7 @@ package android.content {
    field public static final java.lang.String SENSOR_SERVICE = "sensor";
    field public static final java.lang.String STORAGE_SERVICE = "storage";
    field public static final java.lang.String TELEPHONY_SERVICE = "phone";
    field public static final java.lang.String TEXT_SERVICE_MANAGER_SERVICE = "text_service_manager_service";
    field public static final java.lang.String UI_MODE_SERVICE = "uimode";
    field public static final java.lang.String USB_SERVICE = "usb";
    field public static final java.lang.String VIBRATOR_SERVICE = "vibrator";
@@ -23289,6 +23291,19 @@ package android.view.inputmethod {
    field public int token;
  }
  public abstract interface ISpellCheckerService implements android.os.IInterface {
    method public abstract void cancel() throws android.os.RemoteException;
    method public abstract java.lang.CharSequence getSuggestions(java.lang.CharSequence, int, int, java.lang.String) throws android.os.RemoteException;
    method public abstract boolean isCorrect(java.lang.CharSequence, int, int, java.lang.String) throws android.os.RemoteException;
  }
  public static abstract class ISpellCheckerService.Stub extends android.os.Binder implements android.view.inputmethod.ISpellCheckerService {
    ctor public ISpellCheckerService.Stub();
    method public android.os.IBinder asBinder();
    method public static android.view.inputmethod.ISpellCheckerService asInterface(android.os.IBinder);
    method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException;
  }
  public final class InputBinding implements android.os.Parcelable {
    ctor public InputBinding(android.view.inputmethod.InputConnection, android.os.IBinder, int, int);
    ctor public InputBinding(android.view.inputmethod.InputConnection, android.view.inputmethod.InputBinding);
@@ -23473,6 +23488,39 @@ package android.view.inputmethod {
    field public static final android.os.Parcelable.Creator CREATOR;
  }
  public final class SpellCheckerInfo implements android.os.Parcelable {
    method public int describeContents();
    method public android.content.ComponentName getComponent();
    method public java.lang.String getId();
    method public java.lang.String getPackageName();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator CREATOR;
  }
  public abstract class SpellCheckerService extends android.app.Service {
    ctor public SpellCheckerService();
    method protected void cancel();
    method protected static java.util.Locale constructLocaleFromString(java.lang.String);
    method protected abstract java.lang.String[] getStringSuggestions(java.lang.CharSequence, int, int, java.lang.String);
    method protected java.lang.CharSequence getSuggestions(java.lang.CharSequence, int, int, java.lang.String);
    method protected abstract boolean isCorrect(java.lang.CharSequence, int, int, java.lang.String);
    method public final android.os.IBinder onBind(android.content.Intent);
    field public static final java.lang.String SERVICE_INTERFACE;
  }
  public final class TextServiceManager {
    method public void getSuggestions(java.lang.CharSequence, int, int, java.util.Locale, boolean, android.view.inputmethod.TextServiceManager.Callback);
    method public void isCorrect(java.lang.CharSequence, android.view.inputmethod.TextServiceManager.Callback);
    method public void isCorrect(java.lang.CharSequence, java.util.Locale, android.view.inputmethod.TextServiceManager.Callback);
    method public void isCorrect(java.lang.CharSequence, int, int, java.util.Locale, android.view.inputmethod.TextServiceManager.Callback);
    method public android.view.inputmethod.SpellCheckerInfo requestSpellCheckerConnection(java.util.Locale);
  }
  public static abstract interface TextServiceManager.Callback {
    method public abstract void getSuggestionsResult(java.lang.CharSequence, int, int, java.util.Locale, java.lang.CharSequence);
    method public abstract void isCorrectResult(java.lang.CharSequence, int, int, java.util.Locale, boolean);
  }
}
package android.webkit {
+6 −0
Original line number Diff line number Diff line
@@ -85,6 +85,7 @@ import android.view.Display;
import android.view.WindowManagerImpl;
import android.view.accessibility.AccessibilityManager;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.TextServiceManager;
import android.accounts.AccountManager;
import android.accounts.IAccountManager;
import android.app.admin.DevicePolicyManager;
@@ -321,6 +322,11 @@ class ContextImpl extends Context {
                    return InputMethodManager.getInstance(ctx);
                }});

        registerService(TEXT_SERVICE_MANAGER_SERVICE, new ServiceFetcher() {
                public Object createService(ContextImpl ctx) {
                    return TextServiceManager.getInstance(ctx);
                }});

        registerService(KEYGUARD_SERVICE, new ServiceFetcher() {
                public Object getService(ContextImpl ctx) {
                    // TODO: why isn't this caching it?  It wasn't
+9 −0
Original line number Diff line number Diff line
@@ -1598,6 +1598,15 @@ public abstract class Context {
     */
    public static final String INPUT_METHOD_SERVICE = "input_method";

    /**
     * Use with {@link #getSystemService} to retrieve a
     * {@link android.view.inputmethod.TextServiceManager} for accessing
     * text services.
     *
     * @see #getSystemService
     */
    public static final String TEXT_SERVICE_MANAGER_SERVICE = "text_service_manager_service";

    /**
     * Use with {@link #getSystemService} to retrieve a
     * {@link android.appwidget.AppWidgetManager} for accessing AppWidgets.
+9 −3
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package android.provider;



import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.content.ComponentName;
@@ -47,7 +45,6 @@ import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.HashSet;


/**
 * The Settings provider contains global system-level device preferences.
 */
@@ -3618,6 +3615,15 @@ public final class Settings {
         */
        public static final String VOICE_RECOGNITION_SERVICE = "voice_recognition_service";


        /**
         * The {@link ComponentName} string of the service to be used as the spell checker
         * service which is one of the services managed by the text service manager.
         *
         * @hide
         */
        public static final String SPELL_CHECKER_SERVICE = "spell_checker_service";

        /**
         * What happens when the user presses the Power button while in-call
         * and the screen is on.<br/>
Loading