From 42f1e31fa5ecd7468a9b592e715490bddbf4505a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Sat, 26 Jul 2025 11:44:00 +0200 Subject: [PATCH] Prevent exception causing crash if no Activity is available to create document --- .../ui/fileviewer/FileViewerActivity.kt | 28 +++++++++++-------- .../chat/fragment/ConversationFragment.kt | 6 +++- .../main/sso/fragment/SingleSignOnFragment.kt | 7 ++++- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/fileviewer/FileViewerActivity.kt b/app/src/main/java/org/linphone/ui/fileviewer/FileViewerActivity.kt index b490478ff..7035d4df2 100644 --- a/app/src/main/java/org/linphone/ui/fileviewer/FileViewerActivity.kt +++ b/app/src/main/java/org/linphone/ui/fileviewer/FileViewerActivity.kt @@ -1,5 +1,6 @@ package org.linphone.ui.fileviewer +import android.content.ActivityNotFoundException import android.content.Intent import android.os.Bundle import android.util.DisplayMetrics @@ -127,23 +128,13 @@ class FileViewerActivity : GenericActivity() { viewModel.exportPlainTextFileEvent.observe(this) { it.consume { name -> - val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { - addCategory(Intent.CATEGORY_OPENABLE) - type = "text/plain" - putExtra(Intent.EXTRA_TITLE, name) - } - startActivityForResult(intent, EXPORT_FILE_AS_DOCUMENT) + exportFile(name, "text/plain") } } viewModel.exportPdfEvent.observe(this) { it.consume { name -> - val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { - addCategory(Intent.CATEGORY_OPENABLE) - type = "application/pdf" - putExtra(Intent.EXTRA_TITLE, name) - } - startActivityForResult(intent, EXPORT_FILE_AS_DOCUMENT) + exportFile(name, "application/pdf") } } } @@ -212,4 +203,17 @@ class FileViewerActivity : GenericActivity() { } } } + + private fun exportFile(name: String, mimeType: String) { + val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = mimeType + putExtra(Intent.EXTRA_TITLE, name) + } + try { + startActivityForResult(intent, EXPORT_FILE_AS_DOCUMENT) + } catch (exception: ActivityNotFoundException) { + Log.e("$TAG No activity found to handle intent ACTION_CREATE_DOCUMENT: $exception") + } + } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index bf56dbb31..e3f645728 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -1560,6 +1560,10 @@ open class ConversationFragment : SlidingPaneChildFragment() { type = mime putExtra(Intent.EXTRA_TITLE, name) } - startActivityForResult(intent, EXPORT_FILE_AS_DOCUMENT) + try { + startActivityForResult(intent, EXPORT_FILE_AS_DOCUMENT) + } catch (exception: ActivityNotFoundException) { + Log.e("$TAG No activity found to handle intent ACTION_CREATE_DOCUMENT: $exception") + } } } diff --git a/app/src/main/java/org/linphone/ui/main/sso/fragment/SingleSignOnFragment.kt b/app/src/main/java/org/linphone/ui/main/sso/fragment/SingleSignOnFragment.kt index 45a02a6d4..91e40d872 100644 --- a/app/src/main/java/org/linphone/ui/main/sso/fragment/SingleSignOnFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/sso/fragment/SingleSignOnFragment.kt @@ -19,6 +19,7 @@ */ package org.linphone.ui.main.sso.fragment +import android.content.ActivityNotFoundException import android.content.Intent import android.os.Bundle import android.view.LayoutInflater @@ -75,7 +76,11 @@ class SingleSignOnFragment : GenericMainFragment() { viewModel.startAuthIntentEvent.observe(viewLifecycleOwner) { it.consume { intent -> Log.i("$TAG Starting auth intent activity") - startActivityForResult(intent, ACTIVITY_RESULT_ID) + try { + startActivityForResult(intent, ACTIVITY_RESULT_ID) + } catch (exception: ActivityNotFoundException) { + Log.e("$TAG No activity found to handle intent: $exception") + } } }