InputMethodSubtype.java revision ab751aa085433e9f735d2e7603459c6c7e9d2fb0
1ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok/* 2ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * Copyright (C) 2010 The Android Open Source Project 3ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * 4ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * Licensed under the Apache License, Version 2.0 (the "License"); 5ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * you may not use this file except in compliance with the License. 6ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * You may obtain a copy of the License at 7ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * 8ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * http://www.apache.org/licenses/LICENSE-2.0 9ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * 10ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * Unless required by applicable law or agreed to in writing, software 11ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * distributed under the License is distributed on an "AS IS" BASIS, 12ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * See the License for the specific language governing permissions and 14ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * limitations under the License. 15ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 16ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 17ab751aa085433e9f735d2e7603459c6c7e9d2fb0satokpackage android.view.inputmethod; 18ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 19ab751aa085433e9f735d2e7603459c6c7e9d2fb0satokimport android.os.Parcel; 20ab751aa085433e9f735d2e7603459c6c7e9d2fb0satokimport android.os.Parcelable; 21ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 22ab751aa085433e9f735d2e7603459c6c7e9d2fb0satokimport java.util.Arrays; 23ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 24ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok/** 25ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * Information given to an {@link InputMethod} about a client connecting 26ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * to it. 27ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 28ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok/** 29ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * InputMethodSubtype is a subtype contained in the input method. Subtype can describe 30ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * locales (e.g. en_US, fr_FR...) and modes (e.g. voice, keyboard...), and is used for 31ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * IME switch. The subtype allows the system to call the specified subtype of IME directly. 32ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 33ab751aa085433e9f735d2e7603459c6c7e9d2fb0satokpublic final class InputMethodSubtype implements Parcelable { 34ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok private final int mSubtypeNameResId; 35ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok private final int mSubtypeIconResId; 36ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok private final String mSubtypeLocale; 37ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok private final int mSubtypeModeResId; 38ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok private final String mSubtypeExtraValue; 39ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok private final int mSubtypeHashCode; 40ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 41ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 42ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * Constructor 43ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @param nameId The name of the subtype 44ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @param iconId The icon of the subtype 45ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @param locale The locale supported by the subtype 46ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @param modeId The mode supported by the subtype 47ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @param extraValue The extra value of the subtype 48ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 49ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok InputMethodSubtype(int nameId, int iconId, String locale, int modeId, String extraValue) { 50ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeNameResId = nameId; 51ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeIconResId = iconId; 52ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeLocale = locale; 53ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeModeResId = modeId; 54ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeExtraValue = extraValue; 55ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeHashCode = hashCodeInternal(mSubtypeNameResId, mSubtypeIconResId, mSubtypeLocale, 56ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeModeResId, mSubtypeExtraValue); 57ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 58ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 59ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok InputMethodSubtype(Parcel source) { 60ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeNameResId = source.readInt(); 61ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeIconResId = source.readInt(); 62ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeLocale = source.readString(); 63ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeModeResId = source.readInt(); 64ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeExtraValue = source.readString(); 65ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeHashCode = hashCodeInternal(mSubtypeNameResId, mSubtypeIconResId, mSubtypeLocale, 66ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeModeResId, mSubtypeExtraValue); 67ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 68ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 69ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 70ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the name of the subtype 71ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 72ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int getNameResId() { 73ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeNameResId; 74ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 75ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 76ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 77ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the icon of the subtype 78ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 79ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int getIconResId() { 80ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeIconResId; 81ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 82ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 83ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 84ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the locale of the subtype 85ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 86ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public String getLocale() { 87ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeLocale; 88ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 89ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 90ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 91ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the mode of the subtype 92ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 93ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int getModeResId() { 94ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeModeResId; 95ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 96ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 97ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 98ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the extra value of the subtype 99ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 100ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public String getExtraValue() { 101ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeExtraValue; 102ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 103ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 104ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok @Override 105ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int hashCode() { 106ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeHashCode; 107ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 108ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 109ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok @Override 110ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public boolean equals(Object o) { 111ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok if (o instanceof InputMethodSubtype) { 112ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok InputMethodSubtype subtype = (InputMethodSubtype) o; 113ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return (subtype.getNameResId() == getNameResId()) 114ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok && (subtype.getModeResId() == getModeResId()) 115ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok && (subtype.getIconResId() == getIconResId()) 116ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok && (subtype.getLocale().equals(getLocale())) 117ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok && (subtype.getExtraValue().equals(getExtraValue())); 118ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 119ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return false; 120ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 121ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 122ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int describeContents() { 123ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return 0; 124ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 125ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 126ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public void writeToParcel(Parcel dest, int parcelableFlags) { 127ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeInt(mSubtypeNameResId); 128ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeInt(mSubtypeIconResId); 129ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeString(mSubtypeLocale); 130ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeInt(mSubtypeModeResId); 131ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeString(mSubtypeExtraValue); 132ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 133ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 134ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public static final Parcelable.Creator<InputMethodSubtype> CREATOR 135ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok = new Parcelable.Creator<InputMethodSubtype>() { 136ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public InputMethodSubtype createFromParcel(Parcel source) { 137ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return new InputMethodSubtype(source); 138ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 139ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 140ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public InputMethodSubtype[] newArray(int size) { 141ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return new InputMethodSubtype[size]; 142ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 143ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok }; 144ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 145ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok private static int hashCodeInternal(int nameResId, int iconResId, String locale, 146ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok int modeResId, String extraValue) { 147ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return Arrays.hashCode(new Object[] {nameResId, iconResId, locale, modeResId, extraValue}); 148ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 149ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok}