From 2bf7d1dddcc534cd3c66f9ffcaed58b74e2c1660 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Wed, 19 Apr 2023 18:39:31 +0200 Subject: [PATCH] android: share video as video (#2214) --- .../java/chat/simplex/app/MainActivity.kt | 38 +++++++++++++------ .../simplex/app/views/chat/ComposeView.kt | 2 +- .../simplex/app/views/chat/SendMsgView.kt | 2 +- .../app/views/chatlist/ShareListView.kt | 2 +- .../chat/simplex/app/views/helpers/Enums.kt | 2 +- .../app/src/main/res/values/strings.xml | 2 +- 6 files changed, 31 insertions(+), 17 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt b/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt index c35ae1d418..1e7641df3c 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt @@ -1,6 +1,5 @@ package chat.simplex.app -import SectionItemView import android.app.Application import android.content.Intent import android.net.Uri @@ -21,7 +20,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.fragment.app.FragmentActivity @@ -584,14 +582,23 @@ fun processExternalIntent(intent: Intent?, chatModel: ChatModel) { chatModel.chatId.value = null chatModel.clearOverlays.value = true when { - "text/plain" == intent.type -> intent.getStringExtra(Intent.EXTRA_TEXT)?.let { - chatModel.sharedContent.value = SharedContent.Text(it) + intent.type == "text/plain" -> { + val text = intent.getStringExtra(Intent.EXTRA_TEXT) + if (text != null) { + chatModel.sharedContent.value = SharedContent.Text(text) + } } - intent.type?.startsWith("image/") == true -> (intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri)?.let { - chatModel.sharedContent.value = SharedContent.Images(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", listOf(it)) - } // All other mime types - else -> (intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri)?.let { - chatModel.sharedContent.value = SharedContent.File(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", it) + isMediaIntent(intent) -> { + val uri = intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri + if (uri != null) { + chatModel.sharedContent.value = SharedContent.Media(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", listOf(uri)) + } // All other mime types + } + else -> { + val uri = intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri + if (uri != null) { + chatModel.sharedContent.value = SharedContent.File(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", uri) + } } } } @@ -599,16 +606,23 @@ fun processExternalIntent(intent: Intent?, chatModel: ChatModel) { // Close active chat and show a list of chats chatModel.chatId.value = null chatModel.clearOverlays.value = true + Log.e(TAG, "ACTION_SEND_MULTIPLE ${intent.type}") when { - intent.type?.startsWith("image/") == true -> (intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) as? List)?.let { - chatModel.sharedContent.value = SharedContent.Images(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", it) - } // All other mime types + isMediaIntent(intent) -> { + val uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) as? List + if (uris != null) { + chatModel.sharedContent.value = SharedContent.Media(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", uris) + } // All other mime types + } else -> {} } } } } +fun isMediaIntent(intent: Intent): Boolean = + intent.type?.startsWith("image/") == true || intent.type?.startsWith("video/") == true + fun connectIfOpenedViaUri(uri: Uri, chatModel: ChatModel) { Log.d(TAG, "connectIfOpenedViaUri: opened via link") if (chatModel.currentUser.value == null) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt index 4aabd428ae..19b8042a99 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt @@ -667,7 +667,7 @@ fun ComposeView( when (val shared = chatModel.sharedContent.value) { is SharedContent.Text -> onMessageChange(shared.text) - is SharedContent.Images -> processPickedMedia(shared.uris, shared.text) + is SharedContent.Media -> processPickedMedia(shared.uris, shared.text) is SharedContent.File -> processPickedFile(shared.uri, shared.text) null -> {} } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt index 24a1f614b2..9df27148f0 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt @@ -225,7 +225,7 @@ private fun NativeKeyboard( } catch (e: Exception) { return@OnCommitContentListener false } - SimplexApp.context.chatModel.sharedContent.value = SharedContent.Images("", listOf(inputContentInfo.contentUri)) + SimplexApp.context.chatModel.sharedContent.value = SharedContent.Media("", listOf(inputContentInfo.contentUri)) true } return InputConnectionCompat.createWrapper(connection, editorInfo, onCommit) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt index bd97135c46..c99c4c4055 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt @@ -114,7 +114,7 @@ private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableState Text( when (chatModel.sharedContent.value) { is SharedContent.Text -> stringResource(R.string.share_message) - is SharedContent.Images -> stringResource(R.string.share_image) + is SharedContent.Media -> stringResource(R.string.share_image) is SharedContent.File -> stringResource(R.string.share_file) else -> stringResource(R.string.share_message) }, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Enums.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Enums.kt index b5d08dad3a..cad5d4c53b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Enums.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Enums.kt @@ -11,7 +11,7 @@ import kotlinx.serialization.encoding.Encoder sealed class SharedContent { data class Text(val text: String): SharedContent() - data class Images(val text: String, val uris: List): SharedContent() + data class Media(val text: String, val uris: List): SharedContent() data class File(val text: String, val uri: Uri): SharedContent() } diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml index 064727ab36..15621e0e5f 100644 --- a/apps/android/app/src/main/res/values/strings.xml +++ b/apps/android/app/src/main/res/values/strings.xml @@ -253,7 +253,7 @@ Share message… - Share image… + Share media… Share file…