blob: 78bc1a9678f198c256bbc78262889ee4efb8ba8a [file] [log] [blame]
/*
* 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) {
this(suggestionsAttributes, suggestions, 0, 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;
}
}