From e7bb6a08f82e9c228980573532072a9b8251b36b Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Sat, 5 Oct 2024 10:12:21 +0300 Subject: [PATCH] Finished trash screen and functionality + string improvements. --- .idea/compiler.xml | 2 +- .idea/gradle.xml | 1 + .idea/misc.xml | 2 +- .../com/d4rk/cleaner/ui/components/Buttons.kt | 24 ++++++---- .../cleaner/ui/screens/home/HomeScreen.kt | 31 ++++++++----- .../screens/home/repository/HomeRepository.kt | 2 +- .../HomeRepositoryImplementation.kt | 24 ++++++++-- .../cleaner/ui/screens/trash/TrashScreen.kt | 45 +++++++++++++++---- .../ui/screens/trash/TrashViewModel.kt | 10 +++++ app/src/main/res/values-bg-rBG/strings.xml | 5 ++- app/src/main/res/values-de-rDE/strings.xml | 5 ++- app/src/main/res/values-es-rGQ/strings.xml | 6 ++- app/src/main/res/values-fr-rFR/strings.xml | 6 ++- app/src/main/res/values-hi-rIN/strings.xml | 5 ++- app/src/main/res/values-hu-rHU/strings.xml | 5 ++- app/src/main/res/values-in-rID/strings.xml | 4 +- app/src/main/res/values-it-rIT/strings.xml | 6 ++- app/src/main/res/values-ja-rJP/strings.xml | 4 +- app/src/main/res/values-pl-rPL/strings.xml | 7 ++- app/src/main/res/values-ro-rRO/strings.xml | 6 ++- app/src/main/res/values-ru-rRU/strings.xml | 7 ++- app/src/main/res/values-sv-rSE/strings.xml | 5 ++- app/src/main/res/values-tr-rTR/strings.xml | 5 ++- app/src/main/res/values-uk-rUA/strings.xml | 7 ++- app/src/main/res/values-zh-rTW/strings.xml | 4 +- app/src/main/res/values/strings.xml | 8 +++- gradle/libs.versions.toml | 4 +- 27 files changed, 187 insertions(+), 53 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b589d56..b86273d 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 0897082..7b3006b 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,6 +4,7 @@ - + diff --git a/app/src/main/kotlin/com/d4rk/cleaner/ui/components/Buttons.kt b/app/src/main/kotlin/com/d4rk/cleaner/ui/components/Buttons.kt index a8a209c..6aa60e5 100644 --- a/app/src/main/kotlin/com/d4rk/cleaner/ui/components/Buttons.kt +++ b/app/src/main/kotlin/com/d4rk/cleaner/ui/components/Buttons.kt @@ -15,17 +15,23 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.d4rk.cleaner.ui.components.animations.bounceClick @Composable -fun TwoRowButtons(enabled : Boolean , - onStartButtonClick: () -> Unit , - onStartButtonIcon : ImageVector , - onEndButtonClick: () -> Unit , - onEndButtonIcon : ImageVector) { +fun TwoRowButtons( + modifier : Modifier , + enabled : Boolean , + onStartButtonClick : () -> Unit , + onStartButtonIcon : ImageVector , + onStartButtonText : Int , + onEndButtonClick : () -> Unit , + onEndButtonIcon : ImageVector , + onEndButtonText : Int , +) { Row( - modifier = Modifier.fillMaxWidth() , horizontalArrangement = Arrangement.SpaceAround + modifier = modifier.fillMaxWidth() , horizontalArrangement = Arrangement.SpaceAround ) { OutlinedButton(enabled = enabled , onClick = { @@ -41,14 +47,14 @@ fun TwoRowButtons(enabled : Boolean , modifier = Modifier.size(ButtonDefaults.IconSize) ) Spacer(Modifier.size(ButtonDefaults.IconSpacing)) - Text(text = "Move to trash") + Text(text = stringResource(id = onStartButtonText)) } Spacer(Modifier.width(8.dp)) Button(enabled = enabled , onClick = { - onEndButtonClick() + onEndButtonClick() } , modifier = Modifier .weight(1f) @@ -60,7 +66,7 @@ fun TwoRowButtons(enabled : Boolean , modifier = Modifier.size(ButtonDefaults.IconSize) ) Spacer(Modifier.size(ButtonDefaults.IconSpacing)) - Text(text = "Delete forever") + Text(text = stringResource(id = onEndButtonText)) } } } \ No newline at end of file diff --git a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/HomeScreen.kt b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/HomeScreen.kt index f258fb5..8132366 100644 --- a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/HomeScreen.kt +++ b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/HomeScreen.kt @@ -60,6 +60,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow @@ -304,6 +305,7 @@ fun AnalyzeComposable(imageLoader : ImageLoader , context : Context) { } FilesByDateSection( + modifier = Modifier, filesByDate = filesByDate , fileSelectionStates = uiState.fileSelectionStates , imageLoader = imageLoader , @@ -319,10 +321,9 @@ fun AnalyzeComposable(imageLoader : ImageLoader , context : Context) { verticalAlignment = Alignment.CenterVertically , horizontalArrangement = Arrangement.SpaceBetween , ) { - val statusText : String = if (uiState.selectedFileCount > 0) { - stringResource(id = R.string.status_selected_files , uiState.selectedFileCount) - } - else { + val statusText: String = if (uiState.selectedFileCount > 0) { + pluralStringResource(id = R.plurals.status_selected_files, count = uiState.selectedFileCount, uiState.selectedFileCount) + } else { stringResource(id = R.string.status_no_files_selected) } val statusColor : Color by animateColorAsState( @@ -342,24 +343,34 @@ fun AnalyzeComposable(imageLoader : ImageLoader , context : Context) { SelectAllComposable(viewModel) } - TwoRowButtons(enabled = enabled , onStartButtonClick = { - viewModel.moveToTrash() - } , onStartButtonIcon = Icons.Outlined.Delete , onEndButtonClick = { - viewModel.clean() - } , onEndButtonIcon = Icons.Outlined.DeleteForever) + TwoRowButtons( + modifier = Modifier, + enabled = enabled , + onStartButtonClick = { + viewModel.moveToTrash() + } , + onStartButtonIcon = Icons.Outlined.Delete , + onStartButtonText = R.string.move_to_trash , + + onEndButtonClick = { + viewModel.clean() + } , + onEndButtonIcon = Icons.Outlined.DeleteForever , + onEndButtonText = R.string.delete_forever) } } } @Composable fun FilesByDateSection( + modifier : Modifier, filesByDate : Map> , fileSelectionStates : Map , imageLoader : ImageLoader , onFileSelectionChange : (File , Boolean) -> Unit , ) { LazyColumn( - modifier = Modifier.fillMaxSize() + modifier = modifier.fillMaxSize() ) { val sortedDates = filesByDate.keys.sortedByDescending { dateString -> SimpleDateFormat("yyyy-MM-dd" , Locale.getDefault()).parse(dateString) diff --git a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/repository/HomeRepository.kt b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/repository/HomeRepository.kt index dc6fe01..56984cd 100644 --- a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/repository/HomeRepository.kt +++ b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/repository/HomeRepository.kt @@ -70,7 +70,7 @@ class HomeRepository( suspend fun moveToTrash(filesToMove : List , onSuccess : () -> Unit) { withContext(Dispatchers.IO) { - moveToTrash(filesToMove) // Call the updated function below + moveToTrash(filesToMove) withContext(Dispatchers.Main) { onSuccess() } diff --git a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/repository/HomeRepositoryImplementation.kt b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/repository/HomeRepositoryImplementation.kt index 5db6cc2..351489b 100644 --- a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/repository/HomeRepositoryImplementation.kt +++ b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/home/repository/HomeRepositoryImplementation.kt @@ -59,12 +59,28 @@ abstract class HomeRepositoryImplementation(val application : Application) { } } - fun restoreFromTrash(filesToRestore : Set) { + fun restoreFromTrash(filesToRestore: Set) { filesToRestore.forEach { file -> - val originalPath = file.absolutePath.replace("/trash/" , "/") - val destination = File(originalPath) + val trashDir = File(application.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), "Trash") + + val relativePathInTrash = file.relativeTo(trashDir).path + val originalFile = File(application.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), relativePathInTrash) + + val destinationParent = originalFile.parentFile + + if (destinationParent != null && !destinationParent.exists()) { + destinationParent.mkdirs() + } + if (file.exists()) { - file.renameTo(destination) + if (file.renameTo(originalFile)) { + MediaScannerConnection.scanFile( + application, + arrayOf(originalFile.absolutePath, file.absolutePath), + null, + null + ) + } } } } diff --git a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/trash/TrashScreen.kt b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/trash/TrashScreen.kt index c22c9af..c5b2255 100644 --- a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/trash/TrashScreen.kt +++ b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/trash/TrashScreen.kt @@ -1,12 +1,11 @@ package com.d4rk.cleaner.ui.screens.trash import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.DeleteForever +import androidx.compose.material.icons.outlined.Restore import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -17,6 +16,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.constraintlayout.compose.ConstraintLayout +import androidx.constraintlayout.compose.Dimension import androidx.lifecycle.viewmodel.compose.viewModel import coil.ImageLoader import coil.disk.DiskCache @@ -72,23 +74,48 @@ fun TrashScreen(activity : TrashActivity) { } } else { - Column( + ConstraintLayout( modifier = Modifier .fillMaxSize() .padding(paddingValues) ) { + val (list , buttons) = createRefs() + TrashItemsList( + modifier = Modifier.constrainAs(list) { + top.linkTo(parent.top) + start.linkTo(parent.start) + end.linkTo(parent.end) + bottom.linkTo(buttons.top) + width = Dimension.fillToConstraints + height = Dimension.fillToConstraints + } , trashFiles = uiState.trashFiles , imageLoader , uiState = uiState , viewModel = viewModel ) - TwoRowButtons(enabled = enabled , onStartButtonClick = { - viewModel.restoreFromTrash() - } , onStartButtonIcon = Icons.Outlined.Delete , onEndButtonClick = { - // TODO: for restore - } , onEndButtonIcon = Icons.Outlined.DeleteForever) + TwoRowButtons(modifier = Modifier + .padding(16.dp) + .constrainAs(buttons) { + bottom.linkTo(parent.bottom) + start.linkTo(parent.start) + end.linkTo(parent.end) + width = Dimension.fillToConstraints + } , + enabled = enabled , + onStartButtonClick = { + viewModel.restoreFromTrash() + } , + onStartButtonIcon = Icons.Outlined.Restore , + onStartButtonText = R.string.restore , + + onEndButtonClick = { + viewModel.clean() + } , + onEndButtonIcon = Icons.Outlined.DeleteForever , + onEndButtonText = R.string.delete_forever) } } } @@ -97,6 +124,7 @@ fun TrashScreen(activity : TrashActivity) { @Composable fun TrashItemsList( + modifier : Modifier , trashFiles : List , imageLoader : ImageLoader , uiState : UiTrashModel , @@ -109,6 +137,7 @@ fun TrashItemsList( } FilesByDateSection( + modifier = modifier , filesByDate = filesByDate , fileSelectionStates = uiState.fileSelectionStates , imageLoader = imageLoader , diff --git a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/trash/TrashViewModel.kt b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/trash/TrashViewModel.kt index 55a2dfd..ce58af0 100644 --- a/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/trash/TrashViewModel.kt +++ b/app/src/main/kotlin/com/d4rk/cleaner/ui/screens/trash/TrashViewModel.kt @@ -6,6 +6,7 @@ import com.d4rk.cleaner.data.datastore.DataStore import com.d4rk.cleaner.data.model.ui.screens.UiTrashModel import com.d4rk.cleaner.ui.screens.home.repository.HomeRepository import com.d4rk.cleaner.ui.viewmodel.BaseViewModel +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch @@ -48,4 +49,13 @@ class TrashViewModel(application : Application) : BaseViewModel(application) { hideLoading() } } + + fun clean() { + viewModelScope.launch(context = Dispatchers.Default + coroutineExceptionHandler) { + val filesToDelete = _uiState.value.fileSelectionStates.filter { it.value }.keys + showLoading() + repository.deleteFiles(filesToDelete) + hideLoading() + } + } } \ No newline at end of file diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 2efa1e5..efa97dd 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -22,7 +22,10 @@ Видеоклипове Аудио файлове Други - Статус: Избрани %1$d файла + + Състояние: Избран %1$d файл + Състояние: Избрани %1$d файла + Статус: Не са избрани файлове Избиране на всички Сканиране отново? diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 9493c24..6d7bba2 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -22,7 +22,10 @@ Videos Audios Andere - Status: %1$d Dateien ausgewählt + + Status: %1$d Datei ausgewählt + Status: %1$d Dateien ausgewählt + Status: Keine Dateien ausgewählt Alle auswählen Neu scannen? diff --git a/app/src/main/res/values-es-rGQ/strings.xml b/app/src/main/res/values-es-rGQ/strings.xml index 9d7e245..ae2fda0 100644 --- a/app/src/main/res/values-es-rGQ/strings.xml +++ b/app/src/main/res/values-es-rGQ/strings.xml @@ -22,7 +22,11 @@ Vídeos Audios Otros - Estado: Se seleccionaron %1$d archivos + + Estado: %1$d archivo seleccionado + Estado: %1$d archivos seleccionados + Estado: %1$d archivos seleccionados + Estado: No se seleccionaron archivos Seleccionar todo ¿Volver a escanear? diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 15f92d4..e870c6e 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -22,7 +22,11 @@ Vidéos Audios Autres - Statut: %1$d fichiers sélectionnés + + Statut : %1$d fichier sélectionné + Statut : %1$d fichiers sélectionnés + Statut : %1$d fichiers sélectionnés + Statut: Aucun fichier sélectionné Tout sélectionner Re-scanner? diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 4ff8194..9c77355 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -22,7 +22,10 @@ वीडियो ऑडियो अन्य - स्थिति: %1$d फ़ाइलें चयनित + + स्थिति: %1$d फ़ाइल चयनित + स्थिति: %1$d फ़ाइलें चयनित + स्थिति: कोई फ़ाइलें चयनित नहीं हैं सबका चयन करें पुनः स्कैन करें? diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 315940e..3c7d4a3 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -22,7 +22,10 @@ Videók Hangfájlok Egyéb - Állapot: Kiválasztva %1$d fájl + + Állapot: %1$d fájl kiválasztva + Állapot: %1$d fájlok kiválasztva + Állapot: Nincsenek kiválasztva fájlok Összes kijelölése Újraellenőrzés? diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index bad776e..fd5f3e4 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -22,7 +22,9 @@ Video Audio Lainnya - Status: %1$d file dipilih + + Status: %1$d berkas dipilih + Status: Tidak ada file yang dipilih Pilih Semua Pindai ulang? diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index ea787b4..1d5e5ac 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -22,7 +22,11 @@ Video Audio Altro - Stato: %1$d file selezionati + + Stato: %1$d file selezionato + Stato: %1$d file selezionati + Stato: %1$d file selezionati + Stato: Nessun file selezionato Seleziona tutto Scansionare di nuovo? diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 9bdd3b9..4516a26 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -22,7 +22,9 @@ ビデオ オーディオ その他 - ステータス: %1$d ファイルを選択済み + + ステータス:%1$d ファイル選択済み + ステータス: ファイルが選択されていません すべて選択 再スキャンしますか? diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index b3c3789..dffd807 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -22,7 +22,12 @@ Filmy Audio Inne - Status: Wybrano %1$d plików + + Status: %1$d plik wybrany + Status: %1$d pliki wybrane + Status: %1$d plików wybranych + Status: %1$d plików wybranych + Status: Nie wybrano plików Zaznacz wszystko Skanować ponownie? diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 34955e8..5f7457a 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -22,7 +22,11 @@ Videoclipuri Fișiere audio Altele - Stare: Selectate %1$d fișiere + + Stare: %1$d fișier selectat + Stare: %1$d fișiere selectate + Stare: %1$d fișiere selectate + Stare: Niciun fișier selectat Selectează tot Rescanare? diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 44f2967..f60624a 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -22,7 +22,12 @@ Видео Аудио Другое - Статус: Выбрано %1$d файлов + + Статус: выбран %1$d файл + Статус: выбрано %1$d файла + Статус: выбрано %1$d файлов + Статус: выбрано %1$d файлов + Статус: Файлы не выбраны Выбрать все Повторное сканирование? diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index f87a0b4..4241efc 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -22,7 +22,10 @@ Videor Ljud Annat - Status: %1$d filer valda + + Status: %1$d fil vald + Status: %1$d filer valda + Status: Inga filer valda Välj alla Skanna om? diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index e00c706..33b15a4 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -22,7 +22,10 @@ Videolar Sesler Diğer - Durum: %1$d dosya seçildi + + Durum: %1$d dosya seçildi + Durum: %1$d dosya seçildi + Durum: Dosya seçilmedi Tümünü Seç Tekrar Tara? diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 32e5ea2..a96ab1c 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -22,7 +22,12 @@ Відео Аудіо Інше - Статус: Вибрано %1$d файлів + + Стан: вибрано %1$d файл + Стан: вибрано %1$d файли + Стан: вибрано %1$d файлів + Стан: вибрано %1$d файлів + Статус: Не вибрано файлів Вибрати все Пересканувати? diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 19c0090..0cce2e3 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -22,7 +22,9 @@ 影片 音訊 其他 - 狀態:已選取 %1$d 個檔案 + + 狀態:已選取 %1$d 個檔案 + 狀態:未選取任何檔案 選取全部 重新掃描? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2ad424d..1b86fd7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,8 @@ Open navigation drawer Home + Delete forever + Move to trash %1$s/%2$s GB\nUsed Analyze Clean @@ -22,7 +24,10 @@ Videos Audios Other - Status: Selected %1$d files + + Status: Selected %1$d file + Status: Selected %1$d files + Status: No files selected Select All Rescan? @@ -85,6 +90,7 @@ Trash Trash is empty + Restore Settings diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6daddde..965edc8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,8 @@ [versions] -agp = "8.6.1" +agp = "8.7.0" appcompat = "1.7.0" appUpdateKtx = "2.1.0" -billing = "7.1.0" +billing = "7.1.1" coilCompose = "2.7.0" coilVideo = "2.7.0" composeBom = "2024.09.03"