Improve image loading

This commit is contained in:
Mario Danic 2019-12-30 13:56:39 +01:00
parent d19a3782ae
commit 5e1dc2f454
No known key found for this signature in database
GPG Key ID: CDE0BBD2738C4CC0
9 changed files with 47 additions and 43 deletions

View File

@ -294,9 +294,10 @@ dependencies {
implementation 'com.github.wooplr:Spotlight:1.3'
implementation'com.github.mario:chatkit:d32a7372bb'
implementation "io.coil-kt:coil:${coil_version}"
/*implementation "io.coil-kt:coil:${coil_version}"
implementation "io.coil-kt:coil-gif:${coil_version}"
implementation "io.coil-kt:coil-svg:${coil_version}"
implementation "io.coil-kt:coil-svg:${coil_version}"*/
implementation 'com.github.coil-kt:coil:9769e11f19'
implementation 'com.github.natario1:Autocomplete:v1.1.0'

View File

@ -42,7 +42,8 @@ import eu.davidea.flexibleadapter.items.IFilterable
import eu.davidea.flexibleadapter.items.IFlexible
import eu.davidea.flexibleadapter.utils.FlexibleUtils
import eu.davidea.viewholders.FlexibleViewHolder
import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.view.*
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.rv_item_conversation_with_last_message.*
import java.util.*
import java.util.regex.Pattern
@ -101,57 +102,57 @@ class ConversationItem(
val appContext = NextcloudTalkApplication.sharedApplication!!.applicationContext
if (model.changing) {
holder.itemView.actionProgressBar!!.visibility = View.VISIBLE
holder.actionProgressBar!!.visibility = View.VISIBLE
} else {
holder.itemView.actionProgressBar!!.visibility = View.GONE
holder.actionProgressBar!!.visibility = View.GONE
}
if (adapter.hasFilter()) {
FlexibleUtils.highlightText(
holder.itemView.dialogName!!, model.displayName,
holder.dialogName!!, model.displayName,
adapter.getFilter(String::class.java).toString(),
NextcloudTalkApplication.sharedApplication!!
.resources.getColor(R.color.colorPrimary)
)
} else {
holder.itemView.dialogName!!.text = model.displayName
holder.dialogName!!.text = model.displayName
}
if (model.unreadMessages > 0) {
holder.itemView.dialogUnreadBubble!!.visibility = View.VISIBLE
holder.dialogUnreadBubble!!.visibility = View.VISIBLE
if (model.unreadMessages < 100) {
holder.itemView.dialogUnreadBubble!!.text = model.unreadMessages.toLong()
holder.dialogUnreadBubble!!.text = model.unreadMessages.toLong()
.toString()
} else {
holder.itemView.dialogUnreadBubble!!.text = context.getString(R.string.nc_99_plus)
holder.dialogUnreadBubble!!.text = context.getString(R.string.nc_99_plus)
}
if (model.unreadMention) {
holder.itemView.dialogUnreadBubble!!.background =
holder.dialogUnreadBubble!!.background =
context.getDrawable(R.drawable.bubble_circle_unread_mention)
} else {
holder.itemView.dialogUnreadBubble!!.background =
holder.dialogUnreadBubble!!.background =
context.getDrawable(R.drawable.bubble_circle_unread)
}
} else {
holder.itemView.dialogUnreadBubble!!.visibility = View.GONE
holder.dialogUnreadBubble!!.visibility = View.GONE
}
if (model.hasPassword) {
holder.itemView.passwordProtectedRoomImageView!!.visibility = View.VISIBLE
holder.passwordProtectedRoomImageView!!.visibility = View.VISIBLE
} else {
holder.itemView.passwordProtectedRoomImageView!!.visibility = View.GONE
holder.passwordProtectedRoomImageView!!.visibility = View.GONE
}
if (model.favorite) {
holder.itemView.favoriteConversationImageView!!.visibility = View.VISIBLE
holder.favoriteConversationImageView!!.visibility = View.VISIBLE
} else {
holder.itemView.favoriteConversationImageView!!.visibility = View.GONE
holder.favoriteConversationImageView!!.visibility = View.GONE
}
if (model.lastMessage != null) {
holder.itemView.dialogDate!!.visibility = View.VISIBLE
holder.itemView.dialogDate!!.text = DateUtils.getRelativeTimeSpanString(
holder.dialogDate!!.visibility = View.VISIBLE
holder.dialogDate!!.text = DateUtils.getRelativeTimeSpanString(
model.lastActivity * 1000L,
System.currentTimeMillis(), 0, DateUtils.FORMAT_ABBREV_RELATIVE
)
@ -160,7 +161,7 @@ class ConversationItem(
model.lastMessage!!.systemMessage
) || Conversation.ConversationType.SYSTEM_CONVERSATION == model.type
) {
holder.itemView.dialogLastMessage!!.text = model.lastMessage!!.text
holder.dialogLastMessage!!.text = model.lastMessage!!.text
} else {
var authorDisplayName = ""
model.lastMessage!!.activeUser = user
@ -191,20 +192,18 @@ class ConversationItem(
text = model.lastMessage!!.lastMessageDisplayText
}
holder.itemView.dialogLastMessage.text = text
holder.dialogLastMessage.text = text
}
} else {
holder.itemView.dialogDate.visibility = View.GONE
holder.itemView.dialogLastMessage.setText(R.string.nc_no_messages_yet)
holder.dialogDate.visibility = View.GONE
holder.dialogLastMessage.setText(R.string.nc_no_messages_yet)
}
holder.itemView.dialogAvatar.visibility = View.VISIBLE
val conversationDrawable: Drawable? = Images().getImageForConversation(context, model)
if (conversationDrawable != null) {
holder.itemView.dialogAvatar.load(conversationDrawable)
holder.dialogAvatar.load(conversationDrawable)
} else {
holder.itemView.dialogAvatar.load(
holder.dialogAvatar.load(
ApiUtils.getUrlForAvatarWithName(
user.baseUrl,
model.name, R.dimen.avatar_size
@ -227,5 +226,8 @@ class ConversationItem(
class ConversationItemViewHolder(
view: View,
adapter: FlexibleAdapter<*>
) : FlexibleViewHolder(view, adapter)
) : FlexibleViewHolder(view, adapter), LayoutContainer {
override val containerView: View?
get() = itemView
}
}

View File

@ -203,7 +203,7 @@ class MagicPreviewMessageViewHolder(itemView: View?) : IncomingImageMessageViewH
override fun getPayloadForImageLoader(message: ChatMessage): Any {
val map = HashMap<String, Any>()
if (message.getSelectedIndividualHashMap().containsKey("mimetype")) {
map.put("mimetype", message.getSelectedIndividualHashMap().get("mimetype")!!)
map["mimetype"] = message.getSelectedIndividualHashMap().get("mimetype")!!
}
return ImageLoaderPayload(map)

View File

@ -44,6 +44,7 @@ import butterknife.OnClick
import coil.api.load
import coil.bitmappool.BitmapPool
import coil.drawable.CrossfadeDrawable
import coil.size.OriginalSize
import coil.transform.BlurTransformation
import coil.transform.CircleCropTransformation
import com.bluelinelabs.conductor.RouterTransaction
@ -413,7 +414,7 @@ class CallNotificationController(private val originalBundle: Bundle) : BaseContr
if (activity != null) {
val newBitmap = BlurTransformation(activity!!, 5f).transform(
BitmapPool(10000000), bitmapFromImageView
BitmapPool(10000000), bitmapFromImageView, OriginalSize
)
withContext(Dispatchers.Main) {
backgroundImageView!!.setImageBitmap(newBitmap)

View File

@ -363,6 +363,7 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
adapter = MessagesListAdapter(
conversationUser?.userId, messageHolders, ImageLoader { imageView, url, payload ->
imageView.load(url) {
if (conversationUser != null && url!!.startsWith(conversationUser.baseUrl) && (url.contains(
"index.php/core/preview?fileId=") || url.contains("/avatar/"))) {
@ -373,14 +374,11 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
transformations(CircleCropTransformation())
} else {
if (payload is ImageLoaderPayload) {
payload.map?.let {
if (payload.map.containsKey("mimetype")) {
placeholder(
getDrawableResourceIdForMimeType(
payload.map.get("mimetype") as String?
)
)
}
payload.map?.get("mimetype")?.let {
val mimeTypeDrawableResource = getDrawableResourceIdForMimeType(it as String)
val drawable = context.getDrawable(mimeTypeDrawableResource)
placeholder(drawable)
error(drawable)
}
}
}

View File

@ -54,6 +54,7 @@ import androidx.emoji.text.EmojiCompat
import coil.Coil
import coil.api.load
import coil.bitmappool.BitmapPool
import coil.size.OriginalSize
import coil.target.Target
import coil.transform.CircleCropTransformation
import com.google.android.material.chip.ChipDrawable
@ -99,7 +100,7 @@ object DisplayUtils {
fun getRoundedDrawable(drawable: Drawable?): Drawable {
val bitmap = getBitmap(drawable!!)
val drawable = runBlocking {
return@runBlocking BitmapDrawable(CircleCropTransformation().transform(BitmapPool(10000), bitmap))
return@runBlocking BitmapDrawable(CircleCropTransformation().transform(BitmapPool(10000), bitmap, OriginalSize))
}
return drawable

View File

@ -46,7 +46,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:scaleType="fitCenter"
app:layout_flexGrow="1"
app:layout_wrapBefore="true"
app:layout_alignSelf="flex_start"

View File

@ -45,7 +45,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:scaleType="fitCenter"
app:layout_flexGrow="1"
app:layout_wrapBefore="true"
app:layout_alignSelf="flex_start"

View File

@ -4,7 +4,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/quotedChatMessageView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:layout_marginBottom="8dp">
<View
android:id="@+id/quoteColoredView"
@ -54,7 +55,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:scaleType="fitCenter"
app:layout_alignSelf="flex_start"
app:layout_flexGrow="1"
app:layout_wrapBefore="true"