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
2267e2ae86396c6d0f989285275cbf908dee5e71f7Aurimas Liutikasimport com.android.internal.util.ArrayUtils;
2367e2ae86396c6d0f989285275cbf908dee5e71f7Aurimas Liutikas
24988323c57bd25a58f05dfa492d9b9c8ab62c5153satok/**
25988323c57bd25a58f05dfa492d9b9c8ab62c5153satok * This class contains a metadata of suggestions from the text service
26988323c57bd25a58f05dfa492d9b9c8ab62c5153satok */
27988323c57bd25a58f05dfa492d9b9c8ab62c5153satokpublic final class SuggestionsInfo implements Parcelable {
286435a56a8c02de98befcc8cd743b2b638cffb327Gilles Debunne    private static final String[] EMPTY = ArrayUtils.emptyArray(String.class);
291bedd99761e3d2acdac947d641e7fee5db556141satok
30988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
31988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Flag of the attributes of the suggestions that can be obtained by
323de3d6ad584d6f08f50aac1b04bc0fe6cb02fb09satok     * {@link #getSuggestionsAttributes}: this tells that the requested word was found
33988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * in the dictionary in the text service.
34988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
35988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public static final int RESULT_ATTR_IN_THE_DICTIONARY = 0x0001;
36988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
37988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Flag of the attributes of the suggestions that can be obtained by
383de3d6ad584d6f08f50aac1b04bc0fe6cb02fb09satok     * {@link #getSuggestionsAttributes}: this tells that the text service thinks the requested
39c66009169622ecdb65d887987feaf91fff091af8satok     * word looks like a typo.
40988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
41c66009169622ecdb65d887987feaf91fff091af8satok    public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 0x0002;
42a17b3506234638ef257a6b751a97931dc347a21bsatok    /**
43a17b3506234638ef257a6b751a97931dc347a21bsatok     * Flag of the attributes of the suggestions that can be obtained by
44a17b3506234638ef257a6b751a97931dc347a21bsatok     * {@link #getSuggestionsAttributes}: this tells that the text service thinks
45a17b3506234638ef257a6b751a97931dc347a21bsatok     * the result suggestions include highly recommended ones.
46a17b3506234638ef257a6b751a97931dc347a21bsatok     */
47a17b3506234638ef257a6b751a97931dc347a21bsatok    public static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = 0x0004;
48988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    private final int mSuggestionsAttributes;
49988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    private final String[] mSuggestions;
501bedd99761e3d2acdac947d641e7fee5db556141satok    private final boolean mSuggestionsAvailable;
51988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    private int mCookie;
52988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    private int mSequence;
53988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
54988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
55988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Constructor.
56988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param suggestionsAttributes from the text service
57988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param suggestions from the text service
58988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
59988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public SuggestionsInfo(int suggestionsAttributes, String[] suggestions) {
600dc1f648a09b46c45190ba1ce7daecf7fada4347satok        this(suggestionsAttributes, suggestions, 0, 0);
61988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
62988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
63988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
64988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Constructor.
65988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param suggestionsAttributes from the text service
66988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param suggestions from the text service
67988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param cookie the cookie of the input TextInfo
68988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param sequence the cookie of the input TextInfo
69988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
70988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public SuggestionsInfo(
71988323c57bd25a58f05dfa492d9b9c8ab62c5153satok            int suggestionsAttributes, String[] suggestions, int cookie, int sequence) {
72988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        if (suggestions == null) {
731bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestions = EMPTY;
741bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestionsAvailable = false;
751bedd99761e3d2acdac947d641e7fee5db556141satok        } else {
761bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestions = suggestions;
771bedd99761e3d2acdac947d641e7fee5db556141satok            mSuggestionsAvailable = true;
78988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        }
79988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSuggestionsAttributes = suggestionsAttributes;
80988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mCookie = cookie;
81988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSequence = sequence;
82988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
83988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
84988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public SuggestionsInfo(Parcel source) {
85988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSuggestionsAttributes = source.readInt();
86988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSuggestions = source.readStringArray();
87988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mCookie = source.readInt();
88988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSequence = source.readInt();
891bedd99761e3d2acdac947d641e7fee5db556141satok        mSuggestionsAvailable = source.readInt() == 1;
90988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
91988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
92988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
93988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Used to package this object into a {@link Parcel}.
94988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     *
95988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param dest The {@link Parcel} to be written.
96988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param flags The flags used for parceling.
97988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
98988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    @Override
99988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public void writeToParcel(Parcel dest, int flags) {
100988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        dest.writeInt(mSuggestionsAttributes);
101988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        dest.writeStringArray(mSuggestions);
102988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        dest.writeInt(mCookie);
103988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        dest.writeInt(mSequence);
1041bedd99761e3d2acdac947d641e7fee5db556141satok        dest.writeInt(mSuggestionsAvailable ? 1 : 0);
105988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
106988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
107988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
108988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Set the cookie and the sequence of SuggestionsInfo which are set to TextInfo from a client
109988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * application
110988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param cookie the cookie of an input TextInfo
111988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param sequence the cookie of an input TextInfo
112988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
113988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public void setCookieAndSequence(int cookie, int sequence) {
114988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mCookie = cookie;
115988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        mSequence = sequence;
116988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
117988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
118988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
119988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @return the cookie which may be set by a client application
120988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
121988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int getCookie() {
122988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mCookie;
123988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
124988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
125988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
126988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @return the sequence which may be set by a client application
127988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
128988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int getSequence() {
129988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mSequence;
130988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
131988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
132988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
133988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @return the attributes of suggestions. This includes whether the spell checker has the word
134988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * in its dictionary or not and whether the spell checker has confident suggestions for the
135988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * word or not.
136988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
137988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int getSuggestionsAttributes() {
138988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mSuggestionsAttributes;
139988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
140988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
141988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
1421bedd99761e3d2acdac947d641e7fee5db556141satok     * @return the count of the suggestions. If there's no suggestions at all, this method returns
1431bedd99761e3d2acdac947d641e7fee5db556141satok     * -1. Even if this method returns 0, it doesn't necessarily mean that there are no suggestions
1441bedd99761e3d2acdac947d641e7fee5db556141satok     * for the requested word. For instance, the caller could have been asked to limit the maximum
1451bedd99761e3d2acdac947d641e7fee5db556141satok     * number of suggestions returned.
146988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
147988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int getSuggestionsCount() {
1481bedd99761e3d2acdac947d641e7fee5db556141satok        if (!mSuggestionsAvailable) {
1491bedd99761e3d2acdac947d641e7fee5db556141satok            return -1;
1501bedd99761e3d2acdac947d641e7fee5db556141satok        }
151988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mSuggestions.length;
152988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
153988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
154988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
155988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @param i the id of suggestions
156988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * @return the suggestion at the specified id
157988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
158988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public String getSuggestionAt(int i) {
159988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return mSuggestions[i];
160988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
161988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
162988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
163988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Used to make this class parcelable.
164988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
165988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public static final Parcelable.Creator<SuggestionsInfo> CREATOR
166988323c57bd25a58f05dfa492d9b9c8ab62c5153satok            = new Parcelable.Creator<SuggestionsInfo>() {
167988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        @Override
168988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        public SuggestionsInfo createFromParcel(Parcel source) {
169988323c57bd25a58f05dfa492d9b9c8ab62c5153satok            return new SuggestionsInfo(source);
170988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        }
171988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
172988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        @Override
173988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        public SuggestionsInfo[] newArray(int size) {
174988323c57bd25a58f05dfa492d9b9c8ab62c5153satok            return new SuggestionsInfo[size];
175988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        }
176988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    };
177988323c57bd25a58f05dfa492d9b9c8ab62c5153satok
178988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    /**
179988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     * Used to make this class parcelable.
180988323c57bd25a58f05dfa492d9b9c8ab62c5153satok     */
181988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    @Override
182988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    public int describeContents() {
183988323c57bd25a58f05dfa492d9b9c8ab62c5153satok        return 0;
184988323c57bd25a58f05dfa492d9b9c8ab62c5153satok    }
185988323c57bd25a58f05dfa492d9b9c8ab62c5153satok}
186