Loading core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java +29 −46 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.internal.infra.AndroidFuture; import com.android.internal.view.IInputContext; import java.lang.ref.WeakReference; import java.util.function.Supplier; /** * Takes care of remote method invocations of {@link InputConnection} in the IME client side. Loading Loading @@ -222,9 +223,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getTextAfterCursor(int length, int flags, AndroidFuture future /* T=CharSequence */) { @SuppressWarnings("unchecked") final AndroidFuture<CharSequence> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getTextAfterCursor"); try { final InputConnection ic = getInputConnection(); Loading @@ -241,7 +240,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getTextAfterCursor", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -251,9 +250,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getTextBeforeCursor(int length, int flags, AndroidFuture future /* T=CharSequence */) { @SuppressWarnings("unchecked") final AndroidFuture<CharSequence> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getTextBeforeCursor"); try { final InputConnection ic = getInputConnection(); Loading @@ -270,7 +267,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getTextBeforeCursor", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -279,9 +276,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getSelectedText(int flags, AndroidFuture future /* T=CharSequence */) { @SuppressWarnings("unchecked") final AndroidFuture<CharSequence> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getSelectedText"); try { final InputConnection ic = getInputConnection(); Loading @@ -298,7 +293,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getSelectedText", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -308,9 +303,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getSurroundingText(int beforeLength, int afterLength, int flags, AndroidFuture future /* T=SurroundingText */) { @SuppressWarnings("unchecked") final AndroidFuture<SurroundingText> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getSurroundingText"); try { final InputConnection ic = getInputConnection(); Loading @@ -327,7 +320,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getSurroundingText", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -336,9 +329,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getCursorCapsMode(int reqModes, AndroidFuture future /* T=Integer */) { @SuppressWarnings("unchecked") final AndroidFuture<Integer> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getCursorCapsMode"); try { final InputConnection ic = getInputConnection(); Loading @@ -355,7 +346,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getCursorCapsMode", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -365,9 +356,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getExtractedText(ExtractedTextRequest request, int flags, AndroidFuture future /* T=ExtractedText */) { @SuppressWarnings("unchecked") final AndroidFuture<ExtractedText> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getExtractedText"); try { final InputConnection ic = getInputConnection(); Loading @@ -384,7 +373,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getExtractedText", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading Loading @@ -695,20 +684,15 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void requestCursorUpdates(int cursorUpdateMode, AndroidFuture future /* T=Boolean */) { @SuppressWarnings("unchecked") final AndroidFuture<Boolean> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#requestCursorUpdates"); try { final InputConnection ic = getInputConnection(); final boolean result; if (ic == null || !isActive()) { Log.w(TAG, "requestCursorAnchorInfo on inactive InputConnection"); result = false; } else { result = ic.requestCursorUpdates(cursorUpdateMode); return false; } typedFuture.complete(result); return ic.requestCursorUpdates(cursorUpdateMode); } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -718,26 +702,19 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void commitContent(InputContentInfo inputContentInfo, int flags, Bundle opts, AndroidFuture future /* T=Boolean */) { @SuppressWarnings("unchecked") final AndroidFuture<Boolean> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#commitContent"); try { final InputConnection ic = getInputConnection(); final boolean result; if (ic == null || !isActive()) { Log.w(TAG, "commitContent on inactive InputConnection"); result = false; } else { if (inputContentInfo == null || !inputContentInfo.validate()) { Log.w(TAG, "commitContent with invalid inputContentInfo=" + inputContentInfo); result = false; } else { result = ic.commitContent(inputContentInfo, flags, opts); return false; } if (inputContentInfo == null || !inputContentInfo.validate()) { Log.w(TAG, "commitContent with invalid inputContentInfo=" + inputContentInfo); return false; } typedFuture.complete(result); return ic.commitContent(inputContentInfo, flags, opts); } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading Loading @@ -771,4 +748,10 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { mH.post(runnable); } private <T> void dispatch(@NonNull AndroidFuture untypedFuture, @NonNull Supplier<T> supplier) { @SuppressWarnings("unchecked") final AndroidFuture<T> future = untypedFuture; dispatch(() -> future.complete(supplier.get())); } } Loading
core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java +29 −46 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import com.android.internal.infra.AndroidFuture; import com.android.internal.view.IInputContext; import java.lang.ref.WeakReference; import java.util.function.Supplier; /** * Takes care of remote method invocations of {@link InputConnection} in the IME client side. Loading Loading @@ -222,9 +223,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getTextAfterCursor(int length, int flags, AndroidFuture future /* T=CharSequence */) { @SuppressWarnings("unchecked") final AndroidFuture<CharSequence> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getTextAfterCursor"); try { final InputConnection ic = getInputConnection(); Loading @@ -241,7 +240,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getTextAfterCursor", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -251,9 +250,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getTextBeforeCursor(int length, int flags, AndroidFuture future /* T=CharSequence */) { @SuppressWarnings("unchecked") final AndroidFuture<CharSequence> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getTextBeforeCursor"); try { final InputConnection ic = getInputConnection(); Loading @@ -270,7 +267,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getTextBeforeCursor", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -279,9 +276,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getSelectedText(int flags, AndroidFuture future /* T=CharSequence */) { @SuppressWarnings("unchecked") final AndroidFuture<CharSequence> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getSelectedText"); try { final InputConnection ic = getInputConnection(); Loading @@ -298,7 +293,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getSelectedText", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -308,9 +303,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getSurroundingText(int beforeLength, int afterLength, int flags, AndroidFuture future /* T=SurroundingText */) { @SuppressWarnings("unchecked") final AndroidFuture<SurroundingText> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getSurroundingText"); try { final InputConnection ic = getInputConnection(); Loading @@ -327,7 +320,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getSurroundingText", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -336,9 +329,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getCursorCapsMode(int reqModes, AndroidFuture future /* T=Integer */) { @SuppressWarnings("unchecked") final AndroidFuture<Integer> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getCursorCapsMode"); try { final InputConnection ic = getInputConnection(); Loading @@ -355,7 +346,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getCursorCapsMode", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -365,9 +356,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void getExtractedText(ExtractedTextRequest request, int flags, AndroidFuture future /* T=ExtractedText */) { @SuppressWarnings("unchecked") final AndroidFuture<ExtractedText> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#getExtractedText"); try { final InputConnection ic = getInputConnection(); Loading @@ -384,7 +373,7 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { ImeTracing.getInstance().triggerClientDump( TAG + "#getExtractedText", mParentInputMethodManager, icProto); } typedFuture.complete(result); return result; } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading Loading @@ -695,20 +684,15 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void requestCursorUpdates(int cursorUpdateMode, AndroidFuture future /* T=Boolean */) { @SuppressWarnings("unchecked") final AndroidFuture<Boolean> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#requestCursorUpdates"); try { final InputConnection ic = getInputConnection(); final boolean result; if (ic == null || !isActive()) { Log.w(TAG, "requestCursorAnchorInfo on inactive InputConnection"); result = false; } else { result = ic.requestCursorUpdates(cursorUpdateMode); return false; } typedFuture.complete(result); return ic.requestCursorUpdates(cursorUpdateMode); } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading @@ -718,26 +702,19 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { @Override public void commitContent(InputContentInfo inputContentInfo, int flags, Bundle opts, AndroidFuture future /* T=Boolean */) { @SuppressWarnings("unchecked") final AndroidFuture<Boolean> typedFuture = future; dispatch(() -> { dispatch(future, () -> { Trace.traceBegin(Trace.TRACE_TAG_INPUT, "InputConnection#commitContent"); try { final InputConnection ic = getInputConnection(); final boolean result; if (ic == null || !isActive()) { Log.w(TAG, "commitContent on inactive InputConnection"); result = false; } else { if (inputContentInfo == null || !inputContentInfo.validate()) { Log.w(TAG, "commitContent with invalid inputContentInfo=" + inputContentInfo); result = false; } else { result = ic.commitContent(inputContentInfo, flags, opts); return false; } if (inputContentInfo == null || !inputContentInfo.validate()) { Log.w(TAG, "commitContent with invalid inputContentInfo=" + inputContentInfo); return false; } typedFuture.complete(result); return ic.commitContent(inputContentInfo, flags, opts); } finally { Trace.traceEnd(Trace.TRACE_TAG_INPUT); } Loading Loading @@ -771,4 +748,10 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { mH.post(runnable); } private <T> void dispatch(@NonNull AndroidFuture untypedFuture, @NonNull Supplier<T> supplier) { @SuppressWarnings("unchecked") final AndroidFuture<T> future = untypedFuture; dispatch(() -> future.complete(supplier.get())); } }