package com.mindorks.framework.mvvm; import android.arch.lifecycle.ViewModel; import android.arch.lifecycle.ViewModelProvider; import com.mindorks.framework.mvvm.data.DataManager; import com.mindorks.framework.mvvm.ui.about.AboutViewModel; import com.mindorks.framework.mvvm.ui.feed.FeedViewModel; import com.mindorks.framework.mvvm.ui.feed.blogs.BlogViewModel; import com.mindorks.framework.mvvm.ui.feed.opensource.OpenSourceViewModel; import com.mindorks.framework.mvvm.ui.login.LoginViewModel; import com.mindorks.framework.mvvm.ui.main.MainViewModel; import com.mindorks.framework.mvvm.ui.main.rating.RateUsViewModel; import com.mindorks.framework.mvvm.ui.splash.SplashViewModel; import com.mindorks.framework.mvvm.utils.rx.SchedulerProvider; import javax.inject.Inject; /** * Created by jyotidubey on 22/02/19. */ public class ViewModelProviderFactory extends ViewModelProvider.NewInstanceFactory { private final DataManager dataManager; private final SchedulerProvider schedulerProvider; @Inject public ViewModelProviderFactory(DataManager dataManager, SchedulerProvider schedulerProvider) { this.dataManager = dataManager; this.schedulerProvider = schedulerProvider; } @Override public T create(Class modelClass) { if (modelClass.isAssignableFrom(AboutViewModel.class)) { //noinspection unchecked return (T) new AboutViewModel(dataManager,schedulerProvider); } else if (modelClass.isAssignableFrom(FeedViewModel.class)) { //noinspection unchecked return (T) new FeedViewModel(dataManager,schedulerProvider); } else if (modelClass.isAssignableFrom(LoginViewModel.class)) { //noinspection unchecked return (T) new LoginViewModel(dataManager,schedulerProvider); } else if (modelClass.isAssignableFrom(MainViewModel.class)) { //noinspection unchecked return (T) new MainViewModel(dataManager,schedulerProvider); } else if (modelClass.isAssignableFrom(BlogViewModel.class)) { //noinspection unchecked return (T) new BlogViewModel(dataManager,schedulerProvider); } else if (modelClass.isAssignableFrom(RateUsViewModel.class)) { //noinspection unchecked return (T) new RateUsViewModel(dataManager,schedulerProvider); } else if (modelClass.isAssignableFrom(OpenSourceViewModel.class)) { //noinspection unchecked return (T) new OpenSourceViewModel(dataManager,schedulerProvider); } else if (modelClass.isAssignableFrom(SplashViewModel.class)) { //noinspection unchecked return (T) new SplashViewModel(dataManager,schedulerProvider); } throw new IllegalArgumentException("Unknown ViewModel class: " + modelClass.getName()); } }