From f58a0282a9f06770f71c31f433362e6f719fcf4c Mon Sep 17 00:00:00 2001 From: Florina Muntenescu Date: Wed, 24 Jan 2018 10:23:30 +0000 Subject: [PATCH] Making QuoteSpan more flexible. Test: QuoteSpanTest Bug: 72410257 Change-Id: Ie0e159b4f645b7935454ad25fd43c5d0e8f3d7c1 --- api/current.txt | 6 + core/java/android/text/style/QuoteSpan.java | 143 ++++++++++++++++-- .../images/text/style/customquotespan.png | Bin 0 -> 16345 bytes .../images/text/style/defaultquotespan.png | Bin 0 -> 16008 bytes 4 files changed, 134 insertions(+), 15 deletions(-) create mode 100644 docs/html/reference/images/text/style/customquotespan.png create mode 100644 docs/html/reference/images/text/style/defaultquotespan.png diff --git a/api/current.txt b/api/current.txt index 7c7c11b0b9fa7..d44b7d7d65050 100644 --- a/api/current.txt +++ b/api/current.txt @@ -43313,13 +43313,19 @@ package android.text.style { public class QuoteSpan implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan { ctor public QuoteSpan(); ctor public QuoteSpan(int); + ctor public QuoteSpan(int, int, int); ctor public QuoteSpan(android.os.Parcel); method public int describeContents(); method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, java.lang.CharSequence, int, int, boolean, android.text.Layout); method public int getColor(); + method public int getGapWidth(); method public int getLeadingMargin(boolean); method public int getSpanTypeId(); + method public int getStripeWidth(); method public void writeToParcel(android.os.Parcel, int); + field public static final int STANDARD_COLOR = -16776961; // 0xff0000ff + field public static final int STANDARD_GAP_WIDTH_PX = 2; // 0x2 + field public static final int STANDARD_STRIPE_WIDTH_PX = 2; // 0x2 } public class RelativeSizeSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan { diff --git a/core/java/android/text/style/QuoteSpan.java b/core/java/android/text/style/QuoteSpan.java index 7217e1e5efa86..a1c12c256fa1f 100644 --- a/core/java/android/text/style/QuoteSpan.java +++ b/core/java/android/text/style/QuoteSpan.java @@ -17,6 +17,9 @@ package android.text.style; import android.annotation.ColorInt; +import android.annotation.IntRange; +import android.annotation.NonNull; +import android.annotation.Px; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Parcel; @@ -24,68 +27,178 @@ import android.text.Layout; import android.text.ParcelableSpan; import android.text.TextUtils; +/** + * A span which styles paragraphs by adding a vertical stripe at the beginning of the text + * (respecting layout direction). + *

+ * A QuoteSpan must be attached from the first character to the last character of a + * single paragraph, otherwise the span will not be displayed. + *

+ * QuoteSpans allow configuring the following elements: + *

+ * For example, a QuoteSpan using the default values can be constructed like this: + *
{@code SpannableString string = new SpannableString("Text with quote span on a long line");
+ *string.setSpan(new QuoteSpan(), 0, string.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);}
+ * + *
QuoteSpan constructed with default values.
+ *

+ *

+ * To construct a QuoteSpan with a green stripe, of 20px in width and a gap width of + * 40px: + *

{@code SpannableString string = new SpannableString("Text with quote span on a long line");
+ *string.setSpan(new QuoteSpan(Color.GREEN, 20, 40), 0, string.length(),
+ *Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);}
+ * + *
Customized QuoteSpan.
+ */ public class QuoteSpan implements LeadingMarginSpan, ParcelableSpan { - private static final int STRIPE_WIDTH = 2; - private static final int GAP_WIDTH = 2; + /** + * Default stripe width in pixels. + */ + public static final int STANDARD_STRIPE_WIDTH_PX = 2; + /** + * Default gap width in pixels. + */ + public static final int STANDARD_GAP_WIDTH_PX = 2; + + /** + * Default color for the quote stripe. + */ + @ColorInt + public static final int STANDARD_COLOR = 0xff0000ff; + + @ColorInt private final int mColor; + @Px + private final int mStripeWidth; + @Px + private final int mGapWidth; + /** + * Creates a {@link QuoteSpan} with the default values. + */ public QuoteSpan() { - super(); - mColor = 0xff0000ff; + this(STANDARD_COLOR, STANDARD_STRIPE_WIDTH_PX, STANDARD_GAP_WIDTH_PX); } + /** + * Creates a {@link QuoteSpan} based on a color. + * + * @param color the color of the quote stripe. + */ public QuoteSpan(@ColorInt int color) { - super(); + this(color, STANDARD_STRIPE_WIDTH_PX, STANDARD_GAP_WIDTH_PX); + } + + /** + * Creates a {@link QuoteSpan} based on a color, a stripe width and the width of the gap + * between the stripe and the text. + * + * @param color the color of the quote stripe. + * @param stripeWidth the width of the stripe. + * @param gapWidth the width of the gap between the stripe and the text. + */ + public QuoteSpan(@ColorInt int color, @IntRange(from = 0) int stripeWidth, + @IntRange(from = 0) int gapWidth) { mColor = color; + mStripeWidth = stripeWidth; + mGapWidth = gapWidth; } - public QuoteSpan(Parcel src) { + /** + * Create a {@link QuoteSpan} from a parcel. + */ + public QuoteSpan(@NonNull Parcel src) { mColor = src.readInt(); + mStripeWidth = src.readInt(); + mGapWidth = src.readInt(); } + @Override public int getSpanTypeId() { return getSpanTypeIdInternal(); } - /** @hide */ + /** + * @hide + */ + @Override public int getSpanTypeIdInternal() { return TextUtils.QUOTE_SPAN; } + @Override public int describeContents() { return 0; } + @Override public void writeToParcel(Parcel dest, int flags) { writeToParcelInternal(dest, flags); } - /** @hide */ + /** + * @hide + */ + @Override public void writeToParcelInternal(Parcel dest, int flags) { dest.writeInt(mColor); + dest.writeInt(mStripeWidth); + dest.writeInt(mGapWidth); } + /** + * Get the color of the quote stripe. + * + * @return the color of the quote stripe. + */ @ColorInt public int getColor() { return mColor; } - public int getLeadingMargin(boolean first) { - return STRIPE_WIDTH + GAP_WIDTH; + /** + * Get the width of the quote stripe. + * + * @return the width of the quote stripe. + */ + public int getStripeWidth() { + return mStripeWidth; } - public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, - int top, int baseline, int bottom, - CharSequence text, int start, int end, - boolean first, Layout layout) { + /** + * Get the width of the gap between the stripe and the text. + * + * @return the width of the gap between the stripe and the text. + */ + public int getGapWidth() { + return mGapWidth; + } + + @Override + public int getLeadingMargin(boolean first) { + return mStripeWidth + mGapWidth; + } + + @Override + public void drawLeadingMargin(@NonNull Canvas c, @NonNull Paint p, int x, int dir, + int top, int baseline, int bottom, + @NonNull CharSequence text, int start, int end, + boolean first, @NonNull Layout layout) { Paint.Style style = p.getStyle(); int color = p.getColor(); p.setStyle(Paint.Style.FILL); p.setColor(mColor); - c.drawRect(x, top, x + dir * STRIPE_WIDTH, bottom, p); + c.drawRect(x, top, x + dir * mStripeWidth, bottom, p); p.setStyle(style); p.setColor(color); diff --git a/docs/html/reference/images/text/style/customquotespan.png b/docs/html/reference/images/text/style/customquotespan.png new file mode 100644 index 0000000000000000000000000000000000000000..27f521a1b0d0d79bde1d0725adde3da9de58d657 GIT binary patch literal 16345 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 literal 0 HcmV?d00001 diff --git a/docs/html/reference/images/text/style/defaultquotespan.png b/docs/html/reference/images/text/style/defaultquotespan.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5a41f35e0b26944f697d4a74dc8536ee01988c GIT binary patch literal 16008 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 literal 0 HcmV?d00001