diff options
author | satok <satok@google.com> | 2011-10-14 14:48:59 +0900 |
---|---|---|
committer | satok <satok@google.com> | 2011-10-18 20:28:23 +0900 |
commit | 44b75030931d9c65c9e495a86d11d71da59b4429 (patch) | |
tree | 63ad85a89a6fb70ac4eeb6f9deb9e8cc3878b4d1 /core/java | |
parent | 840b8a678537519c27ddf2f818494eaa20a135d4 (diff) | |
download | frameworks_base-44b75030931d9c65c9e495a86d11d71da59b4429.zip frameworks_base-44b75030931d9c65c9e495a86d11d71da59b4429.tar.gz frameworks_base-44b75030931d9c65c9e495a86d11d71da59b4429.tar.bz2 |
Add documents for the spell checker framework and the input method subtype
Bug: 4973788
Change-Id: I7e650f336ba1bb8949899e8b2355e6d492a2e4b2
Diffstat (limited to 'core/java')
4 files changed, 101 insertions, 2 deletions
diff --git a/core/java/android/service/textservice/SpellCheckerService.java b/core/java/android/service/textservice/SpellCheckerService.java index b96099e..2ecf307 100644 --- a/core/java/android/service/textservice/SpellCheckerService.java +++ b/core/java/android/service/textservice/SpellCheckerService.java @@ -35,6 +35,28 @@ import java.lang.ref.WeakReference; * SpellCheckerService provides an abstract base class for a spell checker. * This class combines a service to the system with the spell checker service interface that * spell checker must implement. + * + * <p>In addition to the normal Service lifecycle methods, this class + * introduces a new specific callback that subclasses should override + * {@link #createSession()} to provide a spell checker session that is corresponding + * to requested language and so on. The spell checker session returned by this method + * should extend {@link SpellCheckerService.Session}. + * </p> + * + * <h3>Returning spell check results</h3> + * + * <p>{@link SpellCheckerService.Session#onGetSuggestions(TextInfo, int)} + * should return spell check results. + * It receives {@link android.view.textservice.TextInfo} and returns + * {@link android.view.textservice.SuggestionsInfo} for the input. + * You may want to override + * {@link SpellCheckerService.Session#onGetSuggestionsMultiple(TextInfo[], int, boolean)} for + * better performance and quality. + * </p> + * + * <p>Please note that {@link SpellCheckerService.Session#getLocale()} does not return a valid + * locale before {@link SpellCheckerService.Session#onCreate()} </p> + * */ public abstract class SpellCheckerService extends Service { private static final String TAG = SpellCheckerService.class.getSimpleName(); @@ -89,7 +111,7 @@ public abstract class SpellCheckerService extends Service { * but will be called in series on another thread. * @param textInfo the text metadata * @param suggestionsLimit the number of limit of suggestions returned - * @return SuggestionInfo which contains suggestions for textInfo + * @return SuggestionsInfo which contains suggestions for textInfo */ public abstract SuggestionsInfo onGetSuggestions(TextInfo textInfo, int suggestionsLimit); @@ -101,7 +123,7 @@ public abstract class SpellCheckerService extends Service { * @param textInfos an array of the text metadata * @param suggestionsLimit the number of limit of suggestions returned * @param sequentialWords true if textInfos can be treated as sequential words. - * @return an array of SuggestionInfo of onGetSuggestions + * @return an array of SuggestionsInfo of onGetSuggestions */ public SuggestionsInfo[] onGetSuggestionsMultiple(TextInfo[] textInfos, int suggestionsLimit, boolean sequentialWords) { diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java index 34c9c29..93caabe 100644 --- a/core/java/android/view/inputmethod/InputMethodSubtype.java +++ b/core/java/android/view/inputmethod/InputMethodSubtype.java @@ -35,6 +35,13 @@ import java.util.Locale; * Subtype can describe locale (e.g. en_US, fr_FR...) and mode (e.g. voice, keyboard...), and is * used for IME switch and settings. The input method subtype allows the system to bring up the * specified subtype of the designated input method directly. + * + * <p>It should be defined in an XML resource file of the input method + * with the <code><subtype></code> element. + * For more information, see the guide to + * <a href="{@docRoot}resources/articles/creating-input-method.html"> + * Creating an Input Method</a>.</p> + * */ public final class InputMethodSubtype implements Parcelable { private static final String TAG = InputMethodSubtype.class.getSimpleName(); diff --git a/core/java/android/view/textservice/SpellCheckerSession.java b/core/java/android/view/textservice/SpellCheckerSession.java index b940b80..793f514 100644 --- a/core/java/android/view/textservice/SpellCheckerSession.java +++ b/core/java/android/view/textservice/SpellCheckerSession.java @@ -34,6 +34,51 @@ import java.util.Queue; /** * The SpellCheckerSession interface provides the per client functionality of SpellCheckerService. + * + * + * <a name="Applications"></a> + * <h3>Applications</h3> + * + * <p>In most cases, applications that are using the standard + * {@link android.widget.TextView} or its subclasses will have little they need + * to do to work well with spell checker services. The main things you need to + * be aware of are:</p> + * + * <ul> + * <li> Properly set the {@link android.R.attr#inputType} in your editable + * text views, so that the spell checker will have enough context to help the + * user in editing text in them. + * </ul> + * + * <p>For the rare people amongst us writing client applications that use the spell checker service + * directly, you will need to use {@link #getSuggestions(TextInfo, int)} or + * {@link #getSuggestions(TextInfo[], int, boolean)} for obtaining results from the spell checker + * service by yourself.</p> + * + * <h3>Security</h3> + * + * <p>There are a lot of security issues associated with spell checkers, + * since they could monitor all the text being sent to them + * through, for instance, {@link android.widget.TextView}. + * The Android spell checker framework also allows + * arbitrary third party spell checkers, so care must be taken to restrict their + * selection and interactions.</p> + * + * <p>Here are some key points about the security architecture behind the + * spell checker framework:</p> + * + * <ul> + * <li>Only the system is allowed to directly access a spell checker framework's + * {@link android.service.textservice.SpellCheckerService} interface, via the + * {@link android.Manifest.permission#BIND_TEXT_SERVICE} permission. This is + * enforced in the system by not binding to a spell checker service that does + * not require this permission. + * + * <li>The user must explicitly enable a new spell checker in settings before + * they can be enabled, to confirm with the system that they know about it + * and want to make it available for use. + * </ul> + * */ public class SpellCheckerSession { private static final String TAG = SpellCheckerSession.class.getSimpleName(); diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java index b06c112..69f88a5 100644 --- a/core/java/android/view/textservice/TextServicesManager.java +++ b/core/java/android/view/textservice/TextServicesManager.java @@ -35,6 +35,31 @@ import java.util.Locale; * * The user can change the current text services in Settings. And also applications can specify * the target text services. + * + * <h3>Architecture Overview</h3> + * + * <p>There are three primary parties involved in the text services + * framework (TSF) architecture:</p> + * + * <ul> + * <li> The <strong>text services manager</strong> as expressed by this class + * is the central point of the system that manages interaction between all + * other parts. It is expressed as the client-side API here which exists + * in each application context and communicates with a global system service + * that manages the interaction across all processes. + * <li> A <strong>text service</strong> implements a particular + * interaction model allowing the client application to retrieve information of text. + * The system binds to the current text service that is in use, causing it to be created and run. + * <li> Multiple <strong>client applications</strong> arbitrate with the text service + * manager for connections to text services. + * </ul> + * + * <h3>Text services sessions</h3> + * <ul> + * <li>The <strong>spell checker session</strong> is one of the text services. + * {@link android.view.textservice.SpellCheckerSession}</li> + * </ul> + * */ public final class TextServicesManager { private static final String TAG = TextServicesManager.class.getSimpleName(); |