SuggestionsInfo.java revision a17b3506234638ef257a6b751a97931dc347a21b
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
17package android.view.textservice;
18
19import com.android.internal.util.ArrayUtils;
20
21import android.os.Parcel;
22import android.os.Parcelable;
23
24/**
25 * This class contains a metadata of suggestions from the text service
26 */
27public 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        mSuggestionsAttributes = suggestionsAttributes;
61        if (suggestions == null) {
62            mSuggestions = EMPTY;
63            mSuggestionsAvailable = false;
64        } else {
65            mSuggestions = suggestions;
66            mSuggestionsAvailable = true;
67        }
68        mCookie = 0;
69        mSequence = 0;
70    }
71
72    /**
73     * Constructor.
74     * @param suggestionsAttributes from the text service
75     * @param suggestions from the text service
76     * @param cookie the cookie of the input TextInfo
77     * @param sequence the cookie of the input TextInfo
78     */
79    public SuggestionsInfo(
80            int suggestionsAttributes, String[] suggestions, int cookie, int sequence) {
81        if (suggestions == null) {
82            mSuggestions = EMPTY;
83            mSuggestionsAvailable = false;
84        } else {
85            mSuggestions = suggestions;
86            mSuggestionsAvailable = true;
87        }
88        mSuggestionsAttributes = suggestionsAttributes;
89        mCookie = cookie;
90        mSequence = sequence;
91    }
92
93    public SuggestionsInfo(Parcel source) {
94        mSuggestionsAttributes = source.readInt();
95        mSuggestions = source.readStringArray();
96        mCookie = source.readInt();
97        mSequence = source.readInt();
98        mSuggestionsAvailable = source.readInt() == 1;
99    }
100
101    /**
102     * Used to package this object into a {@link Parcel}.
103     *
104     * @param dest The {@link Parcel} to be written.
105     * @param flags The flags used for parceling.
106     */
107    @Override
108    public void writeToParcel(Parcel dest, int flags) {
109        dest.writeInt(mSuggestionsAttributes);
110        dest.writeStringArray(mSuggestions);
111        dest.writeInt(mCookie);
112        dest.writeInt(mSequence);
113        dest.writeInt(mSuggestionsAvailable ? 1 : 0);
114    }
115
116    /**
117     * Set the cookie and the sequence of SuggestionsInfo which are set to TextInfo from a client
118     * application
119     * @param cookie the cookie of an input TextInfo
120     * @param sequence the cookie of an input TextInfo
121     */
122    public void setCookieAndSequence(int cookie, int sequence) {
123        mCookie = cookie;
124        mSequence = sequence;
125    }
126
127    /**
128     * @return the cookie which may be set by a client application
129     */
130    public int getCookie() {
131        return mCookie;
132    }
133
134    /**
135     * @return the sequence which may be set by a client application
136     */
137    public int getSequence() {
138        return mSequence;
139    }
140
141    /**
142     * @return the attributes of suggestions. This includes whether the spell checker has the word
143     * in its dictionary or not and whether the spell checker has confident suggestions for the
144     * word or not.
145     */
146    public int getSuggestionsAttributes() {
147        return mSuggestionsAttributes;
148    }
149
150    /**
151     * @return the count of the suggestions. If there's no suggestions at all, this method returns
152     * -1. Even if this method returns 0, it doesn't necessarily mean that there are no suggestions
153     * for the requested word. For instance, the caller could have been asked to limit the maximum
154     * number of suggestions returned.
155     */
156    public int getSuggestionsCount() {
157        if (!mSuggestionsAvailable) {
158            return -1;
159        }
160        return mSuggestions.length;
161    }
162
163    /**
164     * @param i the id of suggestions
165     * @return the suggestion at the specified id
166     */
167    public String getSuggestionAt(int i) {
168        return mSuggestions[i];
169    }
170
171    /**
172     * Used to make this class parcelable.
173     */
174    public static final Parcelable.Creator<SuggestionsInfo> CREATOR
175            = new Parcelable.Creator<SuggestionsInfo>() {
176        @Override
177        public SuggestionsInfo createFromParcel(Parcel source) {
178            return new SuggestionsInfo(source);
179        }
180
181        @Override
182        public SuggestionsInfo[] newArray(int size) {
183            return new SuggestionsInfo[size];
184        }
185    };
186
187    /**
188     * Used to make this class parcelable.
189     */
190    @Override
191    public int describeContents() {
192        return 0;
193    }
194}
195