mirror of https://github.com/M66B/FairEmail.git
Added chips
This commit is contained in:
parent
30abe9e607
commit
2c80c25b8a
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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() {
|
View.OnClickListener onPick = new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
Loading…
Reference in New Issue