Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import com.wire.android.di.NoSession
import com.wire.android.util.UserAgentProvider
import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.data.id.QualifiedIdMapper
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.feature.asset.AudioNormalizedLoudnessBuilder
import com.wire.kalium.logic.feature.server.ServerConfigForAccountUseCase
import com.wire.kalium.logic.feature.session.GetSessionsUseCase
Expand Down Expand Up @@ -111,7 +110,7 @@ class TestCoreLogicModule {
@NoSession
@Singleton
@Provides
fun provideNoSessionQualifiedIdMapper(): QualifiedIdMapper = QualifiedIdMapperImpl(null)
fun provideNoSessionQualifiedIdMapper(): QualifiedIdMapper = QualifiedIdMapper(null)

@Singleton
@Provides
Expand Down
3 changes: 1 addition & 2 deletions app/src/main/kotlin/com/wire/android/di/CoreLogicModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.data.asset.KaliumFileSystem
import com.wire.kalium.logic.data.id.FederatedIdMapper
import com.wire.kalium.logic.data.id.QualifiedIdMapper
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.analytics.GetCurrentAnalyticsTrackingIdentifierUseCase
import com.wire.kalium.logic.feature.asset.AudioNormalizedLoudnessBuilder
Expand Down Expand Up @@ -140,7 +139,7 @@ class CoreLogicModule {
@NoSession
@Singleton
@Provides
fun provideNoSessionQualifiedIdMapper(): QualifiedIdMapper = QualifiedIdMapperImpl(null)
fun provideNoSessionQualifiedIdMapper(): QualifiedIdMapper = QualifiedIdMapper(null)

@Singleton
@Provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import androidx.lifecycle.lifecycleScope
import com.wire.android.ui.AppLockActivity
import com.wire.android.ui.common.setupOrientationForDevice
import com.wire.android.util.SwitchAccountObserver
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.data.id.QualifiedIdMapper
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
Expand All @@ -46,12 +46,13 @@ abstract class CallActivity : AppCompatActivity() {
}

private val callActivityViewModel: CallActivityViewModel by viewModels()
protected val qualifiedIdMapper = QualifiedIdMapperImpl(null)
protected val qualifiedIdMapper = QualifiedIdMapper(null)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupOrientationForDevice()
}

fun switchAccountIfNeeded(userId: String?) {
userId?.let {
qualifiedIdMapper.fromStringToQualifiedID(it).run {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import com.wire.android.appLogger
import com.wire.android.util.dispatchers.DispatcherProvider
import com.wire.android.util.fileDateTime
import com.wire.kalium.logic.data.asset.KaliumFileSystem
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCaseImpl.Companion.ASSET_SIZE_DEFAULT_LIMIT_BYTES
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCase.AssetSizeLimits.ASSET_SIZE_DEFAULT_LIMIT_BYTES
import com.wire.kalium.util.DateTimeUtil
import dagger.hilt.android.scopes.ViewModelScoped
import kotlinx.coroutines.CoroutineScope
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.data.auth.AccountInfo
import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.logic.data.id.QualifiedID
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.data.id.QualifiedIdMapper
import com.wire.kalium.logic.data.id.toQualifiedID
import com.wire.kalium.logic.feature.session.CurrentSessionResult
import com.wire.kalium.logic.feature.session.CurrentSessionUseCase
Expand Down Expand Up @@ -84,7 +84,7 @@ class DeepLinkProcessor @Inject constructor(
private val currentSession: CurrentSessionUseCase,
@KaliumCoreLogic private val coreLogic: CoreLogic,
) {
private val qualifiedIdMapper = QualifiedIdMapperImpl(null)
private val qualifiedIdMapper = QualifiedIdMapper(null)

suspend operator fun invoke(uri: Uri? = null, action: String? = null): DeepLinkResult {
return when (val sessionResult = currentSession()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ package com.wire.android.util.deeplink

import android.net.Uri
import com.wire.kalium.logic.data.id.QualifiedID
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.data.id.QualifiedIdMapper

object UserLinkQRMapper {

val qualifiedIdMapper = QualifiedIdMapperImpl(null)
val qualifiedIdMapper = QualifiedIdMapper(null)

fun fromDeepLinkToQualifiedId(uri: Uri, defaultDomain: String): UserLinkQRResult {
val segments = uri.pathSegments
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,20 @@ package com.wire.android.util.lifecycle
import com.wire.android.appLogger
import com.wire.android.di.KaliumCoreLogic
import com.wire.android.util.CurrentScreenManager
import com.wire.kalium.common.functional.Either
import com.wire.kalium.common.functional.onFailure
import com.wire.kalium.common.functional.onSuccess
import com.wire.kalium.logger.KaliumLogger.Companion.ApplicationFlow.SYNC
import com.wire.kalium.logger.obfuscateDomain
import com.wire.kalium.logger.obfuscateId
import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.data.auth.AccountInfo
import com.wire.kalium.logic.data.user.UserId
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
Expand All @@ -60,26 +58,32 @@ class SyncLifecycleManager @Inject constructor(
* Should be called only once on a global level
*/
suspend fun observeAppLifecycle() {
coreLogic.getGlobalScope().sessionRepository.allValidSessionsFlow()
.filterIsInstance<Either.Right<List<AccountInfo>>>()
.map { it.value }
.combine(currentScreenManager.isAppVisibleFlow(), ::Pair)
.distinctUntilChanged()
.collectLatest { (accounts, isAppVisible) ->
if (!isAppVisible) {
logger.i("Not running foreground sync request for users, as App is not visible.")
return@collectLatest
coreLogic.getGlobalScope().observeValidAccounts()
.filter { pairs -> pairs.isNotEmpty() }
.map { pairs ->
pairs.map { (selfUser, _) ->
selfUser.id
}
coroutineScope {
accounts.forEach { accountInfo ->
val userId = accountInfo.userId
launch {
logger.i("!!!!! Starting foreground sync request for user ${userId.value.obfuscateId()}.")
coreLogic.getSessionScope(userId).syncExecutor.request {
awaitCancellation()
}.combine(currentScreenManager.isAppVisibleFlow(), ::Pair)
.distinctUntilChanged()
.collectLatest { (userIds, isAppVisible) ->
if (isAppVisible) {
logger.i(
"App moved to foreground, " +
"starting sync requests for users: ${userIds.joinToString { it.value.obfuscateId() }}"
)
coroutineScope {
userIds.forEach { userId ->
launch {
logger.i("!!!!! Starting foreground sync request for user ${userId.value.obfuscateId()}.")
coreLogic.getSessionScope(userId).syncExecutor.request {
awaitCancellation()
}
}
}
}
} else {
logger.i("App moved to background, no longer running foreground sync requests for users.")
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
import com.wire.kalium.common.functional.fold
import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.data.id.QualifiedIdMapper
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.session.DoesValidSessionExistResult
import dagger.assisted.Assisted
Expand Down Expand Up @@ -74,7 +74,7 @@
if (userIdString == null || conversationIdString == null) {
return@coroutineScope Result.failure() // If either ID is not provided, fail the work
}
val qualifiedIdMapper = QualifiedIdMapperImpl(null)
val qualifiedIdMapper = QualifiedIdMapper(null)

Check warning on line 77 in app/src/main/kotlin/com/wire/android/workmanager/worker/DeleteConversationLocallyWorker.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/workmanager/worker/DeleteConversationLocallyWorker.kt#L77

Added line #L77 was not covered by tests
val conversationId = qualifiedIdMapper.fromStringToQualifiedID(conversationIdString)
val userId = qualifiedIdMapper.fromStringToQualifiedID(userIdString)
coreLogic.getGlobalScope().doesValidSessionExist(userId).let {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ package com.wire.android.navigation
import com.wire.android.model.ImageAsset
import com.wire.android.model.parseIntoPrivateImageAsset
import com.wire.kalium.logic.data.id.QualifiedID
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.data.id.QualifiedIdMapper
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
Expand All @@ -30,7 +30,7 @@ internal class NavigationUtilsTest {

@Test
fun `Given some correct string, when calling parseIntoPrivateImageAsset, then it correctly parses it to PrivateImageAsset`() {
val qualifiedIdMapper = QualifiedIdMapperImpl(null)
val qualifiedIdMapper = QualifiedIdMapper(null)

// Given
val mockConversationIdValue = "mocked-conversation-id-value"
Expand All @@ -55,7 +55,7 @@ internal class NavigationUtilsTest {

@Test
fun `Given an incorrect string, when parsing it to PrivateImageAsset, then it throws an exception`() {
val qualifiedIdMapper = QualifiedIdMapperImpl(null)
val qualifiedIdMapper = QualifiedIdMapper(null)

// Given
val mockWrongImagePrivateAssetString = "wrong-private-asset@image"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import com.wire.kalium.logic.data.call.Call
import com.wire.kalium.logic.data.call.CallStatus
import com.wire.kalium.logic.data.conversation.Conversation
import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.data.id.QualifiedIdMapper
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.session.CurrentSessionResult
import io.mockk.MockKAnnotations
Expand Down Expand Up @@ -491,7 +491,7 @@ class CallNotificationManagerTest {
dispatcherProvider = dispatcherProvider,
builder = callNotificationBuilder,
coreLogic = coreLogic,
qualifiedIdMapper = QualifiedIdMapperImpl(TestUser.SELF_USER_ID),
qualifiedIdMapper = QualifiedIdMapper(TestUser.SELF_USER_ID),
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import com.wire.android.ui.destinations.ChannelAccessOnUpdateScreenDestination
import com.wire.android.ui.home.newconversation.channelaccess.ChannelAccessType
import com.wire.android.ui.home.newconversation.channelaccess.ChannelAddPermissionType
import com.wire.android.ui.navArgs
import com.wire.kalium.logic.data.id.QualifiedIdMapperImpl
import com.wire.kalium.logic.data.id.QualifiedIdMapper
import com.wire.kalium.logic.feature.conversation.channel.UpdateChannelAddPermissionUseCase
import io.mockk.MockKAnnotations
import io.mockk.coEvery
Expand All @@ -37,8 +37,8 @@ import kotlinx.coroutines.test.advanceUntilIdle
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.setMain
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test

Expand Down Expand Up @@ -104,7 +104,7 @@ class UpdateChannelAccessViewModelTest {
UpdateChannelAccessViewModel(
updateChannelAddPermission = updateChannelAddPermission,
savedStateHandle = savedStateHandle,
qualifiedIdMapper = QualifiedIdMapperImpl(TestUser.SELF_USER_ID)
qualifiedIdMapper = QualifiedIdMapper(TestUser.SELF_USER_ID)
)
}

Expand All @@ -124,8 +124,8 @@ class UpdateChannelAccessViewModelTest {
fun withUpdateChannelAddPermissionUseCaseReturning(
result: UpdateChannelAddPermissionUseCase.UpdateChannelAddPermissionUseCaseResult
) = apply {
coEvery { updateChannelAddPermission(any(), any()) } returns result
}
coEvery { updateChannelAddPermission(any(), any()) } returns result
}

fun arrange() = this to viewModel
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import com.wire.android.ui.home.conversations.model.AssetBundle
import com.wire.android.util.FileManager
import com.wire.kalium.logic.data.asset.AttachmentType
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCase
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCaseImpl
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCase.AssetSizeLimits.ASSET_SIZE_DEFAULT_LIMIT_BYTES
import io.mockk.MockKAnnotations
import io.mockk.coEvery
import io.mockk.coVerify
Expand All @@ -49,7 +49,7 @@ class HandleUriAssetUseCaseTest {
fun `given an invalid url schema, when invoked, then result should not succeed`() =
runTest(dispatcher) {
// Given
val limit = GetAssetSizeLimitUseCaseImpl.ASSET_SIZE_DEFAULT_LIMIT_BYTES
val limit = ASSET_SIZE_DEFAULT_LIMIT_BYTES
val (_, useCase) = Arrangement()
.withGetAssetSizeLimitUseCase(true, limit)
.withGetAssetBundleFromUri(null)
Expand All @@ -66,7 +66,7 @@ class HandleUriAssetUseCaseTest {
fun `given a user picks an image asset less than limit, when invoked, then result should succeed`() =
runTest(dispatcher) {
// Given
val limit = GetAssetSizeLimitUseCaseImpl.ASSET_SIZE_DEFAULT_LIMIT_BYTES
val limit = ASSET_SIZE_DEFAULT_LIMIT_BYTES
val mockedAttachment = AssetBundle(
"key",
"image/jpeg",
Expand All @@ -91,7 +91,7 @@ class HandleUriAssetUseCaseTest {
fun `given a user picks an image asset larger than limit, when invoked, then result is asset too large failure`() =
runTest(dispatcher) {
// Given
val limit = GetAssetSizeLimitUseCaseImpl.ASSET_SIZE_DEFAULT_LIMIT_BYTES
val limit = ASSET_SIZE_DEFAULT_LIMIT_BYTES
val mockedAttachment = AssetBundle(
"key",
"image/jpeg",
Expand All @@ -116,7 +116,7 @@ class HandleUriAssetUseCaseTest {
fun `given that a user picks too large asset that needs saving if invalid, when invoked, then saveToExternalMediaStorage is called`() =
runTest(dispatcher) {
// Given
val limit = GetAssetSizeLimitUseCaseImpl.ASSET_SIZE_DEFAULT_LIMIT_BYTES
val limit = ASSET_SIZE_DEFAULT_LIMIT_BYTES
val mockedAttachment = AssetBundle(
"key",
"file/x-zip",
Expand Down Expand Up @@ -151,7 +151,7 @@ class HandleUriAssetUseCaseTest {
fun `given that a user picks asset, when getting uri returns null, then it should return error`() =
runTest(dispatcher) {
// Given
val limit = GetAssetSizeLimitUseCaseImpl.ASSET_SIZE_DEFAULT_LIMIT_BYTES
val limit = ASSET_SIZE_DEFAULT_LIMIT_BYTES
val (_, useCase) = Arrangement()
.withGetAssetBundleFromUri(null)
.withGetAssetSizeLimitUseCase(false, limit)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import com.wire.kalium.logic.data.id.ConversationId
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.asset.AudioNormalizedLoudnessBuilder
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCase
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCaseImpl
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCase.AssetSizeLimits.ASSET_SIZE_DEFAULT_LIMIT_BYTES
import com.wire.kalium.logic.feature.call.usecase.ObserveEstablishedCallsUseCase
import io.mockk.MockKAnnotations
import io.mockk.coEvery
Expand Down Expand Up @@ -408,7 +408,7 @@ class RecordAudioViewModelTest {
.tempFilePath("temp_recording.wav")
coEvery { audioMediaRecorder.getMaxFileSizeReached() } returns flowOf(
RecordAudioDialogState.MaxFileSizeReached(
maxSize = GetAssetSizeLimitUseCaseImpl.ASSET_SIZE_DEFAULT_LIMIT_BYTES
maxSize = ASSET_SIZE_DEFAULT_LIMIT_BYTES
)
)
coEvery { generateAudioFileWithEffects(any(), any(), any()) } returns Unit
Expand Down
Loading