diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt index 5175e0a16..e9a71ee14 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt @@ -22,11 +22,11 @@ package com.nextcloud.talk.adapters.items import android.content.Context import android.graphics.drawable.Drawable -import android.graphics.drawable.LayerDrawable import android.text.TextUtils import android.text.format.DateUtils import android.view.View import coil.api.load +import coil.request.CachePolicy import coil.transform.CircleCropTransformation import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication @@ -35,6 +35,7 @@ import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType.ONE_TO_ONE_CONVERSATION import com.nextcloud.talk.newarch.local.models.UserNgEntity import com.nextcloud.talk.newarch.local.models.getCredentials +import com.nextcloud.talk.newarch.utils.Images import com.nextcloud.talk.utils.ApiUtils import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.AbstractFlexibleItem @@ -199,70 +200,20 @@ class ConversationItem( holder.itemView.dialogAvatar.visibility = View.VISIBLE - var shouldLoadAvatar = true - val objectType: String? = model.objectType - if (!TextUtils.isEmpty(objectType)) { - when (objectType) { - "share:password" -> { - shouldLoadAvatar = false - holder.itemView.dialogAvatar.load(R.drawable.ic_file_password_request) { - transformations(CircleCropTransformation()) - } - } - "file" -> { - shouldLoadAvatar = false - holder.itemView.dialogAvatar.load(R.drawable.ic_file_icon) { - transformations(CircleCropTransformation()) - } - } - else -> { - } - } - } - - if (Conversation.ConversationType.SYSTEM_CONVERSATION == model.type) { - val layers = arrayOfNulls<Drawable>(2) - layers[0] = context.getDrawable(R.drawable.ic_launcher_background) - layers[1] = context.getDrawable(R.drawable.ic_launcher_foreground) - val layerDrawable = LayerDrawable(layers) - - holder.itemView.dialogAvatar.load(layerDrawable) { + val conversationDrawable: Drawable? = Images().getImageForConversation(context, model) + if (conversationDrawable != null) { + holder.itemView.dialogAvatar.setImageDrawable(conversationDrawable) + } else { + holder.itemView.dialogAvatar.load( + ApiUtils.getUrlForAvatarWithName( + user.baseUrl, + model.name, R.dimen.avatar_size + ) + ) { + addHeader("Authorization", user.getCredentials()) transformations(CircleCropTransformation()) } - - shouldLoadAvatar = false - } - - if (shouldLoadAvatar) { - when (model.type) { - ONE_TO_ONE_CONVERSATION -> if (!TextUtils.isEmpty( - model.name - ) - ) { - holder.itemView.dialogAvatar.load( - ApiUtils.getUrlForAvatarWithName( - user.baseUrl, - model.name, R.dimen.avatar_size - ) - ) { - addHeader("Authorization", user.getCredentials()) - transformations(CircleCropTransformation()) - } - - } else { - holder.itemView.dialogAvatar.visibility = View.GONE - } - Conversation.ConversationType.GROUP_CONVERSATION -> - holder.itemView.dialogAvatar.load(R.drawable.ic_people_group_white_24px) { - transformations(CircleCropTransformation()) - } - Conversation.ConversationType.PUBLIC_CONVERSATION -> - holder.itemView.dialogAvatar.load(R.drawable.ic_link_white_24px) { - transformations(CircleCropTransformation()) - } - else -> holder.itemView.dialogAvatar.visibility = View.GONE - } } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/utils/Images.kt b/app/src/main/java/com/nextcloud/talk/newarch/utils/Images.kt index 519452ec0..b7a2bb4a3 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/utils/Images.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/utils/Images.kt @@ -21,13 +21,18 @@ package com.nextcloud.talk.newarch.utils import android.content.Context +import android.graphics.drawable.Drawable +import android.graphics.drawable.LayerDrawable import androidx.lifecycle.LifecycleOwner import coil.ImageLoader import coil.request.LoadRequest import coil.target.Target import coil.transform.Transformation +import com.nextcloud.talk.R +import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.newarch.local.models.UserNgEntity import com.nextcloud.talk.newarch.local.models.getCredentials +import com.nextcloud.talk.utils.DisplayUtils class Images { fun getRequestForUrl( @@ -58,4 +63,42 @@ class Images { } } } + + // returns null if it's one-to-one that you need to fetch yourself + fun getImageForConversation(context: Context, conversation: Conversation): Drawable? { + conversation.objectType?.let { objectType -> + when (objectType) { + "share:password" -> { + return DisplayUtils.getRoundedDrawable(context.getDrawable(R.drawable.ic_file_password_request)) + } + "file" -> { + return DisplayUtils.getRoundedDrawable(context.getDrawable(R.drawable.ic_file_icon)) + } + else -> { + } // do nothing + } + } + + when (conversation.type) { + Conversation.ConversationType.ONE_TO_ONE_CONVERSATION -> { + return null + } + Conversation.ConversationType.GROUP_CONVERSATION -> { + return DisplayUtils.getRoundedDrawable(context.getDrawable(R.drawable.ic_people_group_white_24px)) + } + Conversation.ConversationType.PUBLIC_CONVERSATION -> { + return DisplayUtils.getRoundedDrawable(context.getDrawable(R.drawable.ic_link_white_24px)) + } + //Conversation.ConversationType.SYSTEM_CONVERSATION + else -> { + // we handle else as SYSTEM_CONVERSATION + val layers = arrayOfNulls<Drawable>(2) + layers[0] = context.getDrawable(R.drawable.ic_launcher_background) + layers[1] = context.getDrawable(R.drawable.ic_launcher_foreground) + return DisplayUtils.getRoundedDrawable(LayerDrawable(layers)) + + } + + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt index 2920e3323..842d72249 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt @@ -101,21 +101,22 @@ object DisplayUtils { } private fun roundImage(pool: BitmapPool, input: Bitmap): Bitmap { - val circlePaint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.FILTER_BITMAP_FLAG) - val bitmapPaint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.FILTER_BITMAP_FLAG).apply { xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN) } + val paint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.FILTER_BITMAP_FLAG) val minSize = min(input.width, input.height) val radius = minSize / 2f val output = pool.get(minSize, minSize, input.config) output.applyCanvas { - drawCircle(radius, radius, radius, circlePaint) - drawBitmap(input, 0f, 0f, bitmapPaint) + drawCircle(radius, radius, radius, paint) + paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN) + drawBitmap(input, radius - input.width / 2, radius - input.height / 2, paint) } pool.put(input) return output } + private fun getBitmap(drawable: Drawable): Bitmap { val bitmap = Bitmap.createBitmap( drawable.intrinsicWidth,