Index: content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java |
index de9f9cce77fdea84ce6f403d65421ea9443a6b78..71fcd01e42e344ff11d23d163cfc85aa44de2432 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java |
@@ -8,7 +8,6 @@ import android.os.SystemClock; |
import android.text.Editable; |
import android.text.InputType; |
import android.text.Selection; |
-import android.text.TextUtils; |
import android.util.Log; |
import android.view.KeyEvent; |
import android.view.View; |
@@ -46,6 +45,9 @@ public class AdapterInputConnection extends BaseInputConnection { |
private int mLastUpdateCompositionEnd = INVALID_COMPOSITION; |
@VisibleForTesting |
+ public int mUpdateStateCalls = 0; |
+ |
+ @VisibleForTesting |
AdapterInputConnection(View view, ImeAdapter imeAdapter, Editable editable, |
EditorInfo outAttrs) { |
super(view, true); |
@@ -139,6 +141,8 @@ public class AdapterInputConnection extends BaseInputConnection { |
Log.w(TAG, "updateState [" + text + "] [" + selectionStart + " " + selectionEnd + "] [" |
+ compositionStart + " " + compositionEnd + "] [" + isNonImeChange + "]"); |
} |
+ mUpdateStateCalls++; |
+ |
// If this update is from the IME, no further state modification is necessary because the |
// state should have been updated already by the IM framework directly. |
if (!isNonImeChange) return; |
@@ -213,7 +217,6 @@ public class AdapterInputConnection extends BaseInputConnection { |
@Override |
public boolean setComposingText(CharSequence text, int newCursorPosition) { |
if (DEBUG) Log.w(TAG, "setComposingText [" + text + "] [" + newCursorPosition + "]"); |
- if (maybePerformEmptyCompositionWorkaround(text)) return true; |
super.setComposingText(text, newCursorPosition); |
updateSelectionIfRequired(); |
return mImeAdapter.checkCompositionQueueAndCallNative(text, newCursorPosition, false); |
@@ -225,7 +228,6 @@ public class AdapterInputConnection extends BaseInputConnection { |
@Override |
public boolean commitText(CharSequence text, int newCursorPosition) { |
if (DEBUG) Log.w(TAG, "commitText [" + text + "] [" + newCursorPosition + "]"); |
- if (maybePerformEmptyCompositionWorkaround(text)) return true; |
super.commitText(text, newCursorPosition); |
updateSelectionIfRequired(); |
return mImeAdapter.checkCompositionQueueAndCallNative(text, newCursorPosition, |
@@ -460,7 +462,12 @@ public class AdapterInputConnection extends BaseInputConnection { |
super.setComposingRegion(a, b); |
} |
updateSelectionIfRequired(); |
- return mImeAdapter.setComposingRegion(a, b); |
+ |
+ CharSequence regionText = null; |
+ if (b > a) { |
+ regionText = mEditable.subSequence(start, end); |
+ } |
+ return mImeAdapter.setComposingRegion(regionText, a, b); |
} |
boolean isActive() { |
@@ -471,33 +478,6 @@ public class AdapterInputConnection extends BaseInputConnection { |
return mImeAdapter.getInputMethodManagerWrapper(); |
} |
- /** |
- * This method works around the issue crbug.com/373934 where Blink does not cancel |
- * the composition when we send a commit with the empty text. |
- * |
- * TODO(aurimas) Remove this once crbug.com/373934 is fixed. |
- * |
- * @param text Text that software keyboard requested to commit. |
- * @return Whether the workaround was performed. |
- */ |
- private boolean maybePerformEmptyCompositionWorkaround(CharSequence text) { |
- int selectionStart = Selection.getSelectionStart(mEditable); |
- int selectionEnd = Selection.getSelectionEnd(mEditable); |
- int compositionStart = getComposingSpanStart(mEditable); |
- int compositionEnd = getComposingSpanEnd(mEditable); |
- if (TextUtils.isEmpty(text) && (selectionStart == selectionEnd) |
- && compositionStart != INVALID_COMPOSITION |
- && compositionEnd != INVALID_COMPOSITION) { |
- beginBatchEdit(); |
- finishComposingText(); |
- int selection = Selection.getSelectionStart(mEditable); |
- deleteSurroundingText(selection - compositionStart, selection - compositionEnd); |
- endBatchEdit(); |
- return true; |
- } |
- return false; |
- } |
- |
@VisibleForTesting |
static class ImeState { |
public final String text; |