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; 20ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawaimport com.android.internal.os.SomeArgs; 21aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 22aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawaimport android.annotation.NonNull; 23aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawaimport android.annotation.Nullable; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.inputmethod.CompletionInfo; 32cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunneimport android.view.inputmethod.CorrectionInfo; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.inputmethod.ExtractedTextRequest; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.inputmethod.InputConnection; 359f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawaimport android.view.inputmethod.InputConnectionInspector; 369f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawaimport android.view.inputmethod.InputConnectionInspector.MissingMethodFlags; 37152944f4909c47917473293b258d266435c6ab35Yohei Yukawaimport android.view.inputmethod.InputContentInfo; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawapublic abstract class IInputConnectionWrapper extends IInputContext.Stub { 4077e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa private static final String TAG = "IInputConnectionWrapper"; 4177e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa private static final boolean DEBUG = false; 42a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_GET_TEXT_AFTER_CURSOR = 10; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_GET_TEXT_BEFORE_CURSOR = 20; 45a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani private static final int DO_GET_SELECTED_TEXT = 25; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_GET_CURSOR_CAPS_MODE = 30; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_GET_EXTRACTED_TEXT = 40; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_COMMIT_TEXT = 50; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_COMMIT_COMPLETION = 55; 50cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne private static final int DO_COMMIT_CORRECTION = 56; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_SET_SELECTION = 57; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_PERFORM_EDITOR_ACTION = 58; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_PERFORM_CONTEXT_MENU_ACTION = 59; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_SET_COMPOSING_TEXT = 60; 55a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani private static final int DO_SET_COMPOSING_REGION = 63; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_FINISH_COMPOSING_TEXT = 65; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_SEND_KEY_EVENT = 70; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_DELETE_SURROUNDING_TEXT = 80; 59c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa private static final int DO_DELETE_SURROUNDING_TEXT_IN_CODE_POINTS = 81; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_BEGIN_BATCH_EDIT = 90; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_END_BATCH_EDIT = 95; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_PERFORM_PRIVATE_COMMAND = 120; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int DO_CLEAR_META_KEY_STATES = 130; 64a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa private static final int DO_REQUEST_UPDATE_CURSOR_ANCHOR_INFO = 140; 659f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa private static final int DO_CLOSE_CONNECTION = 150; 66adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa private static final int DO_COMMIT_CONTENT = 160; 67a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 68aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa @GuardedBy("mLock") 69aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa @Nullable 70aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa private InputConnection mInputConnection; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Looper mMainLooper; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Handler mH; 74aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa private Object mLock = new Object(); 75aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa @GuardedBy("mLock") 76aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa private boolean mFinished = false; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class MyHandler extends Handler { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MyHandler(Looper looper) { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(looper); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void handleMessage(Message msg) { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project executeMessage(msg); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 89aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa public IInputConnectionWrapper(Looper mainLooper, @NonNull InputConnection inputConnection) { 90aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa mInputConnection = inputConnection; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainLooper = mainLooper; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mH = new MyHandler(mMainLooper); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 95aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa @Nullable 96aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa public InputConnection getInputConnection() { 97aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa synchronized (mLock) { 98aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return mInputConnection; 99aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 100aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 101aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 102aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa protected boolean isFinished() { 103aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa synchronized (mLock) { 104aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return mFinished; 105aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 106aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 107aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 108159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa abstract protected boolean isActive(); 109159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa 110159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa /** 111159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa * Called when the user took some actions that should be taken into consideration to update the 112159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa * LRU list for input method rotation. 113159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa */ 114159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa abstract protected void onUserAction(); 115159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getTextAfterCursor(int length, int flags, int seq, IInputContextCallback callback) { 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIISC(DO_GET_TEXT_AFTER_CURSOR, length, flags, seq, callback)); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getTextBeforeCursor(int length, int flags, int seq, IInputContextCallback callback) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIISC(DO_GET_TEXT_BEFORE_CURSOR, length, flags, seq, callback)); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 124a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani public void getSelectedText(int flags, int seq, IInputContextCallback callback) { 125a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani dispatchMessage(obtainMessageISC(DO_GET_SELECTED_TEXT, flags, seq, callback)); 126a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 127a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getCursorCapsMode(int reqModes, int seq, IInputContextCallback callback) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageISC(DO_GET_CURSOR_CAPS_MODE, reqModes, seq, callback)); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getExtractedText(ExtractedTextRequest request, 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int flags, int seq, IInputContextCallback callback) { 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIOSC(DO_GET_EXTRACTED_TEXT, flags, 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project request, seq, callback)); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void commitText(CharSequence text, int newCursorPosition) { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIO(DO_COMMIT_TEXT, newCursorPosition, text)); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void commitCompletion(CompletionInfo text) { 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageO(DO_COMMIT_COMPLETION, text)); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 146cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne public void commitCorrection(CorrectionInfo info) { 147cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne dispatchMessage(obtainMessageO(DO_COMMIT_CORRECTION, info)); 148cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne } 149cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSelection(int start, int end) { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_SET_SELECTION, start, end)); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void performEditorAction(int id) { 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_PERFORM_EDITOR_ACTION, id, 0)); 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void performContextMenuAction(int id) { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_PERFORM_CONTEXT_MENU_ACTION, id, 0)); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 162a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani public void setComposingRegion(int start, int end) { 163a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani dispatchMessage(obtainMessageII(DO_SET_COMPOSING_REGION, start, end)); 164a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 165a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setComposingText(CharSequence text, int newCursorPosition) { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageIO(DO_SET_COMPOSING_TEXT, newCursorPosition, text)); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishComposingText() { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessage(DO_FINISH_COMPOSING_TEXT)); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendKeyEvent(KeyEvent event) { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageO(DO_SEND_KEY_EVENT, event)); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void clearMetaKeyStates(int states) { 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_CLEAR_META_KEY_STATES, states, 0)); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 182c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa public void deleteSurroundingText(int beforeLength, int afterLength) { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageII(DO_DELETE_SURROUNDING_TEXT, 184c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa beforeLength, afterLength)); 185c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa } 186c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa 187c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa public void deleteSurroundingTextInCodePoints(int beforeLength, int afterLength) { 188c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa dispatchMessage(obtainMessageII(DO_DELETE_SURROUNDING_TEXT_IN_CODE_POINTS, 189c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa beforeLength, afterLength)); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void beginBatchEdit() { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessage(DO_BEGIN_BATCH_EDIT)); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void endBatchEdit() { 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessage(DO_END_BATCH_EDIT)); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void performPrivateCommand(String action, Bundle data) { 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dispatchMessage(obtainMessageOO(DO_PERFORM_PRIVATE_COMMAND, action, data)); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 203adb435835fb9a5f2bb74d29930b239dde18504a7satok 204a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa public void requestUpdateCursorAnchorInfo(int cursorUpdateMode, int seq, 2050023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa IInputContextCallback callback) { 206a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa dispatchMessage(obtainMessageISC(DO_REQUEST_UPDATE_CURSOR_ANCHOR_INFO, cursorUpdateMode, 207a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa seq, callback)); 2080023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 2090023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa 2109f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa public void closeConnection() { 2119f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa dispatchMessage(obtainMessage(DO_CLOSE_CONNECTION)); 212aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 213aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 21445700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa public void commitContent(InputContentInfo inputContentInfo, int flags, Bundle opts, 215152944f4909c47917473293b258d266435c6ab35Yohei Yukawa int seq, IInputContextCallback callback) { 21645700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa dispatchMessage(obtainMessageIOOSC(DO_COMMIT_CONTENT, flags, inputContentInfo, opts, seq, 21745700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa callback)); 218152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 219152944f4909c47917473293b258d266435c6ab35Yohei Yukawa 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dispatchMessage(Message msg) { 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If we are calling this from the main thread, then we can call 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // right through. Otherwise, we need to send the message to the 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // main thread. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Looper.myLooper() == mMainLooper) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project executeMessage(msg); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.recycle(); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mH.sendMessage(msg); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 232aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void executeMessage(Message msg) { 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (msg.what) { 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_GET_TEXT_AFTER_CURSOR: { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 238ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final IInputContextCallback callback = (IInputContextCallback) args.arg6; 239ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final int callbackSeq = args.argi6; 240aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "getTextAfterCursor on inactive InputConnection"); 243ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setTextAfterCursor(null, callbackSeq); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 246ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setTextAfterCursor(ic.getTextAfterCursor( 247ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa msg.arg1, msg.arg2), callbackSeq); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got RemoteException calling setTextAfterCursor", e); 250ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } finally { 251ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.recycle(); 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_GET_TEXT_BEFORE_CURSOR: { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 258ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final IInputContextCallback callback = (IInputContextCallback) args.arg6; 259ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final int callbackSeq = args.argi6; 260aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "getTextBeforeCursor on inactive InputConnection"); 263ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setTextBeforeCursor(null, callbackSeq); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 266ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setTextBeforeCursor(ic.getTextBeforeCursor( 267ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa msg.arg1, msg.arg2), callbackSeq); 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got RemoteException calling setTextBeforeCursor", e); 270ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } finally { 271ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.recycle(); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 275a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani case DO_GET_SELECTED_TEXT: { 276a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani SomeArgs args = (SomeArgs)msg.obj; 277a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani try { 278ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final IInputContextCallback callback = (IInputContextCallback) args.arg6; 279ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final int callbackSeq = args.argi6; 280aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 281a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani if (ic == null || !isActive()) { 282a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani Log.w(TAG, "getSelectedText on inactive InputConnection"); 283ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setSelectedText(null, callbackSeq); 284a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani return; 285a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 286ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setSelectedText(ic.getSelectedText( 287ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa msg.arg1), callbackSeq); 288a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } catch (RemoteException e) { 289a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani Log.w(TAG, "Got RemoteException calling setSelectedText", e); 290ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } finally { 291ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.recycle(); 292a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 293a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani return; 294a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_GET_CURSOR_CAPS_MODE: { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 298ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final IInputContextCallback callback = (IInputContextCallback) args.arg6; 299ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final int callbackSeq = args.argi6; 300aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "getCursorCapsMode on inactive InputConnection"); 303ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setCursorCapsMode(0, callbackSeq); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 306ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setCursorCapsMode(ic.getCursorCapsMode(msg.arg1), 307ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callbackSeq); 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got RemoteException calling setCursorCapsMode", e); 310ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } finally { 311ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.recycle(); 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_GET_EXTRACTED_TEXT: { 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SomeArgs args = (SomeArgs)msg.obj; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 318ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final IInputContextCallback callback = (IInputContextCallback) args.arg6; 319ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final int callbackSeq = args.argi6; 320aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "getExtractedText on inactive InputConnection"); 323ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setExtractedText(null, callbackSeq); 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 326ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setExtractedText(ic.getExtractedText( 327ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa (ExtractedTextRequest)args.arg1, msg.arg1), callbackSeq); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Got RemoteException calling setExtractedText", e); 330ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } finally { 331ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.recycle(); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_COMMIT_TEXT: { 336aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "commitText on inactive InputConnection"); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.commitText((CharSequence)msg.obj, msg.arg1); 342159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa onUserAction(); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_SET_SELECTION: { 346aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "setSelection on inactive InputConnection"); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.setSelection(msg.arg1, msg.arg2); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_PERFORM_EDITOR_ACTION: { 355aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "performEditorAction on inactive InputConnection"); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.performEditorAction(msg.arg1); 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_PERFORM_CONTEXT_MENU_ACTION: { 364aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "performContextMenuAction on inactive InputConnection"); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.performContextMenuAction(msg.arg1); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_COMMIT_COMPLETION: { 373aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "commitCompletion on inactive InputConnection"); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.commitCompletion((CompletionInfo)msg.obj); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 381cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne case DO_COMMIT_CORRECTION: { 382aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 383cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne if (ic == null || !isActive()) { 384cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne Log.w(TAG, "commitCorrection on inactive InputConnection"); 385cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne return; 386cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne } 387cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne ic.commitCorrection((CorrectionInfo)msg.obj); 388cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne return; 389cf9cf2f40efc4ccf3f73e6fdb07725d9c00c4f91Gilles Debunne } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_SET_COMPOSING_TEXT: { 391aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "setComposingText on inactive InputConnection"); 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.setComposingText((CharSequence)msg.obj, msg.arg1); 397159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa onUserAction(); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 400a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani case DO_SET_COMPOSING_REGION: { 401aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 402a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani if (ic == null || !isActive()) { 403a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani Log.w(TAG, "setComposingRegion on inactive InputConnection"); 404a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani return; 405a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 406a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani ic.setComposingRegion(msg.arg1, msg.arg2); 407a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani return; 408a90b7f0125389b9e1040d2be82aad4ef74ea6071Amith Yamasani } 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_FINISH_COMPOSING_TEXT: { 41077e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa if (isFinished()) { 41177e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa // In this case, #finishComposingText() is guaranteed to be called already. 41277e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa // There should be no negative impact if we ignore this call silently. 41377e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa if (DEBUG) { 41477e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa Log.w(TAG, "Bug 35301295: Redundant finishComposingText."); 41577e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa } 41677e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa return; 41777e51831a448b03cbeeea8ea286b1d584dca74d4Yohei Yukawa } 418aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Note we do NOT check isActive() here, because this is safe 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // for an IME to call at any time, and we need to allow it 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // through to clean up our state after the IME has switched to 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // another client. 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null) { 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "finishComposingText on inactive InputConnection"); 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.finishComposingText(); 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_SEND_KEY_EVENT: { 431aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "sendKeyEvent on inactive InputConnection"); 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.sendKeyEvent((KeyEvent)msg.obj); 437159dd47db34151314e2449347251ad32b30e5ea1Yohei Yukawa onUserAction(); 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_CLEAR_META_KEY_STATES: { 441aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "clearMetaKeyStates on inactive InputConnection"); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.clearMetaKeyStates(msg.arg1); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_DELETE_SURROUNDING_TEXT: { 450aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "deleteSurroundingText on inactive InputConnection"); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.deleteSurroundingText(msg.arg1, msg.arg2); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 458c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa case DO_DELETE_SURROUNDING_TEXT_IN_CODE_POINTS: { 459aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 460c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa if (ic == null || !isActive()) { 461c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa Log.w(TAG, "deleteSurroundingTextInCodePoints on inactive InputConnection"); 462c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa return; 463c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa } 464c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa ic.deleteSurroundingTextInCodePoints(msg.arg1, msg.arg2); 465c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa return; 466c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa } 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_BEGIN_BATCH_EDIT: { 468aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "beginBatchEdit on inactive InputConnection"); 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.beginBatchEdit(); 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_END_BATCH_EDIT: { 477aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ic == null || !isActive()) { 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "endBatchEdit on inactive InputConnection"); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ic.endBatchEdit(); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DO_PERFORM_PRIVATE_COMMAND: { 486ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final SomeArgs args = (SomeArgs) msg.obj; 487ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa try { 488ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final String action = (String) args.arg1; 489ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final Bundle data = (Bundle) args.arg2; 490ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa InputConnection ic = getInputConnection(); 491ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa if (ic == null || !isActive()) { 492ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa Log.w(TAG, "performPrivateCommand on inactive InputConnection"); 493ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa return; 494ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } 495ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa ic.performPrivateCommand(action, data); 496ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } finally { 497ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.recycle(); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4993dd5fbc569ac67f34e887da5d101e5984ade3945Yohei Yukawa return; 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 501a277db28e990d1f6f74ace0c32fe92401660a840Yohei Yukawa case DO_REQUEST_UPDATE_CURSOR_ANCHOR_INFO: { 5020023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa SomeArgs args = (SomeArgs)msg.obj; 5030023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa try { 504ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final IInputContextCallback callback = (IInputContextCallback) args.arg6; 505ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final int callbackSeq = args.argi6; 506aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 5070023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa if (ic == null || !isActive()) { 5080023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa Log.w(TAG, "requestCursorAnchorInfo on inactive InputConnection"); 509ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setRequestUpdateCursorAnchorInfoResult(false, callbackSeq); 5100023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa return; 5110023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 512ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setRequestUpdateCursorAnchorInfoResult( 513ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa ic.requestCursorUpdates(msg.arg1), callbackSeq); 5140023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } catch (RemoteException e) { 5150023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa Log.w(TAG, "Got RemoteException calling requestCursorAnchorInfo", e); 516ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } finally { 517ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.recycle(); 5180023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 5190023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa return; 5200023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 5219f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa case DO_CLOSE_CONNECTION: { 522aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // Note that we do not need to worry about race condition here, because 1) mFinished 523aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // is updated only inside this block, and 2) the code here is running on a Handler 5249f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa // hence we assume multiple DO_CLOSE_CONNECTION messages will not be handled at the 525aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // same time. 526aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa if (isFinished()) { 527aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return; 528aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 529aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa try { 530aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa InputConnection ic = getInputConnection(); 531aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // Note we do NOT check isActive() here, because this is safe 532aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // for an IME to call at any time, and we need to allow it 533aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // through to clean up our state after the IME has switched to 534aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa // another client. 535aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa if (ic == null) { 536aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return; 537aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 5389f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa @MissingMethodFlags 5399f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa final int missingMethods = InputConnectionInspector.getMissingMethodFlags(ic); 5409f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa if ((missingMethods & MissingMethodFlags.CLOSE_CONNECTION) == 0) { 5419f9afe526d1f8ad17c628fc9e1e839725ffe913eYohei Yukawa ic.closeConnection(); 542aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 543aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } finally { 544aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa synchronized (mLock) { 545aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa mInputConnection = null; 546aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa mFinished = true; 547aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 548aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 549aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa return; 550aaa38c9f1ae019f0fe8c3ba80630f26e582cc89cYohei Yukawa } 551adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa case DO_COMMIT_CONTENT: { 55245700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa final int flags = msg.arg1; 553152944f4909c47917473293b258d266435c6ab35Yohei Yukawa SomeArgs args = (SomeArgs) msg.obj; 554152944f4909c47917473293b258d266435c6ab35Yohei Yukawa try { 555ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final IInputContextCallback callback = (IInputContextCallback) args.arg6; 556ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final int callbackSeq = args.argi6; 557152944f4909c47917473293b258d266435c6ab35Yohei Yukawa InputConnection ic = getInputConnection(); 558152944f4909c47917473293b258d266435c6ab35Yohei Yukawa if (ic == null || !isActive()) { 559adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa Log.w(TAG, "commitContent on inactive InputConnection"); 560ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setCommitContentResult(false, callbackSeq); 561152944f4909c47917473293b258d266435c6ab35Yohei Yukawa return; 562152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 563152944f4909c47917473293b258d266435c6ab35Yohei Yukawa final InputContentInfo inputContentInfo = (InputContentInfo) args.arg1; 564152944f4909c47917473293b258d266435c6ab35Yohei Yukawa if (inputContentInfo == null || !inputContentInfo.validate()) { 565adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa Log.w(TAG, "commitContent with invalid inputContentInfo=" 566152944f4909c47917473293b258d266435c6ab35Yohei Yukawa + inputContentInfo); 567ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setCommitContentResult(false, callbackSeq); 568152944f4909c47917473293b258d266435c6ab35Yohei Yukawa return; 569152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 570f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa final boolean result = 571f3806f57a59ede663f3fa2ad1f5080bdbf20e372Yohei Yukawa ic.commitContent(inputContentInfo, flags, (Bundle) args.arg2); 572ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa callback.setCommitContentResult(result, callbackSeq); 573152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } catch (RemoteException e) { 574adebb52588b098a1af678d4e33a234ef1ce783b2Yohei Yukawa Log.w(TAG, "Got RemoteException calling commitContent", e); 575ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa } finally { 576ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.recycle(); 577152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 578152944f4909c47917473293b258d266435c6ab35Yohei Yukawa return; 579152944f4909c47917473293b258d266435c6ab35Yohei Yukawa } 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(TAG, "Unhandled message code: " + msg.what); 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 583ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessage(int what) { 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what); 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 587ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageII(int what, int arg1, int arg2) { 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, arg2); 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 591c89e22a6ff227089fde26daea186346029d1b32cYohei Yukawa 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageO(int what, Object arg1) { 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, arg1); 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 595ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa 596ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa Message obtainMessageISC(int what, int arg1, int callbackSeq, IInputContextCallback callback) { 597ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final SomeArgs args = SomeArgs.obtain(); 598ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.arg6 = callback; 599ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.argi6 = callbackSeq; 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0, args); 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 602ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa 603ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa Message obtainMessageIISC(int what, int arg1, int arg2, int callbackSeq, 604ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa IInputContextCallback callback) { 605ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final SomeArgs args = SomeArgs.obtain(); 606ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.arg6 = callback; 607ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.argi6 = callbackSeq; 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, arg2, args); 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6100023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa 611ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa Message obtainMessageIOOSC(int what, int arg1, Object objArg1, Object objArg2, int callbackSeq, 612152944f4909c47917473293b258d266435c6ab35Yohei Yukawa IInputContextCallback callback) { 613ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final SomeArgs args = SomeArgs.obtain(); 61445700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa args.arg1 = objArg1; 61545700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa args.arg2 = objArg2; 616ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.arg6 = callback; 617ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.argi6 = callbackSeq; 61845700fa135e83ed44e4b69ca60cf12960a5898d7Yohei Yukawa return mH.obtainMessage(what, arg1, 0, args); 6190023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa } 6200023d0e0c4f5339b299d1eacbd4e7181c2fd271fYohei Yukawa 621ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa Message obtainMessageIOSC(int what, int arg1, Object arg2, int callbackSeq, 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IInputContextCallback callback) { 623ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final SomeArgs args = SomeArgs.obtain(); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg2; 625ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.arg6 = callback; 626ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa args.argi6 = callbackSeq; 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0, args); 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageIO(int what, int arg1, Object arg2) { 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, arg1, 0, arg2); 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 633ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message obtainMessageOO(int what, Object arg1, Object arg2) { 635ce82eb2d865e5ee1b69705ca7a0aedd0e92d0d4eYohei Yukawa final SomeArgs args = SomeArgs.obtain(); 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg1 = arg1; 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.arg2 = arg2; 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mH.obtainMessage(what, 0, 0, args); 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 641