* Changed naming – added "Base" prefix to NavigationActivity and NavigationFragment
* Refactoring of NavigationContainerFragment – remove abstract modifier and provide necessary params
This commit is contained in:
parent
0988249dbb
commit
bff71ad795
|
|
@ -5,9 +5,9 @@ import androidx.fragment.app.FragmentTransaction
|
|||
import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewControllerNavigation
|
||||
import ru.touchin.templates.TouchinActivity
|
||||
|
||||
abstract class NavigationActivity : TouchinActivity() {
|
||||
abstract class BaseNavigationActivity : TouchinActivity() {
|
||||
val screenNavigation by lazy {
|
||||
ViewControllerNavigation<NavigationActivity>(
|
||||
ViewControllerNavigation<BaseNavigationActivity>(
|
||||
this,
|
||||
supportFragmentManager,
|
||||
getContainerViewId(),
|
||||
|
|
@ -10,7 +10,7 @@ import androidx.fragment.app.Fragment
|
|||
import ru.touchin.roboswag.components.navigation.activities.OnBackPressedListener
|
||||
import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewController
|
||||
|
||||
abstract class MainNavigationFragment : Fragment() {
|
||||
abstract class BaseNavigationFragment : Fragment() {
|
||||
|
||||
private lateinit var bottomNavigationController: BottomNavigationController
|
||||
|
||||
|
|
@ -51,17 +51,17 @@ abstract class MainNavigationFragment : Fragment() {
|
|||
|
||||
bottomNavigationController.attach(fragmentView.findViewById(getNavigationContainerId()))
|
||||
|
||||
(activity as NavigationActivity).addOnBackPressedListener(backPressedListener)
|
||||
(activity as BaseNavigationActivity).addOnBackPressedListener(backPressedListener)
|
||||
|
||||
return fragmentView
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
(activity as NavigationActivity).removeOnBackPressedListener(backPressedListener)
|
||||
(activity as BaseNavigationActivity).removeOnBackPressedListener(backPressedListener)
|
||||
bottomNavigationController.detach()
|
||||
}
|
||||
|
||||
private fun getNavigationActivity() = requireActivity() as NavigationActivity
|
||||
private fun getNavigationActivity() = requireActivity() as BaseNavigationActivity
|
||||
|
||||
}
|
||||
|
|
@ -86,7 +86,7 @@ class BottomNavigationController(
|
|||
Fragment.instantiate(
|
||||
context,
|
||||
NavigationContainerFragment::class.java.name,
|
||||
NavigationContainerFragment.args(viewControllerClass, viewControllerState)
|
||||
NavigationContainerFragment.args(viewControllerClass, viewControllerState, contentContainerViewId)
|
||||
)
|
||||
} else {
|
||||
Fragment.instantiate(
|
||||
|
|
|
|||
|
|
@ -10,44 +10,57 @@ import androidx.fragment.app.FragmentTransaction
|
|||
import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewController
|
||||
import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewControllerNavigation
|
||||
|
||||
abstract class NavigationContainerFragment : Fragment() {
|
||||
class NavigationContainerFragment : Fragment() {
|
||||
|
||||
companion object {
|
||||
private const val VIEW_CONTROLLER_CLASS_ARG = "VIEW_CONTROLLER_CLASS_ARG"
|
||||
private const val VIEW_CONTROLLER_STATE_ARG = "VIEW_CONTROLLER_STATE_ARG"
|
||||
private const val CONTAINER_VIEW_ID_ARG = "CONTAINER_VIEW_ID_ARG"
|
||||
private const val TRANSITION_ARG = "TRANSITION_ARG"
|
||||
|
||||
fun args(cls: Class<out ViewController<*, *>>, state: Parcelable) = Bundle().apply {
|
||||
fun args(
|
||||
cls: Class<out ViewController<*, *>>,
|
||||
state: Parcelable,
|
||||
containerViewId: Int,
|
||||
transition: Int = FragmentTransaction.TRANSIT_NONE
|
||||
) = Bundle().apply {
|
||||
putSerializable(VIEW_CONTROLLER_CLASS_ARG, cls)
|
||||
putParcelable(VIEW_CONTROLLER_STATE_ARG, state)
|
||||
putInt(CONTAINER_VIEW_ID_ARG, containerViewId)
|
||||
putInt(TRANSITION_ARG, transition)
|
||||
}
|
||||
}
|
||||
|
||||
val navigation by lazy {
|
||||
ViewControllerNavigation<NavigationActivity>(
|
||||
ViewControllerNavigation<BaseNavigationActivity>(
|
||||
requireContext(),
|
||||
childFragmentManager,
|
||||
getContainerViewId(),
|
||||
getTransition()
|
||||
containerViewId,
|
||||
transition
|
||||
)
|
||||
}
|
||||
|
||||
abstract fun getContainerViewId(): Int
|
||||
private var containerViewId = 0
|
||||
|
||||
open fun getTransition() = FragmentTransaction.TRANSIT_NONE
|
||||
private var transition = 0
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun getViewControllerClass(): Class<out ViewController<out NavigationActivity, Parcelable>> =
|
||||
arguments?.getSerializable(VIEW_CONTROLLER_CLASS_ARG) as Class<out ViewController<out NavigationActivity, Parcelable>>
|
||||
fun getViewControllerClass(): Class<out ViewController<out BaseNavigationActivity, Parcelable>> =
|
||||
arguments?.getSerializable(VIEW_CONTROLLER_CLASS_ARG) as Class<out ViewController<out BaseNavigationActivity, Parcelable>>
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
if (savedInstanceState == null) {
|
||||
val args = arguments ?: return
|
||||
with(args) {
|
||||
containerViewId = getInt(CONTAINER_VIEW_ID_ARG)
|
||||
transition = getInt(TRANSITION_ARG)
|
||||
}
|
||||
navigation.setInitialViewController(getViewControllerClass(), args.getParcelable(VIEW_CONTROLLER_STATE_ARG))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
|
||||
inflater.inflate(getContainerViewId(), container, false)
|
||||
inflater.inflate(containerViewId, container, false)
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue