Commit a3fd8d7e authored by aurimas@chromium.org's avatar aurimas@chromium.org

[Android] Add a workaround for setting empty IME compositions.

This is a tempory workaround where Blink does not cancel the composition when
we send a commit with the empty text.

BUG=373934

Review URL: https://codereview.chromium.org/289863013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272615 0039d316-1c4b-4281-b951-d872f2087c98
parent 69cb3774
...@@ -8,6 +8,7 @@ import android.os.SystemClock; ...@@ -8,6 +8,7 @@ import android.os.SystemClock;
import android.text.Editable; import android.text.Editable;
import android.text.InputType; import android.text.InputType;
import android.text.Selection; import android.text.Selection;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
...@@ -212,6 +213,7 @@ public class AdapterInputConnection extends BaseInputConnection { ...@@ -212,6 +213,7 @@ public class AdapterInputConnection extends BaseInputConnection {
@Override @Override
public boolean setComposingText(CharSequence text, int newCursorPosition) { public boolean setComposingText(CharSequence text, int newCursorPosition) {
if (DEBUG) Log.w(TAG, "setComposingText [" + text + "] [" + newCursorPosition + "]"); if (DEBUG) Log.w(TAG, "setComposingText [" + text + "] [" + newCursorPosition + "]");
if (maybePerformEmptyCompositionWorkaround(text)) return true;
super.setComposingText(text, newCursorPosition); super.setComposingText(text, newCursorPosition);
updateSelectionIfRequired(); updateSelectionIfRequired();
return mImeAdapter.checkCompositionQueueAndCallNative(text.toString(), return mImeAdapter.checkCompositionQueueAndCallNative(text.toString(),
...@@ -224,6 +226,7 @@ public class AdapterInputConnection extends BaseInputConnection { ...@@ -224,6 +226,7 @@ public class AdapterInputConnection extends BaseInputConnection {
@Override @Override
public boolean commitText(CharSequence text, int newCursorPosition) { public boolean commitText(CharSequence text, int newCursorPosition) {
if (DEBUG) Log.w(TAG, "commitText [" + text + "] [" + newCursorPosition + "]"); if (DEBUG) Log.w(TAG, "commitText [" + text + "] [" + newCursorPosition + "]");
if (maybePerformEmptyCompositionWorkaround(text)) return true;
super.commitText(text, newCursorPosition); super.commitText(text, newCursorPosition);
updateSelectionIfRequired(); updateSelectionIfRequired();
return mImeAdapter.checkCompositionQueueAndCallNative(text.toString(), return mImeAdapter.checkCompositionQueueAndCallNative(text.toString(),
...@@ -446,6 +449,33 @@ public class AdapterInputConnection extends BaseInputConnection { ...@@ -446,6 +449,33 @@ public class AdapterInputConnection extends BaseInputConnection {
return mImeAdapter.getInputMethodManagerWrapper(); 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 @VisibleForTesting
static class ImeState { static class ImeState {
public final String text; public final String text;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment