From cdbe2a00f567f7747eb2c7ffb8fdac102540da28 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Mon, 29 Oct 2018 18:02:24 -0300
Subject: [PATCH] [android] Show alias for creator of private group in list of
 private groups

---
 .../android/privategroup/list/GroupItem.java  | 10 +++++++++-
 .../list/GroupListControllerImpl.java         | 20 ++++++++++++++++++-
 .../privategroup/list/GroupViewHolder.java    |  6 ++++--
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java
index 03a9d40b07..e4a69c3660 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java
@@ -1,6 +1,7 @@
 package org.briarproject.briar.android.privategroup.list;
 
 import org.briarproject.bramble.api.identity.Author;
+import org.briarproject.bramble.api.identity.AuthorInfo;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.sync.GroupId;
 import org.briarproject.briar.api.client.MessageTracker.GroupCount;
@@ -12,12 +13,15 @@ import org.briarproject.briar.api.privategroup.PrivateGroup;
 class GroupItem {
 
 	private final PrivateGroup privateGroup;
+	private final AuthorInfo authorInfo;
 	private int messageCount, unreadCount;
 	private long timestamp;
 	private boolean dissolved;
 
-	GroupItem(PrivateGroup privateGroup, GroupCount count, boolean dissolved) {
+	GroupItem(PrivateGroup privateGroup, AuthorInfo authorInfo,
+			GroupCount count, boolean dissolved) {
 		this.privateGroup = privateGroup;
+		this.authorInfo = authorInfo;
 		this.messageCount = count.getMsgCount();
 		this.unreadCount = count.getUnreadCount();
 		this.timestamp = count.getLatestMsgTime();
@@ -46,6 +50,10 @@ class GroupItem {
 		return privateGroup.getCreator();
 	}
 
+	AuthorInfo getCreatorInfo() {
+		return authorInfo;
+	}
+
 	String getName() {
 		return privateGroup.getName();
 	}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
index b568fdcef5..e60f6ebd3e 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListControllerImpl.java
@@ -2,12 +2,15 @@ package org.briarproject.briar.android.privategroup.list;
 
 import android.support.annotation.CallSuper;
 
+import org.briarproject.bramble.api.contact.ContactManager;
 import org.briarproject.bramble.api.db.DatabaseExecutor;
 import org.briarproject.bramble.api.db.DbException;
 import org.briarproject.bramble.api.db.NoSuchGroupException;
 import org.briarproject.bramble.api.event.Event;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.event.EventListener;
+import org.briarproject.bramble.api.identity.AuthorId;
+import org.briarproject.bramble.api.identity.AuthorInfo;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
 import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
 import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
@@ -30,7 +33,9 @@ import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
@@ -52,6 +57,7 @@ class GroupListControllerImpl extends DbControllerImpl
 
 	private final PrivateGroupManager groupManager;
 	private final GroupInvitationManager groupInvitationManager;
+	private final ContactManager contactManager;
 	private final AndroidNotificationManager notificationManager;
 	private final EventBus eventBus;
 
@@ -61,10 +67,12 @@ class GroupListControllerImpl extends DbControllerImpl
 	GroupListControllerImpl(@DatabaseExecutor Executor dbExecutor,
 			LifecycleManager lifecycleManager, PrivateGroupManager groupManager,
 			GroupInvitationManager groupInvitationManager,
+			ContactManager contactManager,
 			AndroidNotificationManager notificationManager, EventBus eventBus) {
 		super(dbExecutor, lifecycleManager);
 		this.groupManager = groupManager;
 		this.groupInvitationManager = groupInvitationManager;
+		this.contactManager = contactManager;
 		this.notificationManager = notificationManager;
 		this.eventBus = eventBus;
 	}
@@ -153,12 +161,22 @@ class GroupListControllerImpl extends DbControllerImpl
 				Collection<PrivateGroup> groups =
 						groupManager.getPrivateGroups();
 				List<GroupItem> items = new ArrayList<>(groups.size());
+				Map<AuthorId, AuthorInfo> authorInfos = new HashMap<>();
 				for (PrivateGroup g : groups) {
 					try {
 						GroupId id = g.getId();
+						AuthorId authorId = g.getCreator().getId();
+						AuthorInfo authorInfo;
+						if (authorInfos.containsKey(authorId)) {
+							authorInfo = authorInfos.get(authorId);
+						} else {
+							authorInfo = contactManager.getAuthorInfo(authorId);
+							authorInfos.put(authorId, authorInfo);
+						}
 						GroupCount count = groupManager.getGroupCount(id);
 						boolean dissolved = groupManager.isDissolved(id);
-						items.add(new GroupItem(g, count, dissolved));
+						items.add(
+								new GroupItem(g, authorInfo, count, dissolved));
 					} catch (NoSuchGroupException e) {
 						// Continue
 					}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
index b64eb25a29..ce63ad29fe 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java
@@ -20,6 +20,7 @@ import static android.view.View.GONE;
 import static android.view.View.VISIBLE;
 import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
 import static org.briarproject.briar.android.activity.BriarActivity.GROUP_NAME;
+import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName;
 
 @MethodsNotNullByDefault
 @ParametersNotNullByDefault
@@ -60,8 +61,9 @@ class GroupViewHolder extends RecyclerView.ViewHolder {
 		name.setText(group.getName());
 
 		// Creator
-		creator.setText(ctx.getString(R.string.groups_created_by,
-				group.getCreator().getName()));
+		String creatorName = getContactDisplayName(group.getCreator(),
+				group.getCreatorInfo().getAlias());
+		creator.setText(ctx.getString(R.string.groups_created_by, creatorName));
 
 		if (!group.isDissolved()) {
 			// full visibility
-- 
GitLab