Skip to content

Commit f0db033

Browse files
authored
feat: Share folder via link (WPB-17276) (#4019)
1 parent b0e098c commit f0db033

File tree

13 files changed

+44
-41
lines changed

13 files changed

+44
-41
lines changed

features/cells/src/main/java/com/wire/android/feature/cells/ui/AllFilesScreen.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,14 @@ fun AllFilesScreen(
6767
menuState = viewModel.menu,
6868
isAllFiles = true,
6969
isSearchResult = viewModel.hasSearchQuery(),
70-
showPublicLinkScreen = { assetId, fileName, linkId ->
70+
showPublicLinkScreen = { assetId, fileName, linkId, isFolder ->
7171
navigator.navigate(
7272
NavigationCommand(
7373
PublicLinkScreenDestination(
7474
assetId = assetId,
7575
fileName = fileName,
76-
publicLinkId = linkId
76+
publicLinkId = linkId,
77+
isFolder = isFolder
7778
)
7879
)
7980
)

features/cells/src/main/java/com/wire/android/feature/cells/ui/CellFilesScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import androidx.compose.material.Text
3232
import androidx.compose.runtime.Composable
3333
import androidx.compose.ui.Alignment
3434
import androidx.compose.ui.Modifier
35+
import com.wire.android.feature.cells.ui.model.CellNodeUi
3536
import androidx.compose.ui.res.stringResource
3637
import androidx.compose.ui.text.style.TextAlign
3738
import androidx.paging.LoadState
@@ -41,7 +42,6 @@ import androidx.paging.compose.itemKey
4142
import com.wire.android.feature.cells.R
4243
import com.wire.android.feature.cells.ui.util.PreviewMultipleThemes
4344
import com.wire.android.ui.common.button.WireSecondaryButton
44-
import com.wire.android.feature.cells.ui.model.CellNodeUi
4545
import com.wire.android.ui.common.colorsScheme
4646
import com.wire.android.ui.common.dimensions
4747
import com.wire.android.ui.common.divider.WireDivider

features/cells/src/main/java/com/wire/android/feature/cells/ui/CellScreenContent.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ internal fun CellScreenContent(
6565
onFolderClick: (CellNodeUi.Folder) -> Unit,
6666
downloadFileState: StateFlow<CellNodeUi.File?>,
6767
menuState: Flow<MenuOptions?>,
68-
showPublicLinkScreen: (String, String, String?) -> Unit,
68+
showPublicLinkScreen: (String, String, String?, Boolean) -> Unit,
6969
isAllFiles: Boolean,
7070
isSearchResult: Boolean = false,
7171
) {
@@ -155,9 +155,10 @@ internal fun CellScreenContent(
155155
is ShowError -> Toast.makeText(context, action.error.message, Toast.LENGTH_SHORT).show()
156156
is ShowDeleteConfirmation -> deleteConfirmation = action.file
157157
is ShowPublicLinkScreen -> showPublicLinkScreen(
158-
action.file.uuid,
159-
action.file.name ?: action.file.uuid,
160-
action.file.publicLinkId
158+
action.cellNode.uuid,
159+
action.cellNode.name ?: action.cellNode.uuid,
160+
action.cellNode.publicLinkId,
161+
action.cellNode is CellNodeUi.Folder
161162
)
162163
is RefreshData -> pagingListItems.refresh()
163164
}

features/cells/src/main/java/com/wire/android/feature/cells/ui/CellViewModel.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,10 +285,12 @@ class CellViewModel @Inject constructor(
285285
}
286286
}
287287

288-
@Suppress("UNUSED_PARAMETER")
289288
private fun onMenuFolderAction(folder: CellNodeUi.Folder, action: BottomSheetAction.Folder) {
290289
when (action.action) {
291-
FolderAction.SHARE -> TODO()
290+
FolderAction.SHARE -> {
291+
sendAction(ShowPublicLinkScreen(folder))
292+
}
293+
292294
FolderAction.MOVE -> TODO()
293295
FolderAction.DOWNLOAD -> TODO()
294296
FolderAction.DELETE -> TODO()
@@ -353,7 +355,7 @@ sealed interface CellViewIntent {
353355
sealed interface CellViewAction
354356
internal data class ShowDeleteConfirmation(val file: CellNodeUi.File) : CellViewAction
355357
internal data class ShowError(val error: CellError) : CellViewAction
356-
internal data class ShowPublicLinkScreen(val file: CellNodeUi.File) : CellViewAction
358+
internal data class ShowPublicLinkScreen(val cellNode: CellNodeUi) : CellViewAction
357359
internal data object RefreshData : CellViewAction
358360

359361
internal enum class CellError(val message: Int) {

features/cells/src/main/java/com/wire/android/feature/cells/ui/ConversationFilesScreen.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ fun ConversationFilesScreenContent(
160160
isAllFiles = false,
161161
onFolderClick = {
162162
val folderPath = "$currentNodeUuid/${it.name}"
163+
163164
navigator.navigate(
164165
NavigationCommand(
165166
ConversationFilesWithSlideInTransitionScreenDestination(
@@ -171,13 +172,14 @@ fun ConversationFilesScreenContent(
171172
)
172173
)
173174
},
174-
showPublicLinkScreen = { assetId, fileName, linkId ->
175+
showPublicLinkScreen = { assetId, fileName, linkId, isFolder ->
175176
navigator.navigate(
176177
NavigationCommand(
177178
PublicLinkScreenDestination(
178179
assetId = assetId,
179180
fileName = fileName,
180-
publicLinkId = linkId
181+
publicLinkId = linkId,
182+
isFolder = isFolder
181183
)
182184
)
183185
)

features/cells/src/main/java/com/wire/android/feature/cells/ui/dialog/FileActionsBottomSheet.kt

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import androidx.compose.foundation.layout.height
2525
import androidx.compose.foundation.layout.padding
2626
import androidx.compose.material3.Text
2727
import androidx.compose.runtime.Composable
28-
import androidx.compose.runtime.rememberCoroutineScope
2928
import androidx.compose.ui.Alignment
3029
import androidx.compose.ui.Modifier
3130
import androidx.compose.ui.text.style.TextOverflow
@@ -44,7 +43,6 @@ import com.wire.android.ui.common.dimensions
4443
import com.wire.android.ui.common.divider.WireDivider
4544
import com.wire.android.ui.common.typography
4645
import com.wire.android.ui.theme.WireTheme
47-
import kotlinx.coroutines.launch
4846

4947
@Composable
5048
internal fun FileActionsBottomSheet(
@@ -54,8 +52,6 @@ internal fun FileActionsBottomSheet(
5452
sheetState: WireModalSheetState<Unit> = rememberWireModalSheetState<Unit>(WireSheetValue.Expanded(Unit))
5553
) {
5654

57-
val scope = rememberCoroutineScope()
58-
5955
WireModalSheetLayout(
6056
onDismissRequest = {
6157
onDismiss()
@@ -65,11 +61,7 @@ internal fun FileActionsBottomSheet(
6561
SheetContent(
6662
menuOptions = menuOptions,
6763
onAction = { action ->
68-
scope.launch { sheetState.hide() }.invokeOnCompletion {
69-
if (!sheetState.isVisible) {
70-
onAction(action)
71-
}
72-
}
64+
onAction(action)
7365
}
7466
)
7567
}
@@ -131,13 +123,7 @@ private fun PreviewFileActionsBottomSheet() {
131123
localPath = "",
132124
userName = null,
133125
conversationName = null,
134-
modifiedTime = null,
135-
remotePath = null,
136-
contentHash = null,
137-
contentUrl = null,
138-
previewUrl = null,
139-
downloadProgress = null,
140-
publicLinkId = null,
126+
modifiedTime = null
141127
),
142128
actions = listOf(
143129
BottomSheetAction.File(FileAction.SHARE),

features/cells/src/main/java/com/wire/android/feature/cells/ui/dialog/FolderActionsBottomSheet.kt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import androidx.compose.foundation.layout.Column
2222
import androidx.compose.foundation.layout.fillMaxWidth
2323
import androidx.compose.foundation.layout.padding
2424
import androidx.compose.runtime.Composable
25-
import androidx.compose.runtime.rememberCoroutineScope
2625
import androidx.compose.ui.Modifier
2726
import com.wire.android.feature.cells.ui.MenuOptions
2827
import com.wire.android.feature.cells.ui.model.BottomSheetAction
@@ -36,7 +35,6 @@ import com.wire.android.ui.common.bottomsheet.rememberWireModalSheetState
3635
import com.wire.android.ui.common.dimensions
3736
import com.wire.android.ui.common.divider.WireDivider
3837
import com.wire.android.ui.theme.WireTheme
39-
import kotlinx.coroutines.launch
4038

4139
@Composable
4240
internal fun FolderActionsBottomSheet(
@@ -45,7 +43,6 @@ internal fun FolderActionsBottomSheet(
4543
onDismiss: () -> Unit,
4644
sheetState: WireModalSheetState<Unit> = rememberWireModalSheetState<Unit>(WireSheetValue.Expanded(Unit))
4745
) {
48-
val scope = rememberCoroutineScope()
4946

5047
WireModalSheetLayout(
5148
onDismissRequest = {
@@ -64,11 +61,7 @@ internal fun FolderActionsBottomSheet(
6461
menuOptions.actions.forEach { action ->
6562
BottomSheetMenuItem(
6663
modifier = Modifier.clickable {
67-
scope.launch { sheetState.hide() }.invokeOnCompletion {
68-
if (!sheetState.isVisible) {
69-
onAction(action)
70-
}
71-
}
64+
onAction(action)
7265
},
7366
action = action
7467
)

features/cells/src/main/java/com/wire/android/feature/cells/ui/model/CellNodeUi.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ sealed class CellNodeUi {
3131
abstract val userName: String?
3232
abstract val conversationName: String?
3333
abstract val modifiedTime: String?
34+
abstract val publicLinkId: String?
3435

3536
data class Folder(
3637
override val name: String?,
3738
override val uuid: String,
3839
override val userName: String?,
3940
override val conversationName: String?,
4041
override val modifiedTime: String?,
42+
override val publicLinkId: String? = null,
4143
) : CellNodeUi()
4244

4345
data class File(
@@ -46,6 +48,7 @@ sealed class CellNodeUi {
4648
override val userName: String?,
4749
override val conversationName: String?,
4850
override val modifiedTime: String?,
51+
override val publicLinkId: String? = null,
4952
val mimeType: String,
5053
val assetType: AttachmentFileType,
5154
val assetSize: Long?,
@@ -55,7 +58,6 @@ sealed class CellNodeUi {
5558
val contentUrl: String? = null,
5659
val previewUrl: String? = null,
5760
val downloadProgress: Float? = null,
58-
val publicLinkId: String? = null,
5961
) : CellNodeUi()
6062
}
6163

features/cells/src/main/java/com/wire/android/feature/cells/ui/publiclink/PublicLinkNavArgs.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ data class PublicLinkNavArgs(
2121
val assetId: String,
2222
val fileName: String,
2323
val publicLinkId: String?,
24+
val isFolder: Boolean,
2425
)

features/cells/src/main/java/com/wire/android/feature/cells/ui/publiclink/PublicLinkScreen.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ fun PublicLinkScreen(
8484
topBar = {
8585
WireCenterAlignedTopAppBar(
8686
onNavigationPressed = { resultNavigator.navigateBack() },
87-
title = stringResource(R.string.share_file_via_link),
87+
title = if (viewModel.isFolder()) {
88+
stringResource(R.string.share_folder_via_link)
89+
} else {
90+
stringResource(R.string.share_file_via_link)
91+
},
8892
navigationIconType = NavigationIconType.Close(),
8993
elevation = dimensions().spacing0x
9094
)
@@ -95,6 +99,7 @@ fun PublicLinkScreen(
9599
) {
96100
EnableLinkSection(
97101
checked = state.enabled,
102+
isFolder = viewModel.isFolder(),
98103
onCheckChange = {
99104
viewModel.onEnabled(it)
100105
}
@@ -144,6 +149,7 @@ fun PublicLinkScreen(
144149
@Composable
145150
private fun EnableLinkSection(
146151
checked: Boolean,
152+
isFolder: Boolean,
147153
onCheckChange: (Boolean) -> Unit
148154
) {
149155
Column(
@@ -174,7 +180,11 @@ private fun EnableLinkSection(
174180
modifier = Modifier.height(dimensions().spacing16x)
175181
)
176182
Text(
177-
text = stringResource(R.string.public_link_message),
183+
text = if (isFolder) {
184+
stringResource(R.string.public_link_message_folder)
185+
} else {
186+
stringResource(R.string.public_link_message_file)
187+
},
178188
style = typography().body01
179189
)
180190
}
@@ -238,6 +248,7 @@ private fun PreviewCreatePublicLinkScreen() {
238248
Column {
239249
EnableLinkSection(
240250
checked = true,
251+
isFolder = false,
241252
onCheckChange = {}
242253
)
243254
PublicLinkSection(

0 commit comments

Comments
 (0)