WIP: show conversation avatar

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2023-04-17 17:07:46 +02:00
parent 60534aca61
commit c3b468118a
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
5 changed files with 44 additions and 16 deletions

View File

@ -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
}
}

View File

@ -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 ||

View File

@ -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()

View File

@ -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 {

View File

@ -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;