|  |  |  | @ -34,11 +34,11 @@ import org.session.libsession.messaging.messages.signal.OutgoingTextMessage | 
		
	
		
			
				|  |  |  |  | import org.session.libsession.messaging.messages.visible.VisibleMessage | 
		
	
		
			
				|  |  |  |  | import org.session.libsession.messaging.open_groups.OpenGroupAPIV2 | 
		
	
		
			
				|  |  |  |  | import org.session.libsession.messaging.sending_receiving.MessageSender | 
		
	
		
			
				|  |  |  |  | import org.session.libsession.messaging.sending_receiving.MessageSender.send | 
		
	
		
			
				|  |  |  |  | import org.session.libsession.utilities.TextSecurePreferences | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.ApplicationContext | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.contactshare.SimpleTextWatcher | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.conversation.ConversationActivity | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.conversation.v2.dialogs.* | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarButton | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.conversation.v2.input_bar.InputBarDelegate | 
		
	
	
		
			
				
					|  |  |  | @ -55,6 +55,7 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.linkpreview.LinkPreviewViewModel.LinkPreviewState | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.loki.utilities.toPx | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.mms.AttachmentManager | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.mms.GlideApp | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.notifications.MarkReadReceiver | 
		
	
		
			
				|  |  |  |  | import org.thoughtcrime.securesms.util.DateUtils | 
		
	
	
		
			
				
					|  |  |  | @ -66,13 +67,14 @@ import kotlin.math.* | 
		
	
		
			
				|  |  |  |  | // price we pay is a bit of back and forth between the input bar and the conversation activity. | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDelegate, | 
		
	
		
			
				|  |  |  |  |     InputBarRecordingViewDelegate { | 
		
	
		
			
				|  |  |  |  |     InputBarRecordingViewDelegate, AttachmentManager.AttachmentListener { | 
		
	
		
			
				|  |  |  |  |     private val screenWidth = Resources.getSystem().displayMetrics.widthPixels | 
		
	
		
			
				|  |  |  |  |     private var linkPreviewViewModel: LinkPreviewViewModel? = null | 
		
	
		
			
				|  |  |  |  |     private var threadID: Long = -1 | 
		
	
		
			
				|  |  |  |  |     private var actionMode: ActionMode? = null | 
		
	
		
			
				|  |  |  |  |     private var unreadCount = 0 | 
		
	
		
			
				|  |  |  |  |     // Attachments | 
		
	
		
			
				|  |  |  |  |     private val attachmentManager by lazy { AttachmentManager(this, this) } | 
		
	
		
			
				|  |  |  |  |     private var isLockViewExpanded = false | 
		
	
		
			
				|  |  |  |  |     private var isShowingAttachmentOptions = false | 
		
	
		
			
				|  |  |  |  |     // Mentions | 
		
	
	
		
			
				
					|  |  |  | @ -121,6 +123,10 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe | 
		
	
		
			
				|  |  |  |  |     // region Settings | 
		
	
		
			
				|  |  |  |  |     companion object { | 
		
	
		
			
				|  |  |  |  |         const val THREAD_ID = "thread_id" | 
		
	
		
			
				|  |  |  |  |         const val PICK_DOCUMENT = 2 | 
		
	
		
			
				|  |  |  |  |         const val TAKE_PHOTO = 7 | 
		
	
		
			
				|  |  |  |  |         const val PICK_GIF = 10 | 
		
	
		
			
				|  |  |  |  |         const val PICK_FROM_LIBRARY = 12 | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     // endregion | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -188,15 +194,19 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe | 
		
	
		
			
				|  |  |  |  |         // GIF button | 
		
	
		
			
				|  |  |  |  |         gifButtonContainer.addView(gifButton) | 
		
	
		
			
				|  |  |  |  |         gifButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT) | 
		
	
		
			
				|  |  |  |  |         gifButton.onUp = { showGIFPicker() } | 
		
	
		
			
				|  |  |  |  |         // Document button | 
		
	
		
			
				|  |  |  |  |         documentButtonContainer.addView(documentButton) | 
		
	
		
			
				|  |  |  |  |         documentButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT) | 
		
	
		
			
				|  |  |  |  |         documentButton.onUp = { showDocumentPicker() } | 
		
	
		
			
				|  |  |  |  |         // Library button | 
		
	
		
			
				|  |  |  |  |         libraryButtonContainer.addView(libraryButton) | 
		
	
		
			
				|  |  |  |  |         libraryButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT) | 
		
	
		
			
				|  |  |  |  |         libraryButton.onUp = { pickFromLibrary() } | 
		
	
		
			
				|  |  |  |  |         // Camera button | 
		
	
		
			
				|  |  |  |  |         cameraButtonContainer.addView(cameraButton) | 
		
	
		
			
				|  |  |  |  |         cameraButton.layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT) | 
		
	
		
			
				|  |  |  |  |         cameraButton.onUp = { showCamera() } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     private fun restoreDraftIfNeeded() { | 
		
	
	
		
			
				
					|  |  |  | @ -650,6 +660,26 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe | 
		
	
		
			
				|  |  |  |  |         // Send a typing stopped message | 
		
	
		
			
				|  |  |  |  |         ApplicationContext.getInstance(this).typingStatusSender.onTypingStopped(threadID) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     private fun showGIFPicker() { | 
		
	
		
			
				|  |  |  |  |         AttachmentManager.selectGif(this, ConversationActivityV2.PICK_GIF) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     private fun showDocumentPicker() { | 
		
	
		
			
				|  |  |  |  |         AttachmentManager.selectDocument(this, ConversationActivityV2.PICK_DOCUMENT) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     private fun pickFromLibrary() { | 
		
	
		
			
				|  |  |  |  |         AttachmentManager.selectGallery(this, ConversationActivityV2.PICK_FROM_LIBRARY, thread, inputBar.text.trim()) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     private fun showCamera() { | 
		
	
		
			
				|  |  |  |  |         attachmentManager.capturePhoto(this, ConversationActivityV2.TAKE_PHOTO) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     override fun onAttachmentChanged() { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     // endregion | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     // region General | 
		
	
	
		
			
				
					|  |  |  | 
 |