Fixed crash when going back while on call Activity

This commit is contained in:
Sylvain Berfini 2021-08-12 21:30:08 +02:00
parent 86d5991fa9
commit 30009e56fa
4 changed files with 27 additions and 5 deletions

View file

@ -29,12 +29,13 @@ import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.core.tools.Log
abstract class GenericFragment<T : ViewDataBinding> : Fragment() { abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
private var _binding: T? = null private var _binding: T? = null
protected val binding get() = _binding!! protected val binding get() = _binding!!
private val onBackPressedCallback = object : OnBackPressedCallback(true) { protected val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() { override fun handleOnBackPressed() {
goBack() goBack()
} }
@ -63,11 +64,17 @@ abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
} }
protected open fun goBack() { protected open fun goBack() {
try {
if (!findNavController().popBackStack()) { if (!findNavController().popBackStack()) {
if (!findNavController().navigateUp()) { if (!findNavController().navigateUp()) {
onBackPressedCallback.isEnabled = false onBackPressedCallback.isEnabled = false
requireActivity().onBackPressed() requireActivity().onBackPressed()
} }
} }
} catch (ise: IllegalStateException) {
Log.e("[Generic Fragment] Can't go back: $ise")
onBackPressedCallback.isEnabled = false
requireActivity().onBackPressed()
}
} }
} }

View file

@ -181,6 +181,11 @@ class ControlsFragment : GenericFragment<CallControlsFragmentBinding>() {
} }
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
onBackPressedCallback.isEnabled = false
}
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
initNumpadLayout() initNumpadLayout()

View file

@ -40,4 +40,9 @@ class StatisticsFragment : GenericFragment<CallStatisticsFragmentBinding>() {
viewModel = ViewModelProvider(this).get(StatisticsListViewModel::class.java) viewModel = ViewModelProvider(this).get(StatisticsListViewModel::class.java)
binding.viewModel = viewModel binding.viewModel = viewModel
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
onBackPressedCallback.isEnabled = false
}
} }

View file

@ -71,6 +71,11 @@ class StatusFragment : GenericFragment<CallStatusFragmentBinding>() {
}) })
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
onBackPressedCallback.isEnabled = false
}
override fun onDestroy() { override fun onDestroy() {
if (zrtpDialog != null) { if (zrtpDialog != null) {
zrtpDialog?.dismiss() zrtpDialog?.dismiss()