From 9147601a1a2add77ad7b060383b26eae80f42b17 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 22 Apr 2021 15:48:49 +0200 Subject: [PATCH] Added dialog when VFS is enabled and in-app viewers can't display a file asking whether to export file or open it as text --- .../chat_bubble/ChatBubbleActivity.kt | 7 +++- .../chat/fragments/DetailChatRoomFragment.kt | 39 +++++++++++++++++-- .../main/chat/fragments/DevicesFragment.kt | 9 ++++- .../main/chat/fragments/EphemeralFragment.kt | 9 ++++- .../main/chat/fragments/ImdnFragment.kt | 8 +++- .../fragments/DetailContactFragment.kt | 7 +++- .../files/fragments/AudioViewerFragment.kt | 9 ++++- .../files/fragments/GenericViewerFragment.kt | 10 ++++- .../files/fragments/ImageViewerFragment.kt | 10 ++++- .../main/files/fragments/PdfViewerFragment.kt | 10 ++++- .../files/fragments/TextViewerFragment.kt | 10 ++++- .../files/fragments/VideoViewerFragment.kt | 8 +++- .../fragments/DetailCallLogFragment.kt | 7 +++- .../fragments/AccountSettingsFragment.kt | 10 ++++- app/src/main/res/layout/dialog.xml | 11 ++++-- app/src/main/res/values-fr/strings.xml | 4 ++ app/src/main/res/values/strings.xml | 4 ++ 17 files changed, 151 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/chat_bubble/ChatBubbleActivity.kt b/app/src/main/java/org/linphone/activities/chat_bubble/ChatBubbleActivity.kt index 6603f4119..42e4baf11 100644 --- a/app/src/main/java/org/linphone/activities/chat_bubble/ChatBubbleActivity.kt +++ b/app/src/main/java/org/linphone/activities/chat_bubble/ChatBubbleActivity.kt @@ -79,7 +79,12 @@ class ChatBubbleActivity : GenericActivity() { ) } - chatRoom ?: return + if (chatRoom == null) { + Log.e("[Chat Bubble] Chat room is null, aborting!") + finish() + return + } + chatRoom.markAsRead() viewModel = ViewModelProvider( 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 f8e4cf04d..61d4c46dc 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 @@ -117,7 +117,12 @@ class DetailChatRoomFragment : MasterFragment { if (content.isFileEncrypted) { Log.w("[Chat Message] File is encrypted and can't be opened in one of our viewers...") - // TODO: show dialog to ask user for consent before trying to export the file first + showDialogForUserConsentBeforeExportingFileInThirdPartyApp(path) } else if (!FileUtils.openFileInThirdPartyApp(requireActivity(), path)) { showDialogToSuggestOpeningFileAsText() } @@ -575,8 +580,8 @@ class DetailChatRoomFragment : MasterFragment() { @@ -46,7 +48,12 @@ class DevicesFragment : SecureFragment() { } val chatRoom = sharedViewModel.selectedChatRoom.value - chatRoom ?: return + if (chatRoom == null) { + Log.e("[Devices] Chat room is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } isSecure = chatRoom.currentParams.encryptionEnabled() diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/EphemeralFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/EphemeralFragment.kt index 750175f44..62fc51f50 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/EphemeralFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/EphemeralFragment.kt @@ -24,10 +24,12 @@ import android.view.View import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.chat.viewmodels.EphemeralViewModel import org.linphone.activities.main.chat.viewmodels.EphemeralViewModelFactory import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.viewmodels.SharedMainViewModel +import org.linphone.core.tools.Log import org.linphone.databinding.ChatRoomEphemeralFragmentBinding class EphemeralFragment : SecureFragment() { @@ -49,7 +51,12 @@ class EphemeralFragment : SecureFragment() { } val chatRoom = sharedViewModel.selectedChatRoom.value - chatRoom ?: return + if (chatRoom == null) { + Log.e("[Ephemeral] Chat room is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } viewModel = ViewModelProvider( this, diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt index 5d2d50bf7..b3686a41f 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt @@ -26,6 +26,7 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import org.linphone.R +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.chat.adapters.ImdnAdapter import org.linphone.activities.main.chat.viewmodels.ImdnViewModel import org.linphone.activities.main.chat.viewmodels.ImdnViewModelFactory @@ -54,7 +55,12 @@ class ImdnFragment : SecureFragment() { } val chatRoom = sharedViewModel.selectedChatRoom.value - chatRoom ?: return + if (chatRoom == null) { + Log.e("[IMDN] Chat room is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } isSecure = chatRoom.currentParams.encryptionEnabled() diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt index b34d6fb07..9cf9fd5c0 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt @@ -63,7 +63,12 @@ class DetailContactFragment : GenericFragment() { } val contact = sharedViewModel.selectedContact.value - contact ?: return + if (contact == null) { + Log.e("[Contact] Contact is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } viewModel = ViewModelProvider( this, diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/AudioViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/AudioViewerFragment.kt index 0981c8064..70d65f51b 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/AudioViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/AudioViewerFragment.kt @@ -27,8 +27,10 @@ import android.widget.MediaController import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.files.viewmodels.AudioFileViewModel import org.linphone.activities.main.files.viewmodels.AudioFileViewModelFactory +import org.linphone.core.tools.Log import org.linphone.databinding.FileAudioViewerFragmentBinding class AudioViewerFragment : GenericViewerFragment() { @@ -45,7 +47,12 @@ class AudioViewerFragment : GenericViewerFragment : SecureFragment() { protected lateinit var sharedViewModel: SharedMainViewModel @@ -44,7 +47,12 @@ abstract class GenericViewerFragment : SecureFragment() super.onStart() val content = sharedViewModel.contentToOpen.value - content ?: return + if (content == null) { + Log.e("[Generic Viewer] Content is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } (childFragmentManager.findFragmentById(R.id.top_bar_fragment) as? TopBarFragment) ?.setContent(content) diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/ImageViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/ImageViewerFragment.kt index 816a7c312..f00ae31f1 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/ImageViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/ImageViewerFragment.kt @@ -23,9 +23,12 @@ import android.annotation.SuppressLint import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.findNavController import org.linphone.R +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.files.viewmodels.ImageFileViewModel import org.linphone.activities.main.files.viewmodels.ImageFileViewModelFactory +import org.linphone.core.tools.Log import org.linphone.databinding.FileImageViewerFragmentBinding class ImageViewerFragment : GenericViewerFragment() { @@ -40,7 +43,12 @@ class ImageViewerFragment : GenericViewerFragment() { @@ -40,7 +43,12 @@ class PdfViewerFragment : GenericViewerFragment() binding.lifecycleOwner = this val content = sharedViewModel.contentToOpen.value - content ?: return + if (content == null) { + Log.e("[PDF Viewer] Content is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } viewModel = ViewModelProvider( this, diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/TextViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/TextViewerFragment.kt index 76ac78d2e..11fd02ff2 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/TextViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/TextViewerFragment.kt @@ -22,9 +22,12 @@ package org.linphone.activities.main.files.fragments import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.findNavController import org.linphone.R +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.files.viewmodels.TextFileViewModel import org.linphone.activities.main.files.viewmodels.TextFileViewModelFactory +import org.linphone.core.tools.Log import org.linphone.databinding.FileTextViewerFragmentBinding class TextViewerFragment : GenericViewerFragment() { @@ -38,7 +41,12 @@ class TextViewerFragment : GenericViewerFragment( binding.lifecycleOwner = this val content = sharedViewModel.contentToOpen.value - content ?: return + if (content == null) { + Log.e("[Text Viewer] Content is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } viewModel = ViewModelProvider( this, diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt index 4019f6211..43e038378 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt @@ -26,6 +26,7 @@ import android.widget.MediaController import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.files.viewmodels.VideoFileViewModel import org.linphone.activities.main.files.viewmodels.VideoFileViewModelFactory import org.linphone.core.tools.Log @@ -44,7 +45,12 @@ class VideoViewerFragment : GenericViewerFragment() { } val callLogGroup = sharedViewModel.selectedCallLogGroup.value - callLogGroup ?: return + if (callLogGroup == null) { + Log.e("[History] Call log group is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } viewModel = ViewModelProvider( this, diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt index c65de6a91..ac405acba 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/AccountSettingsFragment.kt @@ -25,6 +25,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import org.linphone.R import org.linphone.activities.GenericFragment +import org.linphone.activities.main.MainActivity import org.linphone.activities.main.navigateToPhoneLinking import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModelFactory @@ -47,7 +48,14 @@ class AccountSettingsFragment : GenericFragment( ViewModelProvider(this).get(SharedMainViewModel::class.java) } - val identity = arguments?.getString("Identity") ?: "" + val identity = arguments?.getString("Identity") + if (identity == null) { + Log.e("[Account Settings] Identity is null, aborting!") + (activity as MainActivity).showSnackBar(R.string.error) + findNavController().navigateUp() + return + } + viewModel = ViewModelProvider(this, AccountSettingsViewModelFactory(identity)).get(AccountSettingsViewModel::class.java) binding.viewModel = viewModel diff --git a/app/src/main/res/layout/dialog.xml b/app/src/main/res/layout/dialog.xml index 4ffc0a359..66e4d37f9 100644 --- a/app/src/main/res/layout/dialog.xml +++ b/app/src/main/res/layout/dialog.xml @@ -1,5 +1,6 @@ - + @@ -122,13 +123,15 @@ - + app:flexWrap="nowrap" + app:alignItems="center" + app:justifyContent="center"> - + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index db88d5c44..ee3a5f0d2 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -576,4 +576,8 @@ Sonner durant un appel entrant avec early-media Voir le fichier de config + Il semblerait que l\'on ne puisse pas afficher ce fichier. + Voulez-vous essayer de l\'ouvrir comme texte ou de l\'exporter (en clair) vers une appli tierce si disponible ? + Exporter + Ouvrir comme texte \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 239f99a7c..645e46312 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -205,6 +205,10 @@ <Redacted> No app available for this kind of file Can\'t open encrypted file in chat bubble + It seems we can\'t display the file. + Would you like to open it as text or export it (unencrypted) to a third party app if available? + Export + Open as text No recordings