Teases apart ViewModel dependencies (#2499)
* No Issue - pulls render outside of the viewmodel * No Issue - Properly subscribes to the changesObservable * No Issue - Fixes ViewModel testsnightly-build-test
parent
0143c54817
commit
c5e5ef4b25
@ -0,0 +1,35 @@
|
|||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package org.mozilla.fenix
|
||||||
|
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import androidx.lifecycle.ViewModelProviders
|
||||||
|
import org.mozilla.fenix.mvi.ViewState
|
||||||
|
import org.mozilla.fenix.mvi.Change
|
||||||
|
import org.mozilla.fenix.mvi.UIComponentViewModelBase
|
||||||
|
import org.mozilla.fenix.mvi.UIComponentViewModelProvider
|
||||||
|
|
||||||
|
object FenixViewModelProvider {
|
||||||
|
fun <S : ViewState, C : Change, T : UIComponentViewModelBase<S, C>> create(
|
||||||
|
fragment: Fragment,
|
||||||
|
modelClass: Class<T>,
|
||||||
|
viewModelCreator: () -> T
|
||||||
|
): UIComponentViewModelProvider<S, C> {
|
||||||
|
val factory = object : ViewModelProvider.Factory {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
|
||||||
|
return viewModelCreator() as T
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return object : UIComponentViewModelProvider<S, C> {
|
||||||
|
override fun fetchViewModel(): T {
|
||||||
|
return ViewModelProviders.of(fragment, factory).get(modelClass)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue