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

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

Issue 2544163003: Simplify handler initialization for InputConnectionFactory (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « no previous file | content/public/android/junit/src/org/chromium/content/browser/input/ThreadedInputConnectionFactoryTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
index c3ea38dcd4f2351ab9d9f946728f8db1afeea93a..d3ed0fc2fc21afff95b6654cc804cb731e4b9ed6 100644
--- 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
@@ -11,7 +11,6 @@ import android.view.inputmethod.EditorInfo;
import org.chromium.base.Log;
import org.chromium.base.VisibleForTesting;
-import org.chromium.base.annotations.SuppressFBWarnings;
/**
* A factory class for {@link ThreadedInputConnection}. The class also includes triggering
@@ -31,11 +30,6 @@ public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnecti
// UI message loop until View#hasWindowFocus() is aligned with what IMMS sees.
private static final int CHECK_REGISTER_RETRY = 1;
- // Reused for multiple WebView instances. TODO(changwan): check if we need to quit the loop
- // for the last webview instance.
- private static HandlerThread sHandlerThread;
-
- private final Handler mHandler;
private final InputMethodManagerWrapper mInputMethodManagerWrapper;
private final InputMethodUma mInputMethodUma;
private ThreadedInputConnectionProxyView mProxyView;
@@ -43,6 +37,18 @@ public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnecti
private CheckInvalidator mCheckInvalidator;
private boolean mReentrantTriggering;
+ // Initialization-on-demand holder for Handler.
+ private static class LazyHandlerHolder {
+ // Note that we never exit this thread to avoid lifetime or thread-safety issues.
+ private static final Handler sHandler;
+ static {
+ HandlerThread handlerThread =
+ new HandlerThread("InputConnectionHandlerThread", HandlerThread.NORM_PRIORITY);
+ handlerThread.start();
+ sHandler = new Handler(handlerThread.getLooper());
+ }
+ }
+
// A small class that can be updated to invalidate the check when there is an external event
// such as window focus loss or view focus loss.
private static class CheckInvalidator {
@@ -61,19 +67,12 @@ public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnecti
ThreadedInputConnectionFactory(InputMethodManagerWrapper inputMethodManagerWrapper) {
mInputMethodManagerWrapper = inputMethodManagerWrapper;
- mHandler = createHandler();
mInputMethodUma = createInputMethodUma();
}
- @VisibleForTesting
- @SuppressFBWarnings("LI_LAZY_INIT_UPDATE_STATIC")
- protected Handler createHandler() {
- if (sHandlerThread == null) {
- sHandlerThread =
- new HandlerThread("InputConnectionHandlerThread", HandlerThread.NORM_PRIORITY);
- sHandlerThread.start();
- }
- return new Handler(sHandlerThread.getLooper());
+ @Override
+ public Handler getHandler() {
+ return LazyHandlerHolder.sHandler;
}
@VisibleForTesting
@@ -133,7 +132,7 @@ public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnecti
if (mThreadedInputConnection == null) {
if (DEBUG_LOGS) Log.w(TAG, "Creating ThreadedInputConnection...");
- mThreadedInputConnection = new ThreadedInputConnection(view, imeAdapter, mHandler);
+ mThreadedInputConnection = new ThreadedInputConnection(view, imeAdapter, getHandler());
} else {
mThreadedInputConnection.resetOnUiThread();
}
@@ -154,7 +153,7 @@ public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnecti
if (!view.hasWindowFocus()) mCheckInvalidator.invalidate();
// We cannot reuse the existing proxy view, if any, due to crbug.com/664402.
- mProxyView = createProxyView(mHandler, view);
+ mProxyView = createProxyView(getHandler(), view);
mReentrantTriggering = true;
// This does not affect view focus of the real views.
@@ -181,7 +180,7 @@ public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnecti
// Step 3: Check that the above hack worked.
// Do not check until activation finishes inside InputMethodManager (on IME thread).
- mHandler.post(new Runnable() {
+ getHandler().post(new Runnable() {
@Override
public void run() {
postCheckRegisterResultOnUiThread(view, mCheckInvalidator,
@@ -237,11 +236,6 @@ public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnecti
}
@Override
- public Handler getHandler() {
- return mHandler;
- }
-
- @Override
public void onWindowFocusChanged(boolean gainFocus) {
if (DEBUG_LOGS) Log.d(TAG, "onWindowFocusChanged: " + gainFocus);
if (!gainFocus && mCheckInvalidator != null) mCheckInvalidator.invalidate();
« no previous file with comments | « no previous file | content/public/android/junit/src/org/chromium/content/browser/input/ThreadedInputConnectionFactoryTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698