Merge "Avoid classifying text mulitple times." into oc-dev

am: d30044407e

Change-Id: Ie6b8c7e95e47c5e382d3f2dab505faee1c03a6e8
This commit is contained in:
Abodunrinwa Toki
2017-05-03 12:40:34 +00:00
committed by android-build-merger

View File

@@ -33,6 +33,7 @@ import android.widget.Editor.SelectionModifierCursorController;
import com.android.internal.util.Preconditions;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -310,6 +311,13 @@ final class SelectionActionModeHelper {
/** End index relative to mTrimmedText */
private int mRelativeEnd;
/** Information about the last classified text to avoid re-running a query. */
private CharSequence mLastClassificationText;
private int mLastClassificationSelectionStart;
private int mLastClassificationSelectionEnd;
private LocaleList mLastClassificationLocales;
private SelectionResult mLastClassificationResult;
TextClassificationHelper(TextClassifier textClassifier,
CharSequence text, int selectionStart, int selectionEnd, LocaleList locales) {
reset(textClassifier, text, selectionStart, selectionEnd, locales);
@@ -328,12 +336,25 @@ final class SelectionActionModeHelper {
@WorkerThread
public SelectionResult classifyText() {
trimText();
return new SelectionResult(
mSelectionStart,
mSelectionEnd,
mTextClassifier.classifyText(
mTrimmedText, mRelativeStart, mRelativeEnd, mLocales));
if (!Objects.equals(mText, mLastClassificationText)
|| mSelectionStart != mLastClassificationSelectionStart
|| mSelectionEnd != mLastClassificationSelectionEnd
|| !Objects.equals(mLocales, mLastClassificationLocales)) {
mLastClassificationText = mText;
mLastClassificationSelectionStart = mSelectionStart;
mLastClassificationSelectionEnd = mSelectionEnd;
mLastClassificationLocales = mLocales;
trimText();
mLastClassificationResult = new SelectionResult(
mSelectionStart,
mSelectionEnd,
mTextClassifier.classifyText(
mTrimmedText, mRelativeStart, mRelativeEnd, mLocales));
}
return mLastClassificationResult;
}
@WorkerThread