diff --git a/android/demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/MainInteractor.kt b/android/demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/MainInteractor.kt index 7e5443cf..6ea2e6dc 100644 --- a/android/demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/MainInteractor.kt +++ b/android/demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/MainInteractor.kt @@ -35,10 +35,9 @@ class MainInteractor( override fun didBecomeActive(savedInstanceState: Bundle?) { super.didBecomeActive(savedInstanceState) - CoroutineScope(RibDispatchers.Main).launch { } router.view.setContent { MainView(childContent = childContent) } - authStream.observe() + authStream.observe() .onEach { if (it.isLoggedIn) { router.detachLoggedOut() diff --git a/android/demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/logged_out/LoggedOutInteractor.kt b/android/demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/logged_out/LoggedOutInteractor.kt index 345cbde7..2c1a7366 100644 --- a/android/demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/logged_out/LoggedOutInteractor.kt +++ b/android/demos/compose/src/main/kotlin/com/uber/rib/compose/root/main/logged_out/LoggedOutInteractor.kt @@ -35,7 +35,6 @@ class LoggedOutInteractor( private val eventStream: EventStream, private val stateStream: StateStream ) : BasicInteractor(presenter) { - override fun didBecomeActive(savedInstanceState: Bundle?) { super.didBecomeActive(savedInstanceState) eventStream.observe() diff --git a/android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutines.kt b/android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutines.kt index 5a021fdd..3276b980 100755 --- a/android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutines.kt +++ b/android/libraries/rib-coroutines/src/main/kotlin/com/uber/rib/core/RibCoroutines.kt @@ -3,21 +3,31 @@ package com.uber.rib.core import com.uber.autodispose.ScopeProvider import com.uber.autodispose.coroutinesinterop.asCoroutineScope import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob +import java.util.* +import kotlin.reflect.KProperty -//TODO add weak hashmap to hold values of getters. +val ScopeProvider.defaultScope by LazyWithReceiver { + asCoroutineScope(SupervisorJob() + RibDispatchers.Main) +} -val ScopeProvider.defaultScope: CoroutineScope - get() = asCoroutineScope(SupervisorJob() + RibDispatchers.Default) +val ScopeProvider.mainScope by LazyWithReceiver { + asCoroutineScope(SupervisorJob() + RibDispatchers.Main) +} -val ScopeProvider.mainScope: CoroutineScope - get() = asCoroutineScope(SupervisorJob() + RibDispatchers.Main) - -val ScopeProvider.ioScope: CoroutineScope - get() = asCoroutineScope(SupervisorJob() + RibDispatchers.IO) - -val ScopeProvider.unconfinedScope: CoroutineScope - get() = asCoroutineScope(SupervisorJob() + RibDispatchers.Unconfined) +val ScopeProvider.ioScope by LazyWithReceiver { + asCoroutineScope(SupervisorJob() + RibDispatchers.IO) +} +val ScopeProvider.unconfinedScope by LazyWithReceiver { + asCoroutineScope(SupervisorJob() + RibDispatchers.Unconfined) +} +private class LazyWithReceiver(val initializer:This.()->Return) +{ + private val values = WeakHashMap() + operator fun getValue(thisRef:This, property: KProperty<*>):Return = synchronized(values) + { + return values.getOrPut(thisRef) { thisRef.initializer() } + } +} \ No newline at end of file