| Index: content/public/android/java/src/org/chromium/content/browser/ImeAdapter.java
|
| diff --git a/content/public/android/java/src/org/chromium/content/browser/ImeAdapter.java b/content/public/android/java/src/org/chromium/content/browser/ImeAdapter.java
|
| index 88f9578f731751adf0b262c3155a8aa4fa608839..40bca909cad815b4f09aff5166e3709e717b23d1 100644
|
| --- a/content/public/android/java/src/org/chromium/content/browser/ImeAdapter.java
|
| +++ b/content/public/android/java/src/org/chromium/content/browser/ImeAdapter.java
|
| @@ -21,34 +21,36 @@ import android.view.inputmethod.InputMethodManager;
|
| import org.chromium.base.CalledByNative;
|
| import org.chromium.base.JNINamespace;
|
|
|
| -// We have to adapt and plumb android IME service and chrome text input API.
|
| -// ImeAdapter provides an interface in both ways native <-> java:
|
| -// 1. InputConnectionAdapter notifies native code of text composition state and
|
| -// dispatch key events from java -> WebKit.
|
| -// 2. Native ImeAdapter notifies java side to clear composition text.
|
| -//
|
| -// The basic flow is:
|
| -// 1. Intercept dispatchKeyEventPreIme() to record the current key event, but do
|
| -// nothing else.
|
| -// 2. When InputConnectionAdapter gets called with composition or result text:
|
| -// a) If a key event has been recorded in dispatchKeyEventPreIme() and we
|
| -// receive a result text with single character, then we probably need to
|
| -// send the result text as a Char event rather than a ConfirmComposition
|
| -// event. So we need to dispatch the recorded key event followed by a
|
| -// synthetic Char event.
|
| -// b) If we receive a composition text or a result text with more than one
|
| -// characters, then no matter if we recorded a key event or not in
|
| -// dispatchKeyEventPreIme(), we just need to dispatch a synthetic key
|
| -// event with special keycode 229, and then dispatch the composition or
|
| -// result text.
|
| -// 3. Intercept dispatchKeyEvent() method for key events not handled by IME, we
|
| -// need to dispatch them to webkit and check webkit's reply. Then inject a
|
| -// new key event for further processing if webkit didn't handle it.
|
| +/**
|
| + We have to adapt and plumb android IME service and chrome text input API.
|
| + ImeAdapter provides an interface in both ways native <-> java:
|
| + 1. InputConnectionAdapter notifies native code of text composition state and
|
| + dispatch key events from java -> WebKit.
|
| + 2. Native ImeAdapter notifies java side to clear composition text.
|
| +
|
| + The basic flow is:
|
| + 1. Intercept dispatchKeyEventPreIme() to record the current key event, but do
|
| + nothing else.
|
| + 2. When InputConnectionAdapter gets called with composition or result text:
|
| + a) If a key event has been recorded in dispatchKeyEventPreIme() and we
|
| + receive a result text with single character, then we probably need to
|
| + send the result text as a Char event rather than a ConfirmComposition
|
| + event. So we need to dispatch the recorded key event followed by a
|
| + synthetic Char event.
|
| + b) If we receive a composition text or a result text with more than one
|
| + characters, then no matter if we recorded a key event or not in
|
| + dispatchKeyEventPreIme(), we just need to dispatch a synthetic key
|
| + event with special keycode 229, and then dispatch the composition or
|
| + result text.
|
| + 3. Intercept dispatchKeyEvent() method for key events not handled by IME, we
|
| + need to dispatch them to WebKit and check webkit's reply. Then inject a
|
| + new key event for further processing if WebKit didn't handle it.
|
| +*/
|
| @JNINamespace("content")
|
| class ImeAdapter {
|
| interface ViewEmbedder {
|
| /**
|
| - * @param isFinish whether the event is occuring because input is finished.
|
| + * @param isFinish whether the event is occurring because input is finished.
|
| */
|
| public void onImeEvent(boolean isFinish);
|
| public void onSetFieldValue();
|
| @@ -111,8 +113,6 @@ class ImeAdapter {
|
| sTextInputTypeNumber = textInputTypeNumber;
|
| sTextInputTypeWeek = textInputTypeWeek;
|
| sTextInputTypeContentEditable = textInputTypeContentEditable;
|
| - InputDialogContainer.initializeInputTypes(textInputTypeDate, textInputTypeDateTime,
|
| - textInputTypeDateTimeLocal, textInputTypeMonth, textInputTypeTime);
|
| }
|
|
|
| private int mNativeImeAdapterAndroid;
|
| @@ -125,7 +125,6 @@ class ImeAdapter {
|
| private AdapterInputConnection mInputConnection;
|
| private ViewEmbedder mViewEmbedder;
|
| private Handler mHandler;
|
| - private InputDialogContainer mInputDialogContainer;
|
|
|
| private class DelayedDismissInput implements Runnable {
|
| private int mNativeImeAdapter;
|
| @@ -158,20 +157,6 @@ class ImeAdapter {
|
| mInsertionHandleController = insertionHandleController;
|
| mViewEmbedder = embedder;
|
| mHandler = new Handler();
|
| - mInputDialogContainer = new InputDialogContainer(context,
|
| - new InputDialogContainer.InputActionDelegate() {
|
| -
|
| - @Override
|
| - public void replaceDateTime(String text) {
|
| - mViewEmbedder.onSetFieldValue();
|
| - nativeReplaceDateTime(mNativeImeAdapterAndroid, text);
|
| - }
|
| -
|
| - @Override
|
| - public void cancelDateTimeDialog() {
|
| - nativeCancelDialog(mNativeImeAdapterAndroid);
|
| - }
|
| - });
|
| }
|
|
|
| boolean isFor(int nativeImeAdapter, int textInputType) {
|
| @@ -204,30 +189,12 @@ class ImeAdapter {
|
| InputMethodManager manager = (InputMethodManager)
|
| mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
|
|
|
| - if (hasTextInputType()) {
|
| - manager.restartInput(mViewEmbedder.getAttachedView());
|
| - // If type has changed from dialog to text, show even if showIfNeeded is not true.
|
| - if (showIfNeeded || mInputDialogContainer.isDialogShowing()) {
|
| - showKeyboard();
|
| - }
|
| - } else if (hasDialogInputType()) {
|
| - // If type has changed from text to dialog, show even if showIfNeeded is not true.
|
| - if (showIfNeeded || isTextInputType(previousType)) {
|
| - // Make sure the keyboard is dismissed before displaying the dialog.
|
| - dismissInput(false);
|
| - mInsertionHandleController.hideAndDisallowAutomaticShowing();
|
| - mInputDialogContainer.showDialog(text, textInputType);
|
| - }
|
| + manager.restartInput(mViewEmbedder.getAttachedView());
|
| + if (showIfNeeded) {
|
| + showKeyboard();
|
| }
|
| } else if (hasInputType()) {
|
| - if (!mInputDialogContainer.isDialogShowing() && showIfNeeded) {
|
| - if (hasDialogInputType()) {
|
| - mInsertionHandleController.hideAndDisallowAutomaticShowing();
|
| - mInputDialogContainer.showDialog(text, textInputType);
|
| - } else {
|
| - showKeyboard();
|
| - }
|
| - }
|
| + showKeyboard();
|
| }
|
| }
|
|
|
| @@ -258,7 +225,6 @@ class ImeAdapter {
|
| }
|
|
|
| private void showKeyboard() {
|
| - mInputDialogContainer.dismissDialog();
|
| InputMethodManager manager = (InputMethodManager)
|
| mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
|
| manager.showSoftInput(mViewEmbedder.getAttachedView(), 0,
|
| @@ -298,10 +264,6 @@ class ImeAdapter {
|
| return isTextInputType(mTextInputType);
|
| }
|
|
|
| - boolean hasDialogInputType() {
|
| - return InputDialogContainer.isDialogInputType(mTextInputType);
|
| - }
|
| -
|
| void dispatchKeyEventPreIme(KeyEvent event) {
|
| // We only register that a key was pressed, but we don't actually intercept
|
| // it.
|
| @@ -778,10 +740,6 @@ class ImeAdapter {
|
|
|
| private native void nativeAttachImeAdapter(int nativeImeAdapterAndroid);
|
|
|
| - private native void nativeReplaceDateTime(int nativeImeAdapterAndroid, String text);
|
| -
|
| - private native void nativeCancelDialog(int nativeImeAdapterAndroid);
|
| -
|
| private native void nativeSetEditableSelectionOffsets(int nativeImeAdapterAndroid,
|
| int start, int end);
|
|
|
|
|