115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2008 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.view; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawaimport com.android.internal.annotations.GuardedBy; 20aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 21aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawaimport android.annotation.NonNull; 22aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawaimport android.annotation.Nullable; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.inputmethod.CompletionInfo; 31cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunneimport android.view.inputmethod.CorrectionInfo; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.inputmethod.ExtractedTextRequest; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.inputmethod.InputConnection; 349f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawaimport android.view.inputmethod.InputConnectionInspector; 359f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawaimport android.view.inputmethod.InputConnectionInspector.MissingMethodFlags; 36152944f4909c47917473293b258d266435c6ab35Yohei Yukawaimport android.view.inputmethod.InputContentInfo; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawapublic abstract class IInputConnectionWrapper extends IInputContext.Stub { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final String TAG = "IInputConnectionWrapper"; 40a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_GET_TEXT_AFTER_CURSOR = 10; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_GET_TEXT_BEFORE_CURSOR = 20; 43a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani private static final int DO_GET_SELECTED_TEXT = 25; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_GET_CURSOR_CAPS_MODE = 30; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_GET_EXTRACTED_TEXT = 40; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_COMMIT_TEXT = 50; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_COMMIT_COMPLETION = 55; 48cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne private static final int DO_COMMIT_CORRECTION = 56; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_SET_SELECTION = 57; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_PERFORM_EDITOR_ACTION = 58; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_PERFORM_CONTEXT_MENU_ACTION = 59; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_SET_COMPOSING_TEXT = 60; 53a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani private static final int DO_SET_COMPOSING_REGION = 63; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_FINISH_COMPOSING_TEXT = 65; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_SEND_KEY_EVENT = 70; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_DELETE_SURROUNDING_TEXT = 80; 57c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa private static final int DO_DELETE_SURROUNDING_TEXT_IN_CODE_POINTS = 81; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_BEGIN_BATCH_EDIT = 90; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_END_BATCH_EDIT = 95; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_REPORT_FULLSCREEN_MODE = 100; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_PERFORM_PRIVATE_COMMAND = 120; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_CLEAR_META_KEY_STATES = 130; 63a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa private static final int DO_REQUEST_UPDATE_CURSOR_ANCHOR_INFO = 140; 649f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa private static final int DO_CLOSE_CONNECTION = 150; 65adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa private static final int DO_COMMIT_CONTENT = 160; 66a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 67aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa @GuardedBy("mLock") 68aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa @Nullable 69aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa private InputConnection mInputConnection; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Looper mMainLooper; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Handler mH; 73aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa private Object mLock = new Object(); 74aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa @GuardedBy("mLock") 75aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa private boolean mFinished = false; 761544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa @GuardedBy("mLock") 771544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa private String mInputMethodId; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static class SomeArgs { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object arg1; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object arg2; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IInputContextCallback callback; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int seq; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class MyHandler extends Handler { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MyHandler(Looper looper) { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(looper); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void handleMessage(Message msg) { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project executeMessage(msg); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 97aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa public IInputConnectionWrapper(Looper mainLooper, @NonNull InputConnection inputConnection) { 98aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa mInputConnection = inputConnection; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainLooper = mainLooper; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mH = new MyHandler(mMainLooper); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 103aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa @Nullable 104aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa public InputConnection getInputConnection() { 105aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa synchronized (mLock) { 106aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return mInputConnection; 107aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 108aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 109aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 110aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa protected boolean isFinished() { 111aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa synchronized (mLock) { 112aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return mFinished; 113aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 114aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 115aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 1161544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa public String getInputMethodId() { 1171544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa synchronized (mLock) { 1181544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa return mInputMethodId; 1191544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa } 1201544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa } 1211544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa 1221544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa public void setInputMethodId(final String inputMethodId) { 1231544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa synchronized (mLock) { 1241544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa mInputMethodId = inputMethodId; 1251544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa } 1261544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa } 1271544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa 128159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa abstract protected boolean isActive(); 129159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa 130159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa /** 131159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa * Called when the user took some actions that should be taken into consideration to update the 132159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa * LRU list for input method rotation. 133159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa */ 134159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa abstract protected void onUserAction(); 135159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa 136159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa /** 137159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa * Called when the input method started or stopped full-screen mode. 1381544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa * @param enabled {@code true} if the input method starts full-screen mode. 1391544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa * @param calledInBackground {@code true} if this input connection is in a state when incoming 1401544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa * events are usually ignored. 141159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa */ 1421544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa abstract protected void onReportFullscreenMode(boolean enabled, boolean calledInBackground); 143159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getTextAfterCursor(int length, int flags, int seq, IInputContextCallback callback) { 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIISC(DO_GET_TEXT_AFTER_CURSOR, length, flags, seq, callback)); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getTextBeforeCursor(int length, int flags, int seq, IInputContextCallback callback) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIISC(DO_GET_TEXT_BEFORE_CURSOR, length, flags, seq, callback)); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 152a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani public void getSelectedText(int flags, int seq, IInputContextCallback callback) { 153a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani dispatchMessage(obtainMessageISC(DO_GET_SELECTED_TEXT, flags, seq, callback)); 154a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 155a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getCursorCapsMode(int reqModes, int seq, IInputContextCallback callback) { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageISC(DO_GET_CURSOR_CAPS_MODE, reqModes, seq, callback)); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getExtractedText(ExtractedTextRequest request, 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int flags, int seq, IInputContextCallback callback) { 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIOSC(DO_GET_EXTRACTED_TEXT, flags, 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project request, seq, callback)); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void commitText(CharSequence text, int newCursorPosition) { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIO(DO_COMMIT_TEXT, newCursorPosition, text)); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void commitCompletion(CompletionInfo text) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageO(DO_COMMIT_COMPLETION, text)); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 174cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne public void commitCorrection(CorrectionInfo info) { 175cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne dispatchMessage(obtainMessageO(DO_COMMIT_CORRECTION, info)); 176cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne } 177cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSelection(int start, int end) { 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_SET_SELECTION, start, end)); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void performEditorAction(int id) { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_PERFORM_EDITOR_ACTION, id, 0)); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void performContextMenuAction(int id) { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_PERFORM_CONTEXT_MENU_ACTION, id, 0)); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 190a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani public void setComposingRegion(int start, int end) { 191a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani dispatchMessage(obtainMessageII(DO_SET_COMPOSING_REGION, start, end)); 192a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 193a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setComposingText(CharSequence text, int newCursorPosition) { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIO(DO_SET_COMPOSING_TEXT, newCursorPosition, text)); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishComposingText() { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessage(DO_FINISH_COMPOSING_TEXT)); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendKeyEvent(KeyEvent event) { 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageO(DO_SEND_KEY_EVENT, event)); 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void clearMetaKeyStates(int states) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_CLEAR_META_KEY_STATES, states, 0)); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 210c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa public void deleteSurroundingText(int beforeLength, int afterLength) { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_DELETE_SURROUNDING_TEXT, 212c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa beforeLength, afterLength)); 213c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa } 214c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa 215c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa public void deleteSurroundingTextInCodePoints(int beforeLength, int afterLength) { 216c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa dispatchMessage(obtainMessageII(DO_DELETE_SURROUNDING_TEXT_IN_CODE_POINTS, 217c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa beforeLength, afterLength)); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void beginBatchEdit() { 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessage(DO_BEGIN_BATCH_EDIT)); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void endBatchEdit() { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessage(DO_END_BATCH_EDIT)); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void reportFullscreenMode(boolean enabled) { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_REPORT_FULLSCREEN_MODE, enabled ? 1 : 0, 0)); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void performPrivateCommand(String action, Bundle data) { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageOO(DO_PERFORM_PRIVATE_COMMAND, action, data)); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 235adb435835fb9a5f2bb74d29930b239dde18504a7satok 236a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa public void requestUpdateCursorAnchorInfo(int cursorUpdateMode, int seq, 2370023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa IInputContextCallback callback) { 238a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa dispatchMessage(obtainMessageISC(DO_REQUEST_UPDATE_CURSOR_ANCHOR_INFO, cursorUpdateMode, 239a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa seq, callback)); 2400023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 2410023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa 2429f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa public void closeConnection() { 2439f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa dispatchMessage(obtainMessage(DO_CLOSE_CONNECTION)); 244aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 245aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 24645700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa public void commitContent(InputContentInfo inputContentInfo, int flags, Bundle opts, 247152944f4909c47917473293b258d266435c6ab35Yohei Yukawa int seq, IInputContextCallback callback) { 24845700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa dispatchMessage(obtainMessageIOOSC(DO_COMMIT_CONTENT, flags, inputContentInfo, opts, seq, 24945700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa callback)); 250152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 251152944f4909c47917473293b258d266435c6ab35Yohei Yukawa 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dispatchMessage(Message msg) { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If we are calling this from the main thread, then we can call 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // right through. Otherwise, we need to send the message to the 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // main thread. 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Looper.myLooper() == mMainLooper) { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project executeMessage(msg); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.recycle(); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mH.sendMessage(msg); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 264aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void executeMessage(Message msg) { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (msg.what) { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_GET_TEXT_AFTER_CURSOR: { 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 270aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "getTextAfterCursor on inactive InputConnection"); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback.setTextAfterCursor(null, args.seq); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback.setTextAfterCursor(ic.getTextAfterCursor( 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.arg1, msg.arg2), args.seq); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got RemoteException calling setTextAfterCursor", e); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_GET_TEXT_BEFORE_CURSOR: { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 286aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "getTextBeforeCursor on inactive InputConnection"); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback.setTextBeforeCursor(null, args.seq); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback.setTextBeforeCursor(ic.getTextBeforeCursor( 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.arg1, msg.arg2), args.seq); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got RemoteException calling setTextBeforeCursor", e); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 299a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani case DO_GET_SELECTED_TEXT: { 300a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani SomeArgs args = (SomeArgs)msg.obj; 301a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani try { 302aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 303a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani if (ic == null || !isActive()) { 304a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani Log.w(TAG, "getSelectedText on inactive InputConnection"); 305a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani args.callback.setSelectedText(null, args.seq); 306a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani return; 307a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 308a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani args.callback.setSelectedText(ic.getSelectedText( 309a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani msg.arg1), args.seq); 310a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } catch (RemoteException e) { 311a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani Log.w(TAG, "Got RemoteException calling setSelectedText", e); 312a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 313a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani return; 314a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_GET_CURSOR_CAPS_MODE: { 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 318aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "getCursorCapsMode on inactive InputConnection"); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback.setCursorCapsMode(0, args.seq); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback.setCursorCapsMode(ic.getCursorCapsMode(msg.arg1), 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.seq); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got RemoteException calling setCursorCapsMode", e); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_GET_EXTRACTED_TEXT: { 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 334aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "getExtractedText on inactive InputConnection"); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback.setExtractedText(null, args.seq); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback.setExtractedText(ic.getExtractedText( 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (ExtractedTextRequest)args.arg1, msg.arg1), args.seq); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got RemoteException calling setExtractedText", e); 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_COMMIT_TEXT: { 348aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "commitText on inactive InputConnection"); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.commitText((CharSequence)msg.obj, msg.arg1); 354159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa onUserAction(); 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_SET_SELECTION: { 358aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "setSelection on inactive InputConnection"); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.setSelection(msg.arg1, msg.arg2); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_PERFORM_EDITOR_ACTION: { 367aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "performEditorAction on inactive InputConnection"); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.performEditorAction(msg.arg1); 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_PERFORM_CONTEXT_MENU_ACTION: { 376aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "performContextMenuAction on inactive InputConnection"); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.performContextMenuAction(msg.arg1); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_COMMIT_COMPLETION: { 385aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "commitCompletion on inactive InputConnection"); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.commitCompletion((CompletionInfo)msg.obj); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 393cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne case DO_COMMIT_CORRECTION: { 394aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 395cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne if (ic == null || !isActive()) { 396cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne Log.w(TAG, "commitCorrection on inactive InputConnection"); 397cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne return; 398cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne } 399cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne ic.commitCorrection((CorrectionInfo)msg.obj); 400cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne return; 401cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_SET_COMPOSING_TEXT: { 403aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "setComposingText on inactive InputConnection"); 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.setComposingText((CharSequence)msg.obj, msg.arg1); 409159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa onUserAction(); 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 412a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani case DO_SET_COMPOSING_REGION: { 413aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 414a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani if (ic == null || !isActive()) { 415a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani Log.w(TAG, "setComposingRegion on inactive InputConnection"); 416a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani return; 417a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 418a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani ic.setComposingRegion(msg.arg1, msg.arg2); 419a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani return; 420a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_FINISH_COMPOSING_TEXT: { 422aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Note we do NOT check isActive() here, because this is safe 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // for an IME to call at any time, and we need to allow it 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // through to clean up our state after the IME has switched to 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // another client. 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null) { 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "finishComposingText on inactive InputConnection"); 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.finishComposingText(); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_SEND_KEY_EVENT: { 435aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "sendKeyEvent on inactive InputConnection"); 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.sendKeyEvent((KeyEvent)msg.obj); 441159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa onUserAction(); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_CLEAR_META_KEY_STATES: { 445aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "clearMetaKeyStates on inactive InputConnection"); 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.clearMetaKeyStates(msg.arg1); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_DELETE_SURROUNDING_TEXT: { 454aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "deleteSurroundingText on inactive InputConnection"); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.deleteSurroundingText(msg.arg1, msg.arg2); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 462c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa case DO_DELETE_SURROUNDING_TEXT_IN_CODE_POINTS: { 463aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 464c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa if (ic == null || !isActive()) { 465c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa Log.w(TAG, "deleteSurroundingTextInCodePoints on inactive InputConnection"); 466c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa return; 467c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa } 468c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa ic.deleteSurroundingTextInCodePoints(msg.arg1, msg.arg2); 469c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa return; 470c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_BEGIN_BATCH_EDIT: { 472aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "beginBatchEdit on inactive InputConnection"); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.beginBatchEdit(); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_END_BATCH_EDIT: { 481aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "endBatchEdit on inactive InputConnection"); 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.endBatchEdit(); 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_REPORT_FULLSCREEN_MODE: { 490aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4911544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa boolean isBackground = false; 4921544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa if (ic == null || !isActive()) { 493da589dffddaf4046d3b4fd8d14d5f984a1c4324aAndrei Stingaceanu Log.w(TAG, "reportFullscreenMode on inexistent InputConnection"); 4941544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa isBackground = true; 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 496159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa final boolean enabled = msg.arg1 == 1; 4971544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa if (!isBackground) { 4981544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa ic.reportFullscreenMode(enabled); 4991544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa } 5001544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa // Due to the nature of asynchronous event handling, currently InputMethodService 5011544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa // has relied on the fact that #reportFullscreenMode() can be handled even when the 5021544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa // InputConnection is inactive. We have to notify this event to InputMethodManager. 5031544def0facda69c210b0ae64b17394ea2860d39Yohei Yukawa onReportFullscreenMode(enabled, isBackground); 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_PERFORM_PRIVATE_COMMAND: { 507aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "performPrivateCommand on inactive InputConnection"); 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.performPrivateCommand((String)args.arg1, 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (Bundle)args.arg2); 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 517a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa case DO_REQUEST_UPDATE_CURSOR_ANCHOR_INFO: { 5180023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa SomeArgs args = (SomeArgs)msg.obj; 5190023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa try { 520aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 5210023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa if (ic == null || !isActive()) { 5220023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa Log.w(TAG, "requestCursorAnchorInfo on inactive InputConnection"); 523a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa args.callback.setRequestUpdateCursorAnchorInfoResult(false, args.seq); 5240023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa return; 5250023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 526a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa args.callback.setRequestUpdateCursorAnchorInfoResult( 527d8636ea7ca78df83d6b04088eab7853f15f3e999Yohei Yukawa ic.requestCursorUpdates(msg.arg1), args.seq); 5280023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } catch (RemoteException e) { 5290023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa Log.w(TAG, "Got RemoteException calling requestCursorAnchorInfo", e); 5300023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 5310023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa return; 5320023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 5339f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa case DO_CLOSE_CONNECTION: { 534aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // Note that we do not need to worry about race condition here, because 1) mFinished 535aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // is updated only inside this block, and 2) the code here is running on a Handler 5369f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa // hence we assume multiple DO_CLOSE_CONNECTION messages will not be handled at the 537aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // same time. 538aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa if (isFinished()) { 539aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return; 540aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 541aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa try { 542aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 543aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // Note we do NOT check isActive() here, because this is safe 544aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // for an IME to call at any time, and we need to allow it 545aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // through to clean up our state after the IME has switched to 546aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // another client. 547aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa if (ic == null) { 548aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return; 549aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 5509f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa @MissingMethodFlags 5519f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa final int missingMethods = InputConnectionInspector.getMissingMethodFlags(ic); 5529f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa if ((missingMethods & MissingMethodFlags.CLOSE_CONNECTION) == 0) { 5539f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa ic.closeConnection(); 554aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 555aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } finally { 556aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa synchronized (mLock) { 557aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa mInputConnection = null; 558aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa mFinished = true; 559aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 560aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 561aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return; 562aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 563adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa case DO_COMMIT_CONTENT: { 56445700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa final int flags = msg.arg1; 565f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa final boolean grantUriPermission = 566f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa (flags & InputConnection.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0; 567152944f4909c47917473293b258d266435c6ab35Yohei Yukawa SomeArgs args = (SomeArgs) msg.obj; 568152944f4909c47917473293b258d266435c6ab35Yohei Yukawa try { 569152944f4909c47917473293b258d266435c6ab35Yohei Yukawa InputConnection ic = getInputConnection(); 570152944f4909c47917473293b258d266435c6ab35Yohei Yukawa if (ic == null || !isActive()) { 571adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa Log.w(TAG, "commitContent on inactive InputConnection"); 572adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa args.callback.setCommitContentResult(false, args.seq); 573152944f4909c47917473293b258d266435c6ab35Yohei Yukawa return; 574152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 575152944f4909c47917473293b258d266435c6ab35Yohei Yukawa final InputContentInfo inputContentInfo = (InputContentInfo) args.arg1; 576152944f4909c47917473293b258d266435c6ab35Yohei Yukawa if (inputContentInfo == null || !inputContentInfo.validate()) { 577adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa Log.w(TAG, "commitContent with invalid inputContentInfo=" 578152944f4909c47917473293b258d266435c6ab35Yohei Yukawa + inputContentInfo); 579adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa args.callback.setCommitContentResult(false, args.seq); 580152944f4909c47917473293b258d266435c6ab35Yohei Yukawa return; 581152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 582f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa if (grantUriPermission) { 58393278ca144bef7d8af7a014e278f552da1fcb38cYohei Yukawa try { 58493278ca144bef7d8af7a014e278f552da1fcb38cYohei Yukawa inputContentInfo.requestPermission(); 58593278ca144bef7d8af7a014e278f552da1fcb38cYohei Yukawa } catch (Exception e) { 58693278ca144bef7d8af7a014e278f552da1fcb38cYohei Yukawa Log.e(TAG, "InputConnectionInfo.requestPermission() failed", e); 58793278ca144bef7d8af7a014e278f552da1fcb38cYohei Yukawa args.callback.setCommitContentResult(false, args.seq); 58893278ca144bef7d8af7a014e278f552da1fcb38cYohei Yukawa return; 58993278ca144bef7d8af7a014e278f552da1fcb38cYohei Yukawa } 590f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa } 591f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa final boolean result = 592f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa ic.commitContent(inputContentInfo, flags, (Bundle) args.arg2); 593f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa // If this request is not handled, then there is no reason to keep the URI 594f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa // permission. 595f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa if (grantUriPermission && !result) { 596f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa inputContentInfo.releasePermission(); 597f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa } 598f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa args.callback.setCommitContentResult(result, args.seq); 599152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } catch (RemoteException e) { 600adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa Log.w(TAG, "Got RemoteException calling commitContent", e); 601152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 602152944f4909c47917473293b258d266435c6ab35Yohei Yukawa return; 603152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Unhandled message code: " + msg.what); 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessage(int what) { 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what); 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageII(int what, int arg1, int arg2) { 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, arg2); 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 615c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageO(int what, Object arg1) { 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, arg1); 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageISC(int what, int arg1, int seq, IInputContextCallback callback) { 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = new SomeArgs(); 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback = callback; 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.seq = seq; 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0, args); 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageIISC(int what, int arg1, int arg2, int seq, IInputContextCallback callback) { 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = new SomeArgs(); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback = callback; 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.seq = seq; 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, arg2, args); 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6330023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa 63445700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa Message obtainMessageIOOSC(int what, int arg1, Object objArg1, Object objArg2, int seq, 635152944f4909c47917473293b258d266435c6ab35Yohei Yukawa IInputContextCallback callback) { 6360023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa SomeArgs args = new SomeArgs(); 63745700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa args.arg1 = objArg1; 63845700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa args.arg2 = objArg2; 6390023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa args.callback = callback; 6400023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa args.seq = seq; 64145700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa return mH.obtainMessage(what, arg1, 0, args); 6420023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 6430023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageIOSC(int what, int arg1, Object arg2, int seq, 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IInputContextCallback callback) { 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = new SomeArgs(); 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg2; 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.callback = callback; 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.seq = seq; 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0, args); 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageIO(int what, int arg1, Object arg2) { 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0, arg2); 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageOO(int what, Object arg1, Object arg2) { 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = new SomeArgs(); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg1; 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg2 = arg2; 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, args); 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 664