Skip to content

Instantly share code, notes, and snippets.

View ch8n's full-sized avatar
💻
Always on to writing my next article.

Chetan Gupta ch8n

💻
Always on to writing my next article.
View GitHub Profile

FWIW: I'm not the author of the content presented here (which is an outline from Edmond Lau's book). I've just copy-pasted it from somewhere over the Internet, but I cannot remember what exactly the original source is. I was also not able to find the author's name, so I cannot give him/her the proper credits.


Effective Engineer - Notes

What's an Effective Engineer?

@ch8n
ch8n / hilt_module.kt
Created September 22, 2020 05:36
for medium article
@Module
@InstallIn(ApplicationComponent::class)
object NetworkResolver {
@Provides
@Singleton
fun provideApiManager(retrofit: Retrofit) = ApiManager(retrofit)
....
}
@ch8n
ch8n / dagger_inject.kt
Last active December 12, 2020 13:50
for medium article
class MovieDetailActivity : AppCompatActivity() {
@Inject
internal laterinit var viewmodel: MovieViewModel
override fun onCreate(savedInstanceState: Bundle?) {
...
// viewmodel = Injector.detailViewModel(this) remove this line
...// viewModle is ready to be used...
}
@ch8n
ch8n / dagger_appcomponent.kt
Created September 22, 2020 05:02
for medium article
@Singleton
@Component(
modules = arrayOf(
AndroidSupportInjectionModule::class,
//..add here
NetworkResolver::class,
AppResolver::class,
ViewModelResolver::class
)
@ch8n
ch8n / dagger_module.kt
Created September 22, 2020 04:59
for medium article
@Module
object NetworkResolver {
@Provides
@Singleton
fun provideApiManager(retrofit: Retrofit) = ApiManager(retrofit)
....
}
@ch8n
ch8n / multi_module_injector.kt
Created September 22, 2020 04:57
for medium article
// your core injectores need to have public all public fields
------- Domain Injection -------
// in searchmovie Domain module build.gradle
dependencies {
implementation project(":core")
}
class SearchMovieApiManager(private val retrofit : Retrofit) {
@ch8n
ch8n / scope_injector.kt
Created September 22, 2020 04:55
for medium article
// you can remove `detailViewModel()` from injector and add it into a scoped e
// DI packag inside of your feature.
object MovieDetailInjector {
fun detailViewModel(activity: AppCompatActivity) : MovieDetailViewModel {
return ViewModelResolver.provideDetailViewModel(
Injector.detailViewModelFactory, activity
)
}
}
@ch8n
ch8n / Activty_sample.kt
Created September 22, 2020 04:52
for medium article
class MovieDetailActivity : AppCompatActivity() {
private laterinit var viewmodel: MovieViewModel
override fun onCreate(savedInstanceState: Bundle?) {
...
viewmodel = Injector.detailViewModel(this)
...// viewModle is ready to be used...
}
}
@ch8n
ch8n / Injector.kt
Created September 22, 2020 04:50
for medium article
object Injector {
// step 7, okhttp and baseURL is standalone
private val okHttp = NetworkResolver.provideOkHttpClient()
private val baseURL = NetworkResolver.provideBaseURL()
// step 6, retrofit needs okhttp object and baseURL
private val retrofit = NetworkResolver.provideRetrofitClient(
baseURl,
@ch8n
ch8n / viewmodel_resolver.kt
Created September 22, 2020 04:48
for medium article
object ViewModelResolver {
// step 1, we need a viewmodel which is creted by ViewmodelProviders
fun provideDetailViewModel():MovieDetailViewModel = ViewModelProviders
.of(??, ??)
.get(MovieDetailViewModel::class.java)
// step 2, add dependencies of ViewmodelProviders,
// we have used added fragment Activty, so that we can support
// multiple activities not just MovieDetail activity