瀏覽代碼

WIP: show conversation avatar

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 2 年之前
父節點
當前提交
c3b468118a

+ 19 - 9
app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt

@@ -41,8 +41,9 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA
 import com.nextcloud.talk.data.user.model.User
 import com.nextcloud.talk.databinding.RvItemConversationWithLastMessageBinding
 import com.nextcloud.talk.extensions.loadAvatar
-import com.nextcloud.talk.extensions.loadGroupCallAvatar
-import com.nextcloud.talk.extensions.loadPublicCallAvatar
+import com.nextcloud.talk.extensions.loadConversationAvatar
+import com.nextcloud.talk.extensions.loadDefaultGroupCallAvatar
+import com.nextcloud.talk.extensions.loadDefaultPublicCallAvatar
 import com.nextcloud.talk.extensions.loadSystemAvatar
 import com.nextcloud.talk.models.json.chat.ChatMessage
 import com.nextcloud.talk.models.json.conversations.Conversation
@@ -169,17 +170,24 @@ class ConversationItem(
         }
         if (shouldLoadAvatar) {
             when (model.type) {
-                ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL -> if (!TextUtils.isEmpty(model.name)) {
-                    holder.binding.dialogAvatar.loadAvatar(user, model.name!!)
-                } else {
-                    holder.binding.dialogAvatar.visibility = View.GONE
+                ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL -> {
+                    if (!TextUtils.isEmpty(model.name)) {
+                        holder.binding.dialogAvatar.loadAvatar(user, model.name!!)
+                    } else {
+                        holder.binding.dialogAvatar.visibility = View.GONE
+                    }
                 }
+
                 ConversationType.ROOM_GROUP_CALL ->
-                    holder.binding.dialogAvatar.loadGroupCallAvatar(viewThemeUtils)
+                    // holder.binding.dialogAvatar.loadDefaultGroupCallAvatar(viewThemeUtils)
+                    holder.binding.dialogAvatar.loadConversationAvatar(user, model.token!!)
+
                 ConversationType.FORMER_ONE_TO_ONE ->
-                    holder.binding.dialogAvatar.loadGroupCallAvatar(viewThemeUtils)
+                    holder.binding.dialogAvatar.loadDefaultGroupCallAvatar(viewThemeUtils)
+
                 ConversationType.ROOM_PUBLIC_CALL ->
-                    holder.binding.dialogAvatar.loadPublicCallAvatar(viewThemeUtils)
+                    holder.binding.dialogAvatar.loadDefaultPublicCallAvatar(viewThemeUtils)
+
                 else -> holder.binding.dialogAvatar.visibility = View.GONE
             }
         }
@@ -198,6 +206,7 @@ class ConversationItem(
                 )
                 false
             }
+
             Conversation.ObjectType.FILE -> {
                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                     holder.binding.dialogAvatar.loadAvatar(
@@ -213,6 +222,7 @@ class ConversationItem(
                 }
                 false
             }
+
             else -> true
         }
     }

+ 1 - 1
app/src/main/java/com/nextcloud/talk/adapters/items/ParticipantItem.java

@@ -147,7 +147,7 @@ public class ParticipantItem extends AbstractFlexibleItem<ParticipantItem.Partic
             "groups".equals(participant.getSource()) ||
             participant.getCalculatedActorType() == Participant.ActorType.CIRCLES ||
             "circles".equals(participant.getSource())) {
-            ImageViewExtensionsKt.loadGroupCallAvatar(holder.binding.avatarView, viewThemeUtils);
+            ImageViewExtensionsKt.loadDefaultGroupCallAvatar(holder.binding.avatarView, viewThemeUtils);
         } else if (participant.getCalculatedActorType() == Participant.ActorType.EMAILS) {
             ImageViewExtensionsKt.loadMailAvatar(holder.binding.avatarView, viewThemeUtils);
         } else if (participant.getCalculatedActorType() == Participant.ActorType.GUESTS ||

+ 4 - 4
app/src/main/java/com/nextcloud/talk/conversation/info/ConversationInfoActivity.kt

@@ -61,8 +61,8 @@ import com.nextcloud.talk.data.user.model.User
 import com.nextcloud.talk.databinding.ControllerConversationInfoBinding
 import com.nextcloud.talk.events.EventStatus
 import com.nextcloud.talk.extensions.loadAvatar
-import com.nextcloud.talk.extensions.loadGroupCallAvatar
-import com.nextcloud.talk.extensions.loadPublicCallAvatar
+import com.nextcloud.talk.extensions.loadDefaultGroupCallAvatar
+import com.nextcloud.talk.extensions.loadDefaultPublicCallAvatar
 import com.nextcloud.talk.extensions.loadSystemAvatar
 import com.nextcloud.talk.jobs.DeleteConversationWorker
 import com.nextcloud.talk.jobs.LeaveConversationWorker
@@ -763,10 +763,10 @@ class ConversationInfoActivity :
                 conversation!!.name?.let { binding?.avatarImage?.loadAvatar(conversationUser!!, it) }
             }
             Conversation.ConversationType.ROOM_GROUP_CALL -> {
-                binding?.avatarImage?.loadGroupCallAvatar(viewThemeUtils)
+                binding?.avatarImage?.loadDefaultGroupCallAvatar(viewThemeUtils)
             }
             Conversation.ConversationType.ROOM_PUBLIC_CALL -> {
-                binding?.avatarImage?.loadPublicCallAvatar(viewThemeUtils)
+                binding?.avatarImage?.loadDefaultPublicCallAvatar(viewThemeUtils)
             }
             Conversation.ConversationType.ROOM_SYSTEM -> {
                 binding?.avatarImage?.loadSystemAvatar()

+ 16 - 2
app/src/main/java/com/nextcloud/talk/extensions/ImageViewExtensions.kt

@@ -47,6 +47,20 @@ import com.nextcloud.talk.utils.ApiUtils
 private const val ROUNDING_PIXEL = 16f
 private const val TAG = "ImageViewExtensions"
 
+fun ImageView.loadConversationAvatar(
+    user: User,
+    roomToken: String
+): io.reactivex.disposables
+.Disposable {
+    val imageRequestUri = ApiUtils.getUrlForConversationAvatar(
+        1,
+        user.baseUrl,
+        roomToken
+    )
+
+    return loadAvatarInternal(user, imageRequestUri, false)
+}
+
 fun ImageView.loadAvatar(
     user: User,
     avatar: String,
@@ -223,7 +237,7 @@ fun ImageView.loadBotsAvatar(): io.reactivex.disposables.Disposable {
     )
 }
 
-fun ImageView.loadGroupCallAvatar(viewThemeUtils: ViewThemeUtils): io.reactivex.disposables.Disposable {
+fun ImageView.loadDefaultGroupCallAvatar(viewThemeUtils: ViewThemeUtils): io.reactivex.disposables.Disposable {
     val data: Any = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
         viewThemeUtils.talk.themePlaceholderAvatar(this, R.drawable.ic_avatar_group) as Any
     } else {
@@ -232,7 +246,7 @@ fun ImageView.loadGroupCallAvatar(viewThemeUtils: ViewThemeUtils): io.reactivex.
     return loadAvatar(data)
 }
 
-fun ImageView.loadPublicCallAvatar(viewThemeUtils: ViewThemeUtils): io.reactivex.disposables.Disposable {
+fun ImageView.loadDefaultPublicCallAvatar(viewThemeUtils: ViewThemeUtils): io.reactivex.disposables.Disposable {
     val data: Any = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
         viewThemeUtils.talk.themePlaceholderAvatar(this, R.drawable.ic_avatar_link) as Any
     } else {

+ 4 - 0
app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java

@@ -375,6 +375,10 @@ public class ApiUtils {
         return baseUrl + "/index.php/avatar/guest/" + Uri.encode(name) + "/" + avatarSize;
     }
 
+    public static String getUrlForConversationAvatar(int version, String baseUrl, String token) {
+        return getUrlForRoom(version, baseUrl, token) + "/avatar";
+    }
+
     public static String getCredentials(String username, String token) {
         if (TextUtils.isEmpty(username) && TextUtils.isEmpty(token)) {
             return null;