Skip to content

Instantly share code, notes, and snippets.

View mladenrakonjac's full-sized avatar

Mladen Rakonjac mladenrakonjac

  • Infinum
  • Montenegro
View GitHub Profile
public void loginMethod(String name, String password){
if (isEmpty(name)) {
editName.setError("Username is empty");
return;
}
if (isEmpty(password)) {
editPasword.setError("Password is empty");
return;
}
class MainActivity : DaggerAppCompatActivity(), RepositoryRecyclerViewAdapter.OnItemClickListener {
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
override fun onCreate(savedInstanceState: Bundle?) {
...
val viewModel = ViewModelProviders.of(this, viewModelFactory)
.get(MainViewModel::class.java)
...
@Module
internal abstract class MainActivityModule {
@ContributesAndroidInjector
internal abstract fun mainActivity(): MainActivity
@Binds
@IntoMap
@ViewModelKey(MainViewModel::class)
abstract fun bindMainViewModel(viewModel: MainViewModel): ViewModel
class MainViewModel @Inject constructor(var gitRepoRepository: GitRepoRepository) : ViewModel() {
...
}
@Singleton
@Component(
modules = [AndroidSupportInjectionModule::class,
AppModule::class,
ViewModelBuilder::class,
MainActivityModule::class])
interface AppComponent : AndroidInjector<ModernApplication> {
@Component.Builder
abstract class Builder : AndroidInjector.Builder<ModernApplication>()
@Component(
modules = [AndroidSupportInjectionModule::class,
AppModule::class,
MainActivityModule::class])
interface AppComponent : AndroidInjector<ModernApplication> {
@Component.Builder
abstract class Builder : AndroidInjector.Builder<ModernApplication>()
}
@Module
internal abstract class ViewModelBuilder {
@Binds
internal abstract fun bindViewModelFactory(factory: DaggerAwareViewModelFactory):
ViewModelProvider.Factory
}
class DaggerAwareViewModelFactory @Inject constructor(
private val creators: @JvmSuppressWildcards Map<Class<out ViewModel>, Provider<ViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
var creator: Provider<out ViewModel>? = creators[modelClass]
if (creator == null) {
for ((key, value) in creators) {
if (modelClass.isAssignableFrom(key)) {
creator = value
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
@Retention(AnnotationRetention.RUNTIME)
@MapKey
annotation class ViewModelKey(val value: KClass<out ViewModel>)
class MainActivity : DaggerAppCompatActivity(), RepositoryRecyclerViewAdapter.OnItemClickListener {
...
@Inject lateinit var mainViewModelFactory: MainViewModelFactory
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewModel = ViewModelProviders.of(this, mainViewModelFactory)
.get(MainViewModel::class.java)
...