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