Slide 14
Slide 14 text
//Android Architecture Blueprints todo-mvvm-live
public class ViewModelFactory extends ViewModelProvider.NewInstanceFactory {
private static volatile ViewModelFactory INSTANCE;
private final Application mApplication;
private final TasksRepository mTasksRepository;
public static ViewModelFactory getInstance(Application application) {
if (INSTANCE == null) {
synchronized (ViewModelFactory.class) {
if (INSTANCE == null) {
INSTANCE = new ViewModelFactory(application, Injection.provideTasksRepository(application.getApplicationContext()));
}
}
}
return INSTANCE;
}
private ViewModelFactory(Application application, TasksRepository repository) {
mApplication = application;
mTasksRepository = repository;
}
@Override
public T create(Class modelClass) {
if (modelClass.isAssignableFrom(StatisticsViewModel.class)) {
return (T) new StatisticsViewModel(mApplication, mTasksRepository);
} else if (modelClass.isAssignableFrom(TaskDetailViewModel.class)) {
return (T) new TaskDetailViewModel(mApplication, mTasksRepository);
} else if (modelClass.isAssignableFrom(AddEditTaskViewModel.class)) {
return (T) new AddEditTaskViewModel(mApplication, mTasksRepository);
} else if (modelClass.isAssignableFrom(TasksViewModel.class)) {
return (T) new TasksViewModel(mApplication, mTasksRepository);
}
throw new IllegalArgumentException("Unknown ViewModel class: " + modelClass.getName());
}
}