InputMethodInfo.java revision e7c6998e0a953ae55487d4fe122739646f9280aa
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); you may not 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this file except in compliance with the License. You may obtain a copy of 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * License for the specific language governing permissions and limitations under 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view.inputmethod; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ApplicationInfo; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.PackageManager; 26e7c6998e0a953ae55487d4fe122739646f9280aasatokimport android.content.pm.PackageManager.NameNotFoundException; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ResolveInfo; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ServiceInfo; 2920cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackbornimport android.content.res.Resources; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.XmlResourceParser; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Xml; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 407eb84256e57ce85bece610e6a01e20fa12e0f3fesatokimport java.util.ArrayList; 41e7c6998e0a953ae55487d4fe122739646f9280aasatokimport java.util.List; 42e7c6998e0a953ae55487d4fe122739646f9280aasatokimport java.util.Map; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class is used to specify meta information of an input method. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class InputMethodInfo implements Parcelable { 48eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn static final String TAG = "InputMethodInfo"; 49ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Service that implements this input method component. 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ResolveInfo mService; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The unique string Id to identify the input method. This is generated 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from the input method component. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String mId; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The input method setting activity's name, used by the system settings to 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * launch the setting activity of this input method. 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String mSettingsActivityName; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The resource in the input method's .apk that holds a boolean indicating 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * whether it should be considered the default input method for this 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system. This is a resource ID instead of the final value so that it 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can change based on the configuration (in particular locale). 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int mIsDefaultResId; 747eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 757eb84256e57ce85bece610e6a01e20fa12e0f3fesatok /** 767eb84256e57ce85bece610e6a01e20fa12e0f3fesatok * The array of the subtypes. 777eb84256e57ce85bece610e6a01e20fa12e0f3fesatok */ 787eb84256e57ce85bece610e6a01e20fa12e0f3fesatok private final ArrayList<InputMethodSubtype> mSubtypes = new ArrayList<InputMethodSubtype>(); 797eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor. 82e7c6998e0a953ae55487d4fe122739646f9280aasatok * 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The Context in which we are parsing the input method. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param service The ResolveInfo returned from the package manager about 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this input method's component. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputMethodInfo(Context context, ResolveInfo service) 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws XmlPullParserException, IOException { 89e7c6998e0a953ae55487d4fe122739646f9280aasatok this(context, service, null); 90e7c6998e0a953ae55487d4fe122739646f9280aasatok } 91e7c6998e0a953ae55487d4fe122739646f9280aasatok 92e7c6998e0a953ae55487d4fe122739646f9280aasatok /** 93e7c6998e0a953ae55487d4fe122739646f9280aasatok * Constructor. 94e7c6998e0a953ae55487d4fe122739646f9280aasatok * 95e7c6998e0a953ae55487d4fe122739646f9280aasatok * @param context The Context in which we are parsing the input method. 96e7c6998e0a953ae55487d4fe122739646f9280aasatok * @param service The ResolveInfo returned from the package manager about 97e7c6998e0a953ae55487d4fe122739646f9280aasatok * this input method's component. 98e7c6998e0a953ae55487d4fe122739646f9280aasatok * @param additionalSubtypes additional subtypes being added to this InputMethodInfo 99e7c6998e0a953ae55487d4fe122739646f9280aasatok * @hide 100e7c6998e0a953ae55487d4fe122739646f9280aasatok */ 101e7c6998e0a953ae55487d4fe122739646f9280aasatok public InputMethodInfo(Context context, ResolveInfo service, 102e7c6998e0a953ae55487d4fe122739646f9280aasatok Map<String, List<InputMethodSubtype>> additionalSubtypesMap) 103e7c6998e0a953ae55487d4fe122739646f9280aasatok throws XmlPullParserException, IOException { 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = service; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceInfo si = service.serviceInfo; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mId = new ComponentName(si.packageName, si.name).flattenToShortString(); 1077eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PackageManager pm = context.getPackageManager(); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String settingsActivityComponent = null; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int isDefaultResId = 0; 1117eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XmlResourceParser parser = null; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parser = si.loadXmlMetaData(pm, InputMethod.SERVICE_META_DATA); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parser == null) { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new XmlPullParserException("No " 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + InputMethod.SERVICE_META_DATA + " meta-data"); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12020cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn Resources res = pm.getResourcesForApplication(si.applicationInfo); 12120cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AttributeSet attrs = Xml.asAttributeSet(parser); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int type; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && type != XmlPullParser.START_TAG) { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String nodeName = parser.getName(); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!"input-method".equals(nodeName)) { 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new XmlPullParserException( 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Meta-data does not start with input-method tag"); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13520cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn TypedArray sa = res.obtainAttributes(attrs, 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.InputMethod); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project settingsActivityComponent = sa.getString( 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.InputMethod_settingsActivity); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isDefaultResId = sa.getResourceId( 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.InputMethod_isDefault, 0); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sa.recycle(); 1427eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 1437eb84256e57ce85bece610e6a01e20fa12e0f3fesatok final int depth = parser.getDepth(); 1447eb84256e57ce85bece610e6a01e20fa12e0f3fesatok // Parse all subtypes 1457eb84256e57ce85bece610e6a01e20fa12e0f3fesatok while (((type = parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth) 1467eb84256e57ce85bece610e6a01e20fa12e0f3fesatok && type != XmlPullParser.END_DOCUMENT) { 147ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok if (type == XmlPullParser.START_TAG) { 148ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok nodeName = parser.getName(); 149ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok if (!"subtype".equals(nodeName)) { 150ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok throw new XmlPullParserException( 151ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok "Meta-data in input-method does not start with subtype tag"); 152ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 153ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok final TypedArray a = res.obtainAttributes( 154ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok attrs, com.android.internal.R.styleable.InputMethod_Subtype); 155ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok InputMethodSubtype subtype = new InputMethodSubtype( 156ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok a.getResourceId(com.android.internal.R.styleable 157ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok .InputMethod_Subtype_label, 0), 158ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok a.getResourceId(com.android.internal.R.styleable 159ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok .InputMethod_Subtype_icon, 0), 160ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok a.getString(com.android.internal.R.styleable 161ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok .InputMethod_Subtype_imeSubtypeLocale), 1629ef0283bdcd9534cc09ae37eb2b78771b95247b5satok a.getString(com.android.internal.R.styleable 1639ef0283bdcd9534cc09ae37eb2b78771b95247b5satok .InputMethod_Subtype_imeSubtypeMode), 164ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok a.getString(com.android.internal.R.styleable 1654f31353cb3b00c77c9420ef27ec949fd570ede3bsatok .InputMethod_Subtype_imeSubtypeExtraValue), 1664f31353cb3b00c77c9420ef27ec949fd570ede3bsatok a.getBoolean(com.android.internal.R.styleable 1674f31353cb3b00c77c9420ef27ec949fd570ede3bsatok .InputMethod_Subtype_isAuxiliary, false)); 168ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypes.add(subtype); 1697eb84256e57ce85bece610e6a01e20fa12e0f3fesatok } 1707eb84256e57ce85bece610e6a01e20fa12e0f3fesatok } 17120cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn } catch (NameNotFoundException e) { 17220cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn throw new XmlPullParserException( 17320cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn "Unable to create context for: " + si.packageName); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parser != null) parser.close(); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 177e7c6998e0a953ae55487d4fe122739646f9280aasatok 178e7c6998e0a953ae55487d4fe122739646f9280aasatok if (additionalSubtypesMap != null && additionalSubtypesMap.containsKey(mId)) { 179e7c6998e0a953ae55487d4fe122739646f9280aasatok final List<InputMethodSubtype> additionalSubtypes = additionalSubtypesMap.get(mId); 180e7c6998e0a953ae55487d4fe122739646f9280aasatok final int N = additionalSubtypes.size(); 181e7c6998e0a953ae55487d4fe122739646f9280aasatok for (int i = 0; i < N; ++i) { 182e7c6998e0a953ae55487d4fe122739646f9280aasatok final InputMethodSubtype subtype = additionalSubtypes.get(i); 183e7c6998e0a953ae55487d4fe122739646f9280aasatok if (!mSubtypes.contains(subtype)) { 184e7c6998e0a953ae55487d4fe122739646f9280aasatok mSubtypes.add(subtype); 185e7c6998e0a953ae55487d4fe122739646f9280aasatok } 186e7c6998e0a953ae55487d4fe122739646f9280aasatok } 187e7c6998e0a953ae55487d4fe122739646f9280aasatok } 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSettingsActivityName = settingsActivityComponent; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsDefaultResId = isDefaultResId; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InputMethodInfo(Parcel source) { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mId = source.readString(); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSettingsActivityName = source.readString(); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsDefaultResId = source.readInt(); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = ResolveInfo.CREATOR.createFromParcel(source); 1977eb84256e57ce85bece610e6a01e20fa12e0f3fesatok source.readTypedList(mSubtypes, InputMethodSubtype.CREATOR); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1997eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Temporary API for creating a built-in input method. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputMethodInfo(String packageName, String className, 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence label, String settingsActivity) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResolveInfo ri = new ResolveInfo(); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceInfo si = new ServiceInfo(); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ApplicationInfo ai = new ApplicationInfo(); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ai.packageName = packageName; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ai.enabled = true; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.applicationInfo = ai; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.enabled = true; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.packageName = packageName; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.name = className; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.exported = true; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.nonLocalizedLabel = label; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ri.serviceInfo = si; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = ri; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mId = new ComponentName(si.packageName, si.name).flattenToShortString(); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSettingsActivityName = settingsActivity; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsDefaultResId = 0; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2227eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a unique ID for this input method. The ID is generated from 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the package and class name implementing the method. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getId() { 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mId; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2307eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the .apk package that implements this input method. 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getPackageName() { 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mService.serviceInfo.packageName; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2377eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the class name of the service component that implements 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this input method. 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getServiceName() { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mService.serviceInfo.name; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 247c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Return the raw information about the Service implementing this 248c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * input method. Do not modify the returned object. 249c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 250c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project public ServiceInfo getServiceInfo() { 251c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project return mService.serviceInfo; 252c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 253c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project 254c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project /** 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the component of the service that implements this input 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method. 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName getComponent() { 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ComponentName(mService.serviceInfo.packageName, 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.serviceInfo.name); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2627eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Load the user-displayed label for this input method. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm Supply a PackageManager used to load the input method's 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources. 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadLabel(PackageManager pm) { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mService.loadLabel(pm); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2727eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Load the user-displayed icon for this input method. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm Supply a PackageManager used to load the input method's 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Drawable loadIcon(PackageManager pm) { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mService.loadIcon(pm); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2827eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the class name of an activity that provides a settings UI for 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input method. You can launch this activity be starting it with 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an {@link android.content.Intent} whose action is MAIN and with an 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * explicit {@link android.content.ComponentName} 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * composed of {@link #getPackageName} and the class name returned here. 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>A null will be returned if there is no settings activity associated 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the input method. 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSettingsActivity() { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSettingsActivityName; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2967eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2977eb84256e57ce85bece610e6a01e20fa12e0f3fesatok /** 298586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa * Return the count of the subtypes of Input Method. 2997eb84256e57ce85bece610e6a01e20fa12e0f3fesatok */ 300586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa public int getSubtypeCount() { 301586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa return mSubtypes.size(); 302586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa } 303586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa 304586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa /** 305586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa * Return the Input Method's subtype at the specified index. 306586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa * 307586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa * @param index the index of the subtype to return. 308586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa */ 309586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa public InputMethodSubtype getSubtypeAt(int index) { 310586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa return mSubtypes.get(index); 3117eb84256e57ce85bece610e6a01e20fa12e0f3fesatok } 3127eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the resource identifier of a resource inside of this input 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method's .apk that determines whether it should be considered a 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default input method for the system. 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getIsDefaultResourceId() { 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIsDefaultResId; 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3217eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void dump(Printer pw, String prefix) { 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "mId=" + mId 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " mSettingsActivityName=" + mSettingsActivityName); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "mIsDefaultResId=0x" 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(mIsDefaultResId)); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "Service:"); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.dump(pw, prefix + " "); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 333eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return "InputMethodInfo{" + mId 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", settings: " 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + mSettingsActivityName + "}"; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to test whether the given parameter object is an 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InputMethodInfo} and its Id is the same to this one. 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the given parameter object is an 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InputMethodInfo} and its Id is the same to this one. 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean equals(Object o) { 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o == this) return true; 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o == null) return false; 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!(o instanceof InputMethodInfo)) return false; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InputMethodInfo obj = (InputMethodInfo) o; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mId.equals(obj.mId); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 355c50232d517d7b99ae3c3e073f04eb6799c876e8csatok 356c50232d517d7b99ae3c3e073f04eb6799c876e8csatok @Override 357c50232d517d7b99ae3c3e073f04eb6799c876e8csatok public int hashCode() { 358c50232d517d7b99ae3c3e073f04eb6799c876e8csatok return mId.hashCode(); 359c50232d517d7b99ae3c3e073f04eb6799c876e8csatok } 360c50232d517d7b99ae3c3e073f04eb6799c876e8csatok 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to package this object into a {@link Parcel}. 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dest The {@link Parcel} to be written. 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags The flags used for parceling. 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mId); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mSettingsActivityName); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mIsDefaultResId); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.writeToParcel(dest, flags); 3727eb84256e57ce85bece610e6a01e20fa12e0f3fesatok dest.writeTypedList(mSubtypes); 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to make this class parcelable. 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3787eb84256e57ce85bece610e6a01e20fa12e0f3fesatok public static final Parcelable.Creator<InputMethodInfo> CREATOR 3797eb84256e57ce85bece610e6a01e20fa12e0f3fesatok = new Parcelable.Creator<InputMethodInfo>() { 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputMethodInfo createFromParcel(Parcel source) { 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new InputMethodInfo(source); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputMethodInfo[] newArray(int size) { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new InputMethodInfo[size]; 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 393