Skip to content

Instantly share code, notes, and snippets.

@guuilp
Created May 25, 2018 03:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save guuilp/7084e32ffb0c9ff4712d247515f494aa to your computer and use it in GitHub Desktop.
Save guuilp/7084e32ffb0c9ff4712d247515f494aa to your computer and use it in GitHub Desktop.
Dagger 2
@Component(modules = [RepositoryModule::class])
interface LanchoneteComponent {
fun inject(app: MainActivity)
}
class MainActivity : AppCompatActivity(), MainContract.View {
@Inject override lateinit var presenter: MainContract.Presenter
@Inject lateinit var repository: LanchoneteRepository
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
DaggerLanchoneteComponent.builder()
.repositoryModule(RepositoryModule(this))
.build()
.inject(this)
presenter.start()
}
}
class MainPresenter @Inject constructor(val lanchoneteRepository: LanchoneteRepository,
val mainView: MainContract.View) : MainContract.Presenter{
override fun start() {
loadIngredientesELanches()
}
fun loadIngredientesELanches(){
lanchoneteRepository.listaDeIngredientes(object: LanchoneteDataSource.ListaDeIngredientesCallback{
override fun onListaDeIngredientesSuccess(listaDeIngredientes: List<Ingrediente>) {
loadLanches(listaDeIngredientes)
}
override fun onListaDeIngredientesError() {
mainView.showAPIIngredienteError()
}
})
}
fun loadLanches(listaDeIngredientes: List<Ingrediente>){
lanchoneteRepository.listaDeLanches(object: LanchoneteDataSource.ListaDeLanchesCallback{
override fun onListaDeLanchesSuccess(listaDeLanches: List<Lanche>) {
val listaDeLanchesComPreco = lanchoneteRepository.atualizaListaComPrecoEIngrediente(listaDeLanches, listaDeIngredientes)
mainView.getLanchesEIngredientes(listaDeIngredientes, listaDeLanchesComPreco)
}
override fun onListaDeLanchesError() {
mainView.showAPILancheError()
}
})
}
}
@Module
class RepositoryModule(private var view: MainContract.View) {
@Provides
fun providesLanchoneteRemoteDataSource(): LanchoneteDataSource{
return LanchoneteRemoteDataSource
}
@Provides
fun providesLanchoneteRepository(dataSource: LanchoneteDataSource): LanchoneteRepository{
return LanchoneteRepository(dataSource)
}
@Provides
fun providesMainView(): MainContract.View{
return view
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment