diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/MessagesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/MessagesAdapter.kt index 7701c60f..16f5e60d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/MessagesAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/MessagesAdapter.kt @@ -1,10 +1,16 @@ package com.simplemobiletools.smsmessenger.adapters import android.graphics.Typeface +import android.graphics.drawable.BitmapDrawable +import android.net.Uri import android.view.Menu import android.view.View import android.view.ViewGroup import android.widget.TextView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions +import com.bumptech.glide.request.RequestOptions import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.formatDateOrTime @@ -14,6 +20,8 @@ import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.activities.SimpleActivity import com.simplemobiletools.smsmessenger.extensions.deleteThread +import com.simplemobiletools.smsmessenger.extensions.getNameLetter +import com.simplemobiletools.smsmessenger.extensions.getNotificationLetterIcon import com.simplemobiletools.smsmessenger.helpers.refreshMessages import com.simplemobiletools.smsmessenger.models.Message import kotlinx.android.synthetic.main.item_message.view.* @@ -104,6 +112,13 @@ class MessagesAdapter( } } + override fun onViewRecycled(holder: ViewHolder) { + super.onViewRecycled(holder) + if (!activity.isDestroyed && !activity.isFinishing) { + Glide.with(activity).clear(holder.itemView.message_image) + } + } + private fun setupView(view: View, message: Message) { view.apply { message_frame.isSelected = selectedKeys.contains(message.id) @@ -125,6 +140,22 @@ class MessagesAdapter( arrayListOf(message_address, message_body_short, message_date).forEach { it.setTextColor(textColor) } + + val participant = message.participants.first() + val uri = Uri.parse(participant.photoUri) + val placeholder = BitmapDrawable(activity.resources, activity.getNotificationLetterIcon(participant.name.getNameLetter())) + val options = RequestOptions() + .diskCacheStrategy(DiskCacheStrategy.RESOURCE) + .error(placeholder) + .centerCrop() + + Glide.with(context) + .load(uri) + .transition(DrawableTransitionOptions.withCrossFade()) + .placeholder(placeholder) + .apply(options) + .apply(RequestOptions.circleCropTransform()) + .into(message_image) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 7d532fa4..c112253a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -30,6 +30,7 @@ import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.activities.ThreadActivity import com.simplemobiletools.smsmessenger.helpers.Config import com.simplemobiletools.smsmessenger.helpers.THREAD_ID +import com.simplemobiletools.smsmessenger.helpers.letterBackgroundColors import com.simplemobiletools.smsmessenger.models.Contact import com.simplemobiletools.smsmessenger.models.Message import com.simplemobiletools.smsmessenger.models.MessageAttachment @@ -488,8 +489,9 @@ fun Context.getNotificationLetterIcon(letter: String): Bitmap { val view = TextView(this) view.layout(0, 0, size, size) + val charValue = letter.toCharArray().first().toInt() val circlePaint = Paint().apply { - color = getAdjustedPrimaryColor() + color = letterBackgroundColors[charValue % letterBackgroundColors.size].toInt() isAntiAlias = true } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/String.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/String.kt index 8a19a295..577f99e2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/String.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/String.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.smsmessenger.extensions import com.simplemobiletools.commons.extensions.normalizeString +import java.util.* // get the contact names first letter at showing the placeholder without image -fun String.getNameLetter() = normalizeString().toCharArray().getOrNull(0)?.toString() ?: "S" +fun String.getNameLetter() = normalizeString().toCharArray().getOrNull(0)?.toString()?.toUpperCase(Locale.getDefault()) ?: "S" diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt index dcc40a20..c36dada1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt @@ -19,3 +19,17 @@ const val MESSAGE_ADDRESS = "message_address" fun refreshMessages() { EventBus.getDefault().post(Events.RefreshMessages()) } + +// most app icon colors from md_app_icon_colors with reduced alpha +val letterBackgroundColors = arrayListOf( + 0xCCD32F2F, + 0xCCC2185B, + 0xCC1976D2, + 0xCC0288D1, + 0xCC0097A7, + 0xCC00796B, + 0xCC388E3C, + 0xCC689F38, + 0xCCF57C00, + 0xCCE64A19 +) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt index 7a639656..b8de93b9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt @@ -1,5 +1,6 @@ package com.simplemobiletools.smsmessenger.models +import android.graphics.Bitmap import android.provider.Telephony import com.simplemobiletools.smsmessenger.extensions.getThreadTitle @@ -10,4 +11,6 @@ data class Message( fun isReceivedMessage() = type == Telephony.Sms.MESSAGE_TYPE_INBOX fun getThreadTitle() = participants.getThreadTitle() + + fun getThreadImageUri() = participants.firstOrNull()?.photoUri } diff --git a/app/src/main/res/layout/item_message.xml b/app/src/main/res/layout/item_message.xml index e0d3611d..f9f7747e 100644 --- a/app/src/main/res/layout/item_message.xml +++ b/app/src/main/res/layout/item_message.xml @@ -18,8 +18,8 @@