summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java45
1 files changed, 27 insertions, 18 deletions
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index b883d0c69d71..a59100abadef 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -79,6 +79,7 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.text.style.SuggestionSpan;
import android.util.Log;
+import android.util.Pair;
import android.util.Pools.Pool;
import android.util.Pools.SimplePool;
import android.util.PrintWriterPrinter;
@@ -2426,24 +2427,9 @@ public final class InputMethodManager {
// Okay we are now ready to call into the served view and have it
// do its stuff.
// Life is good: let's hook everything up!
- EditorInfo editorInfo = new EditorInfo();
- // Note: Use Context#getOpPackageName() rather than Context#getPackageName() so that the
- // system can verify the consistency between the uid of this process and package name passed
- // from here. See comment of Context#getOpPackageName() for details.
- editorInfo.packageName = view.getContext().getOpPackageName();
- editorInfo.autofillId = view.getAutofillId();
- editorInfo.fieldId = view.getId();
- InputConnection ic = view.onCreateInputConnection(editorInfo);
- if (DEBUG) Log.v(TAG, "Starting input: editorInfo=" + editorInfo + " ic=" + ic);
-
- // Clear autofill and field ids if a connection could not be established.
- // This ensures that even disconnected EditorInfos have well-defined attributes,
- // making them consistently and straightforwardly comparable.
- if (ic == null) {
- editorInfo.autofillId = AutofillId.NO_AUTOFILL_ID;
- editorInfo.fieldId = 0;
- }
-
+ final Pair<InputConnection, EditorInfo> connectionPair = createInputConnection(view);
+ final InputConnection ic = connectionPair.first;
+ final EditorInfo editorInfo = connectionPair.second;
final Handler icHandler;
InputBindResult res = null;
synchronized (mH) {
@@ -4018,4 +4004,27 @@ public final class InputMethodManager {
consumer.accept(mAccessibilityInputMethodSession.valueAt(i));
}
}
+
+ @UiThread
+ private static Pair<InputConnection, EditorInfo> createInputConnection(
+ @NonNull View servedView) {
+ final EditorInfo editorInfo = new EditorInfo();
+ // Note: Use Context#getOpPackageName() rather than Context#getPackageName() so that the
+ // system can verify the consistency between the uid of this process and package name passed
+ // from here. See comment of Context#getOpPackageName() for details.
+ editorInfo.packageName = servedView.getContext().getOpPackageName();
+ editorInfo.autofillId = servedView.getAutofillId();
+ editorInfo.fieldId = servedView.getId();
+ final InputConnection ic = servedView.onCreateInputConnection(editorInfo);
+ if (DEBUG) Log.v(TAG, "Starting input: editorInfo=" + editorInfo + " ic=" + ic);
+
+ // Clear autofill and field ids if a connection could not be established.
+ // This ensures that even disconnected EditorInfos have well-defined attributes,
+ // making them consistently and straightforwardly comparable.
+ if (ic == null) {
+ editorInfo.autofillId = AutofillId.NO_AUTOFILL_ID;
+ editorInfo.fieldId = 0;
+ }
+ return new Pair<>(ic, editorInfo);
+ }
}