From 58414a48673a1901d76b95d95fd5b667604e96eb Mon Sep 17 00:00:00 2001 From: Florina Muntenescu Date: Wed, 24 Jan 2018 01:05:15 +0000 Subject: [PATCH] Update JavaDocs for Alignment, Clickable, Editable and MetricAffecting spans. Test: N/A Bug: 72092996 Change-Id: I716ed3841d7ac0b1cc2f75021ae0e02d1bf05524 --- .../android/text/style/AlignmentSpan.java | 67 ++++++++++++++---- .../android/text/style/ClickableSpan.java | 15 +++- .../java/android/text/style/EasyEditSpan.java | 7 +- .../text/style/MetricAffectingSpan.java | 29 +++++--- .../images/text/style/clickablespan.png | Bin 0 -> 12200 bytes .../images/text/style/ltralignmentspan.png | Bin 0 -> 8457 bytes .../images/text/style/rtlalignmentspan.png | Bin 0 -> 4896 bytes 7 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 docs/html/reference/images/text/style/clickablespan.png create mode 100644 docs/html/reference/images/text/style/ltralignmentspan.png create mode 100644 docs/html/reference/images/text/style/rtlalignmentspan.png diff --git a/core/java/android/text/style/AlignmentSpan.java b/core/java/android/text/style/AlignmentSpan.java index 615830949ed3e..18c3e16b910ab 100644 --- a/core/java/android/text/style/AlignmentSpan.java +++ b/core/java/android/text/style/AlignmentSpan.java @@ -16,49 +16,90 @@ package android.text.style; +import android.annotation.NonNull; import android.os.Parcel; import android.text.Layout; import android.text.ParcelableSpan; import android.text.TextUtils; +/** + * Span that allows defining the alignment of text at the paragraph level. + */ public interface AlignmentSpan extends ParagraphStyle { + + /** + * Returns the alignment of the text. + * + * @return the text alignment + */ Layout.Alignment getAlignment(); + /** + * Default implementation of the {@link AlignmentSpan}. + *

+ * For example, a text written in a left to right language, like English, which is by default + * aligned to the left, can be aligned opposite to the layout direction like this: + *

{@code SpannableString string = new SpannableString("Text with opposite alignment");
+     *string.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE), 0,
+     *string.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);}
+ * + *
Align left to right text opposite to the layout direction.
+ *

+ * A text written in a right to left language, like Hebrew, which is by default aligned to the + * right, can be aligned opposite to the layout direction like this: + *

{@code SpannableString string = new SpannableString("טקסט עם יישור הפוך");
+     *string.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE), 0,
+     *string.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);}
+ * + *
Align right to left text opposite to the layout direction.
+ */ class Standard implements AlignmentSpan, ParcelableSpan { - public Standard(Layout.Alignment align) { + private final Layout.Alignment mAlignment; + + /** + * Constructs a {@link Standard} from an alignment. + */ + public Standard(@NonNull Layout.Alignment align) { mAlignment = align; } - public Standard(Parcel src) { + /** + * Constructs a {@link Standard} from a parcel. + */ + public Standard(@NonNull Parcel src) { mAlignment = Layout.Alignment.valueOf(src.readString()); } - - public int getSpanTypeId() { - return getSpanTypeIdInternal(); - } - /** @hide */ - public int getSpanTypeIdInternal() { + @Override + public int getSpanTypeId() { + return getSpanTypeIdInternal(); + } + + /** @hide */ + @Override + public int getSpanTypeIdInternal() { return TextUtils.ALIGNMENT_SPAN; } - + + @Override public int describeContents() { return 0; } - public void writeToParcel(Parcel dest, int flags) { + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { writeToParcelInternal(dest, flags); } /** @hide */ - public void writeToParcelInternal(Parcel dest, int flags) { + @Override + public void writeToParcelInternal(@NonNull Parcel dest, int flags) { dest.writeString(mAlignment.name()); } + @Override public Layout.Alignment getAlignment() { return mAlignment; } - - private final Layout.Alignment mAlignment; } } diff --git a/core/java/android/text/style/ClickableSpan.java b/core/java/android/text/style/ClickableSpan.java index b098f16da1eda..60aed2a782ab3 100644 --- a/core/java/android/text/style/ClickableSpan.java +++ b/core/java/android/text/style/ClickableSpan.java @@ -16,6 +16,7 @@ package android.text.style; +import android.annotation.NonNull; import android.text.TextPaint; import android.view.View; @@ -24,6 +25,16 @@ import android.view.View; * with a movement method of LinkMovementMethod, the affected spans of * text can be selected. If selected and clicked, the {@link #onClick} method will * be called. + *

+ * The text with a ClickableSpan attached will be underlined and the link color will be + * used as a text color. The default link color is the theme's accent color or + * android:textColorLink if this attribute is defined in the theme. + * For example, considering that we have a CustomClickableSpan that extends + * ClickableSpan, it can be used like this: + *

{@code SpannableString string = new SpannableString("Text with clickable text");
+ *string.setSpan(new CustomClickableSpan(), 10, 19, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);}
+ * + *
Text with ClickableSpan.
*/ public abstract class ClickableSpan extends CharacterStyle implements UpdateAppearance { private static int sIdCounter = 0; @@ -33,13 +44,13 @@ public abstract class ClickableSpan extends CharacterStyle implements UpdateAppe /** * Performs the click action associated with this span. */ - public abstract void onClick(View widget); + public abstract void onClick(@NonNull View widget); /** * Makes the text underlined and in the link color. */ @Override - public void updateDrawState(TextPaint ds) { + public void updateDrawState(@NonNull TextPaint ds) { ds.setColor(ds.linkColor); ds.setUnderlineText(true); } diff --git a/core/java/android/text/style/EasyEditSpan.java b/core/java/android/text/style/EasyEditSpan.java index 7af1c2c896007..9ee0b074459e0 100644 --- a/core/java/android/text/style/EasyEditSpan.java +++ b/core/java/android/text/style/EasyEditSpan.java @@ -16,6 +16,7 @@ package android.text.style; +import android.annotation.NonNull; import android.app.PendingIntent; import android.os.Parcel; import android.text.ParcelableSpan; @@ -79,7 +80,7 @@ public class EasyEditSpan implements ParcelableSpan { /** * Constructor called from {@link TextUtils} to restore the span. */ - public EasyEditSpan(Parcel source) { + public EasyEditSpan(@NonNull Parcel source) { mPendingIntent = source.readParcelable(null); mDeleteEnabled = (source.readByte() == 1); } @@ -90,12 +91,12 @@ public class EasyEditSpan implements ParcelableSpan { } @Override - public void writeToParcel(Parcel dest, int flags) { + public void writeToParcel(@NonNull Parcel dest, int flags) { writeToParcelInternal(dest, flags); } /** @hide */ - public void writeToParcelInternal(Parcel dest, int flags) { + public void writeToParcelInternal(@NonNull Parcel dest, int flags) { dest.writeParcelable(mPendingIntent, 0); dest.writeByte((byte) (mDeleteEnabled ? 1 : 0)); } diff --git a/core/java/android/text/style/MetricAffectingSpan.java b/core/java/android/text/style/MetricAffectingSpan.java index 853ecc6e8f496..61b7947af6389 100644 --- a/core/java/android/text/style/MetricAffectingSpan.java +++ b/core/java/android/text/style/MetricAffectingSpan.java @@ -16,6 +16,7 @@ package android.text.style; +import android.annotation.NonNull; import android.text.TextPaint; /** @@ -23,13 +24,19 @@ import android.text.TextPaint; * changes the width or height of characters extend this class. */ public abstract class MetricAffectingSpan -extends CharacterStyle -implements UpdateLayout { - - public abstract void updateMeasureState(TextPaint p); + extends CharacterStyle + implements UpdateLayout { /** - * Returns "this" for most MetricAffectingSpans, but for + * Classes that extend MetricAffectingSpan implement this method to update the text formatting + * in a way that can change the width or height of characters. + * + * @param textPaint the paint used for drawing the text + */ + public abstract void updateMeasureState(@NonNull TextPaint textPaint); + + /** + * Returns "this" for most MetricAffectingSpans, but for * MetricAffectingSpans that were generated by {@link #wrap}, * returns the underlying MetricAffectingSpan. */ @@ -41,18 +48,18 @@ implements UpdateLayout { /** * A Passthrough MetricAffectingSpan is one that * passes {@link #updateDrawState} and {@link #updateMeasureState} - * calls through to the specified MetricAffectingSpan + * calls through to the specified MetricAffectingSpan * while still being a distinct object, * and is therefore able to be attached to the same Spannable * to which the specified MetricAffectingSpan is already attached. */ /* package */ static class Passthrough extends MetricAffectingSpan { private MetricAffectingSpan mStyle; - + /** * Creates a new Passthrough of the specfied MetricAffectingSpan. */ - public Passthrough(MetricAffectingSpan cs) { + Passthrough(@NonNull MetricAffectingSpan cs) { mStyle = cs; } @@ -60,7 +67,7 @@ implements UpdateLayout { * Passes updateDrawState through to the underlying MetricAffectingSpan. */ @Override - public void updateDrawState(TextPaint tp) { + public void updateDrawState(@NonNull TextPaint tp) { mStyle.updateDrawState(tp); } @@ -68,10 +75,10 @@ implements UpdateLayout { * Passes updateMeasureState through to the underlying MetricAffectingSpan. */ @Override - public void updateMeasureState(TextPaint tp) { + public void updateMeasureState(@NonNull TextPaint tp) { mStyle.updateMeasureState(tp); } - + /** * Returns the MetricAffectingSpan underlying this one, or the one * underlying it if it too is a Passthrough. diff --git a/docs/html/reference/images/text/style/clickablespan.png b/docs/html/reference/images/text/style/clickablespan.png new file mode 100644 index 0000000000000000000000000000000000000000..8e3e6bfc6b5c74ac399246d51cad1d08e930fece GIT binary patch literal 12200 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%0AnP;Q}8M6$1j1*t#)WV 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 literal 0 HcmV?d00001