diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-09-12 16:43:50 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-09-12 16:43:50 +0000 |
| commit | 0d98a2f1e500a1789ce71f2a6006de465df62e5f (patch) | |
| tree | 45e9e05a30264b937d003dccb80c1759a0b063dd /core/java/android | |
| parent | e14a95a1b4efaccdb684fd86a513bf74e585511c (diff) | |
| parent | 78940eb8591a77c4d9b1872cd760aac87e681ece (diff) | |
Merge "Log the "change selected text" gesture."
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/widget/Editor.java | 3 | ||||
| -rw-r--r-- | core/java/android/widget/SelectionActionModeHelper.java | 45 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 2 |
3 files changed, 32 insertions, 18 deletions
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 8a3744067cd6..d23dfe46742e 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -1262,7 +1262,8 @@ public class Editor { } } - void sendOnTextChanged(int start, int after) { + void sendOnTextChanged(int start, int before, int after) { + getSelectionActionModeHelper().onTextChanged(start, start + before); updateSpellCheckSpans(start, start + after, false); // Flip flag to indicate the word iterator needs to have the text reset. diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java index 8fe3fd0eaa73..36dc3308a721 100644 --- a/core/java/android/widget/SelectionActionModeHelper.java +++ b/core/java/android/widget/SelectionActionModeHelper.java @@ -146,10 +146,8 @@ public final class SelectionActionModeHelper { SelectionEvent.ActionType.DRAG, mTextClassification); } - public void onTypeOverSelection() { - mSelectionTracker.onSelectionAction( - mTextView.getSelectionStart(), mTextView.getSelectionEnd(), - SelectionEvent.ActionType.OVERTYPE, mTextClassification); + public void onTextChanged(int start, int end) { + mSelectionTracker.onTextChanged(start, end, mTextClassification); } public boolean resetSelection(int textIndex) { @@ -383,7 +381,6 @@ public final class SelectionActionModeHelper { private int mOriginalEnd; private int mSelectionStart; private int mSelectionEnd; - private boolean mSelectionStarted; private boolean mAllowReset; SelectionTracker(TextView textView) { @@ -396,9 +393,8 @@ public final class SelectionActionModeHelper { */ public void onOriginalSelection( CharSequence text, int selectionStart, int selectionEnd, boolean editableText) { - mOriginalStart = selectionStart; - mOriginalEnd = selectionEnd; - mSelectionStarted = true; + mOriginalStart = mSelectionStart = selectionStart; + mOriginalEnd = mSelectionEnd = selectionEnd; mAllowReset = false; maybeInvalidateLogger(); mLogger.logSelectionStarted(text, selectionStart); @@ -408,7 +404,7 @@ public final class SelectionActionModeHelper { * Called when selection action mode is started and the results come from a classifier. */ public void onSmartSelection(SelectionResult result) { - if (mSelectionStarted) { + if (isSelectionStarted()) { mSelectionStart = result.mStart; mSelectionEnd = result.mEnd; mAllowReset = mSelectionStart != mOriginalStart || mSelectionEnd != mOriginalEnd; @@ -423,7 +419,9 @@ public final class SelectionActionModeHelper { public void onSelectionUpdated( int selectionStart, int selectionEnd, @Nullable TextClassification classification) { - if (mSelectionStarted) { + if (isSelectionStarted()) { + mSelectionStart = selectionStart; + mSelectionEnd = selectionEnd; mAllowReset = false; mLogger.logSelectionModified(selectionStart, selectionEnd, classification, null); } @@ -434,10 +432,13 @@ public final class SelectionActionModeHelper { */ public void onSelectionDestroyed() { mAllowReset = false; - mSelectionStarted = false; - mLogger.logSelectionAction( - mSelectionStart, mSelectionEnd, - SelectionEvent.ActionType.ABANDON, null /* classification */); + // Wait a few ms to see if the selection was destroyed because of a text change event. + mTextView.postDelayed(() -> { + mLogger.logSelectionAction( + mSelectionStart, mSelectionEnd, + SelectionEvent.ActionType.ABANDON, null /* classification */); + mSelectionStart = mSelectionEnd = -1; + }, 100 /* ms */); } /** @@ -447,7 +448,7 @@ public final class SelectionActionModeHelper { int selectionStart, int selectionEnd, @SelectionEvent.ActionType int action, @Nullable TextClassification classification) { - if (mSelectionStarted) { + if (isSelectionStarted()) { mAllowReset = false; mLogger.logSelectionAction(selectionStart, selectionEnd, action, classification); } @@ -461,13 +462,15 @@ public final class SelectionActionModeHelper { */ public boolean resetSelection(int textIndex, Editor editor) { final TextView textView = editor.getTextView(); - if (mSelectionStarted + if (isSelectionStarted() && mAllowReset && textIndex >= mSelectionStart && textIndex <= mSelectionEnd && textView.getText() instanceof Spannable) { mAllowReset = false; boolean selected = editor.selectCurrentWord(); if (selected) { + mSelectionStart = editor.getTextView().getSelectionStart(); + mSelectionEnd = editor.getTextView().getSelectionEnd(); mLogger.logSelectionAction( textView.getSelectionStart(), textView.getSelectionEnd(), SelectionEvent.ActionType.RESET, null /* classification */); @@ -477,11 +480,21 @@ public final class SelectionActionModeHelper { return false; } + public void onTextChanged(int start, int end, TextClassification classification) { + if (isSelectionStarted() && start == mSelectionStart && end == mSelectionEnd) { + onSelectionAction(start, end, SelectionEvent.ActionType.OVERTYPE, classification); + } + } + private void maybeInvalidateLogger() { if (mLogger.isEditTextLogger() != mTextView.isTextEditable()) { mLogger = new SelectionMetricsLogger(mTextView); } } + + private boolean isSelectionStarted() { + return mSelectionStart >= 0 && mSelectionEnd >= 0 && mSelectionStart != mSelectionEnd; + } } // TODO: Write tests diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 3b9f7918ce55..4b6c4d355390 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -9402,7 +9402,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } - if (mEditor != null) mEditor.sendOnTextChanged(start, after); + if (mEditor != null) mEditor.sendOnTextChanged(start, before, after); } /** |
