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

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

Issue 1278593004: Introduce ThreadedInputConnection behind a switch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removed ImeTest#testDoesNotHang_rendererCrashes which does not test anything 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/ThreadedInputConnectionProxyView.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java
new file mode 100644
index 0000000000000000000000000000000000000000..271a80ca27802436a21017676c5074feab90b638
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java
@@ -0,0 +1,133 @@
+// 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.content.Context;
+import android.os.Handler;
+import android.os.IBinder;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
+
+import org.chromium.base.Log;
+import org.chromium.base.ThreadUtils;
+
+import java.util.concurrent.Callable;
+
+/**
+ * This is a fake View that is only exposed to InputMethodManager.
+ */
+public class ThreadedInputConnectionProxyView extends View {
+ private static final String TAG = "cr_Ime";
+ private static final boolean DEBUG_LOGS = false;
+
+ private final Handler mHandler;
+ private final View mContainerView;
+
+ ThreadedInputConnectionProxyView(Context context, Handler handler, View containerView) {
+ super(context);
+ mHandler = handler;
+ mContainerView = containerView;
+ setFocusable(true);
+ setFocusableInTouchMode(true);
+ setVisibility(View.VISIBLE);
+ if (DEBUG_LOGS) Log.w(TAG, "constructor");
+ }
+
+ @Override
+ public Handler getHandler() {
+ if (DEBUG_LOGS) Log.w(TAG, "getHandler");
+ return mHandler;
+ }
+
+ @Override
+ public boolean checkInputConnectionProxy(View view) {
+ if (DEBUG_LOGS) Log.w(TAG, "checkInputConnectionProxy");
+ return mContainerView == view;
+ }
+
+ @Override
+ public InputConnection onCreateInputConnection(final EditorInfo outAttrs) {
+ if (DEBUG_LOGS) Log.w(TAG, "onCreateInputConnection");
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<InputConnection>() {
+ @Override
+ public InputConnection call() throws Exception {
+ return mContainerView.onCreateInputConnection(outAttrs);
+ }
+ });
+ }
+
+ @Override
+ public boolean hasFocus() {
+ if (DEBUG_LOGS) Log.w(TAG, "hasFocus");
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ return mContainerView.hasFocus();
+ }
+ });
+ }
+
+ @Override
+ public boolean hasWindowFocus() {
+ if (DEBUG_LOGS) Log.w(TAG, "hasWindowFocus");
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ return mContainerView.hasWindowFocus();
+ }
+ });
+ }
+
+ @Override
+ public View getRootView() {
+ if (DEBUG_LOGS) Log.w(TAG, "getRootView");
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<View>() {
+ @Override
+ public View call() throws Exception {
+ return mContainerView.getRootView();
+ }
+ });
+ }
+
+ @Override
+ public boolean onCheckIsTextEditor() {
+ if (DEBUG_LOGS) Log.w(TAG, "onCheckIsTextEditor");
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ return mContainerView.onCheckIsTextEditor();
+ }
+ });
+ }
+
+ @Override
+ public boolean isFocused() {
+ if (DEBUG_LOGS) Log.w(TAG, "isFocused");
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ return mContainerView.isFocused();
+ }
+ });
+ }
+
+ @Override
+ public IBinder getWindowToken() {
+ if (DEBUG_LOGS) Log.w(TAG, "getWindowToken");
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<IBinder>() {
+ @Override
+ public IBinder call() throws Exception {
+ return mContainerView.getWindowToken();
+ }
+ });
+ }
+
+ @Override
+ public void onWindowFocusChanged(boolean hasWindowFocus) {
+ if (DEBUG_LOGS) Log.w(TAG, "onWindowFocusChanged:" + hasWindowFocus);
+ super.onWindowFocusChanged(hasWindowFocus);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698