Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
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 @@ -24,7 +24,7 @@ import com.wire.kalium.cells.domain.CellUploadManager
import com.wire.kalium.cells.domain.usecase.AddAttachmentDraftUseCase
import com.wire.kalium.cells.domain.usecase.DeleteCellAssetUseCase
import com.wire.kalium.cells.domain.usecase.DownloadCellFileUseCase
import com.wire.kalium.cells.domain.usecase.GetCellFilesUseCase
import com.wire.kalium.cells.domain.usecase.GetNodesUseCase
import com.wire.kalium.cells.domain.usecase.GetPaginatedFilesFlowUseCase
import com.wire.kalium.cells.domain.usecase.ObserveAttachmentDraftsUseCase
import com.wire.kalium.cells.domain.usecase.PublishAttachmentsUseCase
Expand Down Expand Up @@ -83,7 +83,7 @@ class CellsModule {

@ViewModelScoped
@Provides
fun provideObserveFilesUseCase(cellsScope: CellsScope): GetCellFilesUseCase = cellsScope.observeFiles
fun provideObserveFilesUseCase(cellsScope: CellsScope): GetNodesUseCase = cellsScope.observeFiles

@ViewModelScoped
@Provides
Expand Down
1 change: 0 additions & 1 deletion app/src/main/kotlin/com/wire/android/ui/WireActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.core.content.ContextCompat.startActivity
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.flowWithLifecycle
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ fun AttachmentDraftView(
) {

val extension = remember(attachment.fileName) { attachment.fileName.fileExtension() ?: "" }
val fileType = remember(extension) { AttachmentFileType.fromExtension(extension) }
val attachmentFileType = remember(extension) { AttachmentFileType.fromExtension(extension) }

AttachmentScaffold(
onClick = onClick,
onMenuButtonClick = onMenuButtonClick,
showMenuButton = attachment.uploadError,
modifier = modifier,
) {
when (fileType) {
when (attachmentFileType) {
AttachmentFileType.IMAGE -> AttachmentImageView(
attachment = attachment,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ fun FileHeaderView(
labelColor: Color? = null,
isError: Boolean = false,
) {
val fileType = type ?: remember(extension) { AttachmentFileType.fromExtension(extension) }
val attachmentFileType = type ?: remember(extension) { AttachmentFileType.fromExtension(extension) }
val sizeString = remember(size) { size?.let { DeviceUtil.formatSize(size) } ?: "" }

Row(
Expand All @@ -72,7 +72,7 @@ fun FileHeaderView(
} else {
Image(
modifier = Modifier.size(dimensions().spacing16x),
painter = painterResource(id = fileType.icon()),
painter = painterResource(id = attachmentFileType.icon()),
contentDescription = null,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.constraintlayout.compose.ConstraintLayout
import com.wire.android.R
import com.wire.android.model.Clickable
import com.wire.android.feature.cells.domain.model.AttachmentFileType
import com.wire.android.model.Clickable
import com.wire.android.ui.common.attachmentdraft.ui.FileHeaderView
import com.wire.android.ui.common.clickable
import com.wire.android.ui.common.colorsScheme
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ import androidx.compose.runtime.mutableStateMapOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wire.android.appLogger
import com.wire.android.feature.cells.domain.model.AttachmentFileType
import com.wire.android.feature.cells.domain.model.AttachmentFileType.IMAGE
import com.wire.android.feature.cells.domain.model.AttachmentFileType.PDF
import com.wire.android.feature.cells.domain.model.AttachmentFileType.VIDEO
import com.wire.android.feature.cells.domain.model.AttachmentFileType
import com.wire.android.ui.common.multipart.AssetSource
import com.wire.android.ui.common.multipart.MultipartAttachmentUi
import com.wire.android.ui.common.multipart.toUiModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ package com.wire.android.feature.cells.domain.model

import com.wire.android.feature.cells.R

enum class AttachmentFileType(private val extensions: List<String>) {
enum class AttachmentFileType(val extensions: List<String>) {
IMAGE(listOf("jpg", "jpeg", "png", "gif", "webp")),
VIDEO(listOf("mp4", "mov", "m4v", "ogv", "webm")),
AUDIO(listOf("mp3", "wav", "ogg", "m4a", "flac", "aac")),
Expand All @@ -30,25 +30,18 @@ enum class AttachmentFileType(private val extensions: List<String>) {
ARCHIVE(listOf("zip", "rar", "7z", "tar", "gz", "bz2", "xz", "z")),
CODE(
listOf(
"xml", "html", "htm", "js", "json", "css", "PHP", "phtml", "sparql",
"xml", "html", "htm", "js", "json", "css", "php", "phtml", "sparql",
"py", "cs", "java", "jsp", "sql", "cgi", "pl", "inc", "xsl", "c", "cpp", "kt"
)
),
OTHER(emptyList());

companion object {
fun fromExtension(extension: String): AttachmentFileType {
entries.forEach { type ->
if (extension.lowercase() in type.extensions) {
return type
}
}

return OTHER
}
fun fromExtension(ext: String): AttachmentFileType =
entries.firstOrNull { it.extensions.contains(ext.lowercase()) } ?: OTHER

fun fromMimeType(mimeType: String): AttachmentFileType {
return fromExtension(mimeType.substringAfterLast("/"))
return AttachmentFileType.fromExtension(mimeType.substringAfterLast("/"))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ fun AllFilesScreen(
viewModel: CellViewModel = hiltViewModel(),
) {

val pagingListItems = viewModel.filesFlow.collectAsLazyPagingItems()
val pagingListItems = viewModel.nodesFlow.collectAsLazyPagingItems()

LaunchedEffect(searchBarState.searchQueryTextState.text) {
if (searchBarState.searchQueryTextState.text.isNotEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.itemContentType
import androidx.paging.compose.itemKey
import com.wire.android.feature.cells.R
import com.wire.android.feature.cells.ui.model.CellFileUi
import com.wire.android.feature.cells.ui.util.PreviewMultipleThemes
import com.wire.android.ui.common.button.WireSecondaryButton
import com.wire.android.feature.cells.ui.model.CellNodeUi
import com.wire.android.ui.common.colorsScheme
import com.wire.android.ui.common.dimensions
import com.wire.android.ui.common.divider.WireDivider
Expand All @@ -52,9 +52,9 @@ import com.wire.android.ui.theme.WireTheme

@Composable
internal fun CellFilesScreen(
files: LazyPagingItems<CellFileUi>,
onFileClick: (CellFileUi) -> Unit,
onFileMenuClick: (CellFileUi) -> Unit,
cellNodes: LazyPagingItems<CellNodeUi>,
onItemClick: (CellNodeUi) -> Unit,
onItemMenuClick: (CellNodeUi) -> Unit,
) {

LazyColumn(
Expand All @@ -63,28 +63,28 @@ internal fun CellFilesScreen(
.fillMaxWidth(),
) {
items(
count = files.itemCount,
key = files.itemKey { it.uuid },
contentType = files.itemContentType { it }
count = cellNodes.itemCount,
key = cellNodes.itemKey { it.uuid },
contentType = cellNodes.itemContentType { it }
) { index ->

files[index]?.let { file ->
cellNodes[index]?.let { item ->
CellListItem(
modifier = Modifier
.animateItem()
.background(color = colorsScheme().surface)
.clickable { onFileClick(file) },
file = file,
onMenuClick = { onFileMenuClick(file) }
.clickable { onItemClick(item) },
cell = item,
onMenuClick = { onItemMenuClick(item) }
)
WireDivider(modifier = Modifier.fillMaxWidth())
}
}

when (files.loadState.append) {
when (cellNodes.loadState.append) {
is LoadState.Error -> item(contentType = "error") {
ErrorFooter(
onRetry = { files.retry() }
onRetry = { cellNodes.retry() }
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ import coil.compose.AsyncImage
import coil.request.ImageRequest
import com.wire.android.feature.cells.R
import com.wire.android.feature.cells.domain.model.AttachmentFileType
import com.wire.android.feature.cells.ui.model.CellFileUi
import com.wire.android.feature.cells.domain.model.icon
import com.wire.android.feature.cells.domain.model.previewSupported
import com.wire.android.feature.cells.ui.model.CellNodeUi
import com.wire.android.feature.cells.ui.util.PreviewMultipleThemes
import com.wire.android.ui.common.colorsScheme
import com.wire.android.ui.common.dimensions
Expand All @@ -65,7 +65,7 @@ import com.wire.android.ui.theme.WireTheme

@Composable
internal fun CellListItem(
file: CellFileUi,
cell: CellNodeUi,
onMenuClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Expand All @@ -76,7 +76,12 @@ internal fun CellListItem(
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
) {
FileIconPreview(file)

if (cell is CellNodeUi.File) {
FileIconPreview(cell)
} else {
FolderIconPreview()
}

Column(
modifier = Modifier
Expand All @@ -86,13 +91,13 @@ internal fun CellListItem(
) {

Text(
text = file.fileName ?: "",
text = cell.name ?: "",
style = typography().title02,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)

file.subtitle()?.let {
cell.subtitle()?.let {
Text(
text = it,
textAlign = TextAlign.Left,
Expand All @@ -116,32 +121,49 @@ internal fun CellListItem(
)
}
}
file.downloadProgress?.let {
WireLinearProgressIndicator(
modifier = Modifier
.fillMaxWidth()
.align(Alignment.BottomStart),
progress = { it },
color = colorsScheme().primary,
trackColor = Color.Transparent,
)
if (cell is CellNodeUi.File) {
cell.downloadProgress?.let {
WireLinearProgressIndicator(
modifier = Modifier
.fillMaxWidth()
.align(Alignment.BottomStart),
progress = { cell.downloadProgress },
color = colorsScheme().primary,
trackColor = Color.Transparent,
)
}
}
}
}

@Composable
internal fun FileIconPreview(file: CellFileUi) {
internal fun FolderIconPreview() {
Box(
modifier = Modifier
.size(dimensions().spacing56x),
contentAlignment = Alignment.Center
) {
if (file.previewUrl != null && file.assetType.previewSupported()) {
Image(
modifier = Modifier.size(dimensions().spacing32x),
painter = painterResource(R.drawable.ic_folder_item),
contentDescription = null,
)
}
}

@Composable
internal fun FileIconPreview(cell: CellNodeUi.File) {
Box(
modifier = Modifier
.size(dimensions().spacing56x),
contentAlignment = Alignment.Center
) {
if (cell.previewUrl != null && cell.assetType.previewSupported()) {

val builder = ImageRequest.Builder(LocalContext.current)
.diskCacheKey(file.contentHash)
.memoryCacheKey(file.contentHash)
.data(file.previewUrl)
.diskCacheKey(cell.contentHash)
.memoryCacheKey(cell.contentHash)
.data(cell.previewUrl)
.crossfade(true)

AsyncImage(
Expand All @@ -161,7 +183,7 @@ internal fun FileIconPreview(file: CellFileUi) {
model = builder.build(),
contentDescription = null,
)
file.publicLinkId?.let {
cell.publicLinkId?.let {
PublicLinkIcon(
offsetX = dimensions().spacing16x,
offsetY = dimensions().spacing16x
Expand All @@ -170,10 +192,10 @@ internal fun FileIconPreview(file: CellFileUi) {
} else {
Image(
modifier = Modifier.size(dimensions().spacing32x),
painter = painterResource(file.assetType.icon()),
painter = painterResource(cell.assetType.icon()),
contentDescription = null,
)
file.publicLinkId?.let {
cell.publicLinkId?.let {
PublicLinkIcon()
}
}
Expand Down Expand Up @@ -208,14 +230,14 @@ private fun PublicLinkIcon(
}

@Composable
private fun CellFileUi.subtitle() =
private fun CellNodeUi.subtitle() =
when {
userName != null && conversationName != null -> {
stringResource(R.string.file_subtitle, userName, conversationName)
stringResource(R.string.file_subtitle, userName!!, conversationName!!)
}

userName != null && modifiedTime != null -> {
stringResource(R.string.file_subtitle_modified, modifiedTime, userName)
stringResource(R.string.file_subtitle_modified, modifiedTime!!, userName!!)
}

userName != null -> userName
Expand All @@ -229,17 +251,22 @@ private fun CellFileUi.subtitle() =
private fun PreviewCellListItem() {
WireTheme {
CellListItem(
file = CellFileUi(
cell = CellNodeUi.File(
uuid = "",
fileName = "file name",
downloadProgress = 0.75f,
name = "file name",
assetType = AttachmentFileType.IMAGE,
assetSize = 123214,
localPath = null,
mimeType = "image/jpg",
publicLinkId = "",
downloadProgress = 0.75f,
userName = "Test User",
conversationName = "Test Conversation"
conversationName = "Test Conversation",
modifiedTime = null,
remotePath = null,
contentHash = null,
contentUrl = null,
previewUrl = null
),
onMenuClick = {},
)
Expand Down
Loading
Loading