diff --git a/build.gradle b/build.gradle index 72d2cbe280b9231cf530e76574e1531b527e17ed..79c4737acb03a5bfed8adcf642c1de5a634333c9 100644 --- a/build.gradle +++ b/build.gradle @@ -98,6 +98,7 @@ dependencies { implementation 'com.github.ipld:java-cid:v1.3.1' implementation 'com.splitwise:tokenautocomplete:3.0.2' implementation 'me.saket:better-link-movement-method:2.2.0' + implementation 'com.github.singpolyma:android-identicons:master-SNAPSHOT' implementation 'org.snikket:webrtc-android:107.0.0' // INSERT } diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index 7e0897b271e1004ec7b47a3c1a8c701e7a8c6a96..daa170dbfaa736227bd46e5e362ff3099703d304 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -42,6 +42,8 @@ import com.cheogram.android.BobTransfer; import com.google.common.base.Strings; +import com.lelloman.identicon.view.GithubIdenticonView; + import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -733,6 +735,7 @@ public class MessageAdapter extends ArrayAdapter { viewHolder.encryption = view.findViewById(R.id.message_encryption); viewHolder.audioPlayer = view.findViewById(R.id.audio_player); viewHolder.commands_list = view.findViewById(R.id.commands_list); + viewHolder.thread_identicon = view.findViewById(R.id.thread_identicon); break; case STATUS: view = activity.getLayoutInflater().inflate(R.layout.message_status, parent, false); @@ -751,6 +754,19 @@ public class MessageAdapter extends ArrayAdapter { } } + if (viewHolder.thread_identicon != null) { + viewHolder.thread_identicon.setVisibility(View.GONE); + final Element thread = message.getThread(); + if (thread != null) { + final String threadId = thread.getContent(); + if (threadId != null) { + viewHolder.thread_identicon.setVisibility(View.VISIBLE); + viewHolder.thread_identicon.setColor(UIHelper.getColorForName(threadId)); + viewHolder.thread_identicon.setHash(UIHelper.identiconHash(threadId)); + } + } + } + boolean darkBackground = type == RECEIVED && (!isInValidSession || mUseGreenBackground) || activity.isDarkTheme(); if (type == DATE_SEPARATOR) { @@ -1028,6 +1044,7 @@ public class MessageAdapter extends ArrayAdapter { protected TextView status_message; protected TextView encryption; protected ListView commands_list; + protected GithubIdenticonView thread_identicon; } class ThumbnailTask extends AsyncTask { diff --git a/src/main/java/eu/siacs/conversations/utils/UIHelper.java b/src/main/java/eu/siacs/conversations/utils/UIHelper.java index 7692138be38c01d2268ee43e7626cdae00719e86..2bbcd08b7c5094da14ad123e9d0ce05bd850c593 100644 --- a/src/main/java/eu/siacs/conversations/utils/UIHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/UIHelper.java @@ -11,8 +11,10 @@ import androidx.annotation.ColorInt; import androidx.core.content.res.ResourcesCompat; import com.google.common.base.Strings; +import com.google.common.primitives.Ints; import java.math.BigInteger; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.Arrays; import java.util.Calendar; @@ -229,6 +231,16 @@ public class UIHelper { } } + public static int identiconHash(String name) { + try { + MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); + byte[] digest = sha1.digest(name.getBytes(StandardCharsets.UTF_8)); + return Ints.fromByteArray(digest); + } catch (Exception e) { + return 0; + } + } + public static int getColorForName(String name) { return getColorForName(name, false); } diff --git a/src/main/res/layout/account_row.xml b/src/main/res/layout/account_row.xml index 914ee1950002312e4dcfbeda64954244f17737e1..3457b68bb5311044d55c9ea709666046584f4f2f 100644 --- a/src/main/res/layout/account_row.xml +++ b/src/main/res/layout/account_row.xml @@ -22,6 +22,7 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" + android:layout_toEndOf="@+id/account_image" android:layout_toRightOf="@+id/account_image" android:orientation="vertical" android:paddingLeft="@dimen/avatar_item_distance" diff --git a/src/main/res/layout/message_received.xml b/src/main/res/layout/message_received.xml index 3cfde53b9437d0eaa151cd5a6a17b9bfb51a93c8..bbec1e533ab50a8b7d4637495ca99c5241e43638 100644 --- a/src/main/res/layout/message_received.xml +++ b/src/main/res/layout/message_received.xml @@ -93,6 +93,15 @@ android:gravity="center_vertical" android:src="@drawable/ic_mode_edit_white_18dp" /> + +