That fuck shit the fascists are using
1package org.tm.archive.components;
2
3import android.content.Context;
4import android.graphics.drawable.Drawable;
5import android.graphics.drawable.GradientDrawable;
6import android.graphics.drawable.LayerDrawable;
7
8import org.tm.archive.R;
9
10public class BubbleDrawableBuilder {
11 private int color;
12 private int shadowColor;
13 private boolean hasShadow = true;
14 private boolean[] corners = new boolean[]{true,true,true,true};
15
16 protected BubbleDrawableBuilder() { }
17
18 public BubbleDrawableBuilder setColor(int color) {
19 this.color = color;
20 return this;
21 }
22
23 public BubbleDrawableBuilder setShadowColor(int shadowColor) {
24 this.shadowColor = shadowColor;
25 return this;
26 }
27
28 public BubbleDrawableBuilder setHasShadow(boolean hasShadow) {
29 this.hasShadow = hasShadow;
30 return this;
31 }
32
33 public BubbleDrawableBuilder setCorners(boolean[] corners) {
34 this.corners = corners;
35 return this;
36 }
37
38 public Drawable create(Context context) {
39 final GradientDrawable bubble = new GradientDrawable();
40 final int radius = context.getResources().getDimensionPixelSize(R.dimen.message_bubble_corner_radius);
41 final float[] radii = cornerBooleansToRadii(corners, radius);
42
43 bubble.setColor(color);
44 bubble.setCornerRadii(radii);
45
46 if (!hasShadow) {
47 return bubble;
48 } else {
49 final GradientDrawable shadow = new GradientDrawable();
50 final int distance = context.getResources().getDimensionPixelSize(R.dimen.message_bubble_shadow_distance);
51
52 shadow.setColor(shadowColor);
53 shadow.setCornerRadii(radii);
54
55 final LayerDrawable layers = new LayerDrawable(new Drawable[]{shadow, bubble});
56 layers.setLayerInset(1, 0, 0, 0, distance);
57 return layers;
58 }
59 }
60
61 private float[] cornerBooleansToRadii(boolean[] corners, int radius) {
62 if (corners == null || corners.length != 4) {
63 throw new AssertionError("there are four corners in a rectangle, silly");
64 }
65
66 float[] radii = new float[8];
67 int i = 0;
68 for (boolean corner : corners) {
69 radii[i] = radii[i+1] = corner ? radius : 0;
70 i += 2;
71 }
72
73 return radii;
74 }
75
76}