|
|
@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests
|
|
|
|
|
|
|
|
|
|
|
|
class ConversationAdapter(context: Context, cursor: Cursor, private val onItemPress: (MessageRecord, Int, VisibleMessageView, MotionEvent) -> Unit,
|
|
|
|
class ConversationAdapter(context: Context, cursor: Cursor, private val onItemPress: (MessageRecord, Int, VisibleMessageView, MotionEvent) -> Unit,
|
|
|
|
private val onItemSwipeToReply: (MessageRecord, Int) -> Unit, private val onItemLongPress: (MessageRecord, Int) -> Unit,
|
|
|
|
private val onItemSwipeToReply: (MessageRecord, Int) -> Unit, private val onItemLongPress: (MessageRecord, Int) -> Unit,
|
|
|
|
private val glide: GlideRequests)
|
|
|
|
private val glide: GlideRequests, private val onDeselect: (MessageRecord, Int) -> Unit)
|
|
|
|
: CursorRecyclerViewAdapter<ViewHolder>(context, cursor) {
|
|
|
|
: CursorRecyclerViewAdapter<ViewHolder>(context, cursor) {
|
|
|
|
private val messageDB = DatabaseComponent.get(context).mmsSmsDatabase()
|
|
|
|
private val messageDB = DatabaseComponent.get(context).mmsSmsDatabase()
|
|
|
|
var selectedItems = mutableSetOf<MessageRecord>()
|
|
|
|
var selectedItems = mutableSetOf<MessageRecord>()
|
|
|
@ -69,6 +69,10 @@ class ConversationAdapter(context: Context, cursor: Cursor, private val onItemPr
|
|
|
|
view.onPress = { event -> onItemPress(message, viewHolder.adapterPosition, view, event) }
|
|
|
|
view.onPress = { event -> onItemPress(message, viewHolder.adapterPosition, view, event) }
|
|
|
|
view.onSwipeToReply = { onItemSwipeToReply(message, viewHolder.adapterPosition) }
|
|
|
|
view.onSwipeToReply = { onItemSwipeToReply(message, viewHolder.adapterPosition) }
|
|
|
|
view.onLongPress = { onItemLongPress(message, viewHolder.adapterPosition) }
|
|
|
|
view.onLongPress = { onItemLongPress(message, viewHolder.adapterPosition) }
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
view.onPress = null
|
|
|
|
|
|
|
|
view.onSwipeToReply = null
|
|
|
|
|
|
|
|
view.onLongPress = null
|
|
|
|
}
|
|
|
|
}
|
|
|
|
view.contentViewDelegate = visibleMessageContentViewDelegate
|
|
|
|
view.contentViewDelegate = visibleMessageContentViewDelegate
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -102,6 +106,27 @@ class ConversationAdapter(context: Context, cursor: Cursor, private val onItemPr
|
|
|
|
return messageDB.readerFor(cursor).current
|
|
|
|
return messageDB.readerFor(cursor).current
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun changeCursor(cursor: Cursor?) {
|
|
|
|
|
|
|
|
super.changeCursor(cursor)
|
|
|
|
|
|
|
|
val toRemove = mutableSetOf<MessageRecord>()
|
|
|
|
|
|
|
|
val toDeselect = mutableSetOf<Pair<Int, MessageRecord>>()
|
|
|
|
|
|
|
|
for (selected in selectedItems) {
|
|
|
|
|
|
|
|
val position = getItemPositionForTimestamp(selected.timestamp)
|
|
|
|
|
|
|
|
if (position == null || position == -1) {
|
|
|
|
|
|
|
|
toRemove += selected
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
val item = getMessage(getCursorAtPositionOrThrow(position))
|
|
|
|
|
|
|
|
if (item == null || item.isDeleted) {
|
|
|
|
|
|
|
|
toDeselect += position to selected
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
selectedItems -= toRemove
|
|
|
|
|
|
|
|
toDeselect.iterator().forEach { (pos, record) ->
|
|
|
|
|
|
|
|
onDeselect(record, pos)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fun toggleSelection(message: MessageRecord, position: Int) {
|
|
|
|
fun toggleSelection(message: MessageRecord, position: Int) {
|
|
|
|
if (selectedItems.contains(message)) selectedItems.remove(message) else selectedItems.add(message)
|
|
|
|
if (selectedItems.contains(message)) selectedItems.remove(message) else selectedItems.add(message)
|
|
|
|
notifyItemChanged(position)
|
|
|
|
notifyItemChanged(position)
|
|
|
|