+ enum class ViewModelBringer(var isDemo: Boolean) {
+ DEMO_VIEW_MODEL_BRINGER(true) {
+ override fun <T : ViewModel> getViewModel(fragment: Fragment, modelClass: Class<T>): T {
+ val name = modelClass.name
+ "${name.substringBeforeLast(".")}.Mock${name.substringAfterLast(".")}"
+ val modelDemoClass = Class.forName(mockName) as Class<out T>
+ return ViewModelProviders.of(fragment).get(modelDemoClass)
+ } catch (e: ClassNotFoundException) {
+ return ViewModelProviders.of(fragment).get(modelClass)
+ VIEW_MODEL_BRINGER(false) {
+ override fun <T : ViewModel> getViewModel(fragment: Fragment, modelClass: Class<T>): T {
+ return ViewModelProviders.of(fragment).get(modelClass)
+ abstract fun <T : ViewModel> getViewModel(fragment: Fragment, modelClass: Class<T>): T
+ fun <T : ViewModel> getViewModel(fragment: Fragment, modelClass: Class<T>): T {
+ return getInstance(BuildConfig.IS_DEMO).getViewModel(fragment, modelClass)
+ private fun getInstance(isDemo: Boolean): ViewModelBringer {
+ if (isDemo) return ViewModelBringer.DEMO_VIEW_MODEL_BRINGER
+ else return ViewModelBringer.VIEW_MODEL_BRINGER