Skip to content

Instantly share code, notes, and snippets.

View catalinghita8's full-sized avatar

Catalin Ghita catalinghita8

View GitHub Profile
@AppScoped
public class MessageViewModel extends ViewModel{
@NonNull
private final MessageRepository mRepository;
@Inject
public MessageViewModel(@NonNull MessageRepository repository) {
this.mRepository = repository;
}
@Module
public abstract class MessageModule {
@FragmentScoped
@ContributesAndroidInjector
abstract MessageFragment messageFragment();
}
@ActivityScoped
public class MessageFragment extends DaggerFragment implements BaseView {
private TextView mMessageTextView;
private MessageViewModel mViewModel;
@Inject
ViewModelProvider.Factory viewModelFactory;
@Inject
@Module
public abstract class ActivityBindingModule {
@ActivityScoped
@ContributesAndroidInjector(modules = {QuakesModule.class})
abstract QuakesActivity ratesActivity();
}
public interface BaseView {
void bindViewModel();
void unbindViewModel();
}
@Module
public abstract class ActivityBindingModule {
@ActivityScoped
@ContributesAndroidInjector(modules = {MessageModule.class})
abstract MessageActivity messageActivity();
}
@Documented
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface AppScoped {
}
@AppScoped
@Component(modules = {ViewModelModule.class,
AppModule.class,
ActivityBindingModule.class,
AndroidSupportInjectionModule.class})
public interface AppComponent extends AndroidInjector<Application> {
@Component.Builder
interface Builder {
@BindsInstance
@Module
public abstract class AppModule {
// expose Application as an injectable context
@Binds
abstract Context bindContext(Application application);
}
public class Application extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent.builder().application(this).build();
}
}