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 2160d13f618c3e9c603fb0cfd373d66558d37974..0e8dd820772bbf4660465b21ff4d728ef82da401 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 |
@@ -160,14 +160,16 @@ class ImeAdapter { |
mHandler = new Handler(); |
mInputDialogContainer = new InputDialogContainer(context, |
new InputDialogContainer.InputActionDelegate() { |
+ |
@Override |
- public void clearFocus() { |
- nativeClearFocus(mNativeImeAdapterAndroid); |
+ public void replaceDateTime(String text) { |
+ mViewEmbedder.onSetFieldValue(); |
+ nativeReplaceDateTime(mNativeImeAdapterAndroid, text); |
} |
+ |
@Override |
- public void replaceText(String text) { |
- nativeReplaceText(mNativeImeAdapterAndroid, text); |
- mViewEmbedder.onSetFieldValue(); |
+ public void cancelDateTimeDialog() { |
+ nativeCancelDialog(mNativeImeAdapterAndroid); |
} |
}); |
} |
@@ -494,6 +496,7 @@ class ImeAdapter { |
static public class AdapterInputConnection extends BaseInputConnection { |
private View mInternalView; |
private ImeAdapter mImeAdapter; |
+ private Editable mEditable; |
private boolean mSingleLine; |
private int numBatchEdits; |
private boolean shouldUpdateImeSelection; |
@@ -522,13 +525,16 @@ class ImeAdapter { |
public void setEditableText(String text, int selectionStart, int selectionEnd, |
int compositionStart, int compositionEnd) { |
- Editable editable = getEditable(); |
- int prevSelectionStart = Selection.getSelectionStart(editable); |
- int prevSelectionEnd = Selection.getSelectionEnd(editable); |
- int prevEditableLength = editable.length(); |
- int prevCompositionStart = getComposingSpanStart(editable); |
- int prevCompositionEnd = getComposingSpanEnd(editable); |
- String prevText = editable.toString(); |
+ if (mEditable == null) { |
+ mEditable = Editable.Factory.getInstance().newEditable(""); |
+ } |
+ |
+ int prevSelectionStart = Selection.getSelectionStart(mEditable); |
+ int prevSelectionEnd = Selection.getSelectionEnd(mEditable); |
+ int prevEditableLength = mEditable.length(); |
+ int prevCompositionStart = getComposingSpanStart(mEditable); |
+ int prevCompositionEnd = getComposingSpanEnd(mEditable); |
+ String prevText = mEditable.toString(); |
selectionStart = Math.min(selectionStart, text.length()); |
selectionEnd = Math.min(selectionEnd, text.length()); |
@@ -553,9 +559,9 @@ class ImeAdapter { |
} |
if (!textUnchanged) { |
- editable.replace(0, editable.length(), text); |
+ mEditable.replace(0, mEditable.length(), text); |
} |
- Selection.setSelection(editable, selectionStart, selectionEnd); |
+ Selection.setSelection(mEditable, selectionStart, selectionEnd); |
super.setComposingRegion(compositionStart, compositionEnd); |
if (textUnchanged || prevText.equals("")) { |
@@ -568,6 +574,15 @@ class ImeAdapter { |
} |
@Override |
+ public Editable getEditable() { |
+ if (mEditable == null) { |
+ mEditable = Editable.Factory.getInstance().newEditable(""); |
+ Selection.setSelection(mEditable, 0); |
+ } |
+ return mEditable; |
+ } |
+ |
+ @Override |
public boolean setComposingText(CharSequence text, int newCursorPosition) { |
super.setComposingText(text, newCursorPosition); |
shouldUpdateImeSelection = true; |
@@ -621,14 +636,13 @@ class ImeAdapter { |
@Override |
public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) { |
ExtractedText et = new ExtractedText(); |
- Editable editable = getEditable(); |
- if (editable == null) { |
+ if (mEditable == null) { |
et.text = ""; |
} else { |
- et.text = editable.toString(); |
- et.partialEndOffset = editable.length(); |
- et.selectionStart = Selection.getSelectionStart(editable); |
- et.selectionEnd = Selection.getSelectionEnd(editable); |
+ et.text = mEditable.toString(); |
+ et.partialEndOffset = mEditable.length(); |
+ et.selectionStart = Selection.getSelectionStart(mEditable); |
+ et.selectionEnd = Selection.getSelectionEnd(mEditable); |
} |
et.flags = mSingleLine ? ExtractedText.FLAG_SINGLE_LINE : 0; |
return et; |
@@ -678,9 +692,8 @@ class ImeAdapter { |
@Override |
public boolean finishComposingText() { |
- Editable editable = getEditable(); |
- if (editable == null |
- || (getComposingSpanStart(editable) == getComposingSpanEnd(editable))) { |
+ if (mEditable == null |
+ || (getComposingSpanStart(mEditable) == getComposingSpanEnd(mEditable))) { |
return true; |
} |
super.finishComposingText(); |
@@ -722,13 +735,12 @@ class ImeAdapter { |
} |
private void updateImeSelection() { |
- Editable editable = getEditable(); |
- if (editable != null) { |
+ if (mEditable != null) { |
getInputMethodManager().updateSelection(mInternalView, |
- Selection.getSelectionStart(editable), |
- Selection.getSelectionEnd(editable), |
- getComposingSpanStart(editable), |
- getComposingSpanEnd(editable)); |
+ Selection.getSelectionStart(mEditable), |
+ Selection.getSelectionEnd(mEditable), |
+ getComposingSpanStart(mEditable), |
+ getComposingSpanEnd(mEditable)); |
} |
} |
@@ -814,9 +826,9 @@ class ImeAdapter { |
private native void nativeAttachImeAdapter(int nativeImeAdapterAndroid); |
- private native void nativeReplaceText(int nativeImeAdapterAndroid, String text); |
+ private native void nativeReplaceDateTime(int nativeImeAdapterAndroid, String text); |
- private native void nativeClearFocus(int nativeImeAdapterAndroid); |
+ private native void nativeCancelDialog(int nativeImeAdapterAndroid); |
private native void nativeSetEditableSelectionOffsets(int nativeImeAdapterAndroid, |
int start, int end); |