Rely on com.android.internal.os.SomeArgs
Before introducing new state tracking IDs to IInputConnectionWrapper,
this CL cleans up IInputConnectionWrapper to use
com.android.internal.os.SomeArgs instead of local-defined one in favor
of possible performance improvement thanks to the process grobal
object pool that com.android.internal.os.SomeArgs has.
This is a mechanical refactoring CL. No behavior change is intended.
Test: No new warnings in `adb logcat` from the following TAGs
- IInputConnectionWrapper
- InputMethodManager
- InputMethodManagerService
- InputMethodService
Bug: 35079353
Change-Id: Ic614f112f960382280acd8891b3af56d47679f08
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package com.android.internal.view;
|
||||
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.internal.os.SomeArgs;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -74,13 +75,6 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
|
||||
@GuardedBy("mLock")
|
||||
private boolean mFinished = false;
|
||||
|
||||
static class SomeArgs {
|
||||
Object arg1;
|
||||
Object arg2;
|
||||
IInputContextCallback callback;
|
||||
int seq;
|
||||
}
|
||||
|
||||
class MyHandler extends Handler {
|
||||
MyHandler(Looper looper) {
|
||||
super(looper);
|
||||
@@ -241,80 +235,100 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
|
||||
case DO_GET_TEXT_AFTER_CURSOR: {
|
||||
SomeArgs args = (SomeArgs)msg.obj;
|
||||
try {
|
||||
final IInputContextCallback callback = (IInputContextCallback) args.arg6;
|
||||
final int callbackSeq = args.argi6;
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "getTextAfterCursor on inactive InputConnection");
|
||||
args.callback.setTextAfterCursor(null, args.seq);
|
||||
callback.setTextAfterCursor(null, callbackSeq);
|
||||
return;
|
||||
}
|
||||
args.callback.setTextAfterCursor(ic.getTextAfterCursor(
|
||||
msg.arg1, msg.arg2), args.seq);
|
||||
callback.setTextAfterCursor(ic.getTextAfterCursor(
|
||||
msg.arg1, msg.arg2), callbackSeq);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Got RemoteException calling setTextAfterCursor", e);
|
||||
} finally {
|
||||
args.recycle();
|
||||
}
|
||||
return;
|
||||
}
|
||||
case DO_GET_TEXT_BEFORE_CURSOR: {
|
||||
SomeArgs args = (SomeArgs)msg.obj;
|
||||
try {
|
||||
final IInputContextCallback callback = (IInputContextCallback) args.arg6;
|
||||
final int callbackSeq = args.argi6;
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "getTextBeforeCursor on inactive InputConnection");
|
||||
args.callback.setTextBeforeCursor(null, args.seq);
|
||||
callback.setTextBeforeCursor(null, callbackSeq);
|
||||
return;
|
||||
}
|
||||
args.callback.setTextBeforeCursor(ic.getTextBeforeCursor(
|
||||
msg.arg1, msg.arg2), args.seq);
|
||||
callback.setTextBeforeCursor(ic.getTextBeforeCursor(
|
||||
msg.arg1, msg.arg2), callbackSeq);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Got RemoteException calling setTextBeforeCursor", e);
|
||||
} finally {
|
||||
args.recycle();
|
||||
}
|
||||
return;
|
||||
}
|
||||
case DO_GET_SELECTED_TEXT: {
|
||||
SomeArgs args = (SomeArgs)msg.obj;
|
||||
try {
|
||||
final IInputContextCallback callback = (IInputContextCallback) args.arg6;
|
||||
final int callbackSeq = args.argi6;
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "getSelectedText on inactive InputConnection");
|
||||
args.callback.setSelectedText(null, args.seq);
|
||||
callback.setSelectedText(null, callbackSeq);
|
||||
return;
|
||||
}
|
||||
args.callback.setSelectedText(ic.getSelectedText(
|
||||
msg.arg1), args.seq);
|
||||
callback.setSelectedText(ic.getSelectedText(
|
||||
msg.arg1), callbackSeq);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Got RemoteException calling setSelectedText", e);
|
||||
} finally {
|
||||
args.recycle();
|
||||
}
|
||||
return;
|
||||
}
|
||||
case DO_GET_CURSOR_CAPS_MODE: {
|
||||
SomeArgs args = (SomeArgs)msg.obj;
|
||||
try {
|
||||
final IInputContextCallback callback = (IInputContextCallback) args.arg6;
|
||||
final int callbackSeq = args.argi6;
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "getCursorCapsMode on inactive InputConnection");
|
||||
args.callback.setCursorCapsMode(0, args.seq);
|
||||
callback.setCursorCapsMode(0, callbackSeq);
|
||||
return;
|
||||
}
|
||||
args.callback.setCursorCapsMode(ic.getCursorCapsMode(msg.arg1),
|
||||
args.seq);
|
||||
callback.setCursorCapsMode(ic.getCursorCapsMode(msg.arg1),
|
||||
callbackSeq);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Got RemoteException calling setCursorCapsMode", e);
|
||||
} finally {
|
||||
args.recycle();
|
||||
}
|
||||
return;
|
||||
}
|
||||
case DO_GET_EXTRACTED_TEXT: {
|
||||
SomeArgs args = (SomeArgs)msg.obj;
|
||||
try {
|
||||
final IInputContextCallback callback = (IInputContextCallback) args.arg6;
|
||||
final int callbackSeq = args.argi6;
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "getExtractedText on inactive InputConnection");
|
||||
args.callback.setExtractedText(null, args.seq);
|
||||
callback.setExtractedText(null, callbackSeq);
|
||||
return;
|
||||
}
|
||||
args.callback.setExtractedText(ic.getExtractedText(
|
||||
(ExtractedTextRequest)args.arg1, msg.arg1), args.seq);
|
||||
callback.setExtractedText(ic.getExtractedText(
|
||||
(ExtractedTextRequest)args.arg1, msg.arg1), callbackSeq);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Got RemoteException calling setExtractedText", e);
|
||||
} finally {
|
||||
args.recycle();
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -469,29 +483,37 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
|
||||
return;
|
||||
}
|
||||
case DO_PERFORM_PRIVATE_COMMAND: {
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "performPrivateCommand on inactive InputConnection");
|
||||
return;
|
||||
final SomeArgs args = (SomeArgs) msg.obj;
|
||||
try {
|
||||
final String action = (String) args.arg1;
|
||||
final Bundle data = (Bundle) args.arg2;
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "performPrivateCommand on inactive InputConnection");
|
||||
return;
|
||||
}
|
||||
ic.performPrivateCommand(action, data);
|
||||
} finally {
|
||||
args.recycle();
|
||||
}
|
||||
SomeArgs args = (SomeArgs)msg.obj;
|
||||
ic.performPrivateCommand((String)args.arg1,
|
||||
(Bundle)args.arg2);
|
||||
return;
|
||||
}
|
||||
case DO_REQUEST_UPDATE_CURSOR_ANCHOR_INFO: {
|
||||
SomeArgs args = (SomeArgs)msg.obj;
|
||||
try {
|
||||
final IInputContextCallback callback = (IInputContextCallback) args.arg6;
|
||||
final int callbackSeq = args.argi6;
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "requestCursorAnchorInfo on inactive InputConnection");
|
||||
args.callback.setRequestUpdateCursorAnchorInfoResult(false, args.seq);
|
||||
callback.setRequestUpdateCursorAnchorInfoResult(false, callbackSeq);
|
||||
return;
|
||||
}
|
||||
args.callback.setRequestUpdateCursorAnchorInfoResult(
|
||||
ic.requestCursorUpdates(msg.arg1), args.seq);
|
||||
callback.setRequestUpdateCursorAnchorInfoResult(
|
||||
ic.requestCursorUpdates(msg.arg1), callbackSeq);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Got RemoteException calling requestCursorAnchorInfo", e);
|
||||
} finally {
|
||||
args.recycle();
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -529,35 +551,39 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
|
||||
final int flags = msg.arg1;
|
||||
SomeArgs args = (SomeArgs) msg.obj;
|
||||
try {
|
||||
final IInputContextCallback callback = (IInputContextCallback) args.arg6;
|
||||
final int callbackSeq = args.argi6;
|
||||
InputConnection ic = getInputConnection();
|
||||
if (ic == null || !isActive()) {
|
||||
Log.w(TAG, "commitContent on inactive InputConnection");
|
||||
args.callback.setCommitContentResult(false, args.seq);
|
||||
callback.setCommitContentResult(false, callbackSeq);
|
||||
return;
|
||||
}
|
||||
final InputContentInfo inputContentInfo = (InputContentInfo) args.arg1;
|
||||
if (inputContentInfo == null || !inputContentInfo.validate()) {
|
||||
Log.w(TAG, "commitContent with invalid inputContentInfo="
|
||||
+ inputContentInfo);
|
||||
args.callback.setCommitContentResult(false, args.seq);
|
||||
callback.setCommitContentResult(false, callbackSeq);
|
||||
return;
|
||||
}
|
||||
final boolean result =
|
||||
ic.commitContent(inputContentInfo, flags, (Bundle) args.arg2);
|
||||
args.callback.setCommitContentResult(result, args.seq);
|
||||
callback.setCommitContentResult(result, callbackSeq);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Got RemoteException calling commitContent", e);
|
||||
} finally {
|
||||
args.recycle();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Log.w(TAG, "Unhandled message code: " + msg.what);
|
||||
}
|
||||
|
||||
|
||||
Message obtainMessage(int what) {
|
||||
return mH.obtainMessage(what);
|
||||
}
|
||||
|
||||
|
||||
Message obtainMessageII(int what, int arg1, int arg2) {
|
||||
return mH.obtainMessage(what, arg1, arg2);
|
||||
}
|
||||
@@ -565,46 +591,47 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
|
||||
Message obtainMessageO(int what, Object arg1) {
|
||||
return mH.obtainMessage(what, 0, 0, arg1);
|
||||
}
|
||||
|
||||
Message obtainMessageISC(int what, int arg1, int seq, IInputContextCallback callback) {
|
||||
SomeArgs args = new SomeArgs();
|
||||
args.callback = callback;
|
||||
args.seq = seq;
|
||||
|
||||
Message obtainMessageISC(int what, int arg1, int callbackSeq, IInputContextCallback callback) {
|
||||
final SomeArgs args = SomeArgs.obtain();
|
||||
args.arg6 = callback;
|
||||
args.argi6 = callbackSeq;
|
||||
return mH.obtainMessage(what, arg1, 0, args);
|
||||
}
|
||||
|
||||
Message obtainMessageIISC(int what, int arg1, int arg2, int seq, IInputContextCallback callback) {
|
||||
SomeArgs args = new SomeArgs();
|
||||
args.callback = callback;
|
||||
args.seq = seq;
|
||||
|
||||
Message obtainMessageIISC(int what, int arg1, int arg2, int callbackSeq,
|
||||
IInputContextCallback callback) {
|
||||
final SomeArgs args = SomeArgs.obtain();
|
||||
args.arg6 = callback;
|
||||
args.argi6 = callbackSeq;
|
||||
return mH.obtainMessage(what, arg1, arg2, args);
|
||||
}
|
||||
|
||||
Message obtainMessageIOOSC(int what, int arg1, Object objArg1, Object objArg2, int seq,
|
||||
Message obtainMessageIOOSC(int what, int arg1, Object objArg1, Object objArg2, int callbackSeq,
|
||||
IInputContextCallback callback) {
|
||||
SomeArgs args = new SomeArgs();
|
||||
final SomeArgs args = SomeArgs.obtain();
|
||||
args.arg1 = objArg1;
|
||||
args.arg2 = objArg2;
|
||||
args.callback = callback;
|
||||
args.seq = seq;
|
||||
args.arg6 = callback;
|
||||
args.argi6 = callbackSeq;
|
||||
return mH.obtainMessage(what, arg1, 0, args);
|
||||
}
|
||||
|
||||
Message obtainMessageIOSC(int what, int arg1, Object arg2, int seq,
|
||||
Message obtainMessageIOSC(int what, int arg1, Object arg2, int callbackSeq,
|
||||
IInputContextCallback callback) {
|
||||
SomeArgs args = new SomeArgs();
|
||||
final SomeArgs args = SomeArgs.obtain();
|
||||
args.arg1 = arg2;
|
||||
args.callback = callback;
|
||||
args.seq = seq;
|
||||
args.arg6 = callback;
|
||||
args.argi6 = callbackSeq;
|
||||
return mH.obtainMessage(what, arg1, 0, args);
|
||||
}
|
||||
|
||||
|
||||
Message obtainMessageIO(int what, int arg1, Object arg2) {
|
||||
return mH.obtainMessage(what, arg1, 0, arg2);
|
||||
}
|
||||
|
||||
|
||||
Message obtainMessageOO(int what, Object arg1, Object arg2) {
|
||||
SomeArgs args = new SomeArgs();
|
||||
final SomeArgs args = SomeArgs.obtain();
|
||||
args.arg1 = arg1;
|
||||
args.arg2 = arg2;
|
||||
return mH.obtainMessage(what, 0, 0, args);
|
||||
|
||||
Reference in New Issue
Block a user