From 2c80c25b8aa75af2287f471b882ec87d5a5a5015 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 13 Jul 2019 19:11:24 +0200 Subject: [PATCH] Added chips --- .../main/java/eu/faircode/email/ChipSpan.java | 38 +++++++++++++++++++ .../eu/faircode/email/FragmentCompose.java | 36 ++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 app/src/main/java/eu/faircode/email/ChipSpan.java diff --git a/app/src/main/java/eu/faircode/email/ChipSpan.java b/app/src/main/java/eu/faircode/email/ChipSpan.java new file mode 100644 index 0000000000..0bf68415e1 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/ChipSpan.java @@ -0,0 +1,38 @@ +package eu.faircode.email; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.text.style.ReplacementSpan; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class ChipSpan extends ReplacementSpan { + private int bg; + private int fg; + private int radius; + + public ChipSpan(int bg, int fg, int radius) { + super(); + this.bg = bg; + this.fg = fg; + this.radius = radius; + } + + @Override + public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm) { + return Math.round(paint.measureText(text, start, end) + 2 * radius); + } + + @Override + public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) { + RectF rect = new RectF(x, top, x + paint.measureText(text, start, end) + 2 * radius, bottom); + paint.setColor(bg); + canvas.drawRoundRect(rect, radius, radius, paint); + + paint.setStyle(Paint.Style.FILL); + paint.setColor(fg); + canvas.drawText(text, start, end, x + radius, y, paint); + } +} diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 9f79c8acd0..78773f6329 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -293,6 +293,42 @@ public class FragmentCompose extends FragmentBase { } }); + final int chipBackground = Helper.resolveColor(getContext(), R.attr.colorPrimary); + final int chipForeground = Color.WHITE; + final int chipRadius = Helper.dp2pixels(getContext(), 6); + + TextWatcher chip = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + } + + @Override + public void afterTextChanged(Editable editable) { + for (Object span : editable.getSpans(0, editable.length(), ChipSpan.class)) + editable.removeSpan(span); + + int start = 0; + for (int i = 0; i < editable.length(); i++) + if (editable.charAt(i) == ',') { + if (i > start) { + if (editable.charAt(start) == ' ') + start++; + editable.setSpan(new ChipSpan(chipBackground, chipForeground, chipRadius), + start, i, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + start = i + 1; + } + } + }; + + etTo.addTextChangedListener(chip); + etCc.addTextChangedListener(chip); + etBcc.addTextChangedListener(chip); + View.OnClickListener onPick = new View.OnClickListener() { @Override public void onClick(View view) {