diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/components/FileItem.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/FileItem.kt
index 017a20452..f36ce4b38 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/components/FileItem.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/FileItem.kt
@@ -133,7 +133,7 @@ private fun FileItemContent(
.align(Alignment.TopEnd),
contentPadding = PaddingValues(0.dp),
shape = CircleShape,
- colors = ButtonDefaults.buttonColors(containerColor = SwissTransferTheme.colors.fileTileRemoveButtonBackground),
+ colors = ButtonDefaults.buttonColors(containerColor = SwissTransferTheme.colors.fileItemRemoveButtonBackground),
onClick = onRemove ?: {},
) {
Icon(
@@ -210,7 +210,6 @@ private fun FileItemPreview() {
{
var isChecked by remember { mutableStateOf(true) }
-
val iconFile = object : FileUiItem {
override val fileName: String = "How to not get fired.pdf"
override val uid: String = fileName
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/components/FileItemList.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/FileItemList.kt
new file mode 100644
index 000000000..8a7dbbbfd
--- /dev/null
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/FileItemList.kt
@@ -0,0 +1,95 @@
+/*
+ * Infomaniak SwissTransfer - Android
+ * Copyright (C) 2024 Infomaniak Network SA
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.infomaniak.swisstransfer.ui.components
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.foundation.lazy.grid.items
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import com.infomaniak.swisstransfer.ui.theme.Margin
+import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme
+import com.infomaniak.swisstransfer.ui.utils.PreviewLargeWindow
+import com.infomaniak.swisstransfer.ui.utils.PreviewSmallWindow
+
+@Composable
+fun FileItemList(
+ modifier: Modifier = Modifier,
+ files: List,
+ isRemoveButtonVisible: Boolean,
+ isCheckboxVisible: Boolean,
+ isUidChecked: (String) -> Boolean,
+ setUidCheckStatus: (String, Boolean) -> Unit,
+ onRemoveUid: (String) -> Unit,
+) {
+ LazyVerticalGrid(
+ modifier = modifier,
+ columns = GridCells.Adaptive(150.dp),
+ verticalArrangement = Arrangement.spacedBy(Margin.Medium),
+ horizontalArrangement = Arrangement.spacedBy(Margin.Medium),
+ ) {
+ items(files, key = { it.uid }) { file ->
+ FileItem(
+ file = file,
+ isRemoveButtonVisible = isRemoveButtonVisible,
+ isCheckboxVisible = isCheckboxVisible,
+ isChecked = { isUidChecked(file.uid) },
+ onClick = { if (isCheckboxVisible) setUidCheckStatus(file.uid, !isUidChecked(file.uid)) },
+ onRemove = { onRemoveUid(file.uid) },
+ )
+ }
+ }
+}
+
+@PreviewSmallWindow
+@PreviewLargeWindow
+@Composable
+private fun FileItemListPreview() {
+ val files = listOf(object : FileUiItem {
+ override val fileName: String = "The 5-Step Guide to Not Breaking Your Code.txt"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 57689032
+ override val mimeType: String? = null
+ override val uri: String = ""
+ }, object : FileUiItem {
+ override val fileName: String = "Introduction to Turning It Off and On Again.pptx"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 89723143
+ override val mimeType: String? = null
+ override val uri: String = ""
+ }, object : FileUiItem {
+ override val fileName: String = "Learning to Copy and Paste: A Complete Guide.docx"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 237866728
+ override val mimeType: String? = null
+ override val uri: String = ""
+ })
+
+ SwissTransferTheme {
+ FileItemList(
+ files = files,
+ isRemoveButtonVisible = false,
+ isCheckboxVisible = true,
+ isUidChecked = { false },
+ setUidCheckStatus = { _, _ -> },
+ onRemoveUid = {},
+ )
+ }
+}
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt
index 5a6be0f45..be1b27453 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/received/ReceivedScreen.kt
@@ -28,11 +28,14 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.infomaniak.swisstransfer.R
import com.infomaniak.swisstransfer.ui.components.EmptyState
+import com.infomaniak.swisstransfer.ui.components.FileUiItem
+import com.infomaniak.swisstransfer.ui.components.FileItemList
import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus
import com.infomaniak.swisstransfer.ui.images.illus.MascotSearching
import com.infomaniak.swisstransfer.ui.screen.main.components.BrandTopAppBarScaffold
import com.infomaniak.swisstransfer.ui.screen.main.received.components.ReceivedEmptyFab
import com.infomaniak.swisstransfer.ui.screen.main.sent.SentViewModel
+import com.infomaniak.swisstransfer.ui.theme.Margin
import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme
import com.infomaniak.swisstransfer.ui.utils.PreviewLargeWindow
import com.infomaniak.swisstransfer.ui.utils.PreviewSmallWindow
@@ -43,21 +46,61 @@ fun ReceivedScreen(
sentViewModel: SentViewModel = hiltViewModel(),
) {
val transfers by sentViewModel.transfers.collectAsStateWithLifecycle()
+ val isTransferChecked = sentViewModel.selectedTransferIds
val areTransfersEmpty by remember { derivedStateOf { transfers?.isEmpty() == true } }
- ReceivedScreen { areTransfersEmpty }
+ ReceivedScreen(
+ isFileChecked = { uid -> isTransferChecked[uid] == true },
+ setFileCheckStatus = { uid, isChecked -> isTransferChecked[uid] = isChecked },
+ areTransfersEmpty = { areTransfersEmpty }
+ )
}
@Composable
-private fun ReceivedScreen(areTransfersEmpty: () -> Boolean) {
+private fun ReceivedScreen(
+ isFileChecked: (String) -> Boolean,
+ setFileCheckStatus: (String, Boolean) -> Unit,
+ areTransfersEmpty: () -> Boolean
+) {
BrandTopAppBarScaffold(
floatingActionButton = { ReceivedEmptyFab(areTransfersEmpty) },
) {
- EmptyState(
- icon = AppIllus.MascotSearching,
- title = R.string.noTransferReceivedTitle,
- description = R.string.noTransferReceivedDescription,
- )
+ if (areTransfersEmpty()) {
+ EmptyState(
+ icon = AppIllus.MascotSearching,
+ title = R.string.noTransferReceivedTitle,
+ description = R.string.noTransferReceivedDescription,
+ )
+ } else {
+ val files = listOf(object : FileUiItem {
+ override val fileName: String = "The 5-Step Guide to Not Breaking Your Code.txt"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 57689032
+ override val mimeType: String? = null
+ override val uri: String = ""
+ }, object : FileUiItem {
+ override val fileName: String = "Introduction to Turning It Off and On Again.pptx"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 89723143
+ override val mimeType: String? = null
+ override val uri: String = ""
+ }, object : FileUiItem {
+ override val fileName: String = "Learning to Copy and Paste: A Complete Guide.docx"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 237866728
+ override val mimeType: String? = null
+ override val uri: String = ""
+ })
+ FileItemList(
+ modifier = Modifier.padding(Margin.Medium),
+ files = files,
+ isRemoveButtonVisible = false,
+ isCheckboxVisible = true,
+ isUidChecked = isFileChecked,
+ setUidCheckStatus = setFileCheckStatus,
+ onRemoveUid = {},
+ )
+ }
}
}
@@ -67,7 +110,7 @@ private fun ReceivedScreen(areTransfersEmpty: () -> Boolean) {
private fun ReceivedScreenPreview() {
SwissTransferTheme {
Surface {
- ReceivedScreen(areTransfersEmpty = { true })
+ ReceivedScreen(areTransfersEmpty = { true }, isFileChecked = { false }, setFileCheckStatus = { _, _ -> })
}
}
}
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentListScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentListScreen.kt
index 4fca7eb5f..d5f44b572 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentListScreen.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentListScreen.kt
@@ -17,16 +17,12 @@
*/
package com.infomaniak.swisstransfer.ui.screen.main.sent
-import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.lazy.grid.GridCells
-import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
import com.infomaniak.swisstransfer.ui.components.FileUiItem
-import com.infomaniak.swisstransfer.ui.components.FileItem
+import com.infomaniak.swisstransfer.ui.components.FileItemList
import com.infomaniak.swisstransfer.ui.theme.Margin
import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme
import com.infomaniak.swisstransfer.ui.utils.PreviewLargeWindow
@@ -34,30 +30,34 @@ import com.infomaniak.swisstransfer.ui.utils.PreviewSmallWindow
@Composable
fun SentListScreen(transfers: List) {
- LazyVerticalGrid(
+ val transfers = listOf(object : FileUiItem {
+ override val fileName: String = "The 5-Step Guide to Not Breaking Your Code.txt"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 57689032
+ override val mimeType: String? = null
+ override val uri: String = ""
+ }, object : FileUiItem {
+ override val fileName: String = "Introduction to Turning It Off and On Again.pptx"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 89723143
+ override val mimeType: String? = null
+ override val uri: String = ""
+ }, object : FileUiItem {
+ override val fileName: String = "Learning to Copy and Paste: A Complete Guide.docx"
+ override val uid: String = fileName
+ override val fileSizeInBytes: Long = 237866728
+ override val mimeType: String? = null
+ override val uri: String = ""
+ })
+ FileItemList(
modifier = Modifier.padding(Margin.Medium),
- columns = GridCells.Adaptive(150.dp),
- verticalArrangement = Arrangement.spacedBy(Margin.Medium),
- horizontalArrangement = Arrangement.spacedBy(Margin.Medium),
- ) {
- val imageFile = object : FileUiItem {
- override val fileName: String = "Time-Clock-Circle--Streamline-Ultimate.svg (1).png"
- override val uid: String = fileName
- override val fileSizeInBytes: Long = 456782
- override val mimeType: String? = null
- override val uri: String = "https://picsum.photos/200/300"
- }
-
- items(3) {
- FileItem(
- file = imageFile,
- isRemoveButtonVisible = true,
- isCheckboxVisible = true,
- isChecked = { true },
- onClick = {},
- onRemove = {})
- }
- }
+ files = transfers,
+ isRemoveButtonVisible = true,
+ isCheckboxVisible = false,
+ isUidChecked = { false },
+ setUidCheckStatus = { _, _ -> },
+ onRemoveUid = {},
+ )
}
@PreviewSmallWindow
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt
index 716aa01ba..84a9f7b88 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentScreen.kt
@@ -59,7 +59,6 @@ private fun SentScreen(transfers: List?) {
SentListScreen(transfers)
}
}
-
}
@PreviewSmallWindow
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentViewModel.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentViewModel.kt
index 10f39925e..d0e270aac 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentViewModel.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/sent/SentViewModel.kt
@@ -17,6 +17,8 @@
*/
package com.infomaniak.swisstransfer.ui.screen.main.sent
+import androidx.compose.runtime.mutableStateMapOf
+import androidx.compose.runtime.snapshots.SnapshotStateMap
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -28,4 +30,5 @@ import javax.inject.Inject
@HiltViewModel
class SentViewModel @Inject constructor() : ViewModel() {
val transfers = flow> { emit(listOf(1)) }.stateIn(viewModelScope, SharingStarted.Eagerly, null)
+ val selectedTransferIds: SnapshotStateMap = mutableStateMapOf()
}
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/ColorDark.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/ColorDark.kt
index 67a87f4c9..915997981 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/ColorDark.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/ColorDark.kt
@@ -75,7 +75,7 @@ val CustomDarkColorScheme = CustomColorScheme(
navigationItemBackground = Color(dark2),
tertiaryButtonBackground = Color(dark2),
selectedSettingItem = Color(dark2),
- fileTileRemoveButtonBackground = Color(black_translucent),
+ fileItemRemoveButtonBackground = Color(black_translucent),
transferTypeLinkContainer = Color(specific1),
transferTypeLinkOnContainer = Color(green_main),
transferTypeEmailContainer = Color(green_dark),
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/ColorLight.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/ColorLight.kt
index 1a888a5a3..0834bb1cd 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/ColorLight.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/ColorLight.kt
@@ -76,7 +76,7 @@ val CustomLightColorScheme = CustomColorScheme(
navigationItemBackground = LightColorScheme.background,
tertiaryButtonBackground = Color(rabbit),
selectedSettingItem = Color(rabbit),
- fileTileRemoveButtonBackground = Color(black_translucent),
+ fileItemRemoveButtonBackground = Color(black_translucent),
transferTypeLinkContainer = Color(specific1),
transferTypeLinkOnContainer = Color(green_main),
transferTypeEmailContainer = Color(specific2),
diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt
index 27fce6db1..6e252c599 100644
--- a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt
+++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt
@@ -75,7 +75,7 @@ data class CustomColorScheme(
val navigationItemBackground: Color = Color.Unspecified,
val tertiaryButtonBackground: Color = Color.Unspecified,
val selectedSettingItem: Color = Color.Unspecified,
- val fileTileRemoveButtonBackground: Color = Color.Unspecified,
+ val fileItemRemoveButtonBackground: Color = Color.Unspecified,
val transferTypeLinkContainer: Color = Color.Unspecified,
val transferTypeLinkOnContainer: Color = Color.Unspecified,
val transferTypeEmailContainer: Color = Color.Unspecified,