Home | History | Annotate | Download | only in textservice
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 package android.view.textservice;
     18 
     19 import android.os.Parcel;
     20 import android.os.Parcelable;
     21 
     22 import com.android.internal.util.ArrayUtils;
     23 
     24 /**
     25  * This class contains a metadata of suggestions from the text service
     26  */
     27 public final class SuggestionsInfo implements Parcelable {
     28     private static final String[] EMPTY = ArrayUtils.emptyArray(String.class);
     29 
     30     /**
     31      * Flag of the attributes of the suggestions that can be obtained by
     32      * {@link #getSuggestionsAttributes}: this tells that the requested word was found
     33      * in the dictionary in the text service.
     34      */
     35     public static final int RESULT_ATTR_IN_THE_DICTIONARY = 0x0001;
     36     /**
     37      * Flag of the attributes of the suggestions that can be obtained by
     38      * {@link #getSuggestionsAttributes}: this tells that the text service thinks the requested
     39      * word looks like a typo.
     40      */
     41     public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 0x0002;
     42     /**
     43      * Flag of the attributes of the suggestions that can be obtained by
     44      * {@link #getSuggestionsAttributes}: this tells that the text service thinks
     45      * the result suggestions include highly recommended ones.
     46      */
     47     public static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = 0x0004;
     48     private final int mSuggestionsAttributes;
     49     private final String[] mSuggestions;
     50     private final boolean mSuggestionsAvailable;
     51     private int mCookie;
     52     private int mSequence;
     53 
     54     /**
     55      * Constructor.
     56      * @param suggestionsAttributes from the text service
     57      * @param suggestions from the text service
     58      */
     59     public SuggestionsInfo(int suggestionsAttributes, String[] suggestions) {
     60         this(suggestionsAttributes, suggestions, 0, 0);
     61     }
     62 
     63     /**
     64      * Constructor.
     65      * @param suggestionsAttributes from the text service
     66      * @param suggestions from the text service
     67      * @param cookie the cookie of the input TextInfo
     68      * @param sequence the cookie of the input TextInfo
     69      */
     70     public SuggestionsInfo(
     71             int suggestionsAttributes, String[] suggestions, int cookie, int sequence) {
     72         if (suggestions == null) {
     73             mSuggestions = EMPTY;
     74             mSuggestionsAvailable = false;
     75         } else {
     76             mSuggestions = suggestions;
     77             mSuggestionsAvailable = true;
     78         }
     79         mSuggestionsAttributes = suggestionsAttributes;
     80         mCookie = cookie;
     81         mSequence = sequence;
     82     }
     83 
     84     public SuggestionsInfo(Parcel source) {
     85         mSuggestionsAttributes = source.readInt();
     86         mSuggestions = source.readStringArray();
     87         mCookie = source.readInt();
     88         mSequence = source.readInt();
     89         mSuggestionsAvailable = source.readInt() == 1;
     90     }
     91 
     92     /**
     93      * Used to package this object into a {@link Parcel}.
     94      *
     95      * @param dest The {@link Parcel} to be written.
     96      * @param flags The flags used for parceling.
     97      */
     98     @Override
     99     public void writeToParcel(Parcel dest, int flags) {
    100         dest.writeInt(mSuggestionsAttributes);
    101         dest.writeStringArray(mSuggestions);
    102         dest.writeInt(mCookie);
    103         dest.writeInt(mSequence);
    104         dest.writeInt(mSuggestionsAvailable ? 1 : 0);
    105     }
    106 
    107     /**
    108      * Set the cookie and the sequence of SuggestionsInfo which are set to TextInfo from a client
    109      * application
    110      * @param cookie the cookie of an input TextInfo
    111      * @param sequence the cookie of an input TextInfo
    112      */
    113     public void setCookieAndSequence(int cookie, int sequence) {
    114         mCookie = cookie;
    115         mSequence = sequence;
    116     }
    117 
    118     /**
    119      * @return the cookie which may be set by a client application
    120      */
    121     public int getCookie() {
    122         return mCookie;
    123     }
    124 
    125     /**
    126      * @return the sequence which may be set by a client application
    127      */
    128     public int getSequence() {
    129         return mSequence;
    130     }
    131 
    132     /**
    133      * @return the attributes of suggestions. This includes whether the spell checker has the word
    134      * in its dictionary or not and whether the spell checker has confident suggestions for the
    135      * word or not.
    136      */
    137     public int getSuggestionsAttributes() {
    138         return mSuggestionsAttributes;
    139     }
    140 
    141     /**
    142      * @return the count of the suggestions. If there's no suggestions at all, this method returns
    143      * -1. Even if this method returns 0, it doesn't necessarily mean that there are no suggestions
    144      * for the requested word. For instance, the caller could have been asked to limit the maximum
    145      * number of suggestions returned.
    146      */
    147     public int getSuggestionsCount() {
    148         if (!mSuggestionsAvailable) {
    149             return -1;
    150         }
    151         return mSuggestions.length;
    152     }
    153 
    154     /**
    155      * @param i the id of suggestions
    156      * @return the suggestion at the specified id
    157      */
    158     public String getSuggestionAt(int i) {
    159         return mSuggestions[i];
    160     }
    161 
    162     /**
    163      * Used to make this class parcelable.
    164      */
    165     public static final Parcelable.Creator<SuggestionsInfo> CREATOR
    166             = new Parcelable.Creator<SuggestionsInfo>() {
    167         @Override
    168         public SuggestionsInfo createFromParcel(Parcel source) {
    169             return new SuggestionsInfo(source);
    170         }
    171 
    172         @Override
    173         public SuggestionsInfo[] newArray(int size) {
    174             return new SuggestionsInfo[size];
    175         }
    176     };
    177 
    178     /**
    179      * Used to make this class parcelable.
    180      */
    181     @Override
    182     public int describeContents() {
    183         return 0;
    184     }
    185 }
    186