mirror of
https://github.com/nextcloud/talk-android.git
synced 2024-12-15 05:01:45 +03:00
add grey avatar with first letter of email-guest
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
parent
cb3614da34
commit
c75cf2fe20
2 changed files with 53 additions and 2 deletions
|
@ -24,7 +24,7 @@ import com.nextcloud.talk.databinding.RvItemConversationInfoParticipantBinding
|
||||||
import com.nextcloud.talk.extensions.loadDefaultAvatar
|
import com.nextcloud.talk.extensions.loadDefaultAvatar
|
||||||
import com.nextcloud.talk.extensions.loadDefaultGroupCallAvatar
|
import com.nextcloud.talk.extensions.loadDefaultGroupCallAvatar
|
||||||
import com.nextcloud.talk.extensions.loadFederatedUserAvatar
|
import com.nextcloud.talk.extensions.loadFederatedUserAvatar
|
||||||
import com.nextcloud.talk.extensions.loadGuestAvatar
|
import com.nextcloud.talk.extensions.loadFirstLetterAvatar
|
||||||
import com.nextcloud.talk.extensions.loadUserAvatar
|
import com.nextcloud.talk.extensions.loadUserAvatar
|
||||||
import com.nextcloud.talk.models.domain.ConversationModel
|
import com.nextcloud.talk.models.domain.ConversationModel
|
||||||
import com.nextcloud.talk.models.json.participants.Participant
|
import com.nextcloud.talk.models.json.participants.Participant
|
||||||
|
@ -214,7 +214,9 @@ class ParticipantItem(
|
||||||
if (model.displayName.isNullOrEmpty()) {
|
if (model.displayName.isNullOrEmpty()) {
|
||||||
holder.binding.avatarView.loadDefaultAvatar(viewThemeUtils)
|
holder.binding.avatarView.loadDefaultAvatar(viewThemeUtils)
|
||||||
} else {
|
} else {
|
||||||
holder.binding.avatarView.loadGuestAvatar(user, model.displayName!!, false)
|
holder.binding.avatarView.loadFirstLetterAvatar(
|
||||||
|
model.displayName!!.first().toString()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,19 @@
|
||||||
|
|
||||||
package com.nextcloud.talk.extensions
|
package com.nextcloud.talk.extensions
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.graphics.Paint
|
||||||
|
import android.graphics.drawable.BitmapDrawable
|
||||||
import android.graphics.drawable.ColorDrawable
|
import android.graphics.drawable.ColorDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.graphics.drawable.LayerDrawable
|
import android.graphics.drawable.LayerDrawable
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import coil.annotation.ExperimentalCoilApi
|
import coil.annotation.ExperimentalCoilApi
|
||||||
import coil.imageLoader
|
import coil.imageLoader
|
||||||
import coil.load
|
import coil.load
|
||||||
|
@ -35,6 +42,7 @@ import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||||
import com.nextcloud.talk.utils.ApiUtils
|
import com.nextcloud.talk.utils.ApiUtils
|
||||||
import com.nextcloud.talk.utils.DisplayUtils
|
import com.nextcloud.talk.utils.DisplayUtils
|
||||||
import com.nextcloud.talk.utils.TextDrawable
|
import com.nextcloud.talk.utils.TextDrawable
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
private const val ROUNDING_PIXEL = 16f
|
private const val ROUNDING_PIXEL = 16f
|
||||||
private const val TAG = "ImageViewExtensions"
|
private const val TAG = "ImageViewExtensions"
|
||||||
|
@ -297,6 +305,21 @@ fun ImageView.loadNoteToSelfAvatar(): io.reactivex.disposables.Disposable {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun ImageView.loadFirstLetterAvatar(letter: String): io.reactivex.disposables.Disposable {
|
||||||
|
val layers = arrayOfNulls<Drawable>(2)
|
||||||
|
layers[0] = ContextCompat.getDrawable(context, R.drawable.ic_launcher_background)
|
||||||
|
layers[1] = createTextDrawable(context, letter.uppercase(Locale.ROOT))
|
||||||
|
|
||||||
|
val layerDrawable = LayerDrawable(layers)
|
||||||
|
val data: Any = layerDrawable
|
||||||
|
|
||||||
|
return DisposableWrapper(
|
||||||
|
load(data) {
|
||||||
|
transformations(CircleCropTransformation())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fun ImageView.loadChangelogBotAvatar(): io.reactivex.disposables.Disposable {
|
fun ImageView.loadChangelogBotAvatar(): io.reactivex.disposables.Disposable {
|
||||||
return loadSystemAvatar()
|
return loadSystemAvatar()
|
||||||
}
|
}
|
||||||
|
@ -355,6 +378,32 @@ fun ImageView.loadGuestAvatar(baseUrl: String, name: String, big: Boolean): io.r
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("MagicNumber")
|
||||||
|
private fun createTextDrawable(context: Context, letter: String): Drawable {
|
||||||
|
val size = 100
|
||||||
|
val bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888)
|
||||||
|
val canvas = Canvas(bitmap)
|
||||||
|
|
||||||
|
val paint = Paint().apply {
|
||||||
|
color = ResourcesCompat.getColor(context.resources, R.color.grey_600, null)
|
||||||
|
style = Paint.Style.FILL
|
||||||
|
}
|
||||||
|
canvas.drawRect(0f, 0f, size.toFloat(), size.toFloat(), paint)
|
||||||
|
|
||||||
|
val textPaint = Paint().apply {
|
||||||
|
color = Color.WHITE
|
||||||
|
textSize = size / 2f
|
||||||
|
isAntiAlias = true
|
||||||
|
textAlign = Paint.Align.CENTER
|
||||||
|
}
|
||||||
|
|
||||||
|
val xPos = size / 2f
|
||||||
|
val yPos = (canvas.height / 2 - (textPaint.descent() + textPaint.ascent()) / 2)
|
||||||
|
canvas.drawText(letter.take(1), xPos, yPos, textPaint)
|
||||||
|
|
||||||
|
return BitmapDrawable(context.resources, bitmap)
|
||||||
|
}
|
||||||
|
|
||||||
private class DisposableWrapper(private val disposable: coil.request.Disposable) : io.reactivex.disposables
|
private class DisposableWrapper(private val disposable: coil.request.Disposable) : io.reactivex.disposables
|
||||||
.Disposable {
|
.Disposable {
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue