From 3ac3a3b9659eb934e01ead6b65473219b1f73028 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 4 Sep 2019 13:31:16 +0200 Subject: [PATCH] Fix #352 Signed-off-by: Mario Danic --- .../talk/adapters/items/ConversationItem.java | 11 ++++--- .../items/MentionAutocompleteItem.java | 22 +++++++++---- .../talk/adapters/items/UserItem.java | 32 ++++++++++++++----- .../MagicIncomingTextMessageViewHolder.java | 5 +-- .../talk/models/json/chat/ChatMessage.java | 8 +++++ .../com/nextcloud/talk/utils/ApiUtils.java | 8 +++++ .../nextcloud/talk/utils/DisplayUtils.java | 7 ++-- 7 files changed, 69 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java index 0d881a54d..4d7677251 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java @@ -175,10 +175,13 @@ public class ConversationItem extends AbstractFlexibleItem implements IFilterable { @@ -113,12 +115,20 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem FlexibleUtils.highlightText(holder.contactDisplayName, participant.getDisplayName(), String.valueOf(adapter.getFilter(String.class)), NextcloudTalkApplication.Companion.getSharedApplication() .getResources().getColor(R.color.colorPrimary)); - } else { - holder.contactDisplayName.setText(participant.getDisplayName()); + } - if (TextUtils.isEmpty(participant.getDisplayName()) && - (participant.getType().equals(Participant.ParticipantType.GUEST) || participant.getType().equals(Participant.ParticipantType.USER_FOLLOWING_LINK))) { - holder.contactDisplayName.setText(NextcloudTalkApplication.Companion.getSharedApplication().getString(R.string.nc_guest)); - } + holder.contactDisplayName.setText(participant.getDisplayName()); + + if (TextUtils.isEmpty(participant.getDisplayName()) && + (participant.getType().equals(Participant.ParticipantType.GUEST) || participant.getType().equals(Participant.ParticipantType.USER_FOLLOWING_LINK))) { + holder.contactDisplayName.setText(NextcloudTalkApplication.Companion.getSharedApplication().getString(R.string.nc_guest)); } if (TextUtils.isEmpty(participant.getSource()) || participant.getSource().equals("users")) { - if (Participant.ParticipantType.GUEST.equals(participant.getType()) || Participant.ParticipantType.USER_FOLLOWING_LINK.equals(participant.getType())) { - // TODO: Show generated avatar for guests + String displayName = NextcloudTalkApplication.Companion.getSharedApplication() + .getResources().getString(R.string.nc_guest); + + if (!TextUtils.isEmpty(participant.getDisplayName())) { + displayName = participant.getDisplayName(); + } + + DraweeController draweeController = Fresco.newDraweeControllerBuilder() + .setOldController(holder.simpleDraweeView.getController()) + .setAutoPlayAnimations(true) + .setImageRequest(DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithNameForGuests(userEntity.getBaseUrl(), + displayName, R.dimen.avatar_size), null)) + .build(); + holder.simpleDraweeView.setController(draweeController); + } else { DraweeController draweeController = Fresco.newDraweeControllerBuilder() diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java index 490972bcd..e6f732901 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java @@ -105,10 +105,7 @@ public class MagicIncomingTextMessageViewHolder if (!message.isGrouped() && !message.isOneToOneConversation()) { messageUserAvatarView.setVisibility(View.VISIBLE); if (message.getActorType().equals("guests")) { - TextDrawable drawable = TextDrawable.builder().beginConfig().bold() - .endConfig().buildRound(String.valueOf(messageAuthor.getText().charAt(0)) - , NextcloudTalkApplication.Companion.getSharedApplication().getResources().getColor(R.color.nc_grey)); - messageUserAvatarView.getHierarchy().setPlaceholderImage(drawable); + // do nothing, avatar is set } else if (message.getActorType().equals("bots") && message.getActorId().equals("changelog")) { messageUserAvatarView.setController(null); Drawable[] layers = new Drawable[2]; diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java index 18f5f83ce..9fd2c6293 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java @@ -212,6 +212,14 @@ public class ChatMessage implements IMessage, MessageContentType, MessageContent public String getAvatar() { if (getActorType().equals("users")) { return ApiUtils.getUrlForAvatarWithName(getActiveUser().getBaseUrl(), actorId, R.dimen.avatar_size); + } else if (getActorType().equals("guests")) { + String apiId = + NextcloudTalkApplication.Companion.getSharedApplication().getString(R.string.nc_guest); + + if (!TextUtils.isEmpty(getActorDisplayName())) { + apiId = getActorDisplayName(); + } + return ApiUtils.getUrlForAvatarWithNameForGuests(getActiveUser().getBaseUrl(), apiId, R.dimen.avatar_size); } else { return null; } diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java index 1d9d3a814..9261c807d 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -224,6 +224,14 @@ public class ApiUtils { return baseUrl + "/index.php/avatar/" + Uri.encode(name) + "/" + avatarSize; } + public static String getUrlForAvatarWithNameForGuests(String baseUrl, String name, + @DimenRes int avatarSize) { + avatarSize = Math.round(NextcloudTalkApplication + .Companion.getSharedApplication().getResources().getDimension(avatarSize)); + + return baseUrl + "/index.php/avatar/guest/" + Uri.encode(name) + "/" + avatarSize; + } + public static String getUrlForPassword(String baseUrl, String token) { return baseUrl + ocsApiVersion + spreedApiVersion + "/room/" + token + "/password"; } diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java index 410635394..200833f5f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java @@ -262,8 +262,11 @@ public class DisplayUtils { chip.setBounds(0, 0, chip.getIntrinsicWidth(), chip.getIntrinsicHeight()); if (!isCall) { - ImageRequest imageRequest = - getImageRequestForUrl(ApiUtils.getUrlForAvatarWithName(conversationUser.getBaseUrl(), id, R.dimen.avatar_size_big), null); + String url = ApiUtils.getUrlForAvatarWithName(conversationUser.getBaseUrl(), id, R.dimen.avatar_size_big); + if ("guests".equals(type)) { + url = ApiUtils.getUrlForAvatarWithNameForGuests(conversationUser.getBaseUrl(), label, R.dimen.avatar_size_big); + } + ImageRequest imageRequest = getImageRequestForUrl(url, null); ImagePipeline imagePipeline = Fresco.getImagePipeline(); DataSource> dataSource = imagePipeline.fetchDecodedImage(imageRequest, context);