InputMethodInfo.java revision 4f31353cb3b00c77c9420ef27ec949fd570ede3b
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; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ResolveInfo; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ServiceInfo; 2820cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackbornimport android.content.pm.PackageManager.NameNotFoundException; 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; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class is used to specify meta information of an input method. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class InputMethodInfo implements Parcelable { 46eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn static final String TAG = "InputMethodInfo"; 47ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Service that implements this input method component. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ResolveInfo mService; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The unique string Id to identify the input method. This is generated 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from the input method component. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String mId; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The input method setting activity's name, used by the system settings to 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * launch the setting activity of this input method. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String mSettingsActivityName; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The resource in the input method's .apk that holds a boolean indicating 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * whether it should be considered the default input method for this 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system. This is a resource ID instead of the final value so that it 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can change based on the configuration (in particular locale). 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int mIsDefaultResId; 727eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 737eb84256e57ce85bece610e6a01e20fa12e0f3fesatok /** 747eb84256e57ce85bece610e6a01e20fa12e0f3fesatok * The array of the subtypes. 757eb84256e57ce85bece610e6a01e20fa12e0f3fesatok */ 767eb84256e57ce85bece610e6a01e20fa12e0f3fesatok private final ArrayList<InputMethodSubtype> mSubtypes = new ArrayList<InputMethodSubtype>(); 777eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context The Context in which we are parsing the input method. 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param service The ResolveInfo returned from the package manager about 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this input method's component. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputMethodInfo(Context context, ResolveInfo service) 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws XmlPullParserException, IOException { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = service; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceInfo si = service.serviceInfo; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mId = new ComponentName(si.packageName, si.name).flattenToShortString(); 907eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PackageManager pm = context.getPackageManager(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String settingsActivityComponent = null; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int isDefaultResId = 0; 947eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project XmlResourceParser parser = null; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parser = si.loadXmlMetaData(pm, InputMethod.SERVICE_META_DATA); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parser == null) { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new XmlPullParserException("No " 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + InputMethod.SERVICE_META_DATA + " meta-data"); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10320cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn Resources res = pm.getResourcesForApplication(si.applicationInfo); 10420cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AttributeSet attrs = Xml.asAttributeSet(parser); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int type; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && type != XmlPullParser.START_TAG) { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String nodeName = parser.getName(); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!"input-method".equals(nodeName)) { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new XmlPullParserException( 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Meta-data does not start with input-method tag"); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11820cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn TypedArray sa = res.obtainAttributes(attrs, 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.InputMethod); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project settingsActivityComponent = sa.getString( 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.InputMethod_settingsActivity); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isDefaultResId = sa.getResourceId( 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.InputMethod_isDefault, 0); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sa.recycle(); 1257eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 1267eb84256e57ce85bece610e6a01e20fa12e0f3fesatok final int depth = parser.getDepth(); 1277eb84256e57ce85bece610e6a01e20fa12e0f3fesatok // Parse all subtypes 1287eb84256e57ce85bece610e6a01e20fa12e0f3fesatok while (((type = parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth) 1297eb84256e57ce85bece610e6a01e20fa12e0f3fesatok && type != XmlPullParser.END_DOCUMENT) { 130ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok if (type == XmlPullParser.START_TAG) { 131ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok nodeName = parser.getName(); 132ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok if (!"subtype".equals(nodeName)) { 133ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok throw new XmlPullParserException( 134ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok "Meta-data in input-method does not start with subtype tag"); 135ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok } 136ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok final TypedArray a = res.obtainAttributes( 137ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok attrs, com.android.internal.R.styleable.InputMethod_Subtype); 138ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok InputMethodSubtype subtype = new InputMethodSubtype( 139ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok a.getResourceId(com.android.internal.R.styleable 140ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok .InputMethod_Subtype_label, 0), 141ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok a.getResourceId(com.android.internal.R.styleable 142ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok .InputMethod_Subtype_icon, 0), 143ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok a.getString(com.android.internal.R.styleable 144ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok .InputMethod_Subtype_imeSubtypeLocale), 1459ef0283bdcd9534cc09ae37eb2b78771b95247b5satok a.getString(com.android.internal.R.styleable 1469ef0283bdcd9534cc09ae37eb2b78771b95247b5satok .InputMethod_Subtype_imeSubtypeMode), 147ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok a.getString(com.android.internal.R.styleable 1484f31353cb3b00c77c9420ef27ec949fd570ede3bsatok .InputMethod_Subtype_imeSubtypeExtraValue), 1494f31353cb3b00c77c9420ef27ec949fd570ede3bsatok a.getBoolean(com.android.internal.R.styleable 1504f31353cb3b00c77c9420ef27ec949fd570ede3bsatok .InputMethod_Subtype_isAuxiliary, false)); 151ab751aa085433e9f735d2e7603459c6c7e9d2fb0satok mSubtypes.add(subtype); 1527eb84256e57ce85bece610e6a01e20fa12e0f3fesatok } 1537eb84256e57ce85bece610e6a01e20fa12e0f3fesatok } 15420cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn } catch (NameNotFoundException e) { 15520cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn throw new XmlPullParserException( 15620cb56e26e91df91bd64d4251222e0d421cdbe47Dianne Hackborn "Unable to create context for: " + si.packageName); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (parser != null) parser.close(); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSettingsActivityName = settingsActivityComponent; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsDefaultResId = isDefaultResId; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InputMethodInfo(Parcel source) { 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mId = source.readString(); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSettingsActivityName = source.readString(); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsDefaultResId = source.readInt(); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = ResolveInfo.CREATOR.createFromParcel(source); 1697eb84256e57ce85bece610e6a01e20fa12e0f3fesatok source.readTypedList(mSubtypes, InputMethodSubtype.CREATOR); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1717eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Temporary API for creating a built-in input method. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputMethodInfo(String packageName, String className, 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence label, String settingsActivity) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResolveInfo ri = new ResolveInfo(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceInfo si = new ServiceInfo(); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ApplicationInfo ai = new ApplicationInfo(); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ai.packageName = packageName; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ai.enabled = true; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.applicationInfo = ai; 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.enabled = true; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.packageName = packageName; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.name = className; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.exported = true; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project si.nonLocalizedLabel = label; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ri.serviceInfo = si; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = ri; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mId = new ComponentName(si.packageName, si.name).flattenToShortString(); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSettingsActivityName = settingsActivity; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsDefaultResId = 0; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1947eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a unique ID for this input method. The ID is generated from 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the package and class name implementing the method. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getId() { 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mId; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2027eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the .apk package that implements this input method. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getPackageName() { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mService.serviceInfo.packageName; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2097eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the class name of the service component that implements 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this input method. 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getServiceName() { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mService.serviceInfo.name; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 219c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Return the raw information about the Service implementing this 220c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * input method. Do not modify the returned object. 221c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project */ 222c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project public ServiceInfo getServiceInfo() { 223c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project return mService.serviceInfo; 224c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project } 225c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project 226c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project /** 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the component of the service that implements this input 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method. 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName getComponent() { 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ComponentName(mService.serviceInfo.packageName, 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.serviceInfo.name); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2347eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Load the user-displayed label for this input method. 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm Supply a PackageManager used to load the input method's 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources. 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence loadLabel(PackageManager pm) { 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mService.loadLabel(pm); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2447eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Load the user-displayed icon for this input method. 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pm Supply a PackageManager used to load the input method's 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Drawable loadIcon(PackageManager pm) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mService.loadIcon(pm); 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2547eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the class name of an activity that provides a settings UI for 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input method. You can launch this activity be starting it with 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an {@link android.content.Intent} whose action is MAIN and with an 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * explicit {@link android.content.ComponentName} 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * composed of {@link #getPackageName} and the class name returned here. 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>A null will be returned if there is no settings activity associated 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the input method. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSettingsActivity() { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSettingsActivityName; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2687eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2697eb84256e57ce85bece610e6a01e20fa12e0f3fesatok /** 270586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa * Return the count of the subtypes of Input Method. 2717eb84256e57ce85bece610e6a01e20fa12e0f3fesatok */ 272586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa public int getSubtypeCount() { 273586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa return mSubtypes.size(); 274586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa } 275586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa 276586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa /** 277586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa * Return the Input Method's subtype at the specified index. 278586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa * 279586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa * @param index the index of the subtype to return. 280586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa */ 281586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa public InputMethodSubtype getSubtypeAt(int index) { 282586f051375d8d7aeece05329921f9f66fc6164cbKen Wakasa return mSubtypes.get(index); 2837eb84256e57ce85bece610e6a01e20fa12e0f3fesatok } 2847eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the resource identifier of a resource inside of this input 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method's .apk that determines whether it should be considered a 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default input method for the system. 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getIsDefaultResourceId() { 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIsDefaultResId; 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2937eb84256e57ce85bece610e6a01e20fa12e0f3fesatok 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void dump(Printer pw, String prefix) { 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "mId=" + mId 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " mSettingsActivityName=" + mSettingsActivityName); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "mIsDefaultResId=0x" 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(mIsDefaultResId)); 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + "Service:"); 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.dump(pw, prefix + " "); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 305eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return "InputMethodInfo{" + mId 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", settings: " 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + mSettingsActivityName + "}"; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to test whether the given parameter object is an 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InputMethodInfo} and its Id is the same to this one. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the given parameter object is an 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link InputMethodInfo} and its Id is the same to this one. 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean equals(Object o) { 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o == this) return true; 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o == null) return false; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!(o instanceof InputMethodInfo)) return false; 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InputMethodInfo obj = (InputMethodInfo) o; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mId.equals(obj.mId); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 327c50232d517d7b99ae3c3e073f04eb6799c876e8csatok 328c50232d517d7b99ae3c3e073f04eb6799c876e8csatok @Override 329c50232d517d7b99ae3c3e073f04eb6799c876e8csatok public int hashCode() { 330c50232d517d7b99ae3c3e073f04eb6799c876e8csatok return mId.hashCode(); 331c50232d517d7b99ae3c3e073f04eb6799c876e8csatok } 332c50232d517d7b99ae3c3e073f04eb6799c876e8csatok 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to package this object into a {@link Parcel}. 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dest The {@link Parcel} to be written. 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags The flags used for parceling. 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mId); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mSettingsActivityName); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mIsDefaultResId); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.writeToParcel(dest, flags); 3447eb84256e57ce85bece610e6a01e20fa12e0f3fesatok dest.writeTypedList(mSubtypes); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to make this class parcelable. 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3507eb84256e57ce85bece610e6a01e20fa12e0f3fesatok public static final Parcelable.Creator<InputMethodInfo> CREATOR 3517eb84256e57ce85bece610e6a01e20fa12e0f3fesatok = new Parcelable.Creator<InputMethodInfo>() { 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputMethodInfo createFromParcel(Parcel source) { 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new InputMethodInfo(source); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputMethodInfo[] newArray(int size) { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new InputMethodInfo[size]; 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 365