/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package android.view.textservice; import com.android.internal.util.ArrayUtils; import android.os.Parcel; import android.os.Parcelable; /** * This class contains a metadata of suggestions from the text service */ public final class SuggestionsInfo implements Parcelable { private static final String[] EMPTY = ArrayUtils.emptyArray(String.class); /** * Flag of the attributes of the suggestions that can be obtained by * {@link #getSuggestionsAttributes}: this tells that the requested word was found * in the dictionary in the text service. */ public static final int RESULT_ATTR_IN_THE_DICTIONARY = 0x0001; /** * Flag of the attributes of the suggestions that can be obtained by * {@link #getSuggestionsAttributes}: this tells that the text service thinks the requested * word looks like a typo. */ public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 0x0002; /** * Flag of the attributes of the suggestions that can be obtained by * {@link #getSuggestionsAttributes}: this tells that the text service thinks * the result suggestions include highly recommended ones. */ public static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = 0x0004; private final int mSuggestionsAttributes; private final String[] mSuggestions; private final boolean mSuggestionsAvailable; private int mCookie; private int mSequence; /** * Constructor. * @param suggestionsAttributes from the text service * @param suggestions from the text service */ public SuggestionsInfo(int suggestionsAttributes, String[] suggestions) { mSuggestionsAttributes = suggestionsAttributes; if (suggestions == null) { mSuggestions = EMPTY; mSuggestionsAvailable = false; } else { mSuggestions = suggestions; mSuggestionsAvailable = true; } mCookie = 0; mSequence = 0; } /** * Constructor. * @param suggestionsAttributes from the text service * @param suggestions from the text service * @param cookie the cookie of the input TextInfo * @param sequence the cookie of the input TextInfo */ public SuggestionsInfo( int suggestionsAttributes, String[] suggestions, int cookie, int sequence) { if (suggestions == null) { mSuggestions = EMPTY; mSuggestionsAvailable = false; } else { mSuggestions = suggestions; mSuggestionsAvailable = true; } mSuggestionsAttributes = suggestionsAttributes; mCookie = cookie; mSequence = sequence; } public SuggestionsInfo(Parcel source) { mSuggestionsAttributes = source.readInt(); mSuggestions = source.readStringArray(); mCookie = source.readInt(); mSequence = source.readInt(); mSuggestionsAvailable = source.readInt() == 1; } /** * Used to package this object into a {@link Parcel}. * * @param dest The {@link Parcel} to be written. * @param flags The flags used for parceling. */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mSuggestionsAttributes); dest.writeStringArray(mSuggestions); dest.writeInt(mCookie); dest.writeInt(mSequence); dest.writeInt(mSuggestionsAvailable ? 1 : 0); } /** * Set the cookie and the sequence of SuggestionsInfo which are set to TextInfo from a client * application * @param cookie the cookie of an input TextInfo * @param sequence the cookie of an input TextInfo */ public void setCookieAndSequence(int cookie, int sequence) { mCookie = cookie; mSequence = sequence; } /** * @return the cookie which may be set by a client application */ public int getCookie() { return mCookie; } /** * @return the sequence which may be set by a client application */ public int getSequence() { return mSequence; } /** * @return the attributes of suggestions. This includes whether the spell checker has the word * in its dictionary or not and whether the spell checker has confident suggestions for the * word or not. */ public int getSuggestionsAttributes() { return mSuggestionsAttributes; } /** * @return the count of the suggestions. If there's no suggestions at all, this method returns * -1. Even if this method returns 0, it doesn't necessarily mean that there are no suggestions * for the requested word. For instance, the caller could have been asked to limit the maximum * number of suggestions returned. */ public int getSuggestionsCount() { if (!mSuggestionsAvailable) { return -1; } return mSuggestions.length; } /** * @param i the id of suggestions * @return the suggestion at the specified id */ public String getSuggestionAt(int i) { return mSuggestions[i]; } /** * Used to make this class parcelable. */ public static final Parcelable.Creator<SuggestionsInfo> CREATOR = new Parcelable.Creator<SuggestionsInfo>() { @Override public SuggestionsInfo createFromParcel(Parcel source) { return new SuggestionsInfo(source); } @Override public SuggestionsInfo[] newArray(int size) { return new SuggestionsInfo[size]; } }; /** * Used to make this class parcelable. */ @Override public int describeContents() { return 0; } }