Skip to content

Commit 43faa4f

Browse files
yamilmedinaohassine
authored andcommitted
fix: consume direct flow to preserve behvior or app lifecycle observer (WPB-22609) (#4508)
1 parent 98a131d commit 43faa4f

File tree

2 files changed

+31
-27
lines changed

2 files changed

+31
-27
lines changed

app/src/main/kotlin/com/wire/android/util/lifecycle/SyncLifecycleManager.kt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ import com.wire.kalium.logger.obfuscateDomain
2828
import com.wire.kalium.logger.obfuscateId
2929
import com.wire.kalium.logic.CoreLogic
3030
import com.wire.kalium.logic.data.user.UserId
31+
import com.wire.kalium.logic.feature.session.GetAllSessionsResult
3132
import kotlinx.coroutines.awaitCancellation
3233
import kotlinx.coroutines.coroutineScope
3334
import kotlinx.coroutines.delay
3435
import kotlinx.coroutines.flow.collectLatest
3536
import kotlinx.coroutines.flow.combine
3637
import kotlinx.coroutines.flow.distinctUntilChanged
37-
import kotlinx.coroutines.flow.filter
3838
import kotlinx.coroutines.flow.map
3939
import kotlinx.coroutines.launch
4040
import javax.inject.Inject
@@ -58,32 +58,32 @@ class SyncLifecycleManager @Inject constructor(
5858
* Should be called only once on a global level
5959
*/
6060
suspend fun observeAppLifecycle() {
61-
coreLogic.getGlobalScope().observeValidAccounts()
62-
.filter { pairs -> pairs.isNotEmpty() }
63-
.map { pairs ->
64-
pairs.map { (selfUser, _) ->
65-
selfUser.id
61+
coreLogic.getGlobalScope().observeAllValidSessionsFlow()
62+
.map { result ->
63+
when (result) {
64+
is GetAllSessionsResult.Success -> result.sessions
65+
is GetAllSessionsResult.Failure -> emptyList()
6666
}
67-
}.combine(currentScreenManager.isAppVisibleFlow(), ::Pair)
67+
}
68+
.combine(currentScreenManager.isAppVisibleFlow()) { accounts, isAppVisible ->
69+
accounts to isAppVisible
70+
}
6871
.distinctUntilChanged()
69-
.collectLatest { (userIds, isAppVisible) ->
70-
if (isAppVisible) {
71-
logger.i(
72-
"App moved to foreground, " +
73-
"starting sync requests for users: ${userIds.joinToString { it.value.obfuscateId() }}"
74-
)
75-
coroutineScope {
76-
userIds.forEach { userId ->
77-
launch {
78-
logger.i("!!!!! Starting foreground sync request for user ${userId.value.obfuscateId()}.")
79-
coreLogic.getSessionScope(userId).syncExecutor.request {
80-
awaitCancellation()
81-
}
72+
.collectLatest { (accounts, isAppVisible) ->
73+
if (!isAppVisible) {
74+
logger.i("Not running foreground sync request for users, as App is not visible.")
75+
return@collectLatest
76+
}
77+
coroutineScope {
78+
accounts.forEach { accountInfo ->
79+
val userId = accountInfo.userId
80+
launch {
81+
logger.i("!!!!! Starting foreground sync request for user ${userId.value.obfuscateId()}.")
82+
coreLogic.getSessionScope(userId).syncExecutor.request {
83+
awaitCancellation()
8284
}
8385
}
8486
}
85-
} else {
86-
logger.i("App moved to background, no longer running foreground sync requests for users.")
8787
}
8888
}
8989
}

app/src/test/kotlin/com/wire/android/util/lifecycle/SyncLifecycleManagerTest.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ import com.wire.android.framework.TestUser
2222
import com.wire.android.framework.fake.FakeSyncExecutor
2323
import com.wire.android.util.CurrentScreenManager
2424
import com.wire.kalium.logic.CoreLogic
25+
import com.wire.kalium.logic.data.auth.AccountInfo
2526
import com.wire.kalium.logic.feature.UserSessionScope
26-
import com.wire.kalium.logic.feature.user.ObserveValidAccountsUseCase
27+
import com.wire.kalium.logic.feature.session.GetAllSessionsResult
28+
import com.wire.kalium.logic.feature.session.ObserveSessionsUseCase
2729
import io.mockk.MockKAnnotations
2830
import io.mockk.coEvery
2931
import io.mockk.every
@@ -108,7 +110,7 @@ class SyncLifecycleManagerTest {
108110
lateinit var userSessionScope: UserSessionScope
109111

110112
@MockK
111-
lateinit var observeValidAccountsUseCase: ObserveValidAccountsUseCase
113+
lateinit var observeValidAccountsUseCase: ObserveSessionsUseCase
112114

113115
var syncExecutor = FakeSyncExecutor()
114116

@@ -118,11 +120,13 @@ class SyncLifecycleManagerTest {
118120

119121
init {
120122
MockKAnnotations.init(this, relaxUnitFun = true)
121-
every { coreLogic.getGlobalScope().observeValidAccounts } returns observeValidAccountsUseCase
123+
every { coreLogic.getGlobalScope().observeAllValidSessionsFlow } returns observeValidAccountsUseCase
122124
every { coreLogic.getSessionScope(TestUser.SELF_USER_ID) } returns userSessionScope
123125
coEvery { observeValidAccountsUseCase.invoke() } returns flowOf(
124-
listOf(
125-
TestUser.SELF_USER to null
126+
GetAllSessionsResult.Success(
127+
listOf(
128+
AccountInfo.Valid(TestUser.SELF_USER_ID)
129+
)
126130
)
127131
)
128132
}

0 commit comments

Comments
 (0)