diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBottomSheet.kt index 41c60d6e..f14cd714 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoBottomSheet.kt @@ -11,6 +11,7 @@ fun BookInfoBottomSheet( bottomSheet: BottomSheet?, book: Book, canResetCover: Boolean, + showPathDialog: (BookInfoEvent.OnShowPathDialog) -> Unit, changeCover: (BookInfoEvent.OnChangeCover) -> Unit, resetCover: (BookInfoEvent.OnResetCover) -> Unit, deleteCover: (BookInfoEvent.OnDeleteCover) -> Unit, @@ -33,6 +34,7 @@ fun BookInfoBottomSheet( BookInfoScreen.DETAILS_BOTTOM_SHEET -> { BookInfoDetailsBottomSheet( book = book, + showPathDialog = showPathDialog, dismissBottomSheet = dismissBottomSheet ) } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoContent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoContent.kt index 2103777e..7f8d3257 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoContent.kt @@ -24,6 +24,8 @@ fun BookInfoContent( actionAuthorDialog: (BookInfoEvent.OnActionAuthorDialog) -> Unit, showDescriptionDialog: (BookInfoEvent.OnShowDescriptionDialog) -> Unit, actionDescriptionDialog: (BookInfoEvent.OnActionDescriptionDialog) -> Unit, + showPathDialog: (BookInfoEvent.OnShowPathDialog) -> Unit, + actionPathDialog: (BookInfoEvent.OnActionPathDialog) -> Unit, showMoveDialog: (BookInfoEvent.OnShowMoveDialog) -> Unit, showDeleteDialog: (BookInfoEvent.OnShowDeleteDialog) -> Unit, actionDeleteDialog: (BookInfoEvent.OnActionDeleteDialog) -> Unit, @@ -44,6 +46,7 @@ fun BookInfoContent( actionTitleDialog = actionTitleDialog, actionAuthorDialog = actionAuthorDialog, actionDescriptionDialog = actionDescriptionDialog, + actionPathDialog = actionPathDialog, actionDeleteDialog = actionDeleteDialog, actionMoveDialog = actionMoveDialog, dismissDialog = dismissDialog, @@ -54,6 +57,7 @@ fun BookInfoContent( BookInfoBottomSheet( bottomSheet = bottomSheet, book = book, + showPathDialog = showPathDialog, canResetCover = canResetCover, changeCover = changeCover, resetCover = resetCover, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheet.kt index 70a1dedc..9f80c280 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDetailsBottomSheet.kt @@ -14,6 +14,8 @@ import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.library.book.Book import ua.acclorite.book_story.presentation.core.components.common.LazyColumnWithScrollbar import ua.acclorite.book_story.presentation.core.components.modal_bottom_sheet.ModalBottomSheet +import ua.acclorite.book_story.presentation.core.constants.Constants +import ua.acclorite.book_story.presentation.core.constants.provideExtensions import ua.acclorite.book_story.presentation.settings.components.SettingsSubcategoryTitle import ua.acclorite.book_story.ui.book_info.BookInfoEvent import java.io.File @@ -24,6 +26,7 @@ import java.util.Locale @Composable fun BookInfoDetailsBottomSheet( book: Book, + showPathDialog: (BookInfoEvent.OnShowPathDialog) -> Unit, dismissBottomSheet: (BookInfoEvent.OnDismissBottomSheet) -> Unit ) { val pattern = remember { SimpleDateFormat("HH:mm dd MMM yyyy", Locale.getDefault()) } @@ -46,7 +49,11 @@ fun BookInfoDetailsBottomSheet( } val fileExists = remember(book.filePath) { - File(book.filePath).exists() + File(book.filePath).let { + it.exists() && it.isFile && Constants.provideExtensions().any { ext -> + it.name.endsWith(ext, ignoreCase = true) + } + } } ModalBottomSheet( @@ -73,7 +80,10 @@ fun BookInfoDetailsBottomSheet( BookInfoDetailsBottomSheetItem( label = stringResource(id = R.string.file_path), text = book.filePath, - editable = false, + editable = true, + onEdit = { + showPathDialog(BookInfoEvent.OnShowPathDialog) + }, showError = !fileExists, errorMessage = stringResource(id = R.string.error_no_file) ) diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDialog.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDialog.kt index 082979e2..7b5053ef 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDialog.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoDialog.kt @@ -13,6 +13,7 @@ fun BookInfoDialog( actionTitleDialog: (BookInfoEvent.OnActionTitleDialog) -> Unit, actionAuthorDialog: (BookInfoEvent.OnActionAuthorDialog) -> Unit, actionDescriptionDialog: (BookInfoEvent.OnActionDescriptionDialog) -> Unit, + actionPathDialog: (BookInfoEvent.OnActionPathDialog) -> Unit, actionDeleteDialog: (BookInfoEvent.OnActionDeleteDialog) -> Unit, actionMoveDialog: (BookInfoEvent.OnActionMoveDialog) -> Unit, dismissDialog: (BookInfoEvent.OnDismissDialog) -> Unit, @@ -60,5 +61,13 @@ fun BookInfoDialog( dismissDialog = dismissDialog ) } + + BookInfoScreen.PATH_DIALOG -> { + BookInfoPathDialog( + book = book, + actionPathDialog = actionPathDialog, + dismissDialog = dismissDialog + ) + } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoPathDialog.kt b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoPathDialog.kt new file mode 100644 index 00000000..3b3155bb --- /dev/null +++ b/app/src/main/java/ua/acclorite/book_story/presentation/book_info/BookInfoPathDialog.kt @@ -0,0 +1,32 @@ +package ua.acclorite.book_story.presentation.book_info + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import ua.acclorite.book_story.domain.library.book.Book +import ua.acclorite.book_story.presentation.core.components.dialog.DialogWithTextField +import ua.acclorite.book_story.ui.book_info.BookInfoEvent + +@Composable +fun BookInfoPathDialog( + book: Book, + actionPathDialog: (BookInfoEvent.OnActionPathDialog) -> Unit, + dismissDialog: (BookInfoEvent.OnDismissDialog) -> Unit +) { + val context = LocalContext.current + DialogWithTextField( + initialValue = book.filePath.trim(), + lengthLimit = 10000, + onDismiss = { + dismissDialog(BookInfoEvent.OnDismissDialog) + }, + onAction = { + if (it.isBlank()) return@DialogWithTextField + actionPathDialog( + BookInfoEvent.OnActionPathDialog( + path = it.trim().replace("\n", ""), + context = context + ) + ) + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt index 95ca1b4e..c782ac1f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderContent.kt @@ -96,8 +96,8 @@ fun ReaderContent( dismissBottomSheet: (ReaderEvent.OnDismissBottomSheet) -> Unit, showChaptersDrawer: (ReaderEvent.OnShowChaptersDrawer) -> Unit, dismissDrawer: (ReaderEvent.OnDismissDrawer) -> Unit, - navigateBack: () -> Unit, - navigateToBookInfo: () -> Unit + navigateToBookInfo: (changePath: Boolean) -> Unit, + navigateBack: () -> Unit ) { ReaderBottomSheet( bottomSheet = bottomSheet, @@ -176,6 +176,7 @@ fun ReaderContent( ReaderErrorPlaceholder( errorMessage = errorMessage, leave = leave, + navigateToBookInfo = navigateToBookInfo, navigateBack = navigateBack ) } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderErrorPlaceholder.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderErrorPlaceholder.kt index ceeecd7c..fda2aeef 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderErrorPlaceholder.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderErrorPlaceholder.kt @@ -1,47 +1,80 @@ package ua.acclorite.book_story.presentation.reader -import androidx.compose.foundation.background +import android.annotation.SuppressLint import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.ui.UIText import ua.acclorite.book_story.presentation.core.components.placeholder.ErrorPlaceholder +import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBar +import ua.acclorite.book_story.presentation.core.components.top_bar.TopAppBarData import ua.acclorite.book_story.presentation.core.util.LocalActivity +import ua.acclorite.book_story.presentation.navigator.NavigatorBackIconButton import ua.acclorite.book_story.ui.reader.ReaderEvent +@OptIn(ExperimentalMaterial3Api::class) +@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @Composable fun ReaderErrorPlaceholder( errorMessage: UIText, leave: (ReaderEvent.OnLeave) -> Unit, + navigateToBookInfo: (changePath: Boolean) -> Unit, navigateBack: () -> Unit ) { val activity = LocalActivity.current - Box( - modifier = Modifier - .fillMaxSize() - .background(MaterialTheme.colorScheme.surface), - contentAlignment = Alignment.Center - ) { - ErrorPlaceholder( - errorMessage = errorMessage.asString(), - icon = painterResource(id = R.drawable.error), - actionTitle = stringResource(id = R.string.go_back), - action = { - leave( - ReaderEvent.OnLeave( - activity = activity, - navigate = { - navigateBack() - } + Scaffold( + modifier = Modifier.fillMaxSize(), + containerColor = MaterialTheme.colorScheme.surface, + topBar = { + TopAppBar( + containerColor = Color.Transparent, + scrollBehavior = null, + isTopBarScrolled = null, + + shownTopBar = 0, + topBars = listOf( + TopAppBarData( + contentID = 0, + contentNavigationIcon = { + NavigatorBackIconButton { + navigateBack() + } + }, + contentTitle = {}, + contentActions = {} ) ) - } - ) + ) + } + ) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + ErrorPlaceholder( + errorMessage = errorMessage.asString(), + icon = painterResource(id = R.drawable.error), + actionTitle = stringResource(id = R.string.change_path), + action = { + leave( + ReaderEvent.OnLeave( + activity = activity, + navigate = { + navigateToBookInfo(true) + } + ) + ) + } + ) + } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt index 283a0f58..44aaef3b 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderScaffold.kt @@ -97,8 +97,8 @@ fun ReaderScaffold( openDictionary: (ReaderEvent.OnOpenDictionary) -> Unit, showSettingsBottomSheet: (ReaderEvent.OnShowSettingsBottomSheet) -> Unit, showChaptersDrawer: (ReaderEvent.OnShowChaptersDrawer) -> Unit, - navigateBack: () -> Unit, - navigateToBookInfo: () -> Unit + navigateToBookInfo: (changePath: Boolean) -> Unit, + navigateBack: () -> Unit ) { Scaffold( Modifier diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderTopBar.kt b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderTopBar.kt index b7bd723c..261012df 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderTopBar.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/reader/ReaderTopBar.kt @@ -47,8 +47,8 @@ fun ReaderTopBar( selectNextPreset: (SettingsEvent.OnSelectNextPreset) -> Unit, showSettingsBottomSheet: (ReaderEvent.OnShowSettingsBottomSheet) -> Unit, showChaptersDrawer: (ReaderEvent.OnShowChaptersDrawer) -> Unit, - navigateBack: () -> Unit, - navigateToBookInfo: () -> Unit + navigateToBookInfo: (changePath: Boolean) -> Unit, + navigateBack: () -> Unit ) { val activity = LocalActivity.current val animatedChapterProgress = animateFloatAsState( @@ -100,7 +100,7 @@ fun ReaderTopBar( ReaderEvent.OnLeave( activity = activity, navigate = { - navigateToBookInfo() + navigateToBookInfo(false) } ) ) diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoEvent.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoEvent.kt index 8a333647..b822a2bf 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoEvent.kt @@ -51,6 +51,13 @@ sealed class BookInfoEvent { val context: Context ) : BookInfoEvent() + data object OnShowPathDialog : BookInfoEvent() + + data class OnActionPathDialog( + val path: String, + val context: Context + ) : BookInfoEvent() + data object OnShowDeleteDialog : BookInfoEvent() data class OnActionDeleteDialog( diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt index b309bf6e..98c4b6d5 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoModel.kt @@ -280,6 +280,35 @@ class BookInfoModel @Inject constructor( } } + is BookInfoEvent.OnShowPathDialog -> { + _state.update { + it.copy( + dialog = BookInfoScreen.PATH_DIALOG + ) + } + } + + is BookInfoEvent.OnActionPathDialog -> { + launch { + _state.update { + it.copy( + book = it.book.copy( + filePath = event.path + ) + ) + } + updateBook.execute(_state.value.book) + + LibraryScreen.refreshListChannel.trySend(0) + HistoryScreen.refreshListChannel.trySend(0) + + withContext(Dispatchers.Main) { + event.context.getString(R.string.path_changed) + .showToast(context = event.context) + } + } + } + is BookInfoEvent.OnShowDeleteDialog -> { _state.update { it.copy( @@ -368,6 +397,7 @@ class BookInfoModel @Inject constructor( fun init( bookId: Int, + changePath: Boolean, navigateBack: () -> Unit ) { viewModelScope.launch(Dispatchers.IO) { @@ -390,6 +420,9 @@ class BookInfoModel @Inject constructor( ) } + if (changePath) { + onEvent(BookInfoEvent.OnShowPathDialog) + } onEvent(BookInfoEvent.OnCheckCoverReset) } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScreen.kt b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScreen.kt index 6282f9b7..acccd09c 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/book_info/BookInfoScreen.kt @@ -11,6 +11,8 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.channels.getOrElse import kotlinx.parcelize.Parcelize import ua.acclorite.book_story.domain.navigator.Screen import ua.acclorite.book_story.presentation.book_info.BookInfoContent @@ -28,9 +30,12 @@ data class BookInfoScreen(val bookId: Int) : Screen, Parcelable { const val TITLE_DIALOG = "title_dialog" const val AUTHOR_DIALOG = "author_dialog" const val DESCRIPTION_DIALOG = "description_dialog" + const val PATH_DIALOG = "path_dialog" const val CHANGE_COVER_BOTTOM_SHEET = "change_cover_bottom_sheet" const val DETAILS_BOTTOM_SHEET = "details_bottom_sheet" + + val changePathChannel: Channel = Channel(Channel.CONFLATED) } @OptIn(ExperimentalMaterialApi::class) @@ -45,6 +50,7 @@ data class BookInfoScreen(val bookId: Int) : Screen, Parcelable { LaunchedEffect(Unit) { screenModel.init( bookId = bookId, + changePath = changePathChannel.tryReceive().getOrElse { false }, navigateBack = { navigator.pop() } @@ -72,6 +78,8 @@ data class BookInfoScreen(val bookId: Int) : Screen, Parcelable { actionAuthorDialog = screenModel::onEvent, showDescriptionDialog = screenModel::onEvent, actionDescriptionDialog = screenModel::onEvent, + showPathDialog = screenModel::onEvent, + actionPathDialog = screenModel::onEvent, checkCoverReset = screenModel::onEvent, changeCover = screenModel::onEvent, resetCover = screenModel::onEvent, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt index 6dfee1d2..7e2f4c00 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderModel.kt @@ -242,7 +242,8 @@ class ReaderModel @Inject constructor( if ( _state.value.isLoading || layoutInfo.totalItemsCount < 1 || - _state.value.text.isEmpty() + _state.value.text.isEmpty() || + _state.value.errorMessage != null ) return@apply _state.update { @@ -589,7 +590,8 @@ class ReaderModel @Inject constructor( if ( isLoading || listState.layoutInfo.totalItemsCount == 0 || - text.isEmpty() + text.isEmpty() || + errorMessage != null ) { return book.progress } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt index e95b8c0e..8ab97cfe 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/reader/ReaderScreen.kt @@ -467,7 +467,8 @@ data class ReaderScreen(val bookId: Int) : Screen, Parcelable { navigateBack = { navigator.pop() }, - navigateToBookInfo = { + navigateToBookInfo = { changePath -> + if (changePath) BookInfoScreen.changePathChannel.trySend(true) navigator.push( BookInfoScreen( bookId = bookId, diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 641908de..aaecfc62 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -43,7 +43,6 @@ أحتاج المساعدة أضف كتابا˝ أبدا˝ - عودة تراجع إعادة ضبط صورة الغلاف المظهر diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 3f59782f..98f3b805 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -146,7 +146,6 @@ Něco se pokazilo. Povolit Přidat knihu - Zpět Kopírovat Přeložit Další diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 860d5daf..82fe002c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -36,7 +36,6 @@ Buch hinzufügen Verschieben Niemals - Zurück gehen Rückgängig machen Kopieren Übersetzen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b74a9cdb..abea657a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -97,7 +97,6 @@ Actualizar %1$s Conceder permiso Nunca - Regresar Copiar Hecho Deshacer diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 08ec7399..52238ae7 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -35,7 +35,6 @@ Déplacer Supprimer Jamais - Retour Annuler Copier Traduire diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index d2bc8327..bad26716 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -31,7 +31,6 @@ मुझे सहायता की आवश्यकता है एक किताब जोड़ें कभी नहीं - पीछे जाना पूर्ववत् करें कॉपी करें अनुवाद करें diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 44ef4f4c..9d9b34bb 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -43,7 +43,6 @@ Marte Prossimo Elimina - Indietro Ricerca web Abilitato Permesso per le notifiche diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 6dd02288..cf37ab60 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -144,7 +144,6 @@ Udziel zgody Potrzebuję pomocy Dodaj książkę - Powróć Przetłumacz Motyw, kolory Czcionka, tekst, tłumacz diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 86ae78f1..f03de5f0 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -136,7 +136,6 @@ Recuo de parágrafo Espaçamento das letras Padrão %1$s - Voltar Sistema Preferência de temas Escuro absoluto diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index f1b722a2..bf79f3b7 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -105,7 +105,6 @@ விளக்கம் இல்லை. %1$s தேர்ந்தெடுக்கப்பட்டன புதுப்பிப்பு %1$s - திரும்பிச் செல்லுங்கள் செயல்தவிர் நகலெடு மொழிபெயர்த்திடு diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 5b5263f9..ce96e423 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -53,7 +53,6 @@ Taşı Sil Asla - Geri Dön Geri Al Kopyala Çevir diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 921dafcd..d5c02bc4 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -47,7 +47,10 @@ Не знайдено жодного словника. Не знайдено жодного браузера. Не знайдено застосунка щоб поділитися. - Файл порожній, пошкоджений або його не існує. Будь ласка, перевірте і спробуйте знову. + + Файл порожній, пошкоджений або відсутній. + Перевірте файл або змініть шлях і спробуйте ще раз. + Щось пішло не так. Спробуйте пізніше. Не вдалося скинути обкладинку. Закритий код @@ -74,7 +77,6 @@ Перемістити Видалити Ніколи - Назад Скасувати Копіювати Перекласти @@ -86,6 +88,7 @@ Веб-пошук Поділитися ОК + Змінити шлях Невідомий @@ -318,6 +321,7 @@ Назва була успішно змінена. Автор був успішно змінений. Опис був успішно змінений. + Шлях до файлу був успішно змінений. Елемент історії був успішно видалений. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 711b9b6a..5036d487 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -48,7 +48,6 @@ 已选择《%1$s》 授予 授予权限 - 返回 撤销 下一个 未知 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9f211081..10702ab2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -90,7 +90,8 @@ No browser app found. No app to share found. - File is empty, corrupted, or does not exist. Please verify and try again. + File is empty, corrupted, or missing. + Please verify the file or update the path and try again. Something went wrong. @@ -129,7 +130,6 @@ Move Delete Never - Go back Undo Copy Translate @@ -141,6 +141,7 @@ Web search Share OK + Change path Unknown @@ -375,6 +376,7 @@ Title was successfully changed. Author was successfully changed. Description was successfully changed. + File path was successfully changed. History element was successfully deleted.