mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-30 02:09:20 +00:00
Simplified generic fragment logic for going back
This commit is contained in:
parent
b6f8fb3354
commit
5845c079cb
11 changed files with 35 additions and 86 deletions
|
|
@ -66,10 +66,10 @@ class CallFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
override fun goBack(): Boolean {
|
||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||
// If not done, when going back to CallsFragment this fragment will be created again
|
||||
findNavController().popBackStack()
|
||||
return findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.core.view.doOnPreDraw
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.navGraphViewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
|
|
@ -94,10 +93,6 @@ class StartCallFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
postponeEnterTransition()
|
||||
|
|
|
|||
|
|
@ -71,10 +71,10 @@ class ContactFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
override fun goBack(): Boolean {
|
||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||
// If not done, when going back to ContactsFragment this fragment will be created again
|
||||
findNavController().popBackStack()
|
||||
return findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ import androidx.core.view.doOnPreDraw
|
|||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import androidx.navigation.navGraphViewModels
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
@ -89,10 +88,6 @@ class EditContactFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
postponeEnterTransition()
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ import androidx.annotation.UiThread
|
|||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.navGraphViewModels
|
||||
import kotlinx.coroutines.launch
|
||||
import org.linphone.BR
|
||||
|
|
@ -95,10 +94,6 @@ class NewContactFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
|
|
|
|||
|
|
@ -60,9 +60,6 @@ class DrawerMenuFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ package org.linphone.ui.main.fragment
|
|||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.fragment.app.Fragment
|
||||
|
|
@ -41,18 +40,29 @@ abstract class GenericFragment : Fragment() {
|
|||
|
||||
private val onBackPressedCallback = object : OnBackPressedCallback(false) {
|
||||
override fun handleOnBackPressed() {
|
||||
Log.d("$TAG ${getFragmentRealClassName()} handleOnBackPressed")
|
||||
try {
|
||||
val navController = findNavController()
|
||||
Log.d("$TAG ${getFragmentRealClassName()} handleOnBackPressed")
|
||||
if (!navController.popBackStack()) {
|
||||
Log.d("$TAG ${getFragmentRealClassName()} couldn't pop")
|
||||
if (!navController.navigateUp()) {
|
||||
Log.d(
|
||||
"$TAG ${getFragmentRealClassName()} couldn't navigate up"
|
||||
)
|
||||
// Disable this callback & start a new back press event
|
||||
isEnabled = false
|
||||
goBack()
|
||||
if (!goBack()) {
|
||||
Log.d(
|
||||
"$TAG ${getFragmentRealClassName()}'s goBack() method returned false, trying other things"
|
||||
)
|
||||
val navController = findNavController()
|
||||
if (!navController.popBackStack()) {
|
||||
Log.d("$TAG ${getFragmentRealClassName()} couldn't pop")
|
||||
if (!navController.navigateUp()) {
|
||||
Log.d(
|
||||
"$TAG ${getFragmentRealClassName()} couldn't navigate up"
|
||||
)
|
||||
// Disable this callback & start a new back press event
|
||||
isEnabled = false
|
||||
try {
|
||||
requireActivity().onBackPressedDispatcher.onBackPressed()
|
||||
} catch (ise: IllegalStateException) {
|
||||
Log.w(
|
||||
"$TAG ${getFragmentRealClassName()}.goBack() can't go back: $ise"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ise: IllegalStateException) {
|
||||
|
|
@ -71,13 +81,13 @@ abstract class GenericFragment : Fragment() {
|
|||
}
|
||||
|
||||
sharedViewModel.isSlidingPaneSlideable.observe(viewLifecycleOwner) {
|
||||
Log.d(
|
||||
"$TAG ${getFragmentRealClassName()} shared main VM sliding pane has changed"
|
||||
)
|
||||
onBackPressedCallback.isEnabled = backPressedCallBackEnabled()
|
||||
}
|
||||
|
||||
setupBackPressCallback()
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
onBackPressedCallback
|
||||
)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
|
@ -90,33 +100,14 @@ abstract class GenericFragment : Fragment() {
|
|||
return this.javaClass.name
|
||||
}
|
||||
|
||||
protected open fun goBack() {
|
||||
protected open fun goBack(): Boolean {
|
||||
try {
|
||||
requireActivity().onBackPressedDispatcher.onBackPressed()
|
||||
} catch (ise: IllegalStateException) {
|
||||
Log.w("$TAG ${getFragmentRealClassName()}.goBack() can't go back: $ise")
|
||||
onBackPressedCallback.handleOnBackPressed()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupBackPressCallback() {
|
||||
Log.d("$TAG ${getFragmentRealClassName()} setupBackPressCallback")
|
||||
|
||||
val backButton = view?.findViewById<ImageView>(R.id.back)
|
||||
if (backButton != null && backButton.visibility == View.VISIBLE) {
|
||||
Log.d("$TAG ${getFragmentRealClassName()} found back button")
|
||||
// If popping navigation back stack entry would bring us to an "empty" fragment
|
||||
// then don't do it if sliding pane layout isn't "flat"
|
||||
onBackPressedCallback.isEnabled = backPressedCallBackEnabled()
|
||||
backButton.setOnClickListener { goBack() }
|
||||
} else {
|
||||
onBackPressedCallback.isEnabled = false
|
||||
}
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
onBackPressedCallback
|
||||
)
|
||||
return true
|
||||
}
|
||||
|
||||
private fun backPressedCallBackEnabled(): Boolean {
|
||||
|
|
@ -129,12 +120,8 @@ abstract class GenericFragment : Fragment() {
|
|||
Log.d(
|
||||
"$TAG ${getFragmentRealClassName()} isSlidingPaneFlat ? $isSlidingPaneFlat"
|
||||
)
|
||||
val isPreviousFragmentEmpty = findNavController().previousBackStackEntry?.destination?.id == R.id.emptyFragment
|
||||
Log.d(
|
||||
"$TAG ${getFragmentRealClassName()} isPreviousFragmentEmpty ? $isPreviousFragmentEmpty"
|
||||
)
|
||||
val popBackStack = isSlidingPaneFlat || !isPreviousFragmentEmpty
|
||||
Log.d("$TAG ${getFragmentRealClassName()} popBackStack ? $popBackStack")
|
||||
return popBackStack
|
||||
if (isSlidingPaneFlat) return false
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import org.linphone.databinding.RecordingsFragmentBinding
|
||||
import org.linphone.ui.main.fragment.GenericFragment
|
||||
|
||||
|
|
@ -21,10 +20,6 @@ class RecordingsFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
binding.lifecycleOwner = viewLifecycleOwner
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import androidx.activity.result.contract.ActivityResultContracts
|
|||
import androidx.annotation.UiThread
|
||||
import androidx.core.view.doOnPreDraw
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import androidx.navigation.navGraphViewModels
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
@ -62,10 +61,6 @@ class AccountProfileFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
postponeEnterTransition()
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import org.linphone.databinding.HelpFragmentBinding
|
||||
import org.linphone.ui.main.fragment.GenericFragment
|
||||
|
||||
|
|
@ -22,10 +21,6 @@ class HelpFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
binding.lifecycleOwner = viewLifecycleOwner
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import org.linphone.databinding.SettingsFragmentBinding
|
||||
import org.linphone.ui.main.fragment.GenericFragment
|
||||
|
||||
|
|
@ -22,10 +21,6 @@ class SettingsFragment : GenericFragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
override fun goBack() {
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
binding.lifecycleOwner = viewLifecycleOwner
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue