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 2250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataokaimport java.lang.reflect.Constructor; 2350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka 2450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataokapublic final class InputMethodSubtypeCompatUtils { 2550f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka private static final String TAG = InputMethodSubtypeCompatUtils.class.getSimpleName(); 2650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka // Note that InputMethodSubtype(int nameId, int iconId, String locale, String mode, 2750f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka // String extraValue, boolean isAuxiliary, boolean overridesImplicitlyEnabledSubtype, int id) 2850f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka // has been introduced in API level 17 (Build.VERSION_CODE.JELLY_BEAN_MR1). 2950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka private static final Constructor<?> CONSTRUCTOR_INPUT_METHOD_SUBTYPE = 3050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka CompatUtils.getConstructor(InputMethodSubtype.class, 3150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka Integer.TYPE, Integer.TYPE, String.class, String.class, String.class, 3250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka Boolean.TYPE, Boolean.TYPE, Integer.TYPE); 3350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka static { 3450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 3550f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka if (CONSTRUCTOR_INPUT_METHOD_SUBTYPE == null) { 3650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka android.util.Log.w(TAG, "Warning!!! Constructor is not defined."); 3750f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 3850f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 3950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 4050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka private InputMethodSubtypeCompatUtils() { 4150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka // This utility class is not publicly instantiable. 4250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 4350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka 4450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka public static InputMethodSubtype newInputMethodSubtype(int nameId, int iconId, String locale, 4550f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka String mode, String extraValue, boolean isAuxiliary, 4650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka boolean overridesImplicitlyEnabledSubtype, int id) { 4750f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka if (CONSTRUCTOR_INPUT_METHOD_SUBTYPE == null 4850f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka || Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 4950f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka return new InputMethodSubtype(nameId, iconId, locale, mode, extraValue, isAuxiliary, 5050f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka overridesImplicitlyEnabledSubtype); 5150f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 5250f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka return (InputMethodSubtype) CompatUtils.newInstance(CONSTRUCTOR_INPUT_METHOD_SUBTYPE, 5350f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka nameId, iconId, locale, mode, extraValue, isAuxiliary, 5450f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka overridesImplicitlyEnabledSubtype, id); 5550f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka } 5650f9ca4acd799c7ad2abd18fcdab2a895ed32dd7Satoshi Kataoka} 57