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()