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