1610f1dc8553cf2ed97e763a06a19380c4a6cd636satok/*
2610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * Copyright (C) 2011 The Android Open Source Project
3610f1dc8553cf2ed97e763a06a19380c4a6cd636satok *
4610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * Licensed under the Apache License, Version 2.0 (the "License");
5610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * you may not use this file except in compliance with the License.
6610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * You may obtain a copy of the License at
7610f1dc8553cf2ed97e763a06a19380c4a6cd636satok *
8610f1dc8553cf2ed97e763a06a19380c4a6cd636satok *      http://www.apache.org/licenses/LICENSE-2.0
9610f1dc8553cf2ed97e763a06a19380c4a6cd636satok *
10610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * Unless required by applicable law or agreed to in writing, software
11610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * distributed under the License is distributed on an "AS IS" BASIS,
12610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * See the License for the specific language governing permissions and
14610f1dc8553cf2ed97e763a06a19380c4a6cd636satok * limitations under the License.
15610f1dc8553cf2ed97e763a06a19380c4a6cd636satok */
16610f1dc8553cf2ed97e763a06a19380c4a6cd636satok
17610f1dc8553cf2ed97e763a06a19380c4a6cd636satokpackage com.android.inputmethod.compat;
18610f1dc8553cf2ed97e763a06a19380c4a6cd636satok
19610f1dc8553cf2ed97e763a06a19380c4a6cd636satokimport android.content.Context;
20610f1dc8553cf2ed97e763a06a19380c4a6cd636satokimport android.os.IBinder;
21610f1dc8553cf2ed97e763a06a19380c4a6cd636satokimport android.view.inputmethod.InputMethodManager;
2255d28fd1b2631a63542a647f693d8a8ed749bcf7Tadashi G. Takaoka
23610f1dc8553cf2ed97e763a06a19380c4a6cd636satokimport java.lang.reflect.Method;
24610f1dc8553cf2ed97e763a06a19380c4a6cd636satok
25a28a05e971cc242b338331a3b78276fa95188d19Tadashi G. Takaokapublic final class InputMethodManagerCompatWrapper {
26b6ca354431367b625daf9fff5fbe4b1f5ef996abKen Wakasa    // Note that InputMethodManager.switchToNextInputMethod() has been introduced
27b6ca354431367b625daf9fff5fbe4b1f5ef996abKen Wakasa    // in API level 16 (Build.VERSION_CODES.JELLY_BEAN).
2881d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka    private static final Method METHOD_switchToNextInputMethod = CompatUtils.getMethod(
2903a1c442aeddbd511be92e11465b6206d2ca976cTadashi G. Takaoka            InputMethodManager.class, "switchToNextInputMethod", IBinder.class, boolean.class);
30610f1dc8553cf2ed97e763a06a19380c4a6cd636satok
318ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa    // Note that InputMethodManager.shouldOfferSwitchingToNextInputMethod() has been introduced
328ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa    // in API level 19 (Build.VERSION_CODES.KITKAT).
338ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa    private static final Method METHOD_shouldOfferSwitchingToNextInputMethod =
348ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa            CompatUtils.getMethod(InputMethodManager.class,
358ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa                    "shouldOfferSwitchingToNextInputMethod", IBinder.class);
368ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa
376fbbab3b8442ad010c53dc53a09535f7b0ef0323Tadashi G. Takaoka    public final InputMethodManager mImm;
3881d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka
396fbbab3b8442ad010c53dc53a09535f7b0ef0323Tadashi G. Takaoka    public InputMethodManagerCompatWrapper(final Context context) {
406fbbab3b8442ad010c53dc53a09535f7b0ef0323Tadashi G. Takaoka        mImm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
41610f1dc8553cf2ed97e763a06a19380c4a6cd636satok    }
42610f1dc8553cf2ed97e763a06a19380c4a6cd636satok
436fbbab3b8442ad010c53dc53a09535f7b0ef0323Tadashi G. Takaoka    public boolean switchToNextInputMethod(final IBinder token, final boolean onlyCurrentIme) {
44b6ca354431367b625daf9fff5fbe4b1f5ef996abKen Wakasa        return (Boolean)CompatUtils.invoke(mImm, false /* defaultValue */,
45b6ca354431367b625daf9fff5fbe4b1f5ef996abKen Wakasa                METHOD_switchToNextInputMethod, token, onlyCurrentIme);
4681d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka    }
478ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa
488ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa    public boolean shouldOfferSwitchingToNextInputMethod(final IBinder token) {
498ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa        return (Boolean)CompatUtils.invoke(mImm, false /* defaultValue */,
508ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa                METHOD_shouldOfferSwitchingToNextInputMethod, token);
518ba4f33709e6c40ade96922f88feace6e4b75b56Yohei Yukawa    }
52610f1dc8553cf2ed97e763a06a19380c4a6cd636satok}
53