InputMethodSubtypeCompatUtils.java revision 20ddd4cff5b0cc1c016fd6d4a98a122909658213
150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka/* 250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * Copyright (C) 2013 The Android Open Source Project 350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * 450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * Licensed under the Apache License, Version 2.0 (the "License"); 550f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * you may not use this file except in compliance with the License. 650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * You may obtain a copy of the License at 750f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * 850f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * http://www.apache.org/licenses/LICENSE-2.0 950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * 1050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * Unless required by applicable law or agreed to in writing, software 1150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * distributed under the License is distributed on an "AS IS" BASIS, 1250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * See the License for the specific language governing permissions and 1450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka * limitations under the License. 1550f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka */ 1650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka 1750f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataokapackage com.android.inputmethod.compat; 1850f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka 1950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataokaimport android.os.Build; 2050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataokaimport android.view.inputmethod.InputMethodSubtype; 2150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka 2220ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaokaimport com.android.inputmethod.latin.Constants; 2320ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka 2450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataokaimport java.lang.reflect.Constructor; 2520ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaokaimport java.lang.reflect.Method; 2650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka 2750f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataokapublic final class InputMethodSubtypeCompatUtils { 2850f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka private static final String TAG = InputMethodSubtypeCompatUtils.class.getSimpleName(); 2950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka // Note that InputMethodSubtype(int nameId, int iconId, String locale, String mode, 3050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka // String extraValue, boolean isAuxiliary, boolean overridesImplicitlyEnabledSubtype, int id) 3150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka // has been introduced in API level 17 (Build.VERSION_CODE.JELLY_BEAN_MR1). 3250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka private static final Constructor<?> CONSTRUCTOR_INPUT_METHOD_SUBTYPE = 3350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka CompatUtils.getConstructor(InputMethodSubtype.class, 3450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka Integer.TYPE, Integer.TYPE, String.class, String.class, String.class, 3550f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka Boolean.TYPE, Boolean.TYPE, Integer.TYPE); 3650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka static { 3750f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 3850f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka if (CONSTRUCTOR_INPUT_METHOD_SUBTYPE == null) { 3950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka android.util.Log.w(TAG, "Warning!!! Constructor is not defined."); 4050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 4150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 4250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 4320ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka 4420ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka // Note that {@link InputMethodSubtype#isAsciiCapable()} has been introduced in API level 19 4520ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka // (Build.VERSION_CODE.KITKAT). 4620ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka private static final Method METHOD_isAsciiCapable = CompatUtils.getMethod( 4720ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka InputMethodSubtype.class, "isAsciiCapable"); 4820ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka 4950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka private InputMethodSubtypeCompatUtils() { 5050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka // This utility class is not publicly instantiable. 5150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 5250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka 5350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka public static InputMethodSubtype newInputMethodSubtype(int nameId, int iconId, String locale, 5450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka String mode, String extraValue, boolean isAuxiliary, 5550f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka boolean overridesImplicitlyEnabledSubtype, int id) { 5650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka if (CONSTRUCTOR_INPUT_METHOD_SUBTYPE == null 5750f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka || Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 5850f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka return new InputMethodSubtype(nameId, iconId, locale, mode, extraValue, isAuxiliary, 5950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka overridesImplicitlyEnabledSubtype); 6050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 6150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka return (InputMethodSubtype) CompatUtils.newInstance(CONSTRUCTOR_INPUT_METHOD_SUBTYPE, 6250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka nameId, iconId, locale, mode, extraValue, isAuxiliary, 6350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka overridesImplicitlyEnabledSubtype, id); 6450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 6520ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka 6620ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka public static boolean isAsciiCapable(final InputMethodSubtype subtype) { 6720ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka return (Boolean)CompatUtils.invoke(subtype, false, METHOD_isAsciiCapable) 6820ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka || subtype.containsExtraValueKey(Constants.Subtype.ExtraValue.ASCII_CAPABLE); 6920ddd4cff5b0cc1c016fd6d4a98a122909658213Tadashi G. Takaoka } 7050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka} 71