From 30009e56fa11a3bd1b1e56115511ba9be1db6a24 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 12 Aug 2021 21:30:08 +0200 Subject: [PATCH] Fixed crash when going back while on call Activity --- .../org/linphone/activities/GenericFragment.kt | 17 ++++++++++++----- .../call/fragments/ControlsFragment.kt | 5 +++++ .../call/fragments/StatisticsFragment.kt | 5 +++++ .../activities/call/fragments/StatusFragment.kt | 5 +++++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/GenericFragment.kt b/app/src/main/java/org/linphone/activities/GenericFragment.kt index 0f68b1cd1..a3e279c9b 100644 --- a/app/src/main/java/org/linphone/activities/GenericFragment.kt +++ b/app/src/main/java/org/linphone/activities/GenericFragment.kt @@ -29,12 +29,13 @@ import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController +import org.linphone.core.tools.Log abstract class GenericFragment : Fragment() { private var _binding: T? = null protected val binding get() = _binding!! - private val onBackPressedCallback = object : OnBackPressedCallback(true) { + protected val onBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { goBack() } @@ -63,11 +64,17 @@ abstract class GenericFragment : Fragment() { } protected open fun goBack() { - if (!findNavController().popBackStack()) { - if (!findNavController().navigateUp()) { - onBackPressedCallback.isEnabled = false - requireActivity().onBackPressed() + try { + if (!findNavController().popBackStack()) { + if (!findNavController().navigateUp()) { + onBackPressedCallback.isEnabled = false + requireActivity().onBackPressed() + } } + } catch (ise: IllegalStateException) { + Log.e("[Generic Fragment] Can't go back: $ise") + onBackPressedCallback.isEnabled = false + requireActivity().onBackPressed() } } } diff --git a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt index cbb8cfc85..eb47ad216 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt @@ -181,6 +181,11 @@ class ControlsFragment : GenericFragment() { } } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + onBackPressedCallback.isEnabled = false + } + override fun onStart() { super.onStart() initNumpadLayout() diff --git a/app/src/main/java/org/linphone/activities/call/fragments/StatisticsFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/StatisticsFragment.kt index 53f87f4f6..81e4a7b76 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/StatisticsFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/StatisticsFragment.kt @@ -40,4 +40,9 @@ class StatisticsFragment : GenericFragment() { viewModel = ViewModelProvider(this).get(StatisticsListViewModel::class.java) binding.viewModel = viewModel } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + onBackPressedCallback.isEnabled = false + } } diff --git a/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt index 4bf003a78..f04002642 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt @@ -71,6 +71,11 @@ class StatusFragment : GenericFragment() { }) } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + onBackPressedCallback.isEnabled = false + } + override fun onDestroy() { if (zrtpDialog != null) { zrtpDialog?.dismiss()