14
14
* limitations under the License.
15
15
*/
16
16
@file:Suppress(" invisible_reference" , " invisible_member" )
17
+ @file:OptIn(InternalRibsApi ::class )
17
18
18
19
package com.uber.rib.core
19
20
@@ -24,7 +25,6 @@ import android.view.ViewGroup
24
25
import androidx.annotation.CallSuper
25
26
import com.uber.autodispose.lifecycle.CorrespondingEventsFunction
26
27
import com.uber.autodispose.lifecycle.LifecycleEndedException
27
- import com.uber.autodispose.lifecycle.LifecycleNotStartedException
28
28
import com.uber.autodispose.lifecycle.LifecycleScopeProvider
29
29
import com.uber.rib.core.lifecycle.ActivityCallbackEvent
30
30
import com.uber.rib.core.lifecycle.ActivityCallbackEvent.Companion.create
@@ -37,6 +37,11 @@ import com.uber.rib.core.lifecycle.ActivityCallbackEvent.Companion.createWindowF
37
37
import com.uber.rib.core.lifecycle.ActivityLifecycleEvent
38
38
import com.uber.rib.core.lifecycle.ActivityLifecycleEvent.Companion.create
39
39
import 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
40
45
import io.reactivex.CompletableSource
41
46
import io.reactivex.Observable
42
47
import kotlinx.coroutines.channels.BufferOverflow
@@ -48,19 +53,27 @@ import kotlinx.coroutines.rx2.asObservable
48
53
abstract class RibActivity :
49
54
CoreAppCompatActivity (),
50
55
ActivityStarter ,
56
+ RibLifecycleOwner <ActivityLifecycleEvent >,
51
57
LifecycleScopeProvider <ActivityLifecycleEvent >,
52
58
RxActivityEvents {
53
59
private var router: ViewRouter <* , * >? = null
54
60
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
57
64
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 )
60
70
61
71
@Volatile private var _lifecycleObservable : Observable <ActivityLifecycleEvent >? = null
72
+
73
+ @Suppress(" DEPRECATION_ERROR" )
62
74
private val lifecycleObservable
63
- get() = ::_lifecycleObservable .setIfNullAndGet { lifecycleFlow.asObservable() }
75
+ get() =
76
+ ::_lifecycleObservable .setIfNullAndGet { actualRibLifecycle.lifecycleFlow.asObservable() }
64
77
65
78
private val _callbacksFlow =
66
79
MutableSharedFlow <ActivityCallbackEvent >(0 , 1 , BufferOverflow .DROP_OLDEST )
@@ -84,14 +97,14 @@ abstract class RibActivity :
84
97
lifecycleFlow.replayCache.lastOrNull()
85
98
86
99
final override fun requestScope (): CompletableSource =
87
- lifecycleFlow.asScopeCompletable(lifecycleRange )
100
+ lifecycleFlow.asScopeCompletable(LIFECYCLE_RANGE )
88
101
89
102
@Initializer
90
103
@CallSuper
91
104
override fun onCreate (savedInstanceState : android.os.Bundle ? ) {
92
105
super .onCreate(savedInstanceState)
93
106
val rootViewGroup = findViewById<ViewGroup >(android.R .id.content)
94
- _lifecycleFlow .tryEmit(createOnCreateEvent(savedInstanceState))
107
+ _ribLifecycle .lifecycleFlow .tryEmit(createOnCreateEvent(savedInstanceState))
95
108
val wrappedBundle: Bundle ? =
96
109
if (savedInstanceState != null ) Bundle (savedInstanceState) else null
97
110
router = createRouter(rootViewGroup)
@@ -113,13 +126,13 @@ abstract class RibActivity :
113
126
@CallSuper
114
127
override fun onStart () {
115
128
super .onStart()
116
- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .START ))
129
+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .START ))
117
130
}
118
131
119
132
@CallSuper
120
133
override fun onResume () {
121
134
super .onResume()
122
- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .RESUME ))
135
+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .RESUME ))
123
136
}
124
137
125
138
@CallSuper
@@ -136,19 +149,19 @@ abstract class RibActivity :
136
149
137
150
@CallSuper
138
151
override fun onPause () {
139
- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .PAUSE ))
152
+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .PAUSE ))
140
153
super .onPause()
141
154
}
142
155
143
156
@CallSuper
144
157
override fun onStop () {
145
- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .STOP ))
158
+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .STOP ))
146
159
super .onStop()
147
160
}
148
161
149
162
@CallSuper
150
163
override fun onDestroy () {
151
- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .DESTROY ))
164
+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .DESTROY ))
152
165
router?.let {
153
166
it.dispatchDetach()
154
167
RibEvents .getInstance().emitEvent(RibEventType .DETACHED , it, null )
@@ -196,7 +209,7 @@ abstract class RibActivity :
196
209
}
197
210
198
211
override fun onUserLeaveHint () {
199
- _lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .USER_LEAVING ))
212
+ _ribLifecycle .lifecycleFlow .tryEmit(create(ActivityLifecycleEvent .Type .USER_LEAVING ))
200
213
super .onUserLeaveHint()
201
214
}
202
215
@@ -251,12 +264,8 @@ abstract class RibActivity :
251
264
)
252
265
}
253
266
}
254
- }
255
- }
256
267
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 )
262
270
}
271
+ }
0 commit comments