diff --git a/tabbar-navigation-fragment/.gitignore b/bottom-navigation-fragment/.gitignore similarity index 100% rename from tabbar-navigation-fragment/.gitignore rename to bottom-navigation-fragment/.gitignore diff --git a/tabbar-navigation-fragment/build.gradle b/bottom-navigation-fragment/build.gradle similarity index 100% rename from tabbar-navigation-fragment/build.gradle rename to bottom-navigation-fragment/build.gradle diff --git a/bottom-navigation-fragment/src/main/AndroidManifest.xml b/bottom-navigation-fragment/src/main/AndroidManifest.xml new file mode 100644 index 0000000..09792dd --- /dev/null +++ b/bottom-navigation-fragment/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationActivity.kt b/bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationActivity.kt similarity index 88% rename from tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationActivity.kt rename to bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationActivity.kt index dec1437..6565e91 100644 --- a/tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationActivity.kt +++ b/bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationActivity.kt @@ -1,4 +1,4 @@ -package ru.touchin.roboswag.components.tabbarnavigation_fragment +package ru.touchin.roboswag.bottom_navigation_fragment import android.os.Parcelable import androidx.annotation.IdRes @@ -6,13 +6,9 @@ import androidx.fragment.app.FragmentManager import ru.touchin.roboswag.navigation_base.FragmentNavigation import ru.touchin.roboswag.navigation_base.activities.NavigationActivity -/** - * Created by Daniil Borisovskii on 15/08/2019. - * Activity to manage tab container navigation. - */ abstract class BottomNavigationActivity : NavigationActivity() { - val innerNavigation: FragmentNavigation + open val innerNavigation: FragmentNavigation get() = getNavigationContainer(supportFragmentManager)?.navigation ?: navigation /** diff --git a/tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationController.kt b/bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationController.kt similarity index 98% rename from tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationController.kt rename to bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationController.kt index bc771b2..ccecf1e 100644 --- a/tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationController.kt +++ b/bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationController.kt @@ -1,4 +1,4 @@ -package ru.touchin.roboswag.components.tabbarnavigation_fragment +package ru.touchin.roboswag.bottom_navigation_fragment import android.content.Context import android.os.Bundle diff --git a/tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationFragment.kt b/bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationFragment.kt similarity index 97% rename from tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationFragment.kt rename to bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationFragment.kt index 194cb05..c23969c 100644 --- a/tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/BottomNavigationFragment.kt +++ b/bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/BottomNavigationFragment.kt @@ -1,4 +1,4 @@ -package ru.touchin.roboswag.components.tabbarnavigation_fragment +package ru.touchin.roboswag.bottom_navigation_fragment import android.os.Bundle import android.os.Parcelable diff --git a/tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/NavigationContainerFragment.kt b/bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/NavigationContainerFragment.kt similarity index 97% rename from tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/NavigationContainerFragment.kt rename to bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/NavigationContainerFragment.kt index d0d2cef..71fb9eb 100644 --- a/tabbar-navigation-fragment/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_fragment/NavigationContainerFragment.kt +++ b/bottom-navigation-fragment/src/main/java/ru/touchin/roboswag/bottom_navigation_fragment/NavigationContainerFragment.kt @@ -1,4 +1,4 @@ -package ru.touchin.roboswag.components.tabbarnavigation_fragment +package ru.touchin.roboswag.bottom_navigation_fragment import android.os.Bundle import android.os.Parcelable diff --git a/tabbar-navigation-viewcontroller/.gitignore b/bottom-navigation-viewcontroller/.gitignore similarity index 100% rename from tabbar-navigation-viewcontroller/.gitignore rename to bottom-navigation-viewcontroller/.gitignore diff --git a/tabbar-navigation-viewcontroller/README.md b/bottom-navigation-viewcontroller/README.md similarity index 100% rename from tabbar-navigation-viewcontroller/README.md rename to bottom-navigation-viewcontroller/README.md diff --git a/tabbar-navigation-viewcontroller/build.gradle b/bottom-navigation-viewcontroller/build.gradle similarity index 92% rename from tabbar-navigation-viewcontroller/build.gradle rename to bottom-navigation-viewcontroller/build.gradle index 1e40362..260741e 100644 --- a/tabbar-navigation-viewcontroller/build.gradle +++ b/bottom-navigation-viewcontroller/build.gradle @@ -16,6 +16,7 @@ android { dependencies { api project(":navigation-viewcontroller") + api project(":bottom-navigation-fragment") implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" diff --git a/bottom-navigation-viewcontroller/src/main/AndroidManifest.xml b/bottom-navigation-viewcontroller/src/main/AndroidManifest.xml new file mode 100644 index 0000000..656fcf7 --- /dev/null +++ b/bottom-navigation-viewcontroller/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/bottom-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/bottom_navigation_viewcontroller/BottomNavigationActivity.kt b/bottom-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/bottom_navigation_viewcontroller/BottomNavigationActivity.kt new file mode 100644 index 0000000..9634b43 --- /dev/null +++ b/bottom-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/bottom_navigation_viewcontroller/BottomNavigationActivity.kt @@ -0,0 +1,16 @@ +package ru.touchin.roboswag.components.tabbarnavigation + +import android.os.Parcelable +import androidx.annotation.IdRes +import androidx.fragment.app.FragmentManager +import ru.touchin.roboswag.navigation.activities.NavigationActivity +import ru.touchin.roboswag.navigation.viewcontrollers.ViewControllerNavigation +import ru.touchin.roboswag.bottom_navigation_fragment.BottomNavigationActivity as FragmentBottomNavigationActivity + +abstract class BottomNavigationActivity : FragmentBottomNavigationActivity() { + + final override val innerNavigation: ViewControllerNavigation + get() = getNavigationContainer(supportFragmentManager)?.navigation + ?: navigation as ViewControllerNavigation + +} diff --git a/navigation-base/src/main/java/ru/touchin/roboswag/navigation_base/FragmentNavigation.kt b/navigation-base/src/main/java/ru/touchin/roboswag/navigation_base/FragmentNavigation.kt index 3dc6fe0..bb43c5e 100644 --- a/navigation-base/src/main/java/ru/touchin/roboswag/navigation_base/FragmentNavigation.kt +++ b/navigation-base/src/main/java/ru/touchin/roboswag/navigation_base/FragmentNavigation.kt @@ -95,7 +95,7 @@ open class FragmentNavigation( addToStack: Boolean, args: Bundle?, backStackName: String?, - tag: String?, + tag: String? = null, transactionSetup: ((FragmentTransaction) -> Unit)? ) { if (fragmentManager.isDestroyed) { diff --git a/tabbar-navigation-fragment/src/main/AndroidManifest.xml b/tabbar-navigation-fragment/src/main/AndroidManifest.xml deleted file mode 100644 index fbf5f9f..0000000 --- a/tabbar-navigation-fragment/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/tabbar-navigation-viewcontroller/src/main/AndroidManifest.xml b/tabbar-navigation-viewcontroller/src/main/AndroidManifest.xml deleted file mode 100644 index 7c7d821..0000000 --- a/tabbar-navigation-viewcontroller/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationActivity.kt b/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationActivity.kt deleted file mode 100644 index 69679a6..0000000 --- a/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationActivity.kt +++ /dev/null @@ -1,42 +0,0 @@ -package ru.touchin.roboswag.components.tabbarnavigation - -import android.os.Parcelable -import androidx.annotation.IdRes -import androidx.fragment.app.FragmentManager -import ru.touchin.roboswag.components.navigation.activities.NavigationActivity -import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewControllerNavigation - -/** - * Created by Daniil Borisovskii on 15/08/2019. - * Activity to manage tab container navigation. - */ -abstract class BottomNavigationActivity : NavigationActivity() { - - val innerNavigation: ViewControllerNavigation - get() = getNavigationContainer(supportFragmentManager)?.navigation ?: navigation as ViewControllerNavigation - - /** - * Navigates to the given navigation tab. - * Can be called from any node of navigation graph so all back stack will be cleared. - * - * @param navigationTabId Id of navigation tab. - * @param state State of the given tab. If not null tab's fragment will be recreated, otherwise only in case it has not been created before. - */ - fun navigateTo(@IdRes navigationTabId: Int, state: Parcelable? = null) { - supportFragmentManager.run { - // Clear all navigation stack unto the main bottom navigation (tagged as top) - popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) - - (primaryNavigationFragment as? BottomNavigationFragment)?.navigateTo(navigationTabId, state) - } - } - - private fun getNavigationContainer(fragmentManager: FragmentManager?): NavigationContainerFragment? = - fragmentManager - ?.primaryNavigationFragment - ?.let { navigationFragment -> - navigationFragment as? NavigationContainerFragment - ?: getNavigationContainer(navigationFragment.childFragmentManager) - } - -} diff --git a/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationController.kt b/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationController.kt deleted file mode 100644 index 8e21e3c..0000000 --- a/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationController.kt +++ /dev/null @@ -1,127 +0,0 @@ -package ru.touchin.roboswag.components.tabbarnavigation - -import android.content.Context -import android.os.Bundle -import android.os.Parcelable -import android.util.SparseArray -import android.view.View -import android.view.ViewGroup -import androidx.annotation.IdRes -import androidx.annotation.LayoutRes -import androidx.core.util.forEach -import androidx.core.view.children -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import ru.touchin.roboswag.components.navigation.fragments.ViewControllerFragment -import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewController -import ru.touchin.roboswag.core.utils.ShouldNotHappenException - -class BottomNavigationController( - private val context: Context, - private val fragmentManager: FragmentManager, - private val viewControllers: SparseArray, - @IdRes private val contentContainerViewId: Int, - @LayoutRes private val contentContainerLayoutId: Int, - private val wrapWithNavigationContainer: Boolean = false, - @IdRes private val topLevelViewControllerId: Int = 0, // If it zero back press with empty fragment back stack would close the app - private val onReselectListener: (() -> Unit)? = null -) { - - private var callback: FragmentManager.FragmentLifecycleCallbacks? = null - - private var currentViewControllerId = -1 - - fun attach(navigationTabsContainer: ViewGroup) { - detach() - - //This is provides to set pressed tab status to isActivated providing an opportunity to specify custom style - callback = object : FragmentManager.FragmentLifecycleCallbacks() { - override fun onFragmentViewCreated(fragmentManager: FragmentManager, fragment: Fragment, view: View, savedInstanceState: Bundle?) { - viewControllers.forEach { itemId, (viewControllerClass, _) -> - if (isViewControllerFragment(fragment, viewControllerClass)) { - navigationTabsContainer.children.forEach { itemView -> itemView.isActivated = itemView.id == itemId } - } - } - } - } - fragmentManager.registerFragmentLifecycleCallbacks(callback!!, false) - - navigationTabsContainer.children.forEach { itemView -> - viewControllers[itemView.id]?.let { (viewControllerClass, _) -> - itemView.setOnClickListener { - if (!isViewControllerFragment(fragmentManager.primaryNavigationFragment, viewControllerClass)) { - navigateTo(itemView.id) - } else { - onReselectListener?.invoke() - } - } - } - } - } - - fun detach() = callback?.let(fragmentManager::unregisterFragmentLifecycleCallbacks) - - @Suppress("detekt.ComplexMethod") - fun navigateTo(@IdRes itemId: Int, state: Parcelable? = null) { - // Find view controller class that needs to open - val (viewControllerClass, defaultViewControllerState, saveStateOnSwitching) = viewControllers[itemId] ?: return - if (state != null && state::class != defaultViewControllerState::class) { - throw ShouldNotHappenException( - "Incorrect state type for navigation tab root ViewController. Should be ${defaultViewControllerState::class}" - ) - } - val viewControllerState = state ?: defaultViewControllerState - val transaction = fragmentManager.beginTransaction() - // Detach current primary fragment - fragmentManager.primaryNavigationFragment?.let(transaction::detach) - val viewControllerName = viewControllerClass.canonicalName - var fragment = fragmentManager.findFragmentByTag(viewControllerName) - - if (saveStateOnSwitching && state == null && fragment != null) { - transaction.attach(fragment) - } else { - // If fragment already exist remove it first - if (fragment != null) transaction.remove(fragment) - - fragment = if (wrapWithNavigationContainer) { - Fragment.instantiate( - context, - NavigationContainerFragment::class.java.name, - NavigationContainerFragment.args(viewControllerClass, viewControllerState, contentContainerViewId, contentContainerLayoutId) - ) - } else { - Fragment.instantiate( - context, - ViewControllerFragment::class.java.name, - ViewControllerFragment.args(viewControllerClass, viewControllerState) - ) - } - transaction.add(contentContainerViewId, fragment, viewControllerName) - } - - transaction - .setPrimaryNavigationFragment(fragment) - .setReorderingAllowed(true) - .commit() - - currentViewControllerId = itemId - } - - // When you are in any tab instead of main you firstly navigate to main tab before exit application - fun onBackPressed() = - if (fragmentManager.primaryNavigationFragment?.childFragmentManager?.backStackEntryCount == 0 - && topLevelViewControllerId != 0 - && currentViewControllerId != topLevelViewControllerId) { - navigateTo(topLevelViewControllerId) - true - } else { - false - } - - private fun isViewControllerFragment(fragment: Fragment?, viewControllerClass: Class>) = - if (wrapWithNavigationContainer) { - (fragment as NavigationContainerFragment).getViewControllerClass() - } else { - (fragment as ViewControllerFragment<*, *>).viewControllerClass - } === viewControllerClass -} diff --git a/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationFragment.kt b/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationFragment.kt deleted file mode 100644 index c1364fc..0000000 --- a/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/BottomNavigationFragment.kt +++ /dev/null @@ -1,118 +0,0 @@ -package ru.touchin.roboswag.components.tabbarnavigation - -import android.os.Bundle -import android.os.Parcel -import android.os.Parcelable -import android.util.SparseArray -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.annotation.IdRes -import androidx.fragment.app.Fragment -import ru.touchin.roboswag.components.navigation.activities.OnBackPressedListener -import ru.touchin.roboswag.components.navigation.viewcontrollers.EmptyState -import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewController - -abstract class BottomNavigationFragment : Fragment() { - - private lateinit var bottomNavigationController: BottomNavigationController - - private val backPressedListener = OnBackPressedListener { bottomNavigationController.onBackPressed() } - - protected abstract val rootLayoutId: Int - - protected abstract val navigationContainerViewId: Int - - protected abstract val contentContainerViewId: Int - - protected abstract val contentContainerLayoutId: Int - - protected abstract val topLevelViewControllerId: Int - - protected abstract val wrapWithNavigationContainer: Boolean - - protected abstract val navigationViewControllers: SparseArray - - protected open val reselectListener: (() -> Unit) = { getNavigationActivity().innerNavigation.up(inclusive = true) } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - bottomNavigationController = BottomNavigationController( - context = requireContext(), - fragmentManager = childFragmentManager, - viewControllers = navigationViewControllers, - contentContainerViewId = contentContainerViewId, - contentContainerLayoutId = contentContainerLayoutId, - topLevelViewControllerId = topLevelViewControllerId, - wrapWithNavigationContainer = wrapWithNavigationContainer, - onReselectListener = reselectListener - ) - if (savedInstanceState == null) { - bottomNavigationController.navigateTo(topLevelViewControllerId) - } - } - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - val fragmentView = inflater.inflate(rootLayoutId, container, false) - - bottomNavigationController.attach(fragmentView.findViewById(navigationContainerViewId)) - - (activity as BottomNavigationActivity).addOnBackPressedListener(backPressedListener) - - return fragmentView - } - - override fun onDestroyView() { - super.onDestroyView() - (activity as BottomNavigationActivity).removeOnBackPressedListener(backPressedListener) - bottomNavigationController.detach() - } - - fun navigateTo(@IdRes navigationTabId: Int, state: Parcelable? = null) { - bottomNavigationController.navigateTo(navigationTabId, state) - } - - private fun getNavigationActivity() = requireActivity() as BottomNavigationActivity - - class TabData( - val viewControllerClass: Class>, - viewControllerState: Parcelable, - /** - * It can be useful in some cases when it is necessary to create ViewController - * with initial state every time when tab opens. - */ - val saveStateOnSwitching: Boolean = true - ) { - - /** - * It is value as class body property instead of value as constructor parameter to specify - * custom getter of this field which returns copy of Parcelable every time it be called. - * This is necessary to avoid modifying this value if it would be a value as constructor parameter - * and every getting of this value would return the same instance. - */ - val viewControllerState = viewControllerState - get() = field.copy() - - operator fun component1() = viewControllerClass - - operator fun component2() = viewControllerState - - operator fun component3() = saveStateOnSwitching - - private fun Parcelable.copy(): Parcelable = - if (this is EmptyState) { - EmptyState - } else { - val parcel = Parcel.obtain() - parcel.writeParcelable(this, 0) - parcel.setDataPosition(0) - val result = parcel.readParcelable( - javaClass.classLoader ?: Thread.currentThread().contextClassLoader - ) ?: throw IllegalStateException("Failed to copy tab state") - parcel.recycle() - result - } - - } - -} diff --git a/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/NavigationContainerFragment.kt b/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/NavigationContainerFragment.kt deleted file mode 100644 index 7948b9e..0000000 --- a/tabbar-navigation-viewcontroller/src/main/java/ru/touchin/roboswag/components/tabbarnavigation_viewcontroller/NavigationContainerFragment.kt +++ /dev/null @@ -1,79 +0,0 @@ -package ru.touchin.roboswag.components.tabbarnavigation - -import android.os.Bundle -import android.os.Parcelable -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.annotation.IdRes -import androidx.annotation.LayoutRes -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentTransaction -import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewController -import ru.touchin.roboswag.components.navigation.viewcontrollers.ViewControllerNavigation -import ru.touchin.roboswag.core.utils.ShouldNotHappenException - -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 CONTAINER_LAYOUT_ID_ARG = "CONTAINER_LAYOUT_ID_ARG" - private const val TRANSITION_ARG = "TRANSITION_ARG" - - fun args( - cls: Class>, - state: Parcelable, - @IdRes containerViewId: Int, - @LayoutRes containerLayoutId: 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(CONTAINER_LAYOUT_ID_ARG, containerLayoutId) - putInt(TRANSITION_ARG, transition) - } - } - - val navigation by lazy { - ViewControllerNavigation( - requireContext(), - childFragmentManager, - containerViewId, - transition - ) - } - - @IdRes - private var containerViewId = 0 - - @LayoutRes - private var containerLayoutId = 0 - - private var transition = 0 - - @Suppress("UNCHECKED_CAST") - fun getViewControllerClass(): Class> = - arguments?.getSerializable(VIEW_CONTROLLER_CLASS_ARG) as Class> - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - arguments?.let { args -> - transition = args.getInt(TRANSITION_ARG) - containerViewId = args.getInt(CONTAINER_VIEW_ID_ARG) - containerLayoutId = args.getInt(CONTAINER_LAYOUT_ID_ARG) - - if (savedInstanceState == null) { - navigation.setInitialViewController(getViewControllerClass(), args.getParcelable(VIEW_CONTROLLER_STATE_ARG) - ?: throw ShouldNotHappenException("Fragment state must not be null")) - } - } ?: throw ShouldNotHappenException("Fragment is not instantiable without arguments") - } - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = - inflater.inflate(containerLayoutId, container, false) - -}