Loading api/current.txt +9 −0 Original line number Diff line number Diff line Loading @@ -55053,6 +55053,9 @@ package android.widget { method public android.os.LocaleList getTextLocales(); method public android.text.PrecomputedText.Params getTextMetricsParams(); method public float getTextScaleX(); method public android.graphics.drawable.Drawable getTextSelectHandle(); method public android.graphics.drawable.Drawable getTextSelectHandleLeft(); method public android.graphics.drawable.Drawable getTextSelectHandleRight(); method public float getTextSize(); method public int getTotalPaddingBottom(); method public int getTotalPaddingEnd(); Loading Loading @@ -55181,6 +55184,12 @@ package android.widget { method public void setTextLocales(android.os.LocaleList); method public void setTextMetricsParams(android.text.PrecomputedText.Params); method public void setTextScaleX(float); method public void setTextSelectHandle(android.graphics.drawable.Drawable); method public void setTextSelectHandle(int); method public void setTextSelectHandleLeft(android.graphics.drawable.Drawable); method public void setTextSelectHandleLeft(int); method public void setTextSelectHandleRight(android.graphics.drawable.Drawable); method public void setTextSelectHandleRight(int); method public void setTextSize(float); method public void setTextSize(int, float); method public final void setTransformationMethod(android.text.method.TransformationMethod); core/java/android/widget/Editor.java +66 −32 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.graphics.RectF; import android.graphics.RenderNode; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.os.LocaleList; import android.os.Parcel; Loading Loading @@ -310,12 +311,12 @@ public class Editor { Drawable mDrawableForCursor = null; @UnsupportedAppUsage private Drawable mSelectHandleLeft; @UnsupportedAppUsage private Drawable mSelectHandleRight; @UnsupportedAppUsage private Drawable mSelectHandleCenter; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) Drawable mSelectHandleLeft; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) Drawable mSelectHandleRight; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) Drawable mSelectHandleCenter; // Global listener that detects changes in the global position of the TextView private PositionListener mPositionListener; Loading Loading @@ -3927,7 +3928,6 @@ public class Editor { SelectionModifierCursorController selectionController = getSelectionController(); if (selectionController.mStartHandle == null) { // As these are for initializing selectionController, hide() must be called. selectionController.initDrawables(); selectionController.initHandles(); selectionController.hide(); } Loading Loading @@ -4495,13 +4495,11 @@ public class Editor { mContainer.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); mContainer.setContentView(this); mDrawableLtr = drawableLtr; mDrawableRtl = drawableRtl; setDrawables(drawableLtr, drawableRtl); mMinSize = mTextView.getContext().getResources().getDimensionPixelSize( com.android.internal.R.dimen.text_handle_min_size); updateDrawable(); final int handleHeight = getPreferredHeight(); mTouchOffsetY = -0.3f * handleHeight; mIdealVerticalOffset = 0.7f * handleHeight; Loading @@ -4511,9 +4509,14 @@ public class Editor { return mIdealVerticalOffset; } protected void updateDrawable() { if (mIsDragging) { // Don't update drawable during dragging. void setDrawables(final Drawable drawableLtr, final Drawable drawableRtl) { mDrawableLtr = drawableLtr; mDrawableRtl = drawableRtl; updateDrawable(true /* updateDrawableWhenDragging */); } protected void updateDrawable(final boolean updateDrawableWhenDragging) { if (!updateDrawableWhenDragging && mIsDragging) { return; } final Layout layout = mTextView.getLayout(); Loading Loading @@ -5030,7 +5033,7 @@ public class Editor { // Fall through. case MotionEvent.ACTION_CANCEL: mIsDragging = false; updateDrawable(); updateDrawable(false /* updateDrawableWhenDragging */); break; } return true; Loading Loading @@ -5315,7 +5318,7 @@ public class Editor { Selection.setSelection((Spannable) mTextView.getText(), mTextView.getSelectionStart(), offset); } updateDrawable(); updateDrawable(false /* updateDrawableWhenDragging */); if (mTextActionMode != null) { invalidateActionMode(); } Loading Loading @@ -5717,16 +5720,22 @@ public class Editor { } private InsertionHandleView getHandle() { if (mSelectHandleCenter == null) { mSelectHandleCenter = mTextView.getContext().getDrawable( mTextView.mTextSelectHandleRes); } if (mHandle == null) { loadHandleDrawables(false /* overwrite */); mHandle = new InsertionHandleView(mSelectHandleCenter); } return mHandle; } private void reloadHandleDrawable() { if (mHandle == null) { // No need to reload, the potentially new drawable will // be used when the handle is created. return; } mHandle.setDrawables(mSelectHandleCenter, mSelectHandleCenter); } @Override public void onDetached() { final ViewTreeObserver observer = mTextView.getViewTreeObserver(); Loading Loading @@ -5790,21 +5799,10 @@ public class Editor { if (mTextView.isInBatchEditMode()) { return; } initDrawables(); loadHandleDrawables(false /* overwrite */); initHandles(); } private void initDrawables() { if (mSelectHandleLeft == null) { mSelectHandleLeft = mTextView.getContext().getDrawable( mTextView.mTextSelectHandleLeftRes); } if (mSelectHandleRight == null) { mSelectHandleRight = mTextView.getContext().getDrawable( mTextView.mTextSelectHandleRightRes); } } private void initHandles() { // Lazy object creation has to be done before updatePosition() is called. if (mStartHandle == null) { Loading @@ -5824,6 +5822,16 @@ public class Editor { hideInsertionPointCursorController(); } private void reloadHandleDrawables() { if (mStartHandle == null) { // No need to reload, the potentially new drawables will // be used when the handles are created. return; } mStartHandle.setDrawables(mSelectHandleLeft, mSelectHandleRight); mEndHandle.setDrawables(mSelectHandleRight, mSelectHandleLeft); } public void hide() { if (mStartHandle != null) mStartHandle.hide(); if (mEndHandle != null) mEndHandle.hide(); Loading Loading @@ -6184,6 +6192,32 @@ public class Editor { } } /** * Loads the insertion and selection handle Drawables from TextView. If the handle * drawables are already loaded, do not overwrite them unless the method parameter * is set to true. This logic is required to avoid overwriting Drawables assigned * to mSelectHandle[Center/Left/Right] by developers using reflection, unless they * explicitly call the setters in TextView. * * @param overwrite whether to overwrite already existing nonnull Drawables */ void loadHandleDrawables(final boolean overwrite) { if (mSelectHandleCenter == null || overwrite) { mSelectHandleCenter = mTextView.getTextSelectHandle(); if (hasInsertionController()) { getInsertionController().reloadHandleDrawable(); } } if (mSelectHandleLeft == null || mSelectHandleRight == null || overwrite) { mSelectHandleLeft = mTextView.getTextSelectHandleLeft(); mSelectHandleRight = mTextView.getTextSelectHandleRight(); if (hasSelectionController()) { getSelectionController().reloadHandleDrawables(); } } } private class CorrectionHighlighter { private final Path mPath = new Path(); private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); Loading core/java/android/widget/TextView.java +182 −8 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ import android.graphics.fonts.FontStyle; import android.graphics.fonts.FontVariationAxis; import android.icu.text.DecimalFormatSymbols; import android.os.AsyncTask; import android.os.Build; import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.LocaleList; Loading Loading @@ -799,17 +800,21 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // they are defined by the TextView's style and are theme-dependent. @UnsupportedAppUsage int mCursorDrawableRes; // These six fields, could be moved to Editor, since we know their default values and we // could condition the creation of the Editor to a non standard value. This is however // brittle since the hardcoded values here (such as // com.android.internal.R.drawable.text_select_handle_left) would have to be updated if the // default style is modified. @UnsupportedAppUsage // Note: this might be stale if setTextSelectHandleLeft is used. We could simplify the code // by removing it, but we would break apps targeting <= P that use it by reflection. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mTextSelectHandleLeftRes; @UnsupportedAppUsage private Drawable mTextSelectHandleLeft; // Note: this might be stale if setTextSelectHandleRight is used. We could simplify the code // by removing it, but we would break apps targeting <= P that use it by reflection. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mTextSelectHandleRightRes; @UnsupportedAppUsage private Drawable mTextSelectHandleRight; // Note: this might be stale if setTextSelectHandle is used. We could simplify the code // by removing it, but we would break apps targeting <= P that use it by reflection. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mTextSelectHandleRes; private Drawable mTextSelectHandle; int mTextEditSuggestionItemLayout; int mTextEditSuggestionContainerLayout; int mTextEditSuggestionHighlightStyle; Loading Loading @@ -3476,6 +3481,175 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return mAutoLinkMask; } /** * Sets the Drawable corresponding to the selection handle used for * positioning the cursor within text. The Drawable defaults to the value * of the textSelectHandle attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandle(int) * @attr ref android.R.styleable#TextView_textSelectHandle */ @android.view.RemotableViewMethod public void setTextSelectHandle(@NonNull Drawable textSelectHandle) { Preconditions.checkNotNull(textSelectHandle, "The text select handle should not be null."); mTextSelectHandle = textSelectHandle; mTextSelectHandleRes = 0; if (mEditor != null) { mEditor.loadHandleDrawables(true /* overwrite */); } } /** * Sets the Drawable corresponding to the selection handle used for * positioning the cursor within text. The Drawable defaults to the value * of the textSelectHandle attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandle(Drawable) * @attr ref android.R.styleable#TextView_textSelectHandle */ @android.view.RemotableViewMethod public void setTextSelectHandle(@DrawableRes int textSelectHandle) { Preconditions.checkArgumentPositive(textSelectHandle, "The text select handle should be a valid drawable resource id."); setTextSelectHandle(mContext.getDrawable(textSelectHandle)); } /** * Returns the Drawable corresponding to the selection handle used * for positioning the cursor within text. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @return the text select handle drawable * * @see #setTextSelectHandle(Drawable) * @see #setTextSelectHandle(int) * @attr ref android.R.styleable#TextView_textSelectHandle */ @Nullable public Drawable getTextSelectHandle() { if (mTextSelectHandle == null && mTextSelectHandleRes != 0) { mTextSelectHandle = mContext.getDrawable(mTextSelectHandleRes); } return mTextSelectHandle; } /** * Sets the Drawable corresponding to the left handle used * for selecting text. The Drawable defaults to the value of the * textSelectHandleLeft attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandleLeft(int) * @attr ref android.R.styleable#TextView_textSelectHandleLeft */ @android.view.RemotableViewMethod public void setTextSelectHandleLeft(@NonNull Drawable textSelectHandleLeft) { Preconditions.checkNotNull(textSelectHandleLeft, "The left text select handle should not be null."); mTextSelectHandleLeft = textSelectHandleLeft; mTextSelectHandleLeftRes = 0; if (mEditor != null) { mEditor.loadHandleDrawables(true /* overwrite */); } } /** * Sets the Drawable corresponding to the left handle used * for selecting text. The Drawable defaults to the value of the * textSelectHandleLeft attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandleLeft(Drawable) * @attr ref android.R.styleable#TextView_textSelectHandleLeft */ @android.view.RemotableViewMethod public void setTextSelectHandleLeft(@DrawableRes int textSelectHandleLeft) { Preconditions.checkArgumentPositive(textSelectHandleLeft, "The text select left handle should be a valid drawable resource id."); setTextSelectHandleLeft(mContext.getDrawable(textSelectHandleLeft)); } /** * Returns the Drawable corresponding to the left handle used * for selecting text. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @return the left text selection handle drawable * * @see #setTextSelectHandleLeft(Drawable) * @see #setTextSelectHandleLeft(int) * @attr ref android.R.styleable#TextView_textSelectHandleLeft */ @Nullable public Drawable getTextSelectHandleLeft() { if (mTextSelectHandleLeft == null && mTextSelectHandleLeftRes != 0) { mTextSelectHandleLeft = mContext.getDrawable(mTextSelectHandleLeftRes); } return mTextSelectHandleLeft; } /** * Sets the Drawable corresponding to the right handle used * for selecting text. The Drawable defaults to the value of the * textSelectHandleRight attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandleRight(int) * @attr ref android.R.styleable#TextView_textSelectHandleRight */ @android.view.RemotableViewMethod public void setTextSelectHandleRight(@NonNull Drawable textSelectHandleRight) { Preconditions.checkNotNull(textSelectHandleRight, "The right text select handle should not be null."); mTextSelectHandleRight = textSelectHandleRight; mTextSelectHandleRightRes = 0; if (mEditor != null) { mEditor.loadHandleDrawables(true /* overwrite */); } } /** * Sets the Drawable corresponding to the right handle used * for selecting text. The Drawable defaults to the value of the * textSelectHandleRight attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandleRight(Drawable) * @attr ref android.R.styleable#TextView_textSelectHandleRight */ @android.view.RemotableViewMethod public void setTextSelectHandleRight(@DrawableRes int textSelectHandleRight) { Preconditions.checkArgumentPositive(textSelectHandleRight, "The text select right handle should be a valid drawable resource id."); setTextSelectHandleRight(mContext.getDrawable(textSelectHandleRight)); } /** * Returns the Drawable corresponding to the right handle used * for selecting text. * * @return the right text selection handle drawable * * @see #setTextSelectHandleRight(Drawable) * @see #setTextSelectHandleRight(int) * @attr ref android.R.styleable#TextView_textSelectHandleRight */ @Nullable public Drawable getTextSelectHandleRight() { if (mTextSelectHandleRight == null && mTextSelectHandleRightRes != 0) { mTextSelectHandleRight = mContext.getDrawable(mTextSelectHandleRightRes); } return mTextSelectHandleRight; } /** * Sets the text appearance from the specified style resource. * <p> Loading Loading
api/current.txt +9 −0 Original line number Diff line number Diff line Loading @@ -55053,6 +55053,9 @@ package android.widget { method public android.os.LocaleList getTextLocales(); method public android.text.PrecomputedText.Params getTextMetricsParams(); method public float getTextScaleX(); method public android.graphics.drawable.Drawable getTextSelectHandle(); method public android.graphics.drawable.Drawable getTextSelectHandleLeft(); method public android.graphics.drawable.Drawable getTextSelectHandleRight(); method public float getTextSize(); method public int getTotalPaddingBottom(); method public int getTotalPaddingEnd(); Loading Loading @@ -55181,6 +55184,12 @@ package android.widget { method public void setTextLocales(android.os.LocaleList); method public void setTextMetricsParams(android.text.PrecomputedText.Params); method public void setTextScaleX(float); method public void setTextSelectHandle(android.graphics.drawable.Drawable); method public void setTextSelectHandle(int); method public void setTextSelectHandleLeft(android.graphics.drawable.Drawable); method public void setTextSelectHandleLeft(int); method public void setTextSelectHandleRight(android.graphics.drawable.Drawable); method public void setTextSelectHandleRight(int); method public void setTextSize(float); method public void setTextSize(int, float); method public final void setTransformationMethod(android.text.method.TransformationMethod);
core/java/android/widget/Editor.java +66 −32 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.graphics.RectF; import android.graphics.RenderNode; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.os.LocaleList; import android.os.Parcel; Loading Loading @@ -310,12 +311,12 @@ public class Editor { Drawable mDrawableForCursor = null; @UnsupportedAppUsage private Drawable mSelectHandleLeft; @UnsupportedAppUsage private Drawable mSelectHandleRight; @UnsupportedAppUsage private Drawable mSelectHandleCenter; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) Drawable mSelectHandleLeft; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) Drawable mSelectHandleRight; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) Drawable mSelectHandleCenter; // Global listener that detects changes in the global position of the TextView private PositionListener mPositionListener; Loading Loading @@ -3927,7 +3928,6 @@ public class Editor { SelectionModifierCursorController selectionController = getSelectionController(); if (selectionController.mStartHandle == null) { // As these are for initializing selectionController, hide() must be called. selectionController.initDrawables(); selectionController.initHandles(); selectionController.hide(); } Loading Loading @@ -4495,13 +4495,11 @@ public class Editor { mContainer.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); mContainer.setContentView(this); mDrawableLtr = drawableLtr; mDrawableRtl = drawableRtl; setDrawables(drawableLtr, drawableRtl); mMinSize = mTextView.getContext().getResources().getDimensionPixelSize( com.android.internal.R.dimen.text_handle_min_size); updateDrawable(); final int handleHeight = getPreferredHeight(); mTouchOffsetY = -0.3f * handleHeight; mIdealVerticalOffset = 0.7f * handleHeight; Loading @@ -4511,9 +4509,14 @@ public class Editor { return mIdealVerticalOffset; } protected void updateDrawable() { if (mIsDragging) { // Don't update drawable during dragging. void setDrawables(final Drawable drawableLtr, final Drawable drawableRtl) { mDrawableLtr = drawableLtr; mDrawableRtl = drawableRtl; updateDrawable(true /* updateDrawableWhenDragging */); } protected void updateDrawable(final boolean updateDrawableWhenDragging) { if (!updateDrawableWhenDragging && mIsDragging) { return; } final Layout layout = mTextView.getLayout(); Loading Loading @@ -5030,7 +5033,7 @@ public class Editor { // Fall through. case MotionEvent.ACTION_CANCEL: mIsDragging = false; updateDrawable(); updateDrawable(false /* updateDrawableWhenDragging */); break; } return true; Loading Loading @@ -5315,7 +5318,7 @@ public class Editor { Selection.setSelection((Spannable) mTextView.getText(), mTextView.getSelectionStart(), offset); } updateDrawable(); updateDrawable(false /* updateDrawableWhenDragging */); if (mTextActionMode != null) { invalidateActionMode(); } Loading Loading @@ -5717,16 +5720,22 @@ public class Editor { } private InsertionHandleView getHandle() { if (mSelectHandleCenter == null) { mSelectHandleCenter = mTextView.getContext().getDrawable( mTextView.mTextSelectHandleRes); } if (mHandle == null) { loadHandleDrawables(false /* overwrite */); mHandle = new InsertionHandleView(mSelectHandleCenter); } return mHandle; } private void reloadHandleDrawable() { if (mHandle == null) { // No need to reload, the potentially new drawable will // be used when the handle is created. return; } mHandle.setDrawables(mSelectHandleCenter, mSelectHandleCenter); } @Override public void onDetached() { final ViewTreeObserver observer = mTextView.getViewTreeObserver(); Loading Loading @@ -5790,21 +5799,10 @@ public class Editor { if (mTextView.isInBatchEditMode()) { return; } initDrawables(); loadHandleDrawables(false /* overwrite */); initHandles(); } private void initDrawables() { if (mSelectHandleLeft == null) { mSelectHandleLeft = mTextView.getContext().getDrawable( mTextView.mTextSelectHandleLeftRes); } if (mSelectHandleRight == null) { mSelectHandleRight = mTextView.getContext().getDrawable( mTextView.mTextSelectHandleRightRes); } } private void initHandles() { // Lazy object creation has to be done before updatePosition() is called. if (mStartHandle == null) { Loading @@ -5824,6 +5822,16 @@ public class Editor { hideInsertionPointCursorController(); } private void reloadHandleDrawables() { if (mStartHandle == null) { // No need to reload, the potentially new drawables will // be used when the handles are created. return; } mStartHandle.setDrawables(mSelectHandleLeft, mSelectHandleRight); mEndHandle.setDrawables(mSelectHandleRight, mSelectHandleLeft); } public void hide() { if (mStartHandle != null) mStartHandle.hide(); if (mEndHandle != null) mEndHandle.hide(); Loading Loading @@ -6184,6 +6192,32 @@ public class Editor { } } /** * Loads the insertion and selection handle Drawables from TextView. If the handle * drawables are already loaded, do not overwrite them unless the method parameter * is set to true. This logic is required to avoid overwriting Drawables assigned * to mSelectHandle[Center/Left/Right] by developers using reflection, unless they * explicitly call the setters in TextView. * * @param overwrite whether to overwrite already existing nonnull Drawables */ void loadHandleDrawables(final boolean overwrite) { if (mSelectHandleCenter == null || overwrite) { mSelectHandleCenter = mTextView.getTextSelectHandle(); if (hasInsertionController()) { getInsertionController().reloadHandleDrawable(); } } if (mSelectHandleLeft == null || mSelectHandleRight == null || overwrite) { mSelectHandleLeft = mTextView.getTextSelectHandleLeft(); mSelectHandleRight = mTextView.getTextSelectHandleRight(); if (hasSelectionController()) { getSelectionController().reloadHandleDrawables(); } } } private class CorrectionHighlighter { private final Path mPath = new Path(); private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); Loading
core/java/android/widget/TextView.java +182 −8 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ import android.graphics.fonts.FontStyle; import android.graphics.fonts.FontVariationAxis; import android.icu.text.DecimalFormatSymbols; import android.os.AsyncTask; import android.os.Build; import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.LocaleList; Loading Loading @@ -799,17 +800,21 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // they are defined by the TextView's style and are theme-dependent. @UnsupportedAppUsage int mCursorDrawableRes; // These six fields, could be moved to Editor, since we know their default values and we // could condition the creation of the Editor to a non standard value. This is however // brittle since the hardcoded values here (such as // com.android.internal.R.drawable.text_select_handle_left) would have to be updated if the // default style is modified. @UnsupportedAppUsage // Note: this might be stale if setTextSelectHandleLeft is used. We could simplify the code // by removing it, but we would break apps targeting <= P that use it by reflection. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mTextSelectHandleLeftRes; @UnsupportedAppUsage private Drawable mTextSelectHandleLeft; // Note: this might be stale if setTextSelectHandleRight is used. We could simplify the code // by removing it, but we would break apps targeting <= P that use it by reflection. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mTextSelectHandleRightRes; @UnsupportedAppUsage private Drawable mTextSelectHandleRight; // Note: this might be stale if setTextSelectHandle is used. We could simplify the code // by removing it, but we would break apps targeting <= P that use it by reflection. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mTextSelectHandleRes; private Drawable mTextSelectHandle; int mTextEditSuggestionItemLayout; int mTextEditSuggestionContainerLayout; int mTextEditSuggestionHighlightStyle; Loading Loading @@ -3476,6 +3481,175 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return mAutoLinkMask; } /** * Sets the Drawable corresponding to the selection handle used for * positioning the cursor within text. The Drawable defaults to the value * of the textSelectHandle attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandle(int) * @attr ref android.R.styleable#TextView_textSelectHandle */ @android.view.RemotableViewMethod public void setTextSelectHandle(@NonNull Drawable textSelectHandle) { Preconditions.checkNotNull(textSelectHandle, "The text select handle should not be null."); mTextSelectHandle = textSelectHandle; mTextSelectHandleRes = 0; if (mEditor != null) { mEditor.loadHandleDrawables(true /* overwrite */); } } /** * Sets the Drawable corresponding to the selection handle used for * positioning the cursor within text. The Drawable defaults to the value * of the textSelectHandle attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandle(Drawable) * @attr ref android.R.styleable#TextView_textSelectHandle */ @android.view.RemotableViewMethod public void setTextSelectHandle(@DrawableRes int textSelectHandle) { Preconditions.checkArgumentPositive(textSelectHandle, "The text select handle should be a valid drawable resource id."); setTextSelectHandle(mContext.getDrawable(textSelectHandle)); } /** * Returns the Drawable corresponding to the selection handle used * for positioning the cursor within text. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @return the text select handle drawable * * @see #setTextSelectHandle(Drawable) * @see #setTextSelectHandle(int) * @attr ref android.R.styleable#TextView_textSelectHandle */ @Nullable public Drawable getTextSelectHandle() { if (mTextSelectHandle == null && mTextSelectHandleRes != 0) { mTextSelectHandle = mContext.getDrawable(mTextSelectHandleRes); } return mTextSelectHandle; } /** * Sets the Drawable corresponding to the left handle used * for selecting text. The Drawable defaults to the value of the * textSelectHandleLeft attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandleLeft(int) * @attr ref android.R.styleable#TextView_textSelectHandleLeft */ @android.view.RemotableViewMethod public void setTextSelectHandleLeft(@NonNull Drawable textSelectHandleLeft) { Preconditions.checkNotNull(textSelectHandleLeft, "The left text select handle should not be null."); mTextSelectHandleLeft = textSelectHandleLeft; mTextSelectHandleLeftRes = 0; if (mEditor != null) { mEditor.loadHandleDrawables(true /* overwrite */); } } /** * Sets the Drawable corresponding to the left handle used * for selecting text. The Drawable defaults to the value of the * textSelectHandleLeft attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandleLeft(Drawable) * @attr ref android.R.styleable#TextView_textSelectHandleLeft */ @android.view.RemotableViewMethod public void setTextSelectHandleLeft(@DrawableRes int textSelectHandleLeft) { Preconditions.checkArgumentPositive(textSelectHandleLeft, "The text select left handle should be a valid drawable resource id."); setTextSelectHandleLeft(mContext.getDrawable(textSelectHandleLeft)); } /** * Returns the Drawable corresponding to the left handle used * for selecting text. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @return the left text selection handle drawable * * @see #setTextSelectHandleLeft(Drawable) * @see #setTextSelectHandleLeft(int) * @attr ref android.R.styleable#TextView_textSelectHandleLeft */ @Nullable public Drawable getTextSelectHandleLeft() { if (mTextSelectHandleLeft == null && mTextSelectHandleLeftRes != 0) { mTextSelectHandleLeft = mContext.getDrawable(mTextSelectHandleLeftRes); } return mTextSelectHandleLeft; } /** * Sets the Drawable corresponding to the right handle used * for selecting text. The Drawable defaults to the value of the * textSelectHandleRight attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandleRight(int) * @attr ref android.R.styleable#TextView_textSelectHandleRight */ @android.view.RemotableViewMethod public void setTextSelectHandleRight(@NonNull Drawable textSelectHandleRight) { Preconditions.checkNotNull(textSelectHandleRight, "The right text select handle should not be null."); mTextSelectHandleRight = textSelectHandleRight; mTextSelectHandleRightRes = 0; if (mEditor != null) { mEditor.loadHandleDrawables(true /* overwrite */); } } /** * Sets the Drawable corresponding to the right handle used * for selecting text. The Drawable defaults to the value of the * textSelectHandleRight attribute. * Note that any change applied to the handle Drawable will not be visible * until the handle is hidden and then drawn again. * * @see #setTextSelectHandleRight(Drawable) * @attr ref android.R.styleable#TextView_textSelectHandleRight */ @android.view.RemotableViewMethod public void setTextSelectHandleRight(@DrawableRes int textSelectHandleRight) { Preconditions.checkArgumentPositive(textSelectHandleRight, "The text select right handle should be a valid drawable resource id."); setTextSelectHandleRight(mContext.getDrawable(textSelectHandleRight)); } /** * Returns the Drawable corresponding to the right handle used * for selecting text. * * @return the right text selection handle drawable * * @see #setTextSelectHandleRight(Drawable) * @see #setTextSelectHandleRight(int) * @attr ref android.R.styleable#TextView_textSelectHandleRight */ @Nullable public Drawable getTextSelectHandleRight() { if (mTextSelectHandleRight == null && mTextSelectHandleRightRes != 0) { mTextSelectHandleRight = mContext.getDrawable(mTextSelectHandleRightRes); } return mTextSelectHandleRight; } /** * Sets the text appearance from the specified style resource. * <p> Loading