mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-17 04:20:00 +03:00
Fix placeholder icons
This commit is contained in:
parent
54ecc25831
commit
957d51cf3f
2 changed files with 25 additions and 37 deletions
|
@ -17,11 +17,13 @@
|
|||
package im.vector.riotx.features.home
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.widget.ImageView
|
||||
import androidx.annotation.AnyThread
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.graphics.drawable.toBitmap
|
||||
import com.amulyakhare.textdrawable.TextDrawable
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.bumptech.glide.request.target.DrawableImageViewTarget
|
||||
|
@ -73,9 +75,9 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active
|
|||
}
|
||||
|
||||
@AnyThread
|
||||
fun shortcutDrawable(context: Context, glideRequest: GlideRequests, matrixItem: MatrixItem): Drawable {
|
||||
fun shortcutDrawable(context: Context, glideRequest: GlideRequests, matrixItem: MatrixItem, iconSize: Int): Bitmap {
|
||||
return glideRequest
|
||||
.asDrawable()
|
||||
.asBitmap()
|
||||
.apply {
|
||||
val resolvedUrl = resolvedUrl(matrixItem.avatarUrl)
|
||||
if (resolvedUrl != null) {
|
||||
|
@ -86,10 +88,11 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active
|
|||
.beginConfig()
|
||||
.bold()
|
||||
.endConfig()
|
||||
.buildRect(matrixItem.firstLetterOfDisplayName(), avatarColor))
|
||||
.buildRect(matrixItem.firstLetterOfDisplayName(), avatarColor)
|
||||
.toBitmap(width = iconSize, height = iconSize))
|
||||
}
|
||||
}
|
||||
.submit()
|
||||
.submit(iconSize, iconSize)
|
||||
.get()
|
||||
}
|
||||
|
||||
|
@ -103,10 +106,7 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active
|
|||
|
||||
@AnyThread
|
||||
fun getPlaceholderDrawable(context: Context, matrixItem: MatrixItem): Drawable {
|
||||
val avatarColor = when (matrixItem) {
|
||||
is MatrixItem.UserItem -> ContextCompat.getColor(context, getColorFromUserId(matrixItem.id))
|
||||
else -> ContextCompat.getColor(context, getColorFromRoomId(matrixItem.id))
|
||||
}
|
||||
val avatarColor = avatarColor(matrixItem, context)
|
||||
return TextDrawable.builder()
|
||||
.beginConfig()
|
||||
.bold()
|
||||
|
@ -117,9 +117,7 @@ class AvatarRenderer @Inject constructor(private val activeSessionHolder: Active
|
|||
// PRIVATE API *********************************************************************************
|
||||
|
||||
private fun buildGlideRequest(glideRequest: GlideRequests, avatarUrl: String?): GlideRequest<Drawable> {
|
||||
val resolvedUrl = activeSessionHolder.getSafeActiveSession()?.contentUrlResolver()
|
||||
?.resolveThumbnail(avatarUrl, THUMBNAIL_SIZE, THUMBNAIL_SIZE, ContentUrlResolver.ThumbnailMethod.SCALE)
|
||||
|
||||
val resolvedUrl = resolvedUrl(avatarUrl)
|
||||
return glideRequest
|
||||
.load(resolvedUrl)
|
||||
.apply(RequestOptions.circleCropTransform())
|
||||
|
|
|
@ -19,13 +19,10 @@ package im.vector.riotx.features.home
|
|||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Build
|
||||
import androidx.core.content.pm.ShortcutInfoCompat
|
||||
import androidx.core.content.pm.ShortcutManagerCompat
|
||||
import androidx.core.graphics.drawable.IconCompat
|
||||
import im.vector.matrix.android.api.session.room.model.RoomSummary
|
||||
import im.vector.matrix.android.api.session.room.model.tag.RoomTag
|
||||
import im.vector.matrix.android.api.util.toMatrixItem
|
||||
import im.vector.riotx.core.glide.GlideApp
|
||||
|
@ -51,14 +48,24 @@ class ShortcutsHandler @Inject constructor(
|
|||
.observeOn(Schedulers.computation())
|
||||
.subscribe { rooms ->
|
||||
val shortcuts = rooms
|
||||
.favoriteRooms()
|
||||
.filter { room -> room.tags.any { it.name == RoomTag.ROOM_TAG_FAVOURITE } }
|
||||
.take(n = 4) // Android only allows us to create 4 shortcuts
|
||||
.map { room ->
|
||||
val intent = RoomDetailActivity.shortcutIntent(context, room.roomId)
|
||||
val drawable = avatarRenderer.shortcutDrawable(context, GlideApp.with(context), room.toMatrixItem())
|
||||
|
||||
val adaptiveIconSize = dimensionConverter.dpToPx(adaptiveIconSizeDp)
|
||||
val adaptiveIconOuterSides = dimensionConverter.dpToPx(adaptiveIconOuterSidesDp)
|
||||
val size = if (useAdaptiveIcon) {
|
||||
adaptiveIconSize - adaptiveIconOuterSides
|
||||
} else {
|
||||
dimensionConverter.dpToPx(72)
|
||||
}
|
||||
|
||||
val bitmap = avatarRenderer.shortcutDrawable(context, GlideApp.with(context), room.toMatrixItem(), size)
|
||||
|
||||
ShortcutInfoCompat.Builder(context, room.roomId)
|
||||
.setShortLabel(room.displayName)
|
||||
.setIcon(drawable.toProfileImageIcon())
|
||||
.setIcon(bitmap.toProfileImageIcon())
|
||||
.setIntent(intent)
|
||||
.build()
|
||||
}
|
||||
|
@ -70,28 +77,11 @@ class ShortcutsHandler @Inject constructor(
|
|||
|
||||
// PRIVATE API *********************************************************************************
|
||||
|
||||
private fun List<RoomSummary>.favoriteRooms(): List<RoomSummary> {
|
||||
return filter { room -> room.tags.any { it.name == RoomTag.ROOM_TAG_FAVOURITE } }
|
||||
.take(n = 4) // Android only allows us to create 4 shortcuts
|
||||
}
|
||||
|
||||
private fun Drawable.toProfileImageIcon(): IconCompat {
|
||||
val adaptiveIconSize = dimensionConverter.dpToPx(adaptiveIconSizeDp)
|
||||
val adaptiveIconOuterSides = dimensionConverter.dpToPx(adaptiveIconOuterSidesDp)
|
||||
|
||||
val bitmap = Bitmap.createBitmap(adaptiveIconSize, adaptiveIconSize, Bitmap.Config.ARGB_8888)
|
||||
val canvas = Canvas(bitmap)
|
||||
|
||||
private fun Bitmap.toProfileImageIcon(): IconCompat {
|
||||
return if (useAdaptiveIcon) {
|
||||
setBounds(adaptiveIconOuterSides, adaptiveIconOuterSides, adaptiveIconSize - adaptiveIconOuterSides, adaptiveIconSize - adaptiveIconOuterSides)
|
||||
draw(canvas)
|
||||
|
||||
IconCompat.createWithAdaptiveBitmap(bitmap)
|
||||
IconCompat.createWithAdaptiveBitmap(this)
|
||||
} else {
|
||||
setBounds(0, 0, bitmap.width, bitmap.height)
|
||||
draw(canvas)
|
||||
|
||||
IconCompat.createWithBitmap(bitmap)
|
||||
IconCompat.createWithBitmap(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue