Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(842)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java

Issue 1278593004: Introduce ThreadedInputConnection behind a switch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: switched to delayed onCreateInputConnection approach (tedchoc@'s other comments not resolved yet) Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..f97411a2764a610d490afc45579ac93571a97b8c
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java
@@ -0,0 +1,76 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.content.browser.input;
+
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+
+import org.chromium.base.Log;
+import org.chromium.base.ThreadUtils;
+import org.chromium.content.browser.input.ChromiumBaseInputConnection.ThreadManager;
+
+/**
+ * Default factory for ChromiumBaseInputConnection classes.
+ */
+public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnection.Factory {
+ private static final String TAG = "cr_Ime";
+ private static final boolean DEBUG_LOGS = false;
+
+ private ThreadedInputConnection mThreadedInputConnection;
+ private final Handler mHandler;
+ private final ThreadedInputConnection.ThreadManager mThreadManager;
+ private final InputMethodManagerWrapper mInputMethodManagerWrapper;
+ private ThreadedInputConnectionProxyView mProxyView;
+
+ ThreadedInputConnectionFactory(InputMethodManagerWrapper inputMethodManagerWrapper) {
+ HandlerThread thread =
+ new HandlerThread("InputConnectionHandlerThread", HandlerThread.NORM_PRIORITY);
+ thread.start();
+ mHandler = new Handler(thread.getLooper());
+ mThreadManager = new ThreadManager(mHandler);
+ mInputMethodManagerWrapper = inputMethodManagerWrapper;
+ }
+
+ @Override
+ public ChromiumBaseInputConnection initializeAndGet(View view, ImeAdapter imeAdapter,
+ int inputType, int inputFlags, EditorInfo outAttrs) {
+ if (ThreadUtils.runningOnUiThread()) {
aelias_OOO_until_Jul13 2016/02/08 23:17:14 Is there a way to avoid this thread-based branchin
Changwan Ryu 2016/02/11 16:21:08 Some WebView users (app developers) may override o
aelias_OOO_until_Jul13 2016/02/11 23:13:15 Subclassing WebView is very rare in the first plac
Changwan Ryu 2016/02/12 00:36:03 Unfortunately, there are apps that override webvie
+ if (DEBUG_LOGS) Log.w(TAG, "initializeAndGet: running on ui thread");
+ if (mThreadedInputConnection != null) {
+ mThreadedInputConnection.finishComposingTextOnUiThread();
+ }
+ triggerDelayedOnCreateInputConnection(view);
+ return null;
aelias_OOO_until_Jul13 2016/02/08 23:17:14 What if instead of returning a null InputConnectio
Changwan Ryu 2016/02/11 16:21:08 That's something we could consider if this doesn't
aelias_OOO_until_Jul13 2016/02/11 23:13:15 OK, if immediately calling showSoftInput always pr
aelias_OOO_until_Jul13 2016/02/11 23:13:15 OK, if immediately calling showSoftInput always pr
Changwan Ryu 2016/02/12 00:36:03 Hmm... I think nullity of input connection is not
+ }
+ if (DEBUG_LOGS) Log.w(TAG, "initializeAndGet: running on IME thread");
+ if (mThreadedInputConnection == null) {
+ if (DEBUG_LOGS) Log.w(TAG, "Creating ThreadedInputConnection...");
+ mThreadedInputConnection = new ThreadedInputConnection(imeAdapter, mThreadManager);
+ }
+ mThreadedInputConnection.initializeOutAttrs(inputType, inputFlags, outAttrs);
+ return mThreadedInputConnection;
+ }
+
+ private void triggerDelayedOnCreateInputConnection(final View view) {
+ if (DEBUG_LOGS) Log.w(TAG, "triggerDelayedOnCreateInputConnection");
+ mProxyView = new ThreadedInputConnectionProxyView(
aelias_OOO_until_Jul13 2016/02/08 23:17:14 This ThreadedInputConnectionProxyView class is not
Changwan Ryu 2016/02/11 16:21:08 Added now.
+ view.getContext(), mHandler, view);
+ mProxyView.requestFocus();
+ view.getHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ mProxyView.onWindowFocusChanged(true);
+ mInputMethodManagerWrapper.isActive(mProxyView);
+ }
+ });
+ }
+
+ @Override
+ public ThreadManager getThreadManager() {
+ return mThreadManager;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698