1414 * limitations under the License.
1515 */
1616@file:Suppress(" invisible_reference" , " invisible_member" )
17+ @file:OptIn(InternalRibsApi ::class )
1718
1819package com.uber.rib.core
1920
@@ -24,7 +25,6 @@ import android.view.ViewGroup
2425import androidx.annotation.CallSuper
2526import com.uber.autodispose.lifecycle.CorrespondingEventsFunction
2627import com.uber.autodispose.lifecycle.LifecycleEndedException
27- import com.uber.autodispose.lifecycle.LifecycleNotStartedException
2828import com.uber.autodispose.lifecycle.LifecycleScopeProvider
2929import com.uber.rib.core.lifecycle.ActivityCallbackEvent
3030import com.uber.rib.core.lifecycle.ActivityCallbackEvent.Companion.create
@@ -37,6 +37,11 @@ import com.uber.rib.core.lifecycle.ActivityCallbackEvent.Companion.createWindowF
3737import com.uber.rib.core.lifecycle.ActivityLifecycleEvent
3838import com.uber.rib.core.lifecycle.ActivityLifecycleEvent.Companion.create
3939import com.uber.rib.core.lifecycle.ActivityLifecycleEvent.Companion.createOnCreateEvent
40+ import com.uber.rib.core.lifecycle.RibLifecycle
41+ import com.uber.rib.core.lifecycle.RibLifecycleOwner
42+ import com.uber.rib.core.lifecycle.internal.InternalRibLifecycle
43+ import com.uber.rib.core.lifecycle.internal.actualRibLifecycle
44+ import com.uber.rib.core.lifecycle.internal.asScopeCompletable
4045import io.reactivex.CompletableSource
4146import io.reactivex.Observable
4247import kotlinx.coroutines.channels.BufferOverflow
@@ -48,19 +53,27 @@ import kotlinx.coroutines.rx2.asObservable
4853abstract class RibActivity :
4954 CoreAppCompatActivity (),
5055 ActivityStarter ,
56+ RibLifecycleOwner <ActivityLifecycleEvent >,
5157 LifecycleScopeProvider <ActivityLifecycleEvent >,
5258 RxActivityEvents {
5359 private var router: ViewRouter <* , * >? = null
5460
55- private val _lifecycleFlow =
56- MutableSharedFlow <ActivityLifecycleEvent >(1 , 0 , BufferOverflow .DROP_OLDEST )
61+ private val _ribLifecycle = InternalRibLifecycle (LIFECYCLE_RANGE )
62+ override val ribLifecycle: RibLifecycle <ActivityLifecycleEvent >
63+ get() = _ribLifecycle
5764
58- open val lifecycleFlow: SharedFlow <ActivityLifecycleEvent >
59- get() = _lifecycleFlow
65+ @Volatile private var mockedRibLifecycleRef: RibLifecycle <ActivityLifecycleEvent >? = null
66+
67+ @Deprecated(" This field should never be used on real code" , level = DeprecationLevel .ERROR )
68+ final override val actualRibLifecycle: RibLifecycle <ActivityLifecycleEvent >
69+ get() = actualRibLifecycle(::mockedRibLifecycleRef, LIFECYCLE_RANGE )
6070
6171 @Volatile private var _lifecycleObservable : Observable <ActivityLifecycleEvent >? = null
72+
73+ @Suppress(" DEPRECATION_ERROR" )
6274 private val lifecycleObservable
63- get() = ::_lifecycleObservable .setIfNullAndGet { lifecycleFlow.asObservable() }
75+ get() =
76+ ::_lifecycleObservable .setIfNullAndGet { actualRibLifecycle.lifecycleFlow.asObservable() }
6477
6578 private val _callbacksFlow =
6679 MutableSharedFlow <ActivityCallbackEvent >(0 , 1 , BufferOverflow .DROP_OLDEST )
@@ -84,14 +97,14 @@ abstract class RibActivity :
8497 lifecycleFlow.replayCache.lastOrNull()
8598
8699 final override fun requestScope (): CompletableSource =
87- lifecycleFlow.asScopeCompletable(lifecycleRange )
100+ lifecycleFlow.asScopeCompletable(LIFECYCLE_RANGE )
88101
89102 @Initializer
90103 @CallSuper
91104 override fun onCreate (savedInstanceState : android.os.Bundle ? ) {
92105 super .onCreate(savedInstanceState)
93106 val rootViewGroup = findViewById<ViewGroup >(android.R .id.content)
94- _lifecycleFlow .tryEmit(createOnCreateEvent(savedInstanceState))
107+ _ribLifecycle .lifecycleFlow .tryEmit(createOnCreateEvent(savedInstanceState))
95108 val wrappedBundle: Bundle ? =
96109 if (savedInstanceState != null ) Bundle (savedInstanceState) else null
97110 router = createRouter(rootViewGroup)
@@ -113,13 +126,13 @@ abstract class RibActivity :
113126 @CallSuper
114127 override fun onStart () {
115128 super .onStart()
116- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .START ))
129+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .START ))
117130 }
118131
119132 @CallSuper
120133 override fun onResume () {
121134 super .onResume()
122- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .RESUME ))
135+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .RESUME ))
123136 }
124137
125138 @CallSuper
@@ -136,19 +149,19 @@ abstract class RibActivity :
136149
137150 @CallSuper
138151 override fun onPause () {
139- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .PAUSE ))
152+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .PAUSE ))
140153 super .onPause()
141154 }
142155
143156 @CallSuper
144157 override fun onStop () {
145- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .STOP ))
158+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .STOP ))
146159 super .onStop()
147160 }
148161
149162 @CallSuper
150163 override fun onDestroy () {
151- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .DESTROY ))
164+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .DESTROY ))
152165 router?.let {
153166 it.dispatchDetach()
154167 RibEvents .getInstance().emitEvent(RibEventType .DETACHED , it, null )
@@ -196,7 +209,7 @@ abstract class RibActivity :
196209 }
197210
198211 override fun onUserLeaveHint () {
199- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .USER_LEAVING ))
212+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .USER_LEAVING ))
200213 super .onUserLeaveHint()
201214 }
202215
@@ -251,12 +264,8 @@ abstract class RibActivity :
251264 )
252265 }
253266 }
254- }
255- }
256267
257- private val <T : Comparable <T >> LifecycleScopeProvider <T >.lifecycleRange: ClosedRange <T >
258- get() {
259- val lastEmittedEvent = peekLifecycle() ? : throw LifecycleNotStartedException ()
260- val finishingEvent = correspondingEvents().apply (lastEmittedEvent)
261- return lastEmittedEvent.. finishingEvent
268+ private val LIFECYCLE_RANGE =
269+ createOnCreateEvent(null ).. create(ActivityLifecycleEvent .Type .DESTROY )
262270 }
271+ }
0 commit comments