Browse Source

Fix #352

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 5 years ago
parent
commit
3ac3a3b965

+ 7 - 4
app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java

@@ -175,10 +175,13 @@ public class ConversationItem extends AbstractFlexibleItem<ConversationItem.Conv
                         authorDisplayName = NextcloudTalkApplication.Companion.getSharedApplication().getString(R.string.nc_guest);
                     }
                     holder.dialogLastMessageUserAvatar.setVisibility(View.VISIBLE);
-                    TextDrawable drawable = TextDrawable.builder().beginConfig().bold()
-                            .endConfig().buildRound(String.valueOf(authorDisplayName.charAt(0)),
-                                    context.getResources().getColor(R.color.nc_grey));
-                    holder.dialogLastMessageUserAvatar.getHierarchy().setImage(drawable, 100, true);
+
+                    DraweeController draweeController = Fresco.newDraweeControllerBuilder()
+                            .setOldController(holder.dialogLastMessageUserAvatar.getController())
+                            .setAutoPlayAnimations(true)
+                            .setImageRequest(DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithNameForGuests(userEntity.getBaseUrl(), authorDisplayName, R.dimen.small_item_height), userEntity))
+                            .build();
+                    holder.dialogLastMessageUserAvatar.setController(draweeController);
                 } else if (conversation.getLastMessage().getActorId().equals(userEntity.getUserId())
                         || !conversation.getType().equals(Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL)) {
                     holder.dialogLastMessageUserAvatar.setVisibility(View.VISIBLE);

+ 16 - 6
app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.java

@@ -22,6 +22,7 @@ package com.nextcloud.talk.adapters.items;
 
 import android.annotation.SuppressLint;
 import android.view.View;
+
 import com.facebook.drawee.backends.pipeline.Fresco;
 import com.facebook.drawee.interfaces.DraweeController;
 import com.nextcloud.talk.R;
@@ -29,15 +30,16 @@ import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.models.database.UserEntity;
 import com.nextcloud.talk.utils.ApiUtils;
 import com.nextcloud.talk.utils.DisplayUtils;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
 import eu.davidea.flexibleadapter.FlexibleAdapter;
 import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
 import eu.davidea.flexibleadapter.items.IFilterable;
 import eu.davidea.flexibleadapter.items.IFlexible;
 import eu.davidea.flexibleadapter.utils.FlexibleUtils;
 
-import java.util.List;
-import java.util.regex.Pattern;
-
 public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
         implements IFilterable<String> {
 
@@ -113,12 +115,20 @@ public class MentionAutocompleteItem extends AbstractFlexibleItem<UserItem.UserI
         if (source.equals("calls")) {
             holder.simpleDraweeView.getHierarchy().setPlaceholderImage(DisplayUtils.getRoundedBitmapDrawableFromVectorDrawableResource(NextcloudTalkApplication.Companion.getSharedApplication().getResources(), R.drawable.ic_people_group_white_24px));
         } else {
-        holder.simpleDraweeView.setController(null);
+            String avatarId = objectId;
+            String avatarUrl = ApiUtils.getUrlForAvatarWithName(currentUser.getBaseUrl(),
+                    avatarId, R.dimen.avatar_size_big);
+
+            if (source.equals("guests")) {
+                avatarId = displayName;
+                avatarUrl = ApiUtils.getUrlForAvatarWithNameForGuests(currentUser.getBaseUrl(), avatarId, R.dimen.avatar_size_big);
+            }
+
+            holder.simpleDraweeView.setController(null);
             DraweeController draweeController = Fresco.newDraweeControllerBuilder()
                     .setOldController(holder.simpleDraweeView.getController())
                     .setAutoPlayAnimations(true)
-                    .setImageRequest(DisplayUtils.getImageRequestForUrl(ApiUtils.getUrlForAvatarWithName(currentUser.getBaseUrl(),
-                            objectId, R.dimen.avatar_size_big), null))
+                    .setImageRequest(DisplayUtils.getImageRequestForUrl(avatarUrl, null))
                     .build();
             holder.simpleDraweeView.setController(draweeController);
         }

+ 24 - 8
app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java

@@ -40,6 +40,9 @@ import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter;
 import com.nextcloud.talk.models.json.participants.Participant;
 import com.nextcloud.talk.utils.ApiUtils;
 import com.nextcloud.talk.utils.DisplayUtils;
+
+import org.w3c.dom.Text;
+
 import eu.davidea.flexibleadapter.FlexibleAdapter;
 import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
 import eu.davidea.flexibleadapter.items.IFilterable;
@@ -122,20 +125,33 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
             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()

+ 1 - 4
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];

+ 8 - 0
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;
                 }

+ 8 - 0
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";
     }

+ 5 - 2
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<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, context);