* Changed naming – added "Base" prefix to NavigationActivity and NavigationFragment

* Refactoring of NavigationContainerFragment – remove abstract modifier and provide necessary params
This commit is contained in:
Daniil Borisovskii 2019-08-15 11:18:59 +03:00
parent 0988249dbb
commit bff71ad795
4 changed files with 30 additions and 17 deletions

View File

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

View File

@ -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
}

View File

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

View File

@ -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)
}