// from https://proandroiddev.com/viewmodel-with-dagger2-architecture-components-2e06f06c9455 package com.keylesspalace.tusky.di import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.keylesspalace.tusky.viewmodel.AccountViewModel import com.keylesspalace.tusky.viewmodel.EditProfileViewModel import dagger.Binds import dagger.MapKey import dagger.Module import dagger.multibindings.IntoMap import javax.inject.Inject import javax.inject.Provider import javax.inject.Singleton import kotlin.reflect.KClass @Singleton class ViewModelFactory @Inject constructor(private val viewModels: MutableMap, Provider>) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T = viewModels[modelClass]?.get() as T } @Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) @kotlin.annotation.Retention(AnnotationRetention.RUNTIME) @MapKey internal annotation class ViewModelKey(val value: KClass) @Module abstract class ViewModelModule { @Binds internal abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory @Binds @IntoMap @ViewModelKey(AccountViewModel::class) internal abstract fun accountViewModel(viewModel: AccountViewModel): ViewModel @Binds @IntoMap @ViewModelKey(EditProfileViewModel::class) internal abstract fun editProfileViewModel(viewModel: EditProfileViewModel): ViewModel //Add more ViewModels here }