Browse Source

Implemented media/photo share functionality

Smarshall 1 year ago
parent
commit
85833c6f41

+ 19 - 0
app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

@@ -198,6 +198,7 @@ import com.nextcloud.talk.utils.FileUtils
 import com.nextcloud.talk.utils.FileViewerUtils
 import com.nextcloud.talk.utils.ImageEmojiEditText
 import com.nextcloud.talk.utils.MagicCharPolicy
+import com.nextcloud.talk.utils.Mimetype
 import com.nextcloud.talk.utils.NotificationUtils
 import com.nextcloud.talk.utils.ParticipantPermissions
 import com.nextcloud.talk.utils.VibrationUtils
@@ -312,6 +313,7 @@ class ChatActivity :
     var voiceOnly: Boolean = true
     var isFirstMessagesProcessing = true
     private var emojiPopup: EmojiPopup? = null
+    private lateinit var path: String
 
     var myFirstMessage: CharSequence? = null
     var checkingLobbyStatus: Boolean = false
@@ -3908,6 +3910,23 @@ class ChatActivity :
         intent.putExtras(bundle)
         startActivity(intent)
     }
+    fun share(message: ChatMessage) {
+        val fileName = message.selectedIndividualHashMap!![PreviewMessageViewHolder.KEY_NAME]!!
+        path = applicationContext.cacheDir.absolutePath + "/" + fileName
+        val shareUri = FileProvider.getUriForFile(
+            this,
+            BuildConfig.APPLICATION_ID,
+            File(path)
+        )
+
+        val shareIntent: Intent = Intent().apply {
+            action = Intent.ACTION_SEND
+            putExtra(Intent.EXTRA_STREAM, shareUri)
+            type = Mimetype.IMAGE_PREFIX_GENERIC
+            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+        }
+        startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to)))
+    }
 
     fun openInFilesApp(message: ChatMessage) {
         val keyID = message.selectedIndividualHashMap!![PreviewMessageViewHolder.KEY_ID]

+ 10 - 0
app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt

@@ -113,6 +113,7 @@ class MessageActionsDialog(
             message.previousMessageId > NO_PREVIOUS_MESSAGE_ID &&
                 ChatMessage.MessageType.SYSTEM_MESSAGE != message.getCalculateMessageType()
         )
+        initMenuShare(ChatMessage.MessageType.SINGLE_NC_ATTACHMENT_MESSAGE == message.getCalculateMessageType())
         initMenuItemOpenNcApp(
             ChatMessage.MessageType.SINGLE_NC_ATTACHMENT_MESSAGE == message.getCalculateMessageType()
         )
@@ -318,6 +319,15 @@ class MessageActionsDialog(
 
         dialogMessageActionsBinding.menuTranslateMessage.visibility = getVisibility(visible)
     }
+    private fun initMenuShare(visible: Boolean) {
+        if (visible) {
+            dialogMessageActionsBinding.menuShare.setOnClickListener {
+                chatActivity.share(message)
+                dismiss()
+            }
+        }
+        dialogMessageActionsBinding.menuShare.visibility = getVisibility(visible)
+    }
 
     private fun initMenuItemOpenNcApp(visible: Boolean) {
         if (visible) {

+ 33 - 0
app/src/main/res/layout/dialog_message_actions.xml

@@ -320,6 +320,39 @@
 
         </LinearLayout>
 
+        <LinearLayout
+            android:id="@+id/menu_share"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/bottom_sheet_item_height"
+            android:background="?android:attr/selectableItemBackground"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            tools:ignore="UseCompoundDrawables">
+
+            <ImageView
+                android:id="@+id/menu_icon_share"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:contentDescription="@null"
+                android:paddingStart="@dimen/standard_padding"
+                android:paddingEnd="@dimen/zero"
+                android:src="@drawable/ic_share_action"
+                app:tint="@color/high_emphasis_menu_icon" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/menu_text_share"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_gravity="start|center_vertical"
+                android:paddingStart="@dimen/standard_double_padding"
+                android:paddingEnd="@dimen/standard_padding"
+                android:text="@string/share"
+                android:textAlignment="viewStart"
+                android:textColor="@color/high_emphasis_text"
+                android:textSize="@dimen/bottom_sheet_text_size" />
+
+        </LinearLayout>
+
         <LinearLayout
             android:id="@+id/menu_open_in_nc_app"
             android:layout_width="match_parent"