diff --git a/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/NavigationActivity.kt b/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BaseNavigationActivity.kt similarity index 90% rename from tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/NavigationActivity.kt rename to tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BaseNavigationActivity.kt index e7886d8..93022bf 100644 --- a/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/NavigationActivity.kt +++ b/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BaseNavigationActivity.kt @@ -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( + ViewControllerNavigation( this, supportFragmentManager, getContainerViewId(), diff --git a/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/MainNavigationFragment.kt b/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BaseNavigationFragment.kt similarity index 87% rename from tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/MainNavigationFragment.kt rename to tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BaseNavigationFragment.kt index 009f71e..1b60169 100644 --- a/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/MainNavigationFragment.kt +++ b/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BaseNavigationFragment.kt @@ -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 } diff --git a/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BottomNavigationController.kt b/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BottomNavigationController.kt index 1cb5163..dcfe17f 100644 --- a/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BottomNavigationController.kt +++ b/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/BottomNavigationController.kt @@ -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( diff --git a/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/NavigationContainerFragment.kt b/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/NavigationContainerFragment.kt index dd1bf70..59d75e0 100644 --- a/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/NavigationContainerFragment.kt +++ b/tabbar-navigation/src/main/java/ru/touchin/roboswag/components/tabbarnavigation/NavigationContainerFragment.kt @@ -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>, state: Parcelable) = Bundle().apply { + fun args( + cls: Class>, + 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( + ViewControllerNavigation( 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> = - arguments?.getSerializable(VIEW_CONTROLLER_CLASS_ARG) as Class> + fun getViewControllerClass(): Class> = + arguments?.getSerializable(VIEW_CONTROLLER_CLASS_ARG) as Class> 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) }