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