Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import com.wire.kalium.cells.domain.usecase.GetFoldersUseCase
import com.wire.kalium.cells.domain.usecase.GetMessageAttachmentUseCase
import com.wire.kalium.cells.domain.usecase.GetPaginatedFilesFlowUseCase
import com.wire.kalium.cells.domain.usecase.GetPaginatedNodesUseCase
import com.wire.kalium.cells.domain.usecase.GetWireCellConfigurationUseCase
import com.wire.kalium.cells.domain.usecase.IsAtLeastOneCellAvailableUseCase
import com.wire.kalium.cells.domain.usecase.MoveNodeUseCase
import com.wire.kalium.cells.domain.usecase.ObserveAttachmentDraftsUseCase
Expand Down Expand Up @@ -220,4 +221,8 @@ class CellsModule {
@Provides
fun provideRestoreNodeVersionUseCase(cellsScope: CellsScope): RestoreNodeVersionUseCase =
cellsScope.restoreNodeVersion

@ViewModelScoped
@Provides
fun provideGetCellsConfigUseCase(cellsScope: CellsScope): GetWireCellConfigurationUseCase = cellsScope.getCellConfig
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@ import com.wire.android.ui.common.multipart.toUiModel
import com.wire.android.util.FileManager
import com.wire.kalium.cells.domain.usecase.DownloadCellFileUseCase
import com.wire.kalium.cells.domain.usecase.GetEditorUrlUseCase
import com.wire.kalium.cells.domain.usecase.GetWireCellConfigurationUseCase
import com.wire.kalium.common.functional.onSuccess
import com.wire.kalium.logic.data.asset.AssetTransferStatus
import com.wire.kalium.logic.data.asset.KaliumFileSystem
import com.wire.kalium.logic.data.featureConfig.CollaboraEdition
import com.wire.kalium.logic.data.message.AssetContent
import com.wire.kalium.logic.data.message.CellAssetContent
import com.wire.kalium.logic.data.message.MessageAttachment
Expand Down Expand Up @@ -107,14 +109,22 @@ class MultipartAttachmentsViewModelImpl @Inject constructor(
private val fileManager: FileManager,
private val kaliumFileSystem: KaliumFileSystem,
private val featureFlags: KaliumConfigs,
private val getWireCellsConfig: GetWireCellConfigurationUseCase,
) : ViewModel(), MultipartAttachmentsViewModel {

private val uploadProgress = mutableStateMapOf<String, Float>()

private var isCollaboraEnabled: Boolean = false

init {
loadWireCellConfig()
}

override fun onClick(attachment: MultipartAttachmentUi, openInImageViewer: (String) -> Unit) {
when {
attachment.isImage() && !attachment.fileNotFound() -> openInImageViewer(attachment.uuid)
attachment.isEditSupported && featureFlags.collaboraIntegration -> openOnlineEditor(attachment.uuid)
attachment.isEditSupported && isCollaboraEnabled && featureFlags.collaboraIntegration ->
openOnlineEditor(attachment.uuid)
attachment.fileNotFound() -> { refreshHelper.refresh(attachment.uuid) }
attachment.localFileAvailable() -> openLocalFile(attachment)
attachment.canOpenWithUrl() -> openUrl(attachment)
Expand Down Expand Up @@ -187,8 +197,10 @@ class MultipartAttachmentsViewModelImpl @Inject constructor(
refreshHelper.close()
}

private fun MessageAttachment.toUiModel() =
toUiModel(uploadProgress[assetId()])
private fun loadWireCellConfig() = viewModelScope.launch {
val config = getWireCellsConfig()
isCollaboraEnabled = config?.collabora != CollaboraEdition.NO
}
}

private fun MessageAttachment.assetId() =
Expand Down
3 changes: 2 additions & 1 deletion default.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@
"analytics_app_key": "8ffae535f1836ed5f58fd5c8a11c00eca07c5438",
"analytics_server_url": "https://wire.count.ly/",
"enable_new_registration": true,
"use_async_flush_logging": true
"use_async_flush_logging": true,
"collabora_integration": true
},
"internal": {
"application_id": "com.wire.internal",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import com.wire.android.feature.cells.ui.model.localFileAvailable
import com.wire.kalium.logic.featureFlags.KaliumConfigs
import javax.inject.Inject

@Suppress("CyclomaticComplexMethod", "LongParameterList")
class CellFileActionsMenu @Inject constructor(
private val featureFlags: KaliumConfigs
) {
Expand All @@ -32,7 +33,8 @@ class CellFileActionsMenu @Inject constructor(
isRecycleBin: Boolean,
isConversationFiles: Boolean,
isAllFiles: Boolean,
isSearching: Boolean
isSearching: Boolean,
isCollaboraEnabled: Boolean,
): List<NodeBottomSheetAction> =
when {
isRecycleBin -> {
Expand All @@ -50,7 +52,7 @@ class CellFileActionsMenu @Inject constructor(
add(NodeBottomSheetAction.PUBLIC_LINK)
add(NodeBottomSheetAction.DOWNLOAD)

if (featureFlags.collaboraIntegration && cellNode.isEditSupported()) {
if (isCollaboraEnabled && featureFlags.collaboraIntegration && cellNode.isEditSupported()) {
add(NodeBottomSheetAction.EDIT)
}

Expand Down Expand Up @@ -86,7 +88,6 @@ class CellFileActionsMenu @Inject constructor(
internal data class Download(val node: CellNodeUi) : MenuActionResult
internal data class Edit(val node: CellNodeUi) : MenuActionResult

@Suppress("CyclomaticComplexMethod")
internal fun onMenuItemAction(
conversationId: String?,
parentFolderUuid: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,13 @@ import com.wire.kalium.cells.domain.usecase.DownloadCellFileUseCase
import com.wire.kalium.cells.domain.usecase.GetAllTagsUseCase
import com.wire.kalium.cells.domain.usecase.GetEditorUrlUseCase
import com.wire.kalium.cells.domain.usecase.GetPaginatedFilesFlowUseCase
import com.wire.kalium.cells.domain.usecase.GetWireCellConfigurationUseCase
import com.wire.kalium.cells.domain.usecase.IsAtLeastOneCellAvailableUseCase
import com.wire.kalium.cells.domain.usecase.RestoreNodeFromRecycleBinUseCase
import com.wire.kalium.common.functional.fold
import com.wire.kalium.common.functional.onFailure
import com.wire.kalium.common.functional.onSuccess
import com.wire.kalium.logic.data.featureConfig.CollaboraEdition
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.collections.immutable.toImmutableMap
import kotlinx.coroutines.delay
Expand Down Expand Up @@ -89,6 +91,7 @@ class CellViewModel @Inject constructor(
private val getEditorUrl: GetEditorUrlUseCase,
private val onlineEditor: OnlineEditor,
private val cellFileActionsMenu: CellFileActionsMenu,
private val getWireCellsConfig: GetWireCellConfigurationUseCase,
) : ActionsViewModel<CellViewAction>() {

private val navArgs: CellFilesNavArgs = savedStateHandle.navArgs()
Expand Down Expand Up @@ -132,10 +135,11 @@ class CellViewModel @Inject constructor(

private val refreshTrigger = MutableSharedFlow<Unit>(replay = 0)

private var isCollaboraEnabled: Boolean = false

init {
viewModelScope.launch {
loadTags()
}
loadTags()
loadWireCellConfig()
}

internal val nodesFlow = flow {
Expand Down Expand Up @@ -374,7 +378,8 @@ class CellViewModel @Inject constructor(
isRecycleBin = isRecycleBin(),
isConversationFiles = isConversationFiles(),
isAllFiles = isAllFiles(),
isSearching = isSearching()
isSearching = isSearching(),
isCollaboraEnabled = isCollaboraEnabled,
)

_menu.emit(MenuOptions(cellNode, menuItems))
Expand Down Expand Up @@ -499,12 +504,17 @@ class CellViewModel @Inject constructor(
}
}

suspend fun loadTags() {
internal fun loadTags() = viewModelScope.launch {
getAllTagsUseCase().onSuccess { updated -> _tags.update { updated.sorted().toSet() } }
// apply delay to avoid too frequent requests
delay(30.seconds)
}

private fun loadWireCellConfig() = viewModelScope.launch {
val config = getWireCellsConfig()
isCollaboraEnabled = config?.collabora != CollaboraEdition.NO
}

companion object {
const val ZIP_EXTENSION = ".zip"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ fun FilterBottomSheet(
onApply: (Set<String>) -> Unit,
onClearAll: () -> Unit,
onDismiss: () -> Unit,
onShow: suspend () -> Unit = {},
onShow: () -> Unit = {},
sheetState: WireModalSheetState<Unit> = rememberWireModalSheetState<Unit>(WireSheetValue.Expanded(Unit))
) {
WireModalSheetLayout(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -456,12 +456,13 @@ class CellFileActionsMenuTest {
isConversationFiles: Boolean = false,
isAllFiles: Boolean = false,
isSearching: Boolean = false,
isCollaboraEnabled: Boolean = false,
): List<NodeBottomSheetAction> =
CellFileActionsMenu(
featureFlags = KaliumConfigs(
collaboraIntegration = withCollaboraIntegration
)
).buildMenu(fileNode, isRecycleBin, isConversationFiles, isAllFiles, isSearching)
).buildMenu(fileNode, isRecycleBin, isConversationFiles, isAllFiles, isSearching, isCollaboraEnabled)

private companion object {
val fileNode = CellNodeUi.File(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.wire.kalium.cells.domain.usecase.DownloadCellFileUseCase
import com.wire.kalium.cells.domain.usecase.GetAllTagsUseCase
import com.wire.kalium.cells.domain.usecase.GetEditorUrlUseCase
import com.wire.kalium.cells.domain.usecase.GetPaginatedFilesFlowUseCase
import com.wire.kalium.cells.domain.usecase.GetWireCellConfigurationUseCase
import com.wire.kalium.cells.domain.usecase.IsAtLeastOneCellAvailableUseCase
import com.wire.kalium.cells.domain.usecase.RestoreNodeFromRecycleBinUseCase
import com.wire.kalium.common.error.CoreFailure
Expand Down Expand Up @@ -304,6 +305,9 @@ class CellViewModelTest {
@MockK
lateinit var cellFileActionsMenu: CellFileActionsMenu

@MockK
lateinit var getWireCellsConfig: GetWireCellConfigurationUseCase

init {

MockKAnnotations.init(this, relaxUnitFun = true)
Expand Down Expand Up @@ -384,6 +388,7 @@ class CellViewModelTest {
onlineEditor = onlineEditor,
getEditorUrl = getEditorUrlUseCase,
cellFileActionsMenu = cellFileActionsMenu,
getWireCellsConfig = getWireCellsConfig,
)
}
}
Expand Down
2 changes: 1 addition & 1 deletion kalium
Submodule kalium updated 49 files
+2 −7 core/data/src/commonMain/kotlin/com/wire/kalium/logic/data/featureConfig/FeatureConfigModel.kt
+59 −0 core/data/src/commonMain/kotlin/com/wire/kalium/logic/data/featureConfig/WireCellsFeatureConfigModel.kt
+38 −0 ...del/src/commonMain/kotlin/com/wire/kalium/network/api/authenticated/featureConfigs/FeatureConfigResponse.kt
+2 −4 data/persistence/src/androidInstrumentedTest/kotlin/com/wire/kalium/persistence/BaseDatabaseTest.kt
+4 −30 data/persistence/src/androidMain/kotlin/com/wire/kalium/persistence/db/UserDatabase.kt
+1 −6 data/persistence/src/androidUnitTest/kotlin/com/wire/kalium/persistence/BaseDatabaseTest.kt
+14 −33 data/persistence/src/appleMain/kotlin/com/wire/kalium/persistence/db/UserDatabase.kt
+2 −10 data/persistence/src/appleTest/kotlin/com/wire/kalium/persistence/BaseDatabaseTest.kt
+7 −0 data/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/config/UserConfigStorage.kt
+16 −0 data/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/unread/UserConfigDAO.kt
+0 −162 data/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/db/DbInvalidationController.kt
+0 −49 data/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/db/MutedSqlDriver.kt
+2 −5 data/persistence/src/commonMain/kotlin/com/wire/kalium/persistence/db/UserDatabaseBuilder.kt
+1 −2 data/persistence/src/commonTest/kotlin/com/wire/kalium/persistence/BaseDatabaseTest.kt
+0 −84 data/persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/ConversationDAOTest.kt
+0 −102 data/persistence/src/commonTest/kotlin/com/wire/kalium/persistence/db/DbInvalidationControllerTest.kt
+1 −3 data/persistence/src/jsMain/kotlin/com/wire/kalium/persistence/db/UserDatabase.kt
+1 −3 data/persistence/src/jsTest/kotlin/com/wire/kalium/persistence/BaseDatabaseTest.kt
+7 −38 data/persistence/src/jvmMain/kotlin/com/wire/kalium/persistence/db/UserDatabase.kt
+2 −4 data/persistence/src/jvmTest/kotlin/com/wire/kalium/persistence/BaseDatabaseTest.kt
+10 −27 domain/cells/src/commonMain/kotlin/com/wire/kalium/cells/CellsCredentialsProvider.kt
+94 −49 domain/cells/src/commonMain/kotlin/com/wire/kalium/cells/CellsScope.kt
+42 −0 domain/cells/src/commonMain/kotlin/com/wire/kalium/cells/data/CellConfigDataSource.kt
+26 −0 domain/cells/src/commonMain/kotlin/com/wire/kalium/cells/domain/CellConfigRepository.kt
+26 −0 domain/cells/src/commonMain/kotlin/com/wire/kalium/cells/domain/model/WireCellsConfig.kt
+34 −0 domain/cells/src/commonMain/kotlin/com/wire/kalium/cells/domain/usecase/GetWireCellConfigurationUseCase.kt
+2 −8 logic/src/androidMain/kotlin/com/wire/kalium/logic/di/PlatformUserStorageProvider.kt
+6 −12 logic/src/appleMain/kotlin/com/wire/kalium/logic/di/PlatformUserStorageProvider.kt
+17 −0 logic/src/commonMain/kotlin/com/wire/kalium/logic/configuration/UserConfigRepository.kt
+15 −2 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/event/Event.kt
+5 −0 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/event/EventMapper.kt
+14 −2 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/featureConfig/FeatureConfigMapper.kt
+1 −2 logic/src/commonMain/kotlin/com/wire/kalium/logic/di/PlatformUserStorageProvider.kt
+3 −5 logic/src/commonMain/kotlin/com/wire/kalium/logic/di/UserStorageProvider.kt
+9 −20 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/UserSessionScope.kt
+1 −0 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/featureConfig/SyncFeatureConfigsUseCase.kt
+12 −0 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/message/MarkMessagesAsNotifiedUseCase.kt
+16 −30 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/message/MessageScope.kt
+0 −1 logic/src/commonMain/kotlin/com/wire/kalium/logic/featureFlags/KaliumConfigs.kt
+3 −7 logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/incremental/IncrementalSyncWorker.kt
+1 −0 logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/FeatureConfigEventReceiver.kt
+15 −2 logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/handler/CellsConfigHandler.kt
+4 −0 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/event/FeatureConfigMapperTest.kt
+9 −1 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/featureConfig/FeatureConfigRepositoryTest.kt
+7 −2 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/featureConfig/FeatureConfigTest.kt
+1 −8 logic/src/commonTest/kotlin/com/wire/kalium/logic/sync/incremental/IncrementalSyncWorkerTest.kt
+2 −4 logic/src/jvmMain/kotlin/com/wire/kalium/logic/di/PlatformUserStorageProvider.kt
+4 −0 test/mocks/src/commonMain/kotlin/com/wire/kalium/mocks/responses/FeatureConfigJson.kt
+4 −0 test/mocks/src/commonMain/kotlin/com/wire/kalium/mocks/responses/FeatureConfigResponseJson.kt
Loading