view controller fixes

This commit is contained in:
alex 2020-06-04 19:30:45 +03:00
parent 372750eee4
commit bd9accacaa
7 changed files with 30 additions and 11 deletions

View File

@ -20,8 +20,9 @@ android {
}
dependencies {
api project(":navigation-viewcontroller")
api project(":bottom-navigation-base")
implementation project(":navigation-base")
implementation project(":navigation-viewcontroller")
implementation project(":bottom-navigation-base")
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

View File

@ -1,6 +1,6 @@
package ru.touchin.roboswag.bottom_navigation_viewcontroller
import ru.touchin.roboswag.bottom_navigation_fragment.BaseBottomNavigationActivity
import ru.touchin.roboswag.bottom_navigation_base.BaseBottomNavigationActivity
import ru.touchin.roboswag.navigation_viewcontroller.viewcontrollers.ViewControllerNavigation
abstract class BottomNavigationActivity :

View File

@ -6,7 +6,7 @@ import androidx.annotation.IdRes
import androidx.annotation.LayoutRes
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import ru.touchin.roboswag.bottom_navigation_fragment.BaseBottomNavigationController
import ru.touchin.roboswag.bottom_navigation_base.BaseBottomNavigationController
import ru.touchin.roboswag.navigation_viewcontroller.fragments.ViewControllerFragment
class BottomNavigationController(

View File

@ -1,6 +1,6 @@
package ru.touchin.roboswag.bottom_navigation_viewcontroller
import ru.touchin.roboswag.bottom_navigation_fragment.BaseBottomNavigationFragment
import ru.touchin.roboswag.bottom_navigation_base.BaseBottomNavigationFragment
abstract class BottomNavigationFragment : BaseBottomNavigationFragment<NavigationTab>() {

View File

@ -1,7 +1,7 @@
package ru.touchin.roboswag.bottom_navigation_viewcontroller
import android.os.Parcelable
import ru.touchin.roboswag.bottom_navigation_fragment.BaseNavigationContainerFragment
import ru.touchin.roboswag.bottom_navigation_base.BaseNavigationContainerFragment
import ru.touchin.roboswag.navigation_viewcontroller.viewcontrollers.ViewController
import ru.touchin.roboswag.navigation_viewcontroller.viewcontrollers.ViewControllerNavigation

View File

@ -1,7 +1,7 @@
package ru.touchin.roboswag.bottom_navigation_viewcontroller
import android.os.Parcelable
import ru.touchin.roboswag.bottom_navigation_fragment.BaseNavigationTab
import ru.touchin.roboswag.bottom_navigation_base.BaseNavigationTab
import ru.touchin.roboswag.navigation_viewcontroller.viewcontrollers.ViewController
class NavigationTab(

View File

@ -2,13 +2,34 @@ package ru.touchin.lifecycle_viewcontroller.viewmodel
import android.app.Activity
import androidx.fragment.app.Fragment
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelProviders
import ru.touchin.lifecycle.viewmodel.BaseLifecycleViewModelProviders
import ru.touchin.lifecycle.viewmodel.ViewModelFactoryProvider
import ru.touchin.roboswag.navigation_viewcontroller.viewcontrollers.ViewController
object LifecycleViewModelProviders : BaseLifecycleViewModelProviders() {
/**
* Creates a {@link ViewModelProvider}, which retains ViewModels while a scope of given
* {@code lifecycleOwner} is alive. More detailed explanation is in {@link ViewModel}.
* <p>
* It uses the given {@link Factory} to instantiate new ViewModels.
*
* @param lifecycleOwner a lifecycle owner, in whose scope ViewModels should be retained (ViewController, Fragment, Activity)
* @param factory a {@code Factory} to instantiate new ViewModels
* @return a ViewModelProvider instance
*/
override fun of(
lifecycleOwner: LifecycleOwner,
factory: ViewModelProvider.Factory
): ViewModelProvider =
when (lifecycleOwner) {
is ViewController<*, *> -> ViewModelProviders.of(lifecycleOwner.fragment, factory)
else -> super.of(lifecycleOwner, factory)
}
/**
* Returns ViewModelProvider.Factory instance from current lifecycleOwner.
* Search #ViewModelFactoryProvider are produced according to priorities:
@ -20,11 +41,8 @@ object LifecycleViewModelProviders : BaseLifecycleViewModelProviders() {
*/
override fun getViewModelFactory(provider: Any): ViewModelProvider.Factory =
when (provider) {
is ViewModelFactoryProvider -> provider.viewModelFactory
is ViewController<*, *> -> getViewModelFactory(provider.fragment)
is Fragment -> getViewModelFactory(provider.parentFragment ?: provider.requireActivity())
is Activity -> getViewModelFactory(provider.application)
else -> throw IllegalArgumentException("View model factory not found.")
else -> super.getViewModelFactory(provider)
}
}