diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt
index f4ed36544..038cf549e 100644
--- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt
@@ -19,12 +19,16 @@
*/
package org.linphone.ui.main.chat.fragment
+import android.content.ActivityNotFoundException
+import android.content.Intent
+import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationUtils
+import android.webkit.MimeTypeMap
import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw
import androidx.lifecycle.ViewModelProvider
@@ -36,12 +40,14 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.ChatListFragmentBinding
+import org.linphone.ui.main.MainActivity
import org.linphone.ui.main.chat.adapter.ConversationsListAdapter
import org.linphone.ui.main.chat.viewmodel.ConversationsListViewModel
import org.linphone.ui.main.fragment.AbstractTopBarFragment
import org.linphone.ui.main.history.fragment.HistoryMenuDialogFragment
import org.linphone.ui.main.viewer.fragment.FileViewerFragmentDirections
import org.linphone.utils.Event
+import org.linphone.utils.FileUtils
@UiThread
class ConversationsListFragment : AbstractTopBarFragment() {
@@ -236,9 +242,32 @@ class ConversationsListFragment : AbstractTopBarFragment() {
it.consume { path ->
if (findNavController().currentDestination?.id == R.id.conversationsListFragment) {
Log.i("$TAG Navigating to file viewer fragment with path [$path]")
- val action =
- FileViewerFragmentDirections.actionGlobalFileViewerFragment(path)
- findNavController().navigate(action)
+ val extension = FileUtils.getExtensionFromFileName(path)
+ val mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
+ when (FileUtils.getMimeType(mime)) {
+ FileUtils.MimeType.Image, FileUtils.MimeType.Video, FileUtils.MimeType.Pdf -> {
+ val action =
+ FileViewerFragmentDirections.actionGlobalFileViewerFragment(path)
+ findNavController().navigate(action)
+ }
+ else -> {
+ val intent = Intent(Intent.ACTION_VIEW)
+ val contentUri: Uri =
+ FileUtils.getPublicFilePath(requireContext(), path)
+ intent.setDataAndType(contentUri, "file/$mime")
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ try {
+ requireContext().startActivity(intent)
+ } catch (anfe: ActivityNotFoundException) {
+ Log.e("$TAG Can't open file [$path] in third party app: $anfe")
+ val message = getString(
+ R.string.toast_no_app_registered_to_handle_content_type_error
+ )
+ val icon = R.drawable.file
+ (requireActivity() as MainActivity).showRedToast(message, icon)
+ }
+ }
+ }
}
}
}
diff --git a/app/src/main/java/org/linphone/ui/main/viewer/viewmodel/FileViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewer/viewmodel/FileViewModel.kt
index 132c6a2b0..5b38237de 100644
--- a/app/src/main/java/org/linphone/ui/main/viewer/viewmodel/FileViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/main/viewer/viewmodel/FileViewModel.kt
@@ -44,6 +44,8 @@ class FileViewModel @UiThread constructor() : ViewModel() {
val pdfPages = MutableLiveData()
+ val isImage = MutableLiveData()
+
val isVideo = MutableLiveData()
val isVideoPlaying = MutableLiveData()
@@ -119,14 +121,24 @@ class FileViewModel @UiThread constructor() : ViewModel() {
}
}
}
+ FileUtils.MimeType.Image -> {
+ Log.i("$TAG File [$file] seems to be an image")
+ isImage.value = true
+ path.value = file
+ }
FileUtils.MimeType.Video -> {
Log.i("$TAG File [$file] seems to be a video")
isVideo.value = true
isVideoPlaying.value = false
}
+ FileUtils.MimeType.Audio -> {
+ // TODO: handle audio files
+ }
+ FileUtils.MimeType.PlainText -> {
+ // TODO: handle plain text files
+ }
else -> {
- path.value = file
- // TODO FIXME : handle audio & plain text files, open native app for unsupported files
+ // TODO: open native app for unsupported files
}
}
}
diff --git a/app/src/main/res/drawable/paper_plane_right.xml b/app/src/main/res/drawable/paper_plane_right.xml
index 274503570..2ea8a4462 100644
--- a/app/src/main/res/drawable/paper_plane_right.xml
+++ b/app/src/main/res/drawable/paper_plane_right.xml
@@ -1,6 +1,6 @@
+ android:visibility="@{viewModel.isImage ? View.VISIBLE : View.GONE, default=gone}" />
+ android:visibility="@{viewModel.isImage ? View.VISIBLE : View.GONE, default=gone}" />
History has been successfully deleted
You have left the group
Media volume is low, you may not hear anything!
+ No app found to open this kind of file
Login
Scan QR code