SuggestionsInfo.java revision 1bedd99761e3d2acdac947d641e7fee5db556141
1988323c57bd25a58f05dfa492d9b9c8ab62c5153satok/*
2988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * Copyright (C) 2011 The Android Open Source Project
3988323c57bd25a58f05dfa492d9b9c8ab62c5153satok *
4988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * use this file except in compliance with the License. You may obtain a copy of
6988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * the License at
7988323c57bd25a58f05dfa492d9b9c8ab62c5153satok *
8988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * http://www.apache.org/licenses/LICENSE-2.0
9988323c57bd25a58f05dfa492d9b9c8ab62c5153satok *
10988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * Unless required by applicable law or agreed to in writing, software
11988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * License for the specific language governing permissions and limitations under
14988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * the License.
15988323c57bd25a58f05dfa492d9b9c8ab62c5153satok */
16988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
17988323c57bd25a58f05dfa492d9b9c8ab62c5153satokpackage android.view.textservice;
18988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
19988323c57bd25a58f05dfa492d9b9c8ab62c5153satokimport android.os.Parcel;
20988323c57bd25a58f05dfa492d9b9c8ab62c5153satokimport android.os.Parcelable;
21988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
22988323c57bd25a58f05dfa492d9b9c8ab62c5153satok/**
23988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * This class contains a metadata of suggestions from the text service
24988323c57bd25a58f05dfa492d9b9c8ab62c5153satok */
25988323c57bd25a58f05dfa492d9b9c8ab62c5153satokpublic final class SuggestionsInfo implements Parcelable {
261bedd99761e3d2acdac947d641e7fee5db556141satok    private static final String[] EMPTY = new String[0];
271bedd99761e3d2acdac947d641e7fee5db556141satok
28988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
29988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Flag of the attributes of the suggestions that can be obtained by
303de3d6ad584d6f08f50aac1b04bc0fe6cb02fb09satok     * {@link #getSuggestionsAttributes}: this tells that the requested word was found
31988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * in the dictionary in the text service.
32988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
33988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public static final int RESULT_ATTR_IN_THE_DICTIONARY = 0x0001;
34988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
35988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Flag of the attributes of the suggestions that can be obtained by
363de3d6ad584d6f08f50aac1b04bc0fe6cb02fb09satok     * {@link #getSuggestionsAttributes}: this tells that the text service thinks the requested
373de3d6ad584d6f08f50aac1b04bc0fe6cb02fb09satok     * word looks a typo.
38988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
391bedd99761e3d2acdac947d641e7fee5db556141satok    public static final int RESULT_ATTR_LOOKS_TYPO = 0x0002;
40988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    private final int mSuggestionsAttributes;
41988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    private final String[] mSuggestions;
421bedd99761e3d2acdac947d641e7fee5db556141satok    private final boolean mSuggestionsAvailable;
43988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    private int mCookie;
44988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    private int mSequence;
45988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
46988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
47988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Constructor.
48988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param suggestionsAttributes from the text service
49988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param suggestions from the text service
50988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
51988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public SuggestionsInfo(int suggestionsAttributes, String[] suggestions) {
521bedd99761e3d2acdac947d641e7fee5db556141satok        mSuggestionsAttributes = suggestionsAttributes;
53988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        if (suggestions == null) {
541bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestions = EMPTY;
551bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestionsAvailable = false;
561bedd99761e3d2acdac947d641e7fee5db556141satok        } else {
571bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestions = suggestions;
581bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestionsAvailable = true;
59988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        }
60988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mCookie = 0;
61988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSequence = 0;
62988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
63988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
64988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
65988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Constructor.
66988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param suggestionsAttributes from the text service
67988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param suggestions from the text service
68988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param cookie the cookie of the input TextInfo
69988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param sequence the cookie of the input TextInfo
70988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
71988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public SuggestionsInfo(
72988323c57bd25a58f05dfa492d9b9c8ab62c5153satok            int suggestionsAttributes, String[] suggestions, int cookie, int sequence) {
73988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        if (suggestions == null) {
741bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestions = EMPTY;
751bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestionsAvailable = false;
761bedd99761e3d2acdac947d641e7fee5db556141satok        } else {
771bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestions = suggestions;
781bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestionsAvailable = true;
79988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        }
80988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSuggestionsAttributes = suggestionsAttributes;
81988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mCookie = cookie;
82988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSequence = sequence;
83988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
84988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
85988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public SuggestionsInfo(Parcel source) {
86988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSuggestionsAttributes = source.readInt();
87988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSuggestions = source.readStringArray();
88988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mCookie = source.readInt();
89988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSequence = source.readInt();
901bedd99761e3d2acdac947d641e7fee5db556141satok        mSuggestionsAvailable = source.readInt() == 1;
91988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
92988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
93988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
94988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Used to package this object into a {@link Parcel}.
95988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     *
96988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param dest The {@link Parcel} to be written.
97988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param flags The flags used for parceling.
98988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
99988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    @Override
100988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public void writeToParcel(Parcel dest, int flags) {
101988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        dest.writeInt(mSuggestionsAttributes);
102988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        dest.writeStringArray(mSuggestions);
103988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        dest.writeInt(mCookie);
104988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        dest.writeInt(mSequence);
1051bedd99761e3d2acdac947d641e7fee5db556141satok        dest.writeInt(mSuggestionsAvailable ? 1 : 0);
106988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
107988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
108988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
109988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Set the cookie and the sequence of SuggestionsInfo which are set to TextInfo from a client
110988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * application
111988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param cookie the cookie of an input TextInfo
112988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param sequence the cookie of an input TextInfo
113988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
114988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public void setCookieAndSequence(int cookie, int sequence) {
115988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mCookie = cookie;
116988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSequence = sequence;
117988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
118988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
119988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
120988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @return the cookie which may be set by a client application
121988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
122988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int getCookie() {
123988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mCookie;
124988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
125988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
126988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
127988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @return the sequence which may be set by a client application
128988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
129988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int getSequence() {
130988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mSequence;
131988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
132988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
133988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
134988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @return the attributes of suggestions. This includes whether the spell checker has the word
135988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * in its dictionary or not and whether the spell checker has confident suggestions for the
136988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * word or not.
137988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
138988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int getSuggestionsAttributes() {
139988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mSuggestionsAttributes;
140988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
141988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
142988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
1431bedd99761e3d2acdac947d641e7fee5db556141satok     * @return the count of the suggestions. If there's no suggestions at all, this method returns
1441bedd99761e3d2acdac947d641e7fee5db556141satok     * -1. Even if this method returns 0, it doesn't necessarily mean that there are no suggestions
1451bedd99761e3d2acdac947d641e7fee5db556141satok     * for the requested word. For instance, the caller could have been asked to limit the maximum
1461bedd99761e3d2acdac947d641e7fee5db556141satok     * number of suggestions returned.
147988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
148988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int getSuggestionsCount() {
1491bedd99761e3d2acdac947d641e7fee5db556141satok        if (!mSuggestionsAvailable) {
1501bedd99761e3d2acdac947d641e7fee5db556141satok            return -1;
1511bedd99761e3d2acdac947d641e7fee5db556141satok        }
152988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mSuggestions.length;
153988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
154988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
155988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
156988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param i the id of suggestions
157988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @return the suggestion at the specified id
158988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
159988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public String getSuggestionAt(int i) {
160988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mSuggestions[i];
161988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
162988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
163988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
164988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Used to make this class parcelable.
165988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
166988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public static final Parcelable.Creator<SuggestionsInfo> CREATOR
167988323c57bd25a58f05dfa492d9b9c8ab62c5153satok            = new Parcelable.Creator<SuggestionsInfo>() {
168988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        @Override
169988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        public SuggestionsInfo createFromParcel(Parcel source) {
170988323c57bd25a58f05dfa492d9b9c8ab62c5153satok            return new SuggestionsInfo(source);
171988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        }
172988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
173988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        @Override
174988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        public SuggestionsInfo[] newArray(int size) {
175988323c57bd25a58f05dfa492d9b9c8ab62c5153satok            return new SuggestionsInfo[size];
176988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        }
177988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    };
178988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
179988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
180988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Used to make this class parcelable.
181988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
182988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    @Override
183988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int describeContents() {
184988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return 0;
185988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
186988323c57bd25a58f05dfa492d9b9c8ab62c5153satok}
187