From 6501cd5e9df427df88300840799658e20871029e Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 13 May 2020 16:51:58 +0200 Subject: [PATCH] Allow multiple file sharing (previously was picture only) & fixed text sharing --- app/src/main/AndroidManifest.xml | 3 +++ .../linphone/activities/main/MainActivity.kt | 24 ++++++++++++++----- .../chat/fragments/DetailChatRoomFragment.kt | 8 +++++++ .../chat/fragments/MasterChatRoomsFragment.kt | 7 ++++++ .../main/viewmodels/SharedMainViewModel.kt | 2 ++ 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0aec13a95..3fdcb8eb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -65,6 +65,9 @@ + + + diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index 659077ca3..6ead8686c 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -149,13 +149,17 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin private fun handleIntentParams(intent: Intent) { when (intent.action) { Intent.ACTION_SEND, Intent.ACTION_SENDTO -> { - lifecycleScope.launch { - handleSendImage(intent) + if (intent.type?.startsWith("text/") == true) { + handleSendText(intent) + } else { + lifecycleScope.launch { + handleSendFile(intent) + } } } Intent.ACTION_SEND_MULTIPLE -> { lifecycleScope.launch { - handleSendMultipleImages(intent) + handleSendMultipleFiles(intent) } } Intent.ACTION_VIEW -> { @@ -224,7 +228,15 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin } } - private suspend fun handleSendImage(intent: Intent) { + private fun handleSendText(intent: Intent) { + intent.getStringExtra(Intent.EXTRA_TEXT)?.let { + sharedViewModel.textToShare.value = it + } + + handleSendChatRoom(intent) + } + + private suspend fun handleSendFile(intent: Intent) { (intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri)?.let { val list = arrayListOf() coroutineScope { @@ -243,7 +255,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin handleSendChatRoom(intent) } - private suspend fun handleSendMultipleImages(intent: Intent) { + private suspend fun handleSendMultipleFiles(intent: Intent) { intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)?.let { val list = arrayListOf() coroutineScope { @@ -264,7 +276,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin handleSendChatRoom(intent) } - private suspend fun handleSendChatRoom(intent: Intent) { + private fun handleSendChatRoom(intent: Intent) { val uri = intent.data if (uri != null) { Log.i("[Main Activity] Found uri: $uri to send a message to") diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt index 683da1e52..b52722860 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt @@ -238,6 +238,14 @@ class DetailChatRoomFragment : MasterFragment() { coreContext.startCall(viewModel.addressToCall) } + sharedViewModel.textToShare.observe(viewLifecycleOwner, Observer { + if (it.isNotEmpty()) { + Log.i("[Chat Room] Found text to share") + chatSendingViewModel.textToSend.value = it + sharedViewModel.textToShare.value = "" + } + }) + sharedViewModel.filesToShare.observe(viewLifecycleOwner, Observer { if (it.isNotEmpty()) { for (path in it) { diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt index 483527391..c4d20c300 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt @@ -207,6 +207,13 @@ class MasterChatRoomsFragment : MasterFragment() { adapter.selectedChatRoomEvent.value = Event(chatRoom) } } else { + sharedViewModel.textToShare.observe(viewLifecycleOwner, Observer { + if (it.isNotEmpty()) { + Log.i("[Chat] Found text to share") + val activity = requireActivity() as MainActivity + activity.showSnackBar(R.string.chat_room_toast_choose_for_sharing) + } + }) sharedViewModel.filesToShare.observe(viewLifecycleOwner, Observer { if (it.isNotEmpty()) { Log.i("[Chat] Found ${it.size} files to share") diff --git a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt index 12bbc6cf3..cb5aa0395 100644 --- a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt @@ -40,6 +40,8 @@ class SharedMainViewModel : ViewModel() { val filesToShare = MutableLiveData>() + val textToShare = MutableLiveData() + val messageToForwardEvent: MutableLiveData> by lazy { MutableLiveData>() }