diff options
Diffstat (limited to 'core/java/android/widget/SelectionActionModeHelper.java')
| -rw-r--r-- | core/java/android/widget/SelectionActionModeHelper.java | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java index 6f189204434a..eb6bce4a2f59 100644 --- a/core/java/android/widget/SelectionActionModeHelper.java +++ b/core/java/android/widget/SelectionActionModeHelper.java @@ -36,6 +36,7 @@ import android.text.TextUtils; import android.text.util.Linkify; import android.util.Log; import android.view.ActionMode; +import android.view.ViewConfiguration; import android.view.textclassifier.ExtrasUtils; import android.view.textclassifier.SelectionEvent; import android.view.textclassifier.SelectionEvent.InvocationMethod; @@ -1056,10 +1057,12 @@ public final class SelectionActionModeHelper { */ private static final class TextClassificationHelper { - private static final int TRIM_DELTA = 120; // characters + // The fixed upper bound of context size. + private static final int TRIM_DELTA_UPPER_BOUND = 240; private final Context mContext; private Supplier<TextClassifier> mTextClassifier; + private final ViewConfiguration mViewConfiguration; /** The original TextView text. **/ private String mText; @@ -1088,12 +1091,13 @@ public final class SelectionActionModeHelper { private SelectionResult mLastClassificationResult; /** Whether the TextClassifier has been initialized. */ - private boolean mHot; + private boolean mInitialized; TextClassificationHelper(Context context, Supplier<TextClassifier> textClassifier, CharSequence text, int selectionStart, int selectionEnd, LocaleList locales) { init(textClassifier, text, selectionStart, selectionEnd, locales); mContext = Objects.requireNonNull(context); + mViewConfiguration = ViewConfiguration.get(mContext); } @UiThread @@ -1110,13 +1114,13 @@ public final class SelectionActionModeHelper { @WorkerThread public SelectionResult classifyText() { - mHot = true; + mInitialized = true; return performClassification(null /* selection */); } @WorkerThread public SelectionResult suggestSelection() { - mHot = true; + mInitialized = true; trimText(); final TextSelection selection; if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.P) { @@ -1148,16 +1152,15 @@ public final class SelectionActionModeHelper { /** * Maximum time (in milliseconds) to wait for a textclassifier result before timing out. */ - // TODO: Consider making this a ViewConfiguration. public int getTimeoutDuration() { - if (mHot) { - return 200; + if (mInitialized) { + return mViewConfiguration.getSmartSelectionInitializedTimeout(); } else { // Return a slightly larger number than usual when the TextClassifier is first // initialized. Initialization would usually take longer than subsequent calls to // the TextClassifier. The impact of this on the UI is that we do not show the // selection handles or toolbar until after this timeout. - return 500; + return mViewConfiguration.getSmartSelectionInitializingTimeout(); } } @@ -1205,8 +1208,11 @@ public final class SelectionActionModeHelper { } private void trimText() { - mTrimStart = Math.max(0, mSelectionStart - TRIM_DELTA); - final int referenceEnd = Math.min(mText.length(), mSelectionEnd + TRIM_DELTA); + final int trimDelta = Math.min( + TextClassificationManager.getSettings(mContext).getSmartSelectionTrimDelta(), + TRIM_DELTA_UPPER_BOUND); + mTrimStart = Math.max(0, mSelectionStart - trimDelta); + final int referenceEnd = Math.min(mText.length(), mSelectionEnd + trimDelta); mTrimmedText = mText.subSequence(mTrimStart, referenceEnd); mRelativeStart = mSelectionStart - mTrimStart; mRelativeEnd = mSelectionEnd - mTrimStart; |
