Skip to content

Instantly share code, notes, and snippets.

View ericntd's full-sized avatar

Eric Nguyen ericntd

View GitHub Profile
@ericntd
ericntd / DaggerAliases.kt
Created January 1, 2022 21:51
Dagger naming sanity
package app.ericn.daggerplain
import dagger.Component
import dagger.Module
import dagger.Subcomponent
import javax.inject.Inject
import javax.inject.Singleton
typealias AppScope = Singleton
/**
* For automatic service discovery or provision outside of [DependencyHolder]/ Module
@ericntd
ericntd / SomeFragment.kt
Created January 1, 2022 20:36
Generic ViewModel Factory usage
@Inject
lateinit var viewModelFactory: GenericViewModelFactory<WeatherViewModel>
private val viewModel: WeatherViewModel by lazy {
ViewModelProvider(this, viewModelFactory).get(WeatherViewModel::class.java)
}
@ericntd
ericntd / viewmodel-and-factory.md
Last active January 1, 2022 20:42
ViewModel and Generic ViewModel Factory

The ViewModel

class WeatherViewModel @Inject constructor(
    private val currentInteractor: CurrentWeatherInteractor,
    // ...
): ViewModel() {}

GenericViewModelFactory

@ericntd
ericntd / process-proguard-mapping.md
Created October 18, 2021 21:31
Process Proguard's mapping.txt
val mappingReader = File("/Users/ericn/tmp/algo/kotlin/src/matching_logs/mapping.txt").bufferedReader()
    val mappingTree = BinarySearchTree("com.myawesomeapp.ghafaewafe") // hopefully the tree will be balance
    mappingReader.lines().forEach {
        if (it.startsWith("com.myawesomeapp") && !it.contains("$") && !it.contains("_")) {
            val arrowIndex = it.indexOf("->")
            mappingTree.insert(it.substring(0, arrowIndex - 1))
        }
    }
@ericntd
ericntd / feature-view-module-scoped.kt
Created September 9, 2021 17:42
Feature View module with scope
@Module
class SomeFeatureViewModule() {
@Provides
@SomeFeatureViewScope
fun clickSubject() = PublishSubject.create<Unit>()
@Provides
@SomeFeatureViewScope
fun clickReadStream(clickSubject: PublishSubject<Unit>): Observable<Unit> = subject.throttleFirst(500L, TimeUnit.MILLISECONDS)
@ericntd
ericntd / feature-view-module-unscoped.kt
Last active September 9, 2021 17:36
Upscoped click subject in a feature view module
@Module
class SomeFeatureViewModule() {
@Provides
fun clickSubject() = PublishSubject.create<Unit>()
@Provides
fun clickReadStream(clickSubject: PublishSubject<Unit>): Observable<Unit> = subject.throttleFirst(500L, TimeUnit.MILLISECONDS)
@Provides
fun viewModelFactory() = SomeViewModelFactory(clickReadStream: Observable<Unit>)

DaggerMyAppComponent

package app.ericn.daggerplain;

import dagger.internal.DoubleCheck;
import dagger.internal.Preconditions;
import javax.annotation.Generated;
import javax.inject.Provider;
import retrofit2.Retrofit;

DaggerMyAppComponent

package app.ericn.daggerplain;

import dagger.internal.DoubleCheck;
import dagger.internal.Preconditions;
import javax.annotation.Generated;
import javax.inject.Provider;
import retrofit2.Retrofit;
@ericntd
ericntd / dependent-component.md
Last active July 3, 2021 20:33
Dagger Dependent Component

DaggerMyAppComponent

package app.ericn.daggerplain;

import android.content.Context;
import dagger.internal.DoubleCheck;
import dagger.internal.Preconditions;
import javax.annotation.Generated;
import javax.inject.Provider;
import retrofit2.Retrofit;
@ericntd
ericntd / MainActivityComponentImpl.java
Last active June 27, 2021 22:41
Unscoped dependencies
private final class MainActivityComponentImpl implements MainActivityComponent {
private final MainActivityComponent.MainActivityModule mainActivityModule;
private MainActivityComponentImpl(
MainActivityComponent.MainActivityModule mainActivityModuleParam) {
this.mainActivityModule = mainActivityModuleParam;
}
private MainPresenter getMainPresenter() {
return MainActivityComponent_MainActivityModule_PresenterFactory.presenter(mainActivityModule, app.ericn.daggerplain.DaggerMyAppComponent.this.catRepositoryProvider.get());}