| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				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 glide: GlideRequests)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private val glide: GlideRequests, private val onDeselect: (MessageRecord, Int) -> Unit)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    : CursorRecyclerViewAdapter<ViewHolder>(context, cursor) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    private val messageDB = DatabaseComponent.get(context).mmsSmsDatabase()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    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.onSwipeToReply = { onItemSwipeToReply(message, viewHolder.adapterPosition) }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    view.onLongPress = { onItemLongPress(message, viewHolder.adapterPosition) }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                } else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    view.onPress = null
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    view.onSwipeToReply = null
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    view.onLongPress = null
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                view.contentViewDelegate = visibleMessageContentViewDelegate
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            }
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -102,6 +106,27 @@ class ConversationAdapter(context: Context, cursor: Cursor, private val onItemPr
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        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) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if (selectedItems.contains(message)) selectedItems.remove(message) else selectedItems.add(message)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        notifyItemChanged(position)
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |