Change summary
build.gradle | 1
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java | 17
src/main/java/eu/siacs/conversations/utils/UIHelper.java | 12
src/main/res/layout/account_row.xml | 1
src/main/res/layout/message_received.xml | 9
5 files changed, 40 insertions(+)
Detailed changes
@@ -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
}
@@ -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<Message> {
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<Message> {
}
}
+ 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<Message> {
protected TextView status_message;
protected TextView encryption;
protected ListView commands_list;
+ protected GithubIdenticonView thread_identicon;
}
class ThumbnailTask extends AsyncTask<DownloadableFile, Void, Drawable[]> {
@@ -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);
}
@@ -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"
@@ -93,6 +93,15 @@
android:gravity="center_vertical"
android:src="@drawable/ic_mode_edit_white_18dp" />
+ <com.lelloman.identicon.view.GithubIdenticonView
+ android:id="@+id/thread_identicon"
+ android:visibility="gone"
+ android:layout_width="9dp"
+ android:layout_height="9dp"
+ android:layout_gravity="center_vertical"
+ android:layout_marginRight="4sp"
+ android:layout_marginBottom="-1dp" />
+
<TextView
android:id="@+id/message_time"
android:layout_width="wrap_content"