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 196435a56a8c02de98befcc8cd743b2b638cffb327Gilles Debunneimport com.android.internal.util.ArrayUtils; 206435a56a8c02de98befcc8cd743b2b638cffb327Gilles Debunne 21988323c57bd25a58f05dfa492d9b9c8ab62c5153satokimport android.os.Parcel; 22988323c57bd25a58f05dfa492d9b9c8ab62c5153satokimport android.os.Parcelable; 23988323c57bd25a58f05dfa492d9b9c8ab62c5153satok 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