mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-27 12:05:22 +00:00
Shifted the creation of AttachmentDownloadJobs to the IO thread
This commit is contained in:
parent
a1b052ef82
commit
d0a4bac83e
@ -40,9 +40,8 @@ class ConversationAdapter(
|
|||||||
private val onItemLongPress: (MessageRecord, Int, VisibleMessageView) -> Unit,
|
private val onItemLongPress: (MessageRecord, Int, VisibleMessageView) -> Unit,
|
||||||
private val onDeselect: (MessageRecord, Int) -> Unit,
|
private val onDeselect: (MessageRecord, Int) -> Unit,
|
||||||
private val glide: GlideRequests,
|
private val glide: GlideRequests,
|
||||||
lifecycleCoroutineScope: LifecycleCoroutineScope
|
private val lifecycleCoroutineScope: LifecycleCoroutineScope
|
||||||
)
|
) : CursorRecyclerViewAdapter<ViewHolder>(context, cursor) {
|
||||||
: CursorRecyclerViewAdapter<ViewHolder>(context, cursor) {
|
|
||||||
private val messageDB by lazy { DatabaseComponent.get(context).mmsSmsDatabase() }
|
private val messageDB by lazy { DatabaseComponent.get(context).mmsSmsDatabase() }
|
||||||
private val contactDB by lazy { DatabaseComponent.get(context).sessionContactDatabase() }
|
private val contactDB by lazy { DatabaseComponent.get(context).sessionContactDatabase() }
|
||||||
var selectedItems = mutableSetOf<MessageRecord>()
|
var selectedItems = mutableSetOf<MessageRecord>()
|
||||||
@ -120,7 +119,18 @@ class ConversationAdapter(
|
|||||||
}
|
}
|
||||||
val contact = contactCache[senderIdHash]
|
val contact = contactCache[senderIdHash]
|
||||||
|
|
||||||
visibleMessageView.bind(message, messageBefore, getMessageAfter(position, cursor), glide, searchQuery, contact, senderId, visibleMessageViewDelegate)
|
visibleMessageView.bind(
|
||||||
|
message,
|
||||||
|
messageBefore,
|
||||||
|
getMessageAfter(position, cursor),
|
||||||
|
glide,
|
||||||
|
searchQuery,
|
||||||
|
contact,
|
||||||
|
senderId,
|
||||||
|
visibleMessageViewDelegate,
|
||||||
|
lifecycleCoroutineScope
|
||||||
|
)
|
||||||
|
|
||||||
if (!message.isDeleted) {
|
if (!message.isDeleted) {
|
||||||
visibleMessageView.onPress = { event -> onItemPress(message, viewHolder.adapterPosition, visibleMessageView, event) }
|
visibleMessageView.onPress = { event -> onItemPress(message, viewHolder.adapterPosition, visibleMessageView, event) }
|
||||||
visibleMessageView.onSwipeToReply = { onItemSwipeToReply(message, viewHolder.adapterPosition) }
|
visibleMessageView.onSwipeToReply = { onItemSwipeToReply(message, viewHolder.adapterPosition) }
|
||||||
|
@ -11,6 +11,9 @@ import android.widget.FrameLayout
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.view.children
|
import androidx.core.view.children
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.lifecycle.LifecycleCoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
import network.loki.messenger.databinding.AlbumThumbnailViewBinding
|
import network.loki.messenger.databinding.AlbumThumbnailViewBinding
|
||||||
import org.session.libsession.messaging.jobs.AttachmentDownloadJob
|
import org.session.libsession.messaging.jobs.AttachmentDownloadJob
|
||||||
@ -63,7 +66,7 @@ class AlbumThumbnailView : FrameLayout {
|
|||||||
|
|
||||||
// region Interaction
|
// region Interaction
|
||||||
|
|
||||||
fun calculateHitObject(event: MotionEvent, mms: MmsMessageRecord, threadRecipient: Recipient) {
|
fun calculateHitObject(event: MotionEvent, mms: MmsMessageRecord, threadRecipient: Recipient, lifecycleCoroutineScope: LifecycleCoroutineScope) {
|
||||||
val rawXInt = event.rawX.toInt()
|
val rawXInt = event.rawX.toInt()
|
||||||
val rawYInt = event.rawY.toInt()
|
val rawYInt = event.rawY.toInt()
|
||||||
val eventRect = Rect(rawXInt, rawYInt, rawXInt, rawYInt)
|
val eventRect = Rect(rawXInt, rawYInt, rawXInt, rawYInt)
|
||||||
@ -76,10 +79,14 @@ class AlbumThumbnailView : FrameLayout {
|
|||||||
val slide = slides.getOrNull(index) ?: return
|
val slide = slides.getOrNull(index) ?: return
|
||||||
// only open to downloaded images
|
// only open to downloaded images
|
||||||
if (slide.transferState == AttachmentTransferProgress.TRANSFER_PROGRESS_FAILED) {
|
if (slide.transferState == AttachmentTransferProgress.TRANSFER_PROGRESS_FAILED) {
|
||||||
// restart download here
|
// Restart download here (on IO thread)
|
||||||
(slide.asAttachment() as? DatabaseAttachment)?.let { attachment ->
|
(slide.asAttachment() as? DatabaseAttachment)?.let { attachment ->
|
||||||
val attachmentId = attachment.attachmentId.rowId
|
val attachmentId = attachment.attachmentId.rowId
|
||||||
JobQueue.shared.add(AttachmentDownloadJob(attachmentId, mms.getId()))
|
|
||||||
|
// Start download (on IO thread)
|
||||||
|
lifecycleCoroutineScope.launch(Dispatchers.IO) {
|
||||||
|
JobQueue.shared.add(AttachmentDownloadJob(attachmentId, mms.getId()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (slide.isInProgress) return
|
if (slide.isInProgress) return
|
||||||
|
@ -23,6 +23,9 @@ import androidx.core.graphics.BlendModeCompat
|
|||||||
import androidx.core.text.getSpans
|
import androidx.core.text.getSpans
|
||||||
import androidx.core.text.toSpannable
|
import androidx.core.text.toSpannable
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
import androidx.lifecycle.LifecycleCoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
import network.loki.messenger.databinding.ViewVisibleMessageContentBinding
|
import network.loki.messenger.databinding.ViewVisibleMessageContentBinding
|
||||||
import okhttp3.HttpUrl
|
import okhttp3.HttpUrl
|
||||||
@ -65,8 +68,16 @@ class VisibleMessageContentView : LinearLayout {
|
|||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
// region Updating
|
// region Updating
|
||||||
fun bind(message: MessageRecord, isStartOfMessageCluster: Boolean, isEndOfMessageCluster: Boolean,
|
fun bind(
|
||||||
glide: GlideRequests, thread: Recipient, searchQuery: String?, contactIsTrusted: Boolean) {
|
message: MessageRecord,
|
||||||
|
isStartOfMessageCluster: Boolean,
|
||||||
|
isEndOfMessageCluster: Boolean,
|
||||||
|
glide: GlideRequests,
|
||||||
|
thread: Recipient,
|
||||||
|
searchQuery: String?,
|
||||||
|
contactIsTrusted: Boolean,
|
||||||
|
lifecycleCoroutineScope: LifecycleCoroutineScope
|
||||||
|
) {
|
||||||
// Background
|
// Background
|
||||||
val background = getBackground(message.isOutgoing)
|
val background = getBackground(message.isOutgoing)
|
||||||
val color = if (message.isOutgoing) context.getAccentColor()
|
val color = if (message.isOutgoing) context.getAccentColor()
|
||||||
@ -141,8 +152,10 @@ class VisibleMessageContentView : LinearLayout {
|
|||||||
val attachmentId = dbAttachment.attachmentId.rowId
|
val attachmentId = dbAttachment.attachmentId.rowId
|
||||||
if (attach.transferState == AttachmentTransferProgress.TRANSFER_PROGRESS_PENDING
|
if (attach.transferState == AttachmentTransferProgress.TRANSFER_PROGRESS_PENDING
|
||||||
&& MessagingModuleConfiguration.shared.storage.getAttachmentUploadJob(attachmentId) == null) {
|
&& MessagingModuleConfiguration.shared.storage.getAttachmentUploadJob(attachmentId) == null) {
|
||||||
// start download
|
// Start download (on IO thread)
|
||||||
JobQueue.shared.add(AttachmentDownloadJob(attachmentId, dbAttachment.mmsId))
|
lifecycleCoroutineScope.launch(Dispatchers.IO) {
|
||||||
|
JobQueue.shared.add(AttachmentDownloadJob(attachmentId, dbAttachment.mmsId))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message.linkPreviews.forEach { preview ->
|
message.linkPreviews.forEach { preview ->
|
||||||
@ -150,7 +163,10 @@ class VisibleMessageContentView : LinearLayout {
|
|||||||
val attachmentId = previewThumbnail.attachmentId.rowId
|
val attachmentId = previewThumbnail.attachmentId.rowId
|
||||||
if (previewThumbnail.transferState == AttachmentTransferProgress.TRANSFER_PROGRESS_PENDING
|
if (previewThumbnail.transferState == AttachmentTransferProgress.TRANSFER_PROGRESS_PENDING
|
||||||
&& MessagingModuleConfiguration.shared.storage.getAttachmentUploadJob(attachmentId) == null) {
|
&& MessagingModuleConfiguration.shared.storage.getAttachmentUploadJob(attachmentId) == null) {
|
||||||
JobQueue.shared.add(AttachmentDownloadJob(attachmentId, previewThumbnail.mmsId))
|
// Start download (on IO thread)
|
||||||
|
lifecycleCoroutineScope.launch(Dispatchers.IO) {
|
||||||
|
JobQueue.shared.add(AttachmentDownloadJob(attachmentId, previewThumbnail.mmsId))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -205,7 +221,7 @@ class VisibleMessageContentView : LinearLayout {
|
|||||||
layoutParams.horizontalBias = if (message.isOutgoing) 1f else 0f
|
layoutParams.horizontalBias = if (message.isOutgoing) 1f else 0f
|
||||||
binding.albumThumbnailView.layoutParams = layoutParams
|
binding.albumThumbnailView.layoutParams = layoutParams
|
||||||
onContentClick.add { event ->
|
onContentClick.add { event ->
|
||||||
binding.albumThumbnailView.calculateHitObject(event, message, thread)
|
binding.albumThumbnailView.calculateHitObject(event, message, thread, lifecycleCoroutineScope)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hideBody = true
|
hideBody = true
|
||||||
|
@ -20,6 +20,7 @@ import androidx.core.os.bundleOf
|
|||||||
import androidx.core.view.isInvisible
|
import androidx.core.view.isInvisible
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.view.marginBottom
|
import androidx.core.view.marginBottom
|
||||||
|
import androidx.lifecycle.LifecycleCoroutineScope
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import network.loki.messenger.R
|
import network.loki.messenger.R
|
||||||
import network.loki.messenger.databinding.ViewVisibleMessageBinding
|
import network.loki.messenger.databinding.ViewVisibleMessageBinding
|
||||||
@ -122,6 +123,7 @@ class VisibleMessageView : LinearLayout {
|
|||||||
contact: Contact?,
|
contact: Contact?,
|
||||||
senderSessionID: String,
|
senderSessionID: String,
|
||||||
delegate: VisibleMessageViewDelegate?,
|
delegate: VisibleMessageViewDelegate?,
|
||||||
|
lifecycleCoroutineScope: LifecycleCoroutineScope
|
||||||
) {
|
) {
|
||||||
val threadID = message.threadId
|
val threadID = message.threadId
|
||||||
val thread = threadDb.getRecipientForThreadId(threadID) ?: return
|
val thread = threadDb.getRecipientForThreadId(threadID) ?: return
|
||||||
@ -230,7 +232,8 @@ class VisibleMessageView : LinearLayout {
|
|||||||
glide,
|
glide,
|
||||||
thread,
|
thread,
|
||||||
searchQuery,
|
searchQuery,
|
||||||
message.isOutgoing || isGroupThread || (contact?.isTrusted ?: false)
|
message.isOutgoing || isGroupThread || (contact?.isTrusted ?: false),
|
||||||
|
lifecycleCoroutineScope
|
||||||
)
|
)
|
||||||
binding.messageContentView.delegate = delegate
|
binding.messageContentView.delegate = delegate
|
||||||
onDoubleTap = { binding.messageContentView.onContentDoubleTap?.invoke() }
|
onDoubleTap = { binding.messageContentView.onContentDoubleTap?.invoke() }
|
||||||
|
Loading…
Reference in New Issue
Block a user