Lighten or darken identicon

This commit is contained in:
M66B 2018-11-03 17:12:37 +00:00
parent e6970faf6e
commit ae47e0fe6e
2 changed files with 13 additions and 4 deletions

View File

@ -118,6 +118,7 @@ public class AdapterMessage extends PagedListAdapter<TupleMessageEx, AdapterMess
private boolean debug; private boolean debug;
private int dp24; private int dp24;
private String theme;
private SelectionTracker<Long> selectionTracker = null; private SelectionTracker<Long> selectionTracker = null;
@ -292,7 +293,9 @@ public class AdapterMessage extends PagedListAdapter<TupleMessageEx, AdapterMess
} }
if (!photo && identicons) { if (!photo && identicons) {
if (message.from.length > 0) if (message.from.length > 0)
ivAvatar.setImageBitmap(Identicon.generate(((InternetAddress) message.from[0]).getAddress(), dp24, 5)); ivAvatar.setImageBitmap(
Identicon.generate(((InternetAddress) message.from[0]).getAddress(),
dp24, 5, "light".equals(theme)));
else else
ivAvatar.setImageDrawable(null); ivAvatar.setImageDrawable(null);
photo = true; photo = true;
@ -1409,6 +1412,7 @@ public class AdapterMessage extends PagedListAdapter<TupleMessageEx, AdapterMess
this.debug = prefs.getBoolean("debug", false); this.debug = prefs.getBoolean("debug", false);
this.dp24 = Math.round(24 * Resources.getSystem().getDisplayMetrics().density); this.dp24 = Math.round(24 * Resources.getSystem().getDisplayMetrics().density);
this.theme = prefs.getString("theme", "light");
} }
private static final DiffUtil.ItemCallback<TupleMessageEx> DIFF_CALLBACK = private static final DiffUtil.ItemCallback<TupleMessageEx> DIFF_CALLBACK =

View File

@ -9,8 +9,10 @@ import android.graphics.RectF;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import androidx.core.graphics.ColorUtils;
class Identicon { class Identicon {
static Bitmap generate(String email, int size, int pixels) { static Bitmap generate(String email, int size, int pixels, boolean dark) {
byte[] hash; byte[] hash;
try { try {
hash = MessageDigest.getInstance("MD5").digest(email.getBytes()); hash = MessageDigest.getInstance("MD5").digest(email.getBytes());
@ -18,12 +20,15 @@ class Identicon {
hash = email.getBytes(); hash = email.getBytes();
} }
int color = Color.argb(255, hash[0], hash[1], hash[2]);
color = ColorUtils.blendARGB(color, dark ? Color.BLACK : Color.WHITE, 0.2f);
Paint paint = new Paint(); Paint paint = new Paint();
paint.setColor(Color.argb(255, hash[0], hash[1], hash[2])); paint.setColor(color);
Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap); Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.argb(255, 128, 128, 128)); canvas.drawColor(Color.TRANSPARENT);
float psize = (float) size / pixels; float psize = (float) size / pixels;