InputMethodSubtype.java revision af4bf400abab86baee44dacbcdf13444d06ee46e
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; 379ef0283bdcd9534cc09ae37eb2b78771b95247b5satok private final String mSubtypeMode; 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 */ 499ef0283bdcd9534cc09ae37eb2b78771b95247b5satok InputMethodSubtype(int nameId, int iconId, String locale, String mode, String extraValue) { 50ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeNameResId = nameId; 51ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeIconResId = iconId; 52af4bf400abab86baee44dacbcdf13444d06ee46esatok mSubtypeLocale = locale != null ? locale : ""; 53af4bf400abab86baee44dacbcdf13444d06ee46esatok mSubtypeMode = mode != null ? mode : ""; 54af4bf400abab86baee44dacbcdf13444d06ee46esatok mSubtypeExtraValue = extraValue != null ? extraValue : ""; 55ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeHashCode = hashCodeInternal(mSubtypeNameResId, mSubtypeIconResId, mSubtypeLocale, 569ef0283bdcd9534cc09ae37eb2b78771b95247b5satok mSubtypeMode, mSubtypeExtraValue); 57ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 58ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 59ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok InputMethodSubtype(Parcel source) { 60af4bf400abab86baee44dacbcdf13444d06ee46esatok String s; 61ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeNameResId = source.readInt(); 62ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeIconResId = source.readInt(); 63af4bf400abab86baee44dacbcdf13444d06ee46esatok s = source.readString(); 64af4bf400abab86baee44dacbcdf13444d06ee46esatok mSubtypeLocale = s != null ? s : ""; 65af4bf400abab86baee44dacbcdf13444d06ee46esatok s = source.readString(); 66af4bf400abab86baee44dacbcdf13444d06ee46esatok mSubtypeMode = s != null ? s : ""; 67af4bf400abab86baee44dacbcdf13444d06ee46esatok s = source.readString(); 68af4bf400abab86baee44dacbcdf13444d06ee46esatok mSubtypeExtraValue = s != null ? s : ""; 69ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypeHashCode = hashCodeInternal(mSubtypeNameResId, mSubtypeIconResId, mSubtypeLocale, 709ef0283bdcd9534cc09ae37eb2b78771b95247b5satok mSubtypeMode, mSubtypeExtraValue); 71ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 72ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 73ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 74ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the name of the subtype 75ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 76ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int getNameResId() { 77ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeNameResId; 78ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 79ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 80ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 81ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the icon of the subtype 82ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 83ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int getIconResId() { 84ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeIconResId; 85ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 86ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 87ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 88ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the locale of the subtype 89ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 90ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public String getLocale() { 91ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeLocale; 92ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 93ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 94ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 95ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the mode of the subtype 96ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 979ef0283bdcd9534cc09ae37eb2b78771b95247b5satok public String getMode() { 989ef0283bdcd9534cc09ae37eb2b78771b95247b5satok return mSubtypeMode; 99ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 100ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 101ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok /** 102ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok * @return the extra value of the subtype 103ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok */ 104ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public String getExtraValue() { 105ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeExtraValue; 106ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 107ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 108ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok @Override 109ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int hashCode() { 110ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return mSubtypeHashCode; 111ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 112ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 113ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok @Override 114ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public boolean equals(Object o) { 115ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok if (o instanceof InputMethodSubtype) { 116ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok InputMethodSubtype subtype = (InputMethodSubtype) o; 117af4bf400abab86baee44dacbcdf13444d06ee46esatok return (subtype.hashCode() == hashCode()) 118af4bf400abab86baee44dacbcdf13444d06ee46esatok && (subtype.getNameResId() == getNameResId()) 119af4bf400abab86baee44dacbcdf13444d06ee46esatok && (subtype.getMode().equals(getMode())) 120ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok && (subtype.getIconResId() == getIconResId()) 121ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok && (subtype.getLocale().equals(getLocale())) 122ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok && (subtype.getExtraValue().equals(getExtraValue())); 123ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 124ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return false; 125ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 126ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 127ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public int describeContents() { 128ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return 0; 129ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 130ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 131ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public void writeToParcel(Parcel dest, int parcelableFlags) { 132ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeInt(mSubtypeNameResId); 133ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeInt(mSubtypeIconResId); 134ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeString(mSubtypeLocale); 1359ef0283bdcd9534cc09ae37eb2b78771b95247b5satok dest.writeString(mSubtypeMode); 136ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok dest.writeString(mSubtypeExtraValue); 137ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 138ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 139ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public static final Parcelable.Creator<InputMethodSubtype> CREATOR 140ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok = new Parcelable.Creator<InputMethodSubtype>() { 141ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public InputMethodSubtype createFromParcel(Parcel source) { 142ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return new InputMethodSubtype(source); 143ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 144ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 145ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok public InputMethodSubtype[] newArray(int size) { 146ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok return new InputMethodSubtype[size]; 147ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 148ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok }; 149ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 150ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok private static int hashCodeInternal(int nameResId, int iconResId, String locale, 1519ef0283bdcd9534cc09ae37eb2b78771b95247b5satok String mode, String extraValue) { 1529ef0283bdcd9534cc09ae37eb2b78771b95247b5satok return Arrays.hashCode(new Object[] {nameResId, iconResId, locale, mode, extraValue}); 153ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 154af4bf400abab86baee44dacbcdf13444d06ee46esatok} 155