Skip to content

Instantly share code, notes, and snippets.

View ValeryPonomarenko's full-sized avatar
:octocat:
Coding

Valery ValeryPonomarenko

:octocat:
Coding
  • Toronto
View GitHub Profile
@ValeryPonomarenko
ValeryPonomarenko / SomeApplication.kt
Created September 14, 2018 11:46
Lifecycle aware dagger components
class SomeApplication : Application() {
private lateinit var appComponent: AppComponent
private var featureComponent: FeatureComponent? = null
override fun onCreate() {
super.onCreate()
appComponent = DaggerAppComponent.builder()
.someModule(SomeModule())
@ValeryPonomarenko
ValeryPonomarenko / IHasComponent.kt
Created September 14, 2018 12:23
Lifecycle aware dagger components
interface IHasComponent {
fun getComponent(): Any
fun getComponentKey(): String = javaClass.toString()
}
@ValeryPonomarenko
ValeryPonomarenko / ComponentsStore.kt
Created September 14, 2018 12:29
Lifecycle aware dagger components
internal class ComponentsStore {
private val componentsForView = mutableMapOf<String, Any>()
fun isExist(key: String): Boolean =
componentsForView.containsKey(key)
fun add(key: String, component: Any) {
componentsForView[key] = component
}
@ValeryPonomarenko
ValeryPonomarenko / ComponentNotFoundException.kt
Created September 14, 2018 12:38
Lifecycle aware dagger components
class ComponentNotFoundException : Throwable("Component was not found")
@ValeryPonomarenko
ValeryPonomarenko / InjectionManager.kt
Created September 14, 2018 12:41
Lifecycle aware dagger components
class InjectionManager {
companion object {
@JvmStatic val instance = InjectionManager()
}
private val componentsStore = ComponentsStore()
fun init(app: Application) {
app.registerActivityLifecycleCallbacks(ActivityLifecycleHelper(componentsStore))
}
@ValeryPonomarenko
ValeryPonomarenko / ActivityLifecycleHelper.kt
Last active September 14, 2018 12:51
Lifecycle aware dagger components
internal class ActivityLifecycleHelper(
private val componentsStore: ComponentsStore
) : Application.ActivityLifecycleCallbacks {
override fun onActivityPaused(activity: Activity) {}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityStarted(activity: Activity) {}
override fun onActivityDestroyed(activity: Activity) {
@ValeryPonomarenko
ValeryPonomarenko / FragmentLifecycleHelper.kt
Created September 14, 2018 14:31
Lifecycle aware dagger components
internal class FragmentLifecycleHelper(
private val componentsStore: ComponentsStore
) : FragmentManager.FragmentLifecycleCallbacks() {
private var isInSaveState = false
override fun onFragmentStarted(fm: FragmentManager, f: Fragment) {
super.onFragmentStarted(fm, f)
isInSaveState = false
}
@ValeryPonomarenko
ValeryPonomarenko / SimpleApplication.kt
Created September 14, 2018 15:02
Lifecycle aware dagger components
class SimpleApplication : Application() {
override fun onCreate() {
super.onCreate()
InjectionManager.instance.init(this)
}
}
@ValeryPonomarenko
ValeryPonomarenko / FirstFragment.kt
Created September 14, 2018 15:04
Lifecycle aware dagger components
class FirstFragment : Fragment(), IHasComponent {
//code...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
InjectionManager.instance.bindComponent<FirstFeatureComponent>(this).inject(this)
}
override fun getComponent(): FirstFeatureComponent =
DaggerFirstFeatureComponent.builder()
@ValeryPonomarenko
ValeryPonomarenko / SecondFragment.kt
Created September 14, 2018 15:07
Lifecycle aware dagger components
class SecondFragment : Fragment() {
//code...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
InjectionManager.instance.findComponent<AppComponent>().inject(this)
}
}