Replace remaining Android-specific strings
Also renaming the helper composables so it's a bit easier to find/replace everything in forks. (cherry picked from commit 0d1bced1226878336f8156671ae0c224c02f2604) # Conflicts: # app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt # app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt # app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt # app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt # app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt # app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt # app/src/main/java/eu/kanade/presentation/manga/components/MangaBottomActionMenu.kt # app/src/main/java/eu/kanade/presentation/manga/components/MangaDialogs.kt # app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt # app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt # app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt # app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt # app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt # app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt # app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt # app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterDialog.kt # app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt # app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt
This commit is contained in:
parent
1eccf9fad8
commit
82098460ff
@ -28,13 +28,13 @@ import exh.source.isEhBasedSource
|
|||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.domain.library.model.LibraryDisplayMode
|
import tachiyomi.domain.library.model.LibraryDisplayMode
|
||||||
import tachiyomi.domain.manga.model.Manga
|
import tachiyomi.domain.manga.model.Manga
|
||||||
import tachiyomi.domain.source.model.StubSource
|
import tachiyomi.domain.source.model.StubSource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreenAction
|
import tachiyomi.presentation.core.screens.EmptyScreenAction
|
||||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||||
@ -72,7 +72,7 @@ fun BrowseSourceContent(
|
|||||||
if (mangaList.itemCount > 0 && errorState != null && errorState is LoadState.Error) {
|
if (mangaList.itemCount > 0 && errorState != null && errorState is LoadState.Error) {
|
||||||
val result = snackbarHostState.showSnackbar(
|
val result = snackbarHostState.showSnackbar(
|
||||||
message = getErrorMessage(errorState),
|
message = getErrorMessage(errorState),
|
||||||
actionLabel = context.localize(MR.strings.action_retry),
|
actionLabel = context.stringResource(MR.strings.action_retry),
|
||||||
duration = SnackbarDuration.Indefinite,
|
duration = SnackbarDuration.Indefinite,
|
||||||
)
|
)
|
||||||
when (result) {
|
when (result) {
|
||||||
@ -192,7 +192,7 @@ internal fun MissingSourceScreen(
|
|||||||
},
|
},
|
||||||
) { paddingValues ->
|
) { paddingValues ->
|
||||||
EmptyScreen(
|
EmptyScreen(
|
||||||
message = localize(MR.strings.source_not_installed, source.toString()),
|
message = stringResource(MR.strings.source_not_installed, source.toString()),
|
||||||
modifier = Modifier.padding(paddingValues),
|
modifier = Modifier.padding(paddingValues),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.ui.browse.extension.ExtensionFilterState
|
|||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -25,7 +25,7 @@ fun ExtensionFilterScreen(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { scrollBehavior ->
|
topBar = { scrollBehavior ->
|
||||||
AppBar(
|
AppBar(
|
||||||
title = localize(MR.strings.label_extensions),
|
title = stringResource(MR.strings.label_extensions),
|
||||||
navigateUp = navigateUp,
|
navigateUp = navigateUp,
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
)
|
)
|
||||||
|
@ -36,7 +36,7 @@ import tachiyomi.presentation.core.components.ScrollbarLazyColumn
|
|||||||
import tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX
|
import tachiyomi.presentation.core.components.Scroller.STICKY_HEADER_KEY_PREFIX
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.components.material.topSmallPaddingValues
|
import tachiyomi.presentation.core.components.material.topSmallPaddingValues
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||||
import tachiyomi.presentation.core.theme.header
|
import tachiyomi.presentation.core.theme.header
|
||||||
@ -106,7 +106,7 @@ private fun MigrateSourceList(
|
|||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.migration_selection_prompt),
|
text = stringResource(MR.strings.migration_selection_prompt),
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
style = MaterialTheme.typography.header,
|
style = MaterialTheme.typography.header,
|
||||||
)
|
)
|
||||||
@ -115,11 +115,11 @@ private fun MigrateSourceList(
|
|||||||
when (sortingMode) {
|
when (sortingMode) {
|
||||||
SetMigrateSorting.Mode.ALPHABETICAL -> Icon(
|
SetMigrateSorting.Mode.ALPHABETICAL -> Icon(
|
||||||
Icons.Outlined.SortByAlpha,
|
Icons.Outlined.SortByAlpha,
|
||||||
contentDescription = localize(MR.strings.action_sort_alpha),
|
contentDescription = stringResource(MR.strings.action_sort_alpha),
|
||||||
)
|
)
|
||||||
SetMigrateSorting.Mode.TOTAL -> Icon(
|
SetMigrateSorting.Mode.TOTAL -> Icon(
|
||||||
Icons.Outlined.Numbers,
|
Icons.Outlined.Numbers,
|
||||||
contentDescription = localize(MR.strings.action_sort_count),
|
contentDescription = stringResource(MR.strings.action_sort_count),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,11 +127,11 @@ private fun MigrateSourceList(
|
|||||||
when (sortingDirection) {
|
when (sortingDirection) {
|
||||||
SetMigrateSorting.Direction.ASCENDING -> Icon(
|
SetMigrateSorting.Direction.ASCENDING -> Icon(
|
||||||
Icons.Outlined.ArrowUpward,
|
Icons.Outlined.ArrowUpward,
|
||||||
contentDescription = localize(MR.strings.action_asc),
|
contentDescription = stringResource(MR.strings.action_asc),
|
||||||
)
|
)
|
||||||
SetMigrateSorting.Direction.DESCENDING -> Icon(
|
SetMigrateSorting.Direction.DESCENDING -> Icon(
|
||||||
Icons.Outlined.ArrowDownward,
|
Icons.Outlined.ArrowDownward,
|
||||||
contentDescription = localize(MR.strings.action_desc),
|
contentDescription = stringResource(MR.strings.action_desc),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -216,7 +216,7 @@ private fun MigrateSourceItem(
|
|||||||
if (source.isStub) {
|
if (source.isStub) {
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.secondaryItemAlpha(),
|
modifier = Modifier.secondaryItemAlpha(),
|
||||||
text = localize(MR.strings.not_installed),
|
text = stringResource(MR.strings.not_installed),
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
style = MaterialTheme.typography.bodySmall,
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
@ -17,7 +17,7 @@ import tachiyomi.domain.source.model.Source
|
|||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.FastScrollLazyColumn
|
import tachiyomi.presentation.core.components.FastScrollLazyColumn
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -33,7 +33,7 @@ fun SourcesFilterScreen(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { scrollBehavior ->
|
topBar = { scrollBehavior ->
|
||||||
AppBar(
|
AppBar(
|
||||||
title = localize(MR.strings.label_sources),
|
title = stringResource(MR.strings.label_sources),
|
||||||
navigateUp = navigateUp,
|
navigateUp = navigateUp,
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
)
|
)
|
||||||
|
@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import tachiyomi.domain.manga.model.Manga
|
import tachiyomi.domain.manga.model.Manga
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RemoveMangaDialog(
|
fun RemoveMangaDialog(
|
||||||
@ -31,7 +31,7 @@ fun RemoveMangaDialog(
|
|||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
@ -41,14 +41,14 @@ fun RemoveMangaDialog(
|
|||||||
onConfirm()
|
onConfirm()
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_remove))
|
Text(text = stringResource(MR.strings.action_remove))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
title = {
|
title = {
|
||||||
Text(text = localize(MR.strings.are_you_sure))
|
Text(text = stringResource(MR.strings.are_you_sure))
|
||||||
},
|
},
|
||||||
text = {
|
text = {
|
||||||
Text(text = localize(MR.strings.remove_manga, mangaToRemove.title))
|
Text(text = stringResource(MR.strings.remove_manga, mangaToRemove.title))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ import tachiyomi.domain.manga.model.MangaCover
|
|||||||
import tachiyomi.domain.manga.model.asMangaCover
|
import tachiyomi.domain.manga.model.asMangaCover
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun GlobalSearchCardRow(
|
fun GlobalSearchCardRow(
|
||||||
@ -78,7 +78,7 @@ private fun MangaItem(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun EmptyResultItem() {
|
private fun EmptyResultItem() {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.no_results_found),
|
text = stringResource(MR.strings.no_results_found),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(
|
.padding(
|
||||||
horizontal = MaterialTheme.padding.medium,
|
horizontal = MaterialTheme.padding.medium,
|
||||||
|
@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.outlined.ArrowForward
|
import androidx.compose.material.icons.automirrored.outlined.ArrowForward
|
||||||
import androidx.compose.material.icons.outlined.ArrowForward
|
|
||||||
import androidx.compose.material.icons.outlined.Error
|
import androidx.compose.material.icons.outlined.Error
|
||||||
import androidx.compose.material3.CircularProgressIndicator
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
@ -27,7 +26,7 @@ import androidx.compose.ui.text.style.TextAlign
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun GlobalSearchResultItem(
|
fun GlobalSearchResultItem(
|
||||||
@ -112,7 +111,7 @@ fun GlobalSearchErrorResultItem(message: String?) {
|
|||||||
Icon(imageVector = Icons.Outlined.Error, contentDescription = null)
|
Icon(imageVector = Icons.Outlined.Error, contentDescription = null)
|
||||||
Spacer(Modifier.height(4.dp))
|
Spacer(Modifier.height(4.dp))
|
||||||
Text(
|
Text(
|
||||||
text = message ?: localize(MR.strings.unknown_error),
|
text = message ?: stringResource(MR.strings.unknown_error),
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ import eu.kanade.presentation.components.SearchToolbar
|
|||||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SourceFilter
|
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SourceFilter
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun GlobalSearchToolbar(
|
fun GlobalSearchToolbar(
|
||||||
@ -85,7 +85,7 @@ fun GlobalSearchToolbar(
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
label = {
|
label = {
|
||||||
Text(text = localize(MR.strings.pinned_sources))
|
Text(text = stringResource(MR.strings.pinned_sources))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
FilterChip(
|
FilterChip(
|
||||||
@ -100,7 +100,7 @@ fun GlobalSearchToolbar(
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
label = {
|
label = {
|
||||||
Text(text = localize(MR.strings.all))
|
Text(text = stringResource(MR.strings.all))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ fun GlobalSearchToolbar(
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
label = {
|
label = {
|
||||||
Text(text = localize(MR.strings.has_results))
|
Text(text = stringResource(MR.strings.has_results))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -2,20 +2,20 @@ package eu.kanade.presentation.category
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.domain.category.model.Category
|
import tachiyomi.domain.category.model.Category
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
val Category.visualName: String
|
val Category.visualName: String
|
||||||
@Composable
|
@Composable
|
||||||
get() = when {
|
get() = when {
|
||||||
isSystemCategory -> localize(MR.strings.label_default)
|
isSystemCategory -> stringResource(MR.strings.label_default)
|
||||||
else -> name
|
else -> name
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Category.visualName(context: Context): String =
|
fun Category.visualName(context: Context): String =
|
||||||
when {
|
when {
|
||||||
isSystemCategory -> context.localize(MR.strings.label_default)
|
isSystemCategory -> context.stringResource(MR.strings.label_default)
|
||||||
else -> name
|
else -> name
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ import tachiyomi.i18n.MR
|
|||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.components.material.topSmallPaddingValues
|
import tachiyomi.presentation.core.components.material.topSmallPaddingValues
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import tachiyomi.presentation.core.util.plus
|
import tachiyomi.presentation.core.util.plus
|
||||||
|
|
||||||
@ -42,13 +42,13 @@ fun CategoryScreen(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { scrollBehavior ->
|
topBar = { scrollBehavior ->
|
||||||
AppBar(
|
AppBar(
|
||||||
title = localize(MR.strings.action_edit_categories),
|
title = stringResource(MR.strings.action_edit_categories),
|
||||||
navigateUp = navigateUp,
|
navigateUp = navigateUp,
|
||||||
actions = {
|
actions = {
|
||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_sort),
|
title = stringResource(MR.strings.action_sort),
|
||||||
icon = Icons.Outlined.SortByAlpha,
|
icon = Icons.Outlined.SortByAlpha,
|
||||||
onClick = onClickSortAlphabetically,
|
onClick = onClickSortAlphabetically,
|
||||||
),
|
),
|
||||||
|
@ -8,7 +8,7 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
|
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.isScrolledToEnd
|
import tachiyomi.presentation.core.util.isScrolledToEnd
|
||||||
import tachiyomi.presentation.core.util.isScrollingUp
|
import tachiyomi.presentation.core.util.isScrollingUp
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ fun CategoryFloatingActionButton(
|
|||||||
onCreate: () -> Unit,
|
onCreate: () -> Unit,
|
||||||
) {
|
) {
|
||||||
ExtendedFloatingActionButton(
|
ExtendedFloatingActionButton(
|
||||||
text = { Text(text = localize(MR.strings.action_add)) },
|
text = { Text(text = stringResource(MR.strings.action_add)) },
|
||||||
icon = { Icon(imageVector = Icons.Outlined.Add, contentDescription = null) },
|
icon = { Icon(imageVector = Icons.Outlined.Add, contentDescription = null) },
|
||||||
onClick = onCreate,
|
onClick = onCreate,
|
||||||
expanded = lazyListState.isScrollingUp() || lazyListState.isScrolledToEnd(),
|
expanded = lazyListState.isScrollingUp() || lazyListState.isScrolledToEnd(),
|
||||||
|
@ -11,7 +11,6 @@ import androidx.compose.material.icons.outlined.ArrowDropDown
|
|||||||
import androidx.compose.material.icons.outlined.ArrowDropUp
|
import androidx.compose.material.icons.outlined.ArrowDropUp
|
||||||
import androidx.compose.material.icons.outlined.Delete
|
import androidx.compose.material.icons.outlined.Delete
|
||||||
import androidx.compose.material.icons.outlined.Edit
|
import androidx.compose.material.icons.outlined.Edit
|
||||||
import androidx.compose.material.icons.outlined.Label
|
|
||||||
import androidx.compose.material3.ElevatedCard
|
import androidx.compose.material3.ElevatedCard
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
@ -23,7 +22,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import tachiyomi.domain.category.model.Category
|
import tachiyomi.domain.category.model.Category
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun CategoryListItem(
|
fun CategoryListItem(
|
||||||
@ -74,11 +73,11 @@ fun CategoryListItem(
|
|||||||
IconButton(onClick = onRename) {
|
IconButton(onClick = onRename) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.Edit,
|
imageVector = Icons.Outlined.Edit,
|
||||||
contentDescription = localize(MR.strings.action_rename_category),
|
contentDescription = stringResource(MR.strings.action_rename_category),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
IconButton(onClick = onDelete) {
|
IconButton(onClick = onDelete) {
|
||||||
Icon(imageVector = Icons.Outlined.Delete, contentDescription = localize(MR.strings.action_delete))
|
Icon(imageVector = Icons.Outlined.Delete, contentDescription = stringResource(MR.strings.action_delete))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,10 +50,9 @@ import androidx.compose.ui.text.input.VisualTransformation
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import eu.kanade.tachiyomi.R
|
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide
|
import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide
|
||||||
import tachiyomi.presentation.core.util.runOnEnterKeyPressed
|
import tachiyomi.presentation.core.util.runOnEnterKeyPressed
|
||||||
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
||||||
@ -135,7 +134,7 @@ fun AppBar(
|
|||||||
IconButton(onClick = onCancelActionMode) {
|
IconButton(onClick = onCancelActionMode) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.Close,
|
imageVector = Icons.Outlined.Close,
|
||||||
contentDescription = localize(MR.strings.action_cancel),
|
contentDescription = stringResource(MR.strings.action_cancel),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -220,7 +219,7 @@ fun AppBarActions(
|
|||||||
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
|
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
|
||||||
tooltip = {
|
tooltip = {
|
||||||
PlainTooltip {
|
PlainTooltip {
|
||||||
Text(stringResource(R.string.abc_action_menu_overflow_description))
|
Text(stringResource(MR.strings.action_menu_overflow_description))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
state = rememberTooltipState(),
|
state = rememberTooltipState(),
|
||||||
@ -230,7 +229,7 @@ fun AppBarActions(
|
|||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Outlined.MoreVert,
|
Icons.Outlined.MoreVert,
|
||||||
contentDescription = stringResource(R.string.abc_action_menu_overflow_description),
|
contentDescription = stringResource(MR.strings.action_menu_overflow_description),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -319,7 +318,7 @@ fun SearchToolbar(
|
|||||||
placeholder = {
|
placeholder = {
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.secondaryItemAlpha(),
|
modifier = Modifier.secondaryItemAlpha(),
|
||||||
text = (placeholderText ?: localize(MR.strings.action_search_hint)),
|
text = (placeholderText ?: stringResource(MR.strings.action_search_hint)),
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
style = MaterialTheme.typography.titleMedium.copy(
|
style = MaterialTheme.typography.titleMedium.copy(
|
||||||
@ -344,7 +343,7 @@ fun SearchToolbar(
|
|||||||
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
|
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
|
||||||
tooltip = {
|
tooltip = {
|
||||||
PlainTooltip {
|
PlainTooltip {
|
||||||
Text(localize(MR.strings.action_search))
|
Text(stringResource(MR.strings.action_search))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
state = rememberTooltipState(),
|
state = rememberTooltipState(),
|
||||||
@ -354,7 +353,7 @@ fun SearchToolbar(
|
|||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Outlined.Search,
|
Icons.Outlined.Search,
|
||||||
contentDescription = localize(MR.strings.action_search),
|
contentDescription = stringResource(MR.strings.action_search),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -363,7 +362,7 @@ fun SearchToolbar(
|
|||||||
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
|
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
|
||||||
tooltip = {
|
tooltip = {
|
||||||
PlainTooltip {
|
PlainTooltip {
|
||||||
Text(localize(MR.strings.action_reset))
|
Text(stringResource(MR.strings.action_reset))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
state = rememberTooltipState(),
|
state = rememberTooltipState(),
|
||||||
@ -376,7 +375,7 @@ fun SearchToolbar(
|
|||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Outlined.Close,
|
Icons.Outlined.Close,
|
||||||
contentDescription = localize(MR.strings.action_reset),
|
contentDescription = stringResource(MR.strings.action_reset),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -396,7 +395,7 @@ fun UpIcon(navigationIcon: ImageVector? = null) {
|
|||||||
?: Icons.AutoMirrored.Outlined.ArrowBack
|
?: Icons.AutoMirrored.Outlined.ArrowBack
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = icon,
|
imageVector = icon,
|
||||||
contentDescription = stringResource(R.string.abc_action_bar_up_description),
|
contentDescription = stringResource(MR.strings.action_bar_up_description),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ import androidx.compose.ui.util.fastMap
|
|||||||
import androidx.compose.ui.util.fastMaxBy
|
import androidx.compose.ui.util.fastMaxBy
|
||||||
import dev.icerock.moko.resources.StringResource
|
import dev.icerock.moko.resources.StringResource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
val DownloadedOnlyBannerBackgroundColor
|
val DownloadedOnlyBannerBackgroundColor
|
||||||
@Composable get() = MaterialTheme.colorScheme.tertiary
|
@Composable get() = MaterialTheme.colorScheme.tertiary
|
||||||
@ -47,7 +47,7 @@ fun WarningBanner(
|
|||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(textRes),
|
text = stringResource(textRes),
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.background(MaterialTheme.colorScheme.error)
|
.background(MaterialTheme.colorScheme.error)
|
||||||
@ -127,7 +127,7 @@ fun AppStateBanners(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) {
|
private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.label_downloaded_only),
|
text = stringResource(MR.strings.label_downloaded_only),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.background(DownloadedOnlyBannerBackgroundColor)
|
.background(DownloadedOnlyBannerBackgroundColor)
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@ -142,7 +142,7 @@ private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun IncognitoModeBanner(modifier: Modifier = Modifier) {
|
private fun IncognitoModeBanner(modifier: Modifier = Modifier) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.pref_incognito_mode),
|
text = stringResource(MR.strings.pref_incognito_mode),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.background(IncognitoModeBannerBackgroundColor)
|
.background(IncognitoModeBannerBackgroundColor)
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@ -173,7 +173,7 @@ private fun IndexingDownloadBanner(modifier: Modifier = Modifier) {
|
|||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.width(8.dp))
|
Spacer(modifier = Modifier.width(8.dp))
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.download_notifier_cache_renewal),
|
text = stringResource(MR.strings.download_notifier_cache_renewal),
|
||||||
color = MaterialTheme.colorScheme.onSecondary,
|
color = MaterialTheme.colorScheme.onSecondary,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
style = MaterialTheme.typography.labelMedium,
|
style = MaterialTheme.typography.labelMedium,
|
||||||
|
@ -5,8 +5,8 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import eu.kanade.presentation.manga.DownloadAction
|
import eu.kanade.presentation.manga.DownloadAction
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.pluralStringResource
|
||||||
import tachiyomi.presentation.core.i18n.localizePlural
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DownloadDropdownMenu(
|
fun DownloadDropdownMenu(
|
||||||
@ -19,11 +19,11 @@ fun DownloadDropdownMenu(
|
|||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
) {
|
) {
|
||||||
listOfNotNull(
|
listOfNotNull(
|
||||||
DownloadAction.NEXT_1_CHAPTER to localizePlural(MR.plurals.download_amount, 1, 1),
|
DownloadAction.NEXT_1_CHAPTER to pluralStringResource(MR.plurals.download_amount, 1, 1),
|
||||||
DownloadAction.NEXT_5_CHAPTERS to localizePlural(MR.plurals.download_amount, 5, 5),
|
DownloadAction.NEXT_5_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 5, 5),
|
||||||
DownloadAction.NEXT_10_CHAPTERS to localizePlural(MR.plurals.download_amount, 10, 10),
|
DownloadAction.NEXT_10_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 10, 10),
|
||||||
DownloadAction.NEXT_25_CHAPTERS to localizePlural(MR.plurals.download_amount, 25, 25),
|
DownloadAction.NEXT_25_CHAPTERS to pluralStringResource(MR.plurals.download_amount, 25, 25),
|
||||||
DownloadAction.UNREAD_CHAPTERS to localize(MR.strings.download_unread),
|
DownloadAction.UNREAD_CHAPTERS to stringResource(MR.strings.download_unread),
|
||||||
).map { (downloadAction, string) ->
|
).map { (downloadAction, string) ->
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = string) },
|
text = { Text(text = string) },
|
||||||
|
@ -19,7 +19,7 @@ import androidx.compose.ui.unit.DpOffset
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.PopupProperties
|
import androidx.compose.ui.window.PopupProperties
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import androidx.compose.material3.DropdownMenu as ComposeDropdownMenu
|
import androidx.compose.material3.DropdownMenu as ComposeDropdownMenu
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -54,13 +54,13 @@ fun RadioMenuItem(
|
|||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.RadioButtonChecked,
|
imageVector = Icons.Outlined.RadioButtonChecked,
|
||||||
contentDescription = localize(MR.strings.selected),
|
contentDescription = stringResource(MR.strings.selected),
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
tint = MaterialTheme.colorScheme.primary,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.RadioButtonUnchecked,
|
imageVector = Icons.Outlined.RadioButtonUnchecked,
|
||||||
contentDescription = localize(MR.strings.not_selected),
|
contentDescription = stringResource(MR.strings.not_selected),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -31,7 +31,7 @@ import kotlinx.coroutines.launch
|
|||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.HorizontalPager
|
import tachiyomi.presentation.core.components.HorizontalPager
|
||||||
import tachiyomi.presentation.core.components.material.TabText
|
import tachiyomi.presentation.core.components.material.TabText
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
object TabbedDialogPaddings {
|
object TabbedDialogPaddings {
|
||||||
val Horizontal = 24.dp
|
val Horizontal = 24.dp
|
||||||
@ -94,7 +94,7 @@ private fun MoreMenu(
|
|||||||
IconButton(onClick = { expanded = true }) {
|
IconButton(onClick = { expanded = true }) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Default.MoreVert,
|
imageVector = Icons.Default.MoreVert,
|
||||||
contentDescription = localize(MR.strings.label_more),
|
contentDescription = stringResource(MR.strings.label_more),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
DropdownMenu(
|
DropdownMenu(
|
||||||
|
@ -26,7 +26,7 @@ import kotlinx.coroutines.launch
|
|||||||
import tachiyomi.presentation.core.components.HorizontalPager
|
import tachiyomi.presentation.core.components.HorizontalPager
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.components.material.TabText
|
import tachiyomi.presentation.core.components.material.TabText
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun TabbedScreen(
|
fun TabbedScreen(
|
||||||
@ -52,7 +52,7 @@ fun TabbedScreen(
|
|||||||
val searchEnabled = tab.searchEnabled
|
val searchEnabled = tab.searchEnabled
|
||||||
|
|
||||||
SearchToolbar(
|
SearchToolbar(
|
||||||
titleContent = { AppBarTitle(localize(titleRes)) },
|
titleContent = { AppBarTitle(stringResource(titleRes)) },
|
||||||
searchEnabled = searchEnabled,
|
searchEnabled = searchEnabled,
|
||||||
searchQuery = if (searchEnabled) searchQuery else null,
|
searchQuery = if (searchEnabled) searchQuery else null,
|
||||||
onChangeSearchQuery = onChangeSearchQuery,
|
onChangeSearchQuery = onChangeSearchQuery,
|
||||||
@ -75,7 +75,7 @@ fun TabbedScreen(
|
|||||||
Tab(
|
Tab(
|
||||||
selected = state.currentPage == index,
|
selected = state.currentPage == index,
|
||||||
onClick = { scope.launch { state.animateScrollToPage(index) } },
|
onClick = { scope.launch { state.animateScrollToPage(index) } },
|
||||||
text = { TabText(text = localize(tab.titleRes), badgeCount = tab.badgeNumber) },
|
text = { TabText(text = stringResource(tab.titleRes), badgeCount = tab.badgeNumber) },
|
||||||
unselectedContentColor = MaterialTheme.colorScheme.onSurface,
|
unselectedContentColor = MaterialTheme.colorScheme.onSurface,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.util.CrashLogUtil
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.InfoScreen
|
import tachiyomi.presentation.core.screens.InfoScreen
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -32,15 +32,15 @@ fun CrashScreen(
|
|||||||
|
|
||||||
InfoScreen(
|
InfoScreen(
|
||||||
icon = Icons.Outlined.BugReport,
|
icon = Icons.Outlined.BugReport,
|
||||||
headingText = localize(MR.strings.crash_screen_title),
|
headingText = stringResource(MR.strings.crash_screen_title),
|
||||||
subtitleText = localize(MR.strings.crash_screen_description, localize(MR.strings.app_name)),
|
subtitleText = stringResource(MR.strings.crash_screen_description, stringResource(MR.strings.app_name)),
|
||||||
acceptText = localize(MR.strings.pref_dump_crash_logs),
|
acceptText = stringResource(MR.strings.pref_dump_crash_logs),
|
||||||
onAcceptClick = {
|
onAcceptClick = {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
CrashLogUtil(context).dumpLogs()
|
CrashLogUtil(context).dumpLogs()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
rejectText = localize(MR.strings.crash_screen_restart_application),
|
rejectText = stringResource(MR.strings.crash_screen_restart_application),
|
||||||
onRejectClick = onRestartClick,
|
onRejectClick = onRestartClick,
|
||||||
) {
|
) {
|
||||||
Box(
|
Box(
|
||||||
|
@ -27,7 +27,7 @@ import tachiyomi.domain.history.model.HistoryWithRelations
|
|||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.FastScrollLazyColumn
|
import tachiyomi.presentation.core.components.FastScrollLazyColumn
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
@ -47,14 +47,14 @@ fun HistoryScreen(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { scrollBehavior ->
|
topBar = { scrollBehavior ->
|
||||||
SearchToolbar(
|
SearchToolbar(
|
||||||
titleContent = { AppBarTitle(localize(MR.strings.history)) },
|
titleContent = { AppBarTitle(stringResource(MR.strings.history)) },
|
||||||
searchQuery = state.searchQuery,
|
searchQuery = state.searchQuery,
|
||||||
onChangeSearchQuery = onSearchQueryChange,
|
onChangeSearchQuery = onSearchQueryChange,
|
||||||
actions = {
|
actions = {
|
||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.pref_clear_history),
|
title = stringResource(MR.strings.pref_clear_history),
|
||||||
icon = Icons.Outlined.DeleteSweep,
|
icon = Icons.Outlined.DeleteSweep,
|
||||||
onClick = {
|
onClick = {
|
||||||
onDialogChange(HistoryScreenModel.Dialog.DeleteAll)
|
onDialogChange(HistoryScreenModel.Dialog.DeleteAll)
|
||||||
|
@ -15,7 +15,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import eu.kanade.presentation.theme.TachiyomiTheme
|
import eu.kanade.presentation.theme.TachiyomiTheme
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.LabeledCheckbox
|
import tachiyomi.presentation.core.components.LabeledCheckbox
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun HistoryDeleteDialog(
|
fun HistoryDeleteDialog(
|
||||||
@ -26,16 +26,16 @@ fun HistoryDeleteDialog(
|
|||||||
|
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
title = {
|
title = {
|
||||||
Text(text = localize(MR.strings.action_remove))
|
Text(text = stringResource(MR.strings.action_remove))
|
||||||
},
|
},
|
||||||
text = {
|
text = {
|
||||||
Column(
|
Column(
|
||||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.dialog_with_checkbox_remove_description))
|
Text(text = stringResource(MR.strings.dialog_with_checkbox_remove_description))
|
||||||
|
|
||||||
LabeledCheckbox(
|
LabeledCheckbox(
|
||||||
label = localize(MR.strings.dialog_with_checkbox_reset),
|
label = stringResource(MR.strings.dialog_with_checkbox_reset),
|
||||||
checked = removeEverything,
|
checked = removeEverything,
|
||||||
onCheckedChange = { removeEverything = it },
|
onCheckedChange = { removeEverything = it },
|
||||||
)
|
)
|
||||||
@ -47,12 +47,12 @@ fun HistoryDeleteDialog(
|
|||||||
onDelete(removeEverything)
|
onDelete(removeEverything)
|
||||||
onDismissRequest()
|
onDismissRequest()
|
||||||
}) {
|
}) {
|
||||||
Text(text = localize(MR.strings.action_remove))
|
Text(text = stringResource(MR.strings.action_remove))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -65,10 +65,10 @@ fun HistoryDeleteAllDialog(
|
|||||||
) {
|
) {
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
title = {
|
title = {
|
||||||
Text(text = localize(MR.strings.action_remove_everything))
|
Text(text = stringResource(MR.strings.action_remove_everything))
|
||||||
},
|
},
|
||||||
text = {
|
text = {
|
||||||
Text(text = localize(MR.strings.clear_history_confirmation))
|
Text(text = stringResource(MR.strings.clear_history_confirmation))
|
||||||
},
|
},
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
@ -76,12 +76,12 @@ fun HistoryDeleteAllDialog(
|
|||||||
onDelete()
|
onDelete()
|
||||||
onDismissRequest()
|
onDismissRequest()
|
||||||
}) {
|
}) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -29,7 +29,7 @@ import eu.kanade.tachiyomi.util.lang.toTimestampString
|
|||||||
import tachiyomi.domain.history.model.HistoryWithRelations
|
import tachiyomi.domain.history.model.HistoryWithRelations
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
private val HistoryItemHeight = 96.dp
|
private val HistoryItemHeight = 96.dp
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ fun HistoryItem(
|
|||||||
val readAt = remember { history.readAt?.toTimestampString() ?: "" }
|
val readAt = remember { history.readAt?.toTimestampString() ?: "" }
|
||||||
Text(
|
Text(
|
||||||
text = if (history.chapterNumber > -1) {
|
text = if (history.chapterNumber > -1) {
|
||||||
localize(
|
stringResource(
|
||||||
MR.strings.recent_manga_time,
|
MR.strings.recent_manga_time,
|
||||||
formatChapterNumber(history.chapterNumber),
|
formatChapterNumber(history.chapterNumber),
|
||||||
readAt,
|
readAt,
|
||||||
@ -85,7 +85,7 @@ fun HistoryItem(
|
|||||||
IconButton(onClick = onClickDelete) {
|
IconButton(onClick = onClickDelete) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.Delete,
|
imageVector = Icons.Outlined.Delete,
|
||||||
contentDescription = localize(MR.strings.action_delete),
|
contentDescription = stringResource(MR.strings.action_delete),
|
||||||
tint = MaterialTheme.colorScheme.onSurface,
|
tint = MaterialTheme.colorScheme.onSurface,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ import dev.icerock.moko.resources.StringResource
|
|||||||
import tachiyomi.core.preference.CheckboxState
|
import tachiyomi.core.preference.CheckboxState
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.LabeledCheckbox
|
import tachiyomi.presentation.core.components.LabeledCheckbox
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DeleteLibraryMangaDialog(
|
fun DeleteLibraryMangaDialog(
|
||||||
@ -35,7 +35,7 @@ fun DeleteLibraryMangaDialog(
|
|||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
@ -49,17 +49,17 @@ fun DeleteLibraryMangaDialog(
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
title = {
|
title = {
|
||||||
Text(text = localize(MR.strings.action_remove))
|
Text(text = stringResource(MR.strings.action_remove))
|
||||||
},
|
},
|
||||||
text = {
|
text = {
|
||||||
Column {
|
Column {
|
||||||
list.forEach { state ->
|
list.forEach { state ->
|
||||||
LabeledCheckbox(
|
LabeledCheckbox(
|
||||||
label = localize(state.value),
|
label = stringResource(state.value),
|
||||||
checked = state.isChecked,
|
checked = state.isChecked,
|
||||||
onCheckedChange = {
|
onCheckedChange = {
|
||||||
val index = list.indexOf(state)
|
val index = list.indexOf(state)
|
||||||
|
@ -40,7 +40,7 @@ import androidx.compose.ui.unit.sp
|
|||||||
import eu.kanade.presentation.manga.components.MangaCover
|
import eu.kanade.presentation.manga.components.MangaCover
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.BadgeGroup
|
import tachiyomi.presentation.core.components.BadgeGroup
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.selectedBackground
|
import tachiyomi.presentation.core.util.selectedBackground
|
||||||
|
|
||||||
object CommonMangaItemDefaults {
|
object CommonMangaItemDefaults {
|
||||||
@ -378,7 +378,7 @@ private fun ContinueReadingButton(
|
|||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.PlayArrow,
|
imageVector = Icons.Filled.PlayArrow,
|
||||||
contentDescription = localize(MR.strings.action_resume),
|
contentDescription = stringResource(MR.strings.action_resume),
|
||||||
modifier = Modifier.size(16.dp),
|
modifier = Modifier.size(16.dp),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.zIndex
|
import androidx.compose.ui.zIndex
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
internal fun GlobalSearchItem(
|
internal fun GlobalSearchItem(
|
||||||
@ -19,7 +19,7 @@ internal fun GlobalSearchItem(
|
|||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.action_global_search_query, searchQuery),
|
text = stringResource(MR.strings.action_global_search_query, searchQuery),
|
||||||
modifier = Modifier.zIndex(99f),
|
modifier = Modifier.zIndex(99f),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ import eu.kanade.presentation.components.SearchToolbar
|
|||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.Pill
|
import tachiyomi.presentation.core.components.Pill
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.theme.active
|
import tachiyomi.presentation.core.theme.active
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -107,21 +107,21 @@ private fun LibraryRegularToolbar(
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_filter),
|
title = stringResource(MR.strings.action_filter),
|
||||||
icon = Icons.Outlined.FilterList,
|
icon = Icons.Outlined.FilterList,
|
||||||
iconTint = filterTint,
|
iconTint = filterTint,
|
||||||
onClick = onClickFilter,
|
onClick = onClickFilter,
|
||||||
),
|
),
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_update_library),
|
title = stringResource(MR.strings.action_update_library),
|
||||||
onClick = onClickGlobalUpdate,
|
onClick = onClickGlobalUpdate,
|
||||||
),
|
),
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_update_category),
|
title = stringResource(MR.strings.action_update_category),
|
||||||
onClick = onClickRefresh,
|
onClick = onClickRefresh,
|
||||||
),
|
),
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_open_random_manga),
|
title = stringResource(MR.strings.action_open_random_manga),
|
||||||
onClick = onClickOpenRandomManga,
|
onClick = onClickOpenRandomManga,
|
||||||
),
|
),
|
||||||
|
|
||||||
@ -156,12 +156,12 @@ private fun LibrarySelectionToolbar(
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_select_all),
|
title = stringResource(MR.strings.action_select_all),
|
||||||
icon = Icons.Outlined.SelectAll,
|
icon = Icons.Outlined.SelectAll,
|
||||||
onClick = onClickSelectAll,
|
onClick = onClickSelectAll,
|
||||||
),
|
),
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_select_inverse),
|
title = stringResource(MR.strings.action_select_inverse),
|
||||||
icon = Icons.Outlined.FlipToBack,
|
icon = Icons.Outlined.FlipToBack,
|
||||||
onClick = onClickInvertSelection,
|
onClick = onClickInvertSelection,
|
||||||
),
|
),
|
||||||
|
@ -38,7 +38,7 @@ import tachiyomi.presentation.core.components.LabeledCheckbox
|
|||||||
import tachiyomi.presentation.core.components.RadioItem
|
import tachiyomi.presentation.core.components.RadioItem
|
||||||
import tachiyomi.presentation.core.components.SortItem
|
import tachiyomi.presentation.core.components.SortItem
|
||||||
import tachiyomi.presentation.core.components.TriStateItem
|
import tachiyomi.presentation.core.components.TriStateItem
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.theme.active
|
import tachiyomi.presentation.core.theme.active
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -66,20 +66,20 @@ fun ChapterSettingsDialog(
|
|||||||
TabbedDialog(
|
TabbedDialog(
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
tabTitles = persistentListOf(
|
tabTitles = persistentListOf(
|
||||||
localize(MR.strings.action_filter),
|
stringResource(MR.strings.action_filter),
|
||||||
localize(MR.strings.action_sort),
|
stringResource(MR.strings.action_sort),
|
||||||
localize(MR.strings.action_display),
|
stringResource(MR.strings.action_display),
|
||||||
),
|
),
|
||||||
tabOverflowMenuContent = { closeMenu ->
|
tabOverflowMenuContent = { closeMenu ->
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(localize(MR.strings.set_chapter_settings_as_default)) },
|
text = { Text(stringResource(MR.strings.set_chapter_settings_as_default)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
showSetAsDefaultDialog = true
|
showSetAsDefaultDialog = true
|
||||||
closeMenu()
|
closeMenu()
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(localize(MR.strings.action_reset)) },
|
text = { Text(stringResource(MR.strings.action_reset)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onResetToDefault()
|
onResetToDefault()
|
||||||
closeMenu()
|
closeMenu()
|
||||||
@ -136,17 +136,17 @@ private fun ColumnScope.FilterPage(
|
|||||||
onScanlatorFilterClicked: (() -> Unit),
|
onScanlatorFilterClicked: (() -> Unit),
|
||||||
) {
|
) {
|
||||||
TriStateItem(
|
TriStateItem(
|
||||||
label = localize(MR.strings.label_downloaded),
|
label = stringResource(MR.strings.label_downloaded),
|
||||||
state = downloadFilter,
|
state = downloadFilter,
|
||||||
onClick = onDownloadFilterChanged,
|
onClick = onDownloadFilterChanged,
|
||||||
)
|
)
|
||||||
TriStateItem(
|
TriStateItem(
|
||||||
label = localize(MR.strings.action_filter_unread),
|
label = stringResource(MR.strings.action_filter_unread),
|
||||||
state = unreadFilter,
|
state = unreadFilter,
|
||||||
onClick = onUnreadFilterChanged,
|
onClick = onUnreadFilterChanged,
|
||||||
)
|
)
|
||||||
TriStateItem(
|
TriStateItem(
|
||||||
label = localize(MR.strings.action_filter_bookmarked),
|
label = stringResource(MR.strings.action_filter_bookmarked),
|
||||||
state = bookmarkedFilter,
|
state = bookmarkedFilter,
|
||||||
onClick = onBookmarkedFilterChanged,
|
onClick = onBookmarkedFilterChanged,
|
||||||
)
|
)
|
||||||
@ -179,7 +179,7 @@ fun ScanlatorFilterItem(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.scanlator),
|
text = stringResource(MR.strings.scanlator),
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -198,7 +198,7 @@ private fun ColumnScope.SortPage(
|
|||||||
MR.strings.action_sort_alpha to Manga.CHAPTER_SORTING_ALPHABET,
|
MR.strings.action_sort_alpha to Manga.CHAPTER_SORTING_ALPHABET,
|
||||||
).map { (titleRes, mode) ->
|
).map { (titleRes, mode) ->
|
||||||
SortItem(
|
SortItem(
|
||||||
label = localize(titleRes),
|
label = stringResource(titleRes),
|
||||||
sortDescending = sortDescending.takeIf { sortingMode == mode },
|
sortDescending = sortDescending.takeIf { sortingMode == mode },
|
||||||
onClick = { onItemSelected(mode) },
|
onClick = { onItemSelected(mode) },
|
||||||
)
|
)
|
||||||
@ -215,7 +215,7 @@ private fun ColumnScope.DisplayPage(
|
|||||||
MR.strings.show_chapter_number to Manga.CHAPTER_DISPLAY_NUMBER,
|
MR.strings.show_chapter_number to Manga.CHAPTER_DISPLAY_NUMBER,
|
||||||
).map { (titleRes, mode) ->
|
).map { (titleRes, mode) ->
|
||||||
RadioItem(
|
RadioItem(
|
||||||
label = localize(titleRes),
|
label = stringResource(titleRes),
|
||||||
selected = displayMode == mode,
|
selected = displayMode == mode,
|
||||||
onClick = { onItemSelected(mode) },
|
onClick = { onItemSelected(mode) },
|
||||||
)
|
)
|
||||||
@ -231,15 +231,15 @@ private fun SetAsDefaultDialog(
|
|||||||
|
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
title = { Text(text = localize(MR.strings.chapter_settings)) },
|
title = { Text(text = stringResource(MR.strings.chapter_settings)) },
|
||||||
text = {
|
text = {
|
||||||
Column(
|
Column(
|
||||||
verticalArrangement = Arrangement.spacedBy(12.dp),
|
verticalArrangement = Arrangement.spacedBy(12.dp),
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.confirm_set_chapter_settings))
|
Text(text = stringResource(MR.strings.confirm_set_chapter_settings))
|
||||||
|
|
||||||
LabeledCheckbox(
|
LabeledCheckbox(
|
||||||
label = localize(MR.strings.also_set_chapter_settings_for_library),
|
label = stringResource(MR.strings.also_set_chapter_settings_for_library),
|
||||||
checked = optionalChecked,
|
checked = optionalChecked,
|
||||||
onCheckedChange = { optionalChecked = it },
|
onCheckedChange = { optionalChecked = it },
|
||||||
)
|
)
|
||||||
@ -247,7 +247,7 @@ private fun SetAsDefaultDialog(
|
|||||||
},
|
},
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
@ -257,7 +257,7 @@ private fun SetAsDefaultDialog(
|
|||||||
onDismissRequest()
|
onDismissRequest()
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DuplicateMangaDialog(
|
fun DuplicateMangaDialog(
|
||||||
@ -21,10 +21,10 @@ fun DuplicateMangaDialog(
|
|||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
title = {
|
title = {
|
||||||
Text(text = localize(MR.strings.are_you_sure))
|
Text(text = stringResource(MR.strings.are_you_sure))
|
||||||
},
|
},
|
||||||
text = {
|
text = {
|
||||||
Text(text = localize(MR.strings.confirm_add_duplicate_manga))
|
Text(text = stringResource(MR.strings.confirm_add_duplicate_manga))
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
FlowRow(
|
FlowRow(
|
||||||
@ -36,13 +36,13 @@ fun DuplicateMangaDialog(
|
|||||||
onOpenManga()
|
onOpenManga()
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_show_manga))
|
Text(text = stringResource(MR.strings.action_show_manga))
|
||||||
}
|
}
|
||||||
|
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
|
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
TextButton(
|
TextButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
@ -50,7 +50,7 @@ fun DuplicateMangaDialog(
|
|||||||
onConfirm()
|
onConfirm()
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_add))
|
Text(text = stringResource(MR.strings.action_add))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -98,7 +98,7 @@ import tachiyomi.presentation.core.components.VerticalFastScroller
|
|||||||
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
|
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
|
||||||
import tachiyomi.presentation.core.components.material.PullRefresh
|
import tachiyomi.presentation.core.components.material.PullRefresh
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.isScrolledToEnd
|
import tachiyomi.presentation.core.util.isScrolledToEnd
|
||||||
import tachiyomi.presentation.core.util.isScrollingUp
|
import tachiyomi.presentation.core.util.isScrollingUp
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
@ -422,7 +422,9 @@ private fun MangaScreenSmallImpl(
|
|||||||
val isReading = remember(state.chapters) {
|
val isReading = remember(state.chapters) {
|
||||||
state.chapters.fastAny { it.chapter.read }
|
state.chapters.fastAny { it.chapter.read }
|
||||||
}
|
}
|
||||||
Text(text = localize(if (isReading) MR.strings.action_resume else MR.strings.action_start))
|
Text(
|
||||||
|
text = stringResource(if (isReading) MR.strings.action_resume else MR.strings.action_start),
|
||||||
|
)
|
||||||
},
|
},
|
||||||
icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) },
|
icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) },
|
||||||
onClick = onContinueReading,
|
onClick = onContinueReading,
|
||||||
@ -758,7 +760,9 @@ fun MangaScreenLargeImpl(
|
|||||||
state.chapters.fastAny { it.chapter.read }
|
state.chapters.fastAny { it.chapter.read }
|
||||||
}
|
}
|
||||||
Text(
|
Text(
|
||||||
text = localize(if (isReading) MR.strings.action_resume else MR.strings.action_start),
|
text = stringResource(
|
||||||
|
if (isReading) MR.strings.action_resume else MR.strings.action_start,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) },
|
icon = { Icon(imageVector = Icons.Filled.PlayArrow, contentDescription = null) },
|
||||||
@ -977,7 +981,7 @@ private fun LazyListScope.sharedChapterItems(
|
|||||||
is ChapterList.Item -> {
|
is ChapterList.Item -> {
|
||||||
MangaChapterListItem(
|
MangaChapterListItem(
|
||||||
title = if (manga.displayMode == Manga.CHAPTER_DISPLAY_NUMBER) {
|
title = if (manga.displayMode == Manga.CHAPTER_DISPLAY_NUMBER) {
|
||||||
localize(
|
stringResource(
|
||||||
MR.strings.display_mode_chapter,
|
MR.strings.display_mode_chapter,
|
||||||
formatChapterNumber(item.chapter.chapterNumber),
|
formatChapterNumber(item.chapter.chapterNumber),
|
||||||
)
|
)
|
||||||
@ -1002,7 +1006,7 @@ private fun LazyListScope.sharedChapterItems(
|
|||||||
readProgress = item.chapter.lastPageRead
|
readProgress = item.chapter.lastPageRead
|
||||||
.takeIf { /* SY --> */(!item.chapter.read || alwaysShowReadingProgress)/* SY <-- */ && it > 0L }
|
.takeIf { /* SY --> */(!item.chapter.read || alwaysShowReadingProgress)/* SY <-- */ && it > 0L }
|
||||||
?.let {
|
?.let {
|
||||||
localize(
|
stringResource(
|
||||||
MR.strings.chapter_progress,
|
MR.strings.chapter_progress,
|
||||||
it + 1,
|
it + 1,
|
||||||
)
|
)
|
||||||
|
@ -36,7 +36,7 @@ import eu.kanade.tachiyomi.R
|
|||||||
import eu.kanade.tachiyomi.data.download.model.Download
|
import eu.kanade.tachiyomi.data.download.model.Download
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.IconButtonTokens
|
import tachiyomi.presentation.core.components.material.IconButtonTokens
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
||||||
|
|
||||||
enum class ChapterDownloadAction {
|
enum class ChapterDownloadAction {
|
||||||
@ -99,7 +99,7 @@ private fun NotDownloadedIndicator(
|
|||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
painter = painterResource(R.drawable.ic_download_chapter_24dp),
|
painter = painterResource(R.drawable.ic_download_chapter_24dp),
|
||||||
contentDescription = localize(MR.strings.manga_download),
|
contentDescription = stringResource(MR.strings.manga_download),
|
||||||
modifier = Modifier.size(IndicatorSize),
|
modifier = Modifier.size(IndicatorSize),
|
||||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
)
|
)
|
||||||
@ -156,14 +156,14 @@ private fun DownloadingIndicator(
|
|||||||
}
|
}
|
||||||
DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) {
|
DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) {
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_start_downloading_now)) },
|
text = { Text(text = stringResource(MR.strings.action_start_downloading_now)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onClick(ChapterDownloadAction.START_NOW)
|
onClick(ChapterDownloadAction.START_NOW)
|
||||||
isMenuExpanded = false
|
isMenuExpanded = false
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_cancel)) },
|
text = { Text(text = stringResource(MR.strings.action_cancel)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onClick(ChapterDownloadAction.CANCEL)
|
onClick(ChapterDownloadAction.CANCEL)
|
||||||
isMenuExpanded = false
|
isMenuExpanded = false
|
||||||
@ -204,7 +204,7 @@ private fun DownloadedIndicator(
|
|||||||
)
|
)
|
||||||
DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) {
|
DropdownMenu(expanded = isMenuExpanded, onDismissRequest = { isMenuExpanded = false }) {
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_delete)) },
|
text = { Text(text = stringResource(MR.strings.action_delete)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onClick(ChapterDownloadAction.DELETE)
|
onClick(ChapterDownloadAction.DELETE)
|
||||||
isMenuExpanded = false
|
isMenuExpanded = false
|
||||||
@ -232,7 +232,7 @@ private fun ErrorIndicator(
|
|||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.ErrorOutline,
|
imageVector = Icons.Outlined.ErrorOutline,
|
||||||
contentDescription = localize(MR.strings.chapter_error),
|
contentDescription = stringResource(MR.strings.chapter_error),
|
||||||
modifier = Modifier.size(IndicatorSize),
|
modifier = Modifier.size(IndicatorSize),
|
||||||
tint = MaterialTheme.colorScheme.error,
|
tint = MaterialTheme.colorScheme.error,
|
||||||
)
|
)
|
||||||
|
@ -13,8 +13,8 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.SecondaryItemAlpha
|
import tachiyomi.presentation.core.components.material.SecondaryItemAlpha
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.pluralStringResource
|
||||||
import tachiyomi.presentation.core.i18n.localizePlural
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ChapterHeader(
|
fun ChapterHeader(
|
||||||
@ -35,9 +35,9 @@ fun ChapterHeader(
|
|||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = if (chapterCount == null) {
|
text = if (chapterCount == null) {
|
||||||
localize(MR.strings.chapters)
|
stringResource(MR.strings.chapters)
|
||||||
} else {
|
} else {
|
||||||
localizePlural(MR.plurals.manga_num_chapters, count = chapterCount, chapterCount)
|
pluralStringResource(MR.plurals.manga_num_chapters, count = chapterCount, chapterCount)
|
||||||
},
|
},
|
||||||
style = MaterialTheme.typography.titleMedium,
|
style = MaterialTheme.typography.titleMedium,
|
||||||
color = MaterialTheme.colorScheme.onBackground,
|
color = MaterialTheme.colorScheme.onBackground,
|
||||||
@ -54,7 +54,7 @@ private fun MissingChaptersWarning(count: Int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = localizePlural(MR.plurals.missing_chapters, count = count, count),
|
text = pluralStringResource(MR.plurals.missing_chapters, count = count, count),
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
style = MaterialTheme.typography.bodySmall,
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
@ -52,7 +52,7 @@ import tachiyomi.domain.library.service.LibraryPreferences
|
|||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.ReadItemAlpha
|
import tachiyomi.presentation.core.components.material.ReadItemAlpha
|
||||||
import tachiyomi.presentation.core.components.material.SecondaryItemAlpha
|
import tachiyomi.presentation.core.components.material.SecondaryItemAlpha
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.selectedBackground
|
import tachiyomi.presentation.core.util.selectedBackground
|
||||||
import kotlin.math.absoluteValue
|
import kotlin.math.absoluteValue
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ fun MangaChapterListItem(
|
|||||||
if (!read) {
|
if (!read) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.Circle,
|
imageVector = Icons.Filled.Circle,
|
||||||
contentDescription = localize(MR.strings.unread),
|
contentDescription = stringResource(MR.strings.unread),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.height(8.dp)
|
.height(8.dp)
|
||||||
.padding(end = 4.dp),
|
.padding(end = 4.dp),
|
||||||
@ -156,7 +156,7 @@ fun MangaChapterListItem(
|
|||||||
if (bookmark) {
|
if (bookmark) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.Bookmark,
|
imageVector = Icons.Filled.Bookmark,
|
||||||
contentDescription = localize(MR.strings.action_filter_bookmarked),
|
contentDescription = stringResource(MR.strings.action_filter_bookmarked),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }),
|
.sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }),
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
tint = MaterialTheme.colorScheme.primary,
|
||||||
|
@ -51,7 +51,7 @@ import kotlinx.collections.immutable.persistentListOf
|
|||||||
import tachiyomi.domain.manga.model.Manga
|
import tachiyomi.domain.manga.model.Manga
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.clickableNoIndication
|
import tachiyomi.presentation.core.util.clickableNoIndication
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -85,7 +85,7 @@ fun MangaCoverDialog(
|
|||||||
IconButton(onClick = onDismissRequest) {
|
IconButton(onClick = onDismissRequest) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.Close,
|
imageVector = Icons.Outlined.Close,
|
||||||
contentDescription = localize(MR.strings.action_close),
|
contentDescription = stringResource(MR.strings.action_close),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,12 +94,12 @@ fun MangaCoverDialog(
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
actions = persistentListOf(
|
actions = persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_share),
|
title = stringResource(MR.strings.action_share),
|
||||||
icon = Icons.Outlined.Share,
|
icon = Icons.Outlined.Share,
|
||||||
onClick = onShareClick,
|
onClick = onShareClick,
|
||||||
),
|
),
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_save),
|
title = stringResource(MR.strings.action_save),
|
||||||
icon = Icons.Outlined.Save,
|
icon = Icons.Outlined.Save,
|
||||||
onClick = onSaveClick,
|
onClick = onSaveClick,
|
||||||
),
|
),
|
||||||
@ -119,7 +119,7 @@ fun MangaCoverDialog(
|
|||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.Edit,
|
imageVector = Icons.Outlined.Edit,
|
||||||
contentDescription = localize(MR.strings.action_edit_cover),
|
contentDescription = stringResource(MR.strings.action_edit_cover),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
DropdownMenu(
|
DropdownMenu(
|
||||||
@ -128,14 +128,14 @@ fun MangaCoverDialog(
|
|||||||
offset = DpOffset(8.dp, 0.dp),
|
offset = DpOffset(8.dp, 0.dp),
|
||||||
) {
|
) {
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_edit)) },
|
text = { Text(text = stringResource(MR.strings.action_edit)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onEditClick(EditCoverAction.EDIT)
|
onEditClick(EditCoverAction.EDIT)
|
||||||
expanded = false
|
expanded = false
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_delete)) },
|
text = { Text(text = stringResource(MR.strings.action_delete)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onEditClick(EditCoverAction.DELETE)
|
onEditClick(EditCoverAction.DELETE)
|
||||||
expanded = false
|
expanded = false
|
||||||
|
@ -80,8 +80,8 @@ import tachiyomi.domain.manga.model.Manga
|
|||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.TextButton
|
import tachiyomi.presentation.core.components.material.TextButton
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.pluralStringResource
|
||||||
import tachiyomi.presentation.core.i18n.localizePlural
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.clickableNoIndication
|
import tachiyomi.presentation.core.util.clickableNoIndication
|
||||||
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
||||||
import kotlin.math.absoluteValue
|
import kotlin.math.absoluteValue
|
||||||
@ -181,9 +181,9 @@ fun MangaActionRow(
|
|||||||
Row(modifier = modifier.padding(start = 16.dp, top = 8.dp, end = 16.dp)) {
|
Row(modifier = modifier.padding(start = 16.dp, top = 8.dp, end = 16.dp)) {
|
||||||
MangaActionButton(
|
MangaActionButton(
|
||||||
title = if (favorite) {
|
title = if (favorite) {
|
||||||
localize(MR.strings.in_library)
|
stringResource(MR.strings.in_library)
|
||||||
} else {
|
} else {
|
||||||
localize(MR.strings.add_to_library)
|
stringResource(MR.strings.add_to_library)
|
||||||
},
|
},
|
||||||
icon = if (favorite) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder,
|
icon = if (favorite) Icons.Filled.Favorite else Icons.Outlined.FavoriteBorder,
|
||||||
color = if (favorite) MaterialTheme.colorScheme.primary else defaultActionButtonColor,
|
color = if (favorite) MaterialTheme.colorScheme.primary else defaultActionButtonColor,
|
||||||
@ -192,7 +192,7 @@ fun MangaActionRow(
|
|||||||
)
|
)
|
||||||
if (onEditIntervalClicked != null && fetchInterval != null) {
|
if (onEditIntervalClicked != null && fetchInterval != null) {
|
||||||
MangaActionButton(
|
MangaActionButton(
|
||||||
title = localizePlural(
|
title = pluralStringResource(
|
||||||
MR.plurals.day,
|
MR.plurals.day,
|
||||||
count = fetchInterval.absoluteValue,
|
count = fetchInterval.absoluteValue,
|
||||||
fetchInterval.absoluteValue,
|
fetchInterval.absoluteValue,
|
||||||
@ -205,9 +205,9 @@ fun MangaActionRow(
|
|||||||
if (onTrackingClicked != null) {
|
if (onTrackingClicked != null) {
|
||||||
MangaActionButton(
|
MangaActionButton(
|
||||||
title = if (trackingCount == 0) {
|
title = if (trackingCount == 0) {
|
||||||
localize(MR.strings.manga_tracking_tab)
|
stringResource(MR.strings.manga_tracking_tab)
|
||||||
} else {
|
} else {
|
||||||
localizePlural(MR.plurals.num_trackers, count = trackingCount, trackingCount)
|
pluralStringResource(MR.plurals.num_trackers, count = trackingCount, trackingCount)
|
||||||
},
|
},
|
||||||
icon = if (trackingCount == 0) Icons.Outlined.Sync else Icons.Outlined.Done,
|
icon = if (trackingCount == 0) Icons.Outlined.Sync else Icons.Outlined.Done,
|
||||||
color = if (trackingCount == 0) defaultActionButtonColor else MaterialTheme.colorScheme.primary,
|
color = if (trackingCount == 0) defaultActionButtonColor else MaterialTheme.colorScheme.primary,
|
||||||
@ -216,7 +216,7 @@ fun MangaActionRow(
|
|||||||
}
|
}
|
||||||
if (onWebViewClicked != null) {
|
if (onWebViewClicked != null) {
|
||||||
MangaActionButton(
|
MangaActionButton(
|
||||||
title = localize(MR.strings.action_web_view),
|
title = stringResource(MR.strings.action_web_view),
|
||||||
icon = Icons.Outlined.Public,
|
icon = Icons.Outlined.Public,
|
||||||
color = defaultActionButtonColor,
|
color = defaultActionButtonColor,
|
||||||
onClick = onWebViewClicked,
|
onClick = onWebViewClicked,
|
||||||
@ -254,7 +254,7 @@ fun ExpandableMangaDescription(
|
|||||||
mutableStateOf(defaultExpandState)
|
mutableStateOf(defaultExpandState)
|
||||||
}
|
}
|
||||||
val desc =
|
val desc =
|
||||||
description.takeIf { !it.isNullOrBlank() } ?: localize(MR.strings.description_placeholder)
|
description.takeIf { !it.isNullOrBlank() } ?: stringResource(MR.strings.description_placeholder)
|
||||||
val trimmedDescription = remember(desc) {
|
val trimmedDescription = remember(desc) {
|
||||||
desc
|
desc
|
||||||
.replace(whitespaceLineRegex, "\n")
|
.replace(whitespaceLineRegex, "\n")
|
||||||
@ -284,7 +284,7 @@ fun ExpandableMangaDescription(
|
|||||||
onDismissRequest = { showMenu = false },
|
onDismissRequest = { showMenu = false },
|
||||||
) {
|
) {
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_search)) },
|
text = { Text(text = stringResource(MR.strings.action_search)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onTagSearch(tagSelected)
|
onTagSearch(tagSelected)
|
||||||
showMenu = false
|
showMenu = false
|
||||||
@ -300,7 +300,7 @@ fun ExpandableMangaDescription(
|
|||||||
)
|
)
|
||||||
// SY <--
|
// SY <--
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_copy_to_clipboard)) },
|
text = { Text(text = stringResource(MR.strings.action_copy_to_clipboard)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onCopyTagToClipboard(tagSelected)
|
onCopyTagToClipboard(tagSelected)
|
||||||
showMenu = false
|
showMenu = false
|
||||||
@ -379,7 +379,7 @@ private fun MangaAndSourceTitlesLarge(
|
|||||||
MangaCover.Book(
|
MangaCover.Book(
|
||||||
modifier = Modifier.fillMaxWidth(0.65f),
|
modifier = Modifier.fillMaxWidth(0.65f),
|
||||||
data = coverDataProvider(),
|
data = coverDataProvider(),
|
||||||
contentDescription = localize(MR.strings.manga_cover),
|
contentDescription = stringResource(MR.strings.manga_cover),
|
||||||
onClick = onCoverClick,
|
onClick = onCoverClick,
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(modifier = Modifier.height(16.dp))
|
||||||
@ -421,7 +421,7 @@ private fun MangaAndSourceTitlesSmall(
|
|||||||
.sizeIn(maxWidth = 100.dp)
|
.sizeIn(maxWidth = 100.dp)
|
||||||
.align(Alignment.Top),
|
.align(Alignment.Top),
|
||||||
data = coverDataProvider(),
|
data = coverDataProvider(),
|
||||||
contentDescription = localize(MR.strings.manga_cover),
|
contentDescription = stringResource(MR.strings.manga_cover),
|
||||||
onClick = onCoverClick,
|
onClick = onCoverClick,
|
||||||
)
|
)
|
||||||
Column(
|
Column(
|
||||||
@ -453,7 +453,7 @@ private fun MangaContentInfo(
|
|||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
Text(
|
Text(
|
||||||
text = title.ifBlank { localize(MR.strings.unknown_title) },
|
text = title.ifBlank { stringResource(MR.strings.unknown_title) },
|
||||||
style = MaterialTheme.typography.titleLarge,
|
style = MaterialTheme.typography.titleLarge,
|
||||||
modifier = Modifier.clickableNoIndication(
|
modifier = Modifier.clickableNoIndication(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
@ -483,7 +483,7 @@ private fun MangaContentInfo(
|
|||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = author?.takeIf { it.isNotBlank() }
|
text = author?.takeIf { it.isNotBlank() }
|
||||||
?: localize(MR.strings.unknown_author),
|
?: stringResource(MR.strings.unknown_author),
|
||||||
style = MaterialTheme.typography.titleSmall,
|
style = MaterialTheme.typography.titleSmall,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.clickableNoIndication(
|
.clickableNoIndication(
|
||||||
@ -549,13 +549,13 @@ private fun MangaContentInfo(
|
|||||||
ProvideTextStyle(MaterialTheme.typography.bodyMedium) {
|
ProvideTextStyle(MaterialTheme.typography.bodyMedium) {
|
||||||
Text(
|
Text(
|
||||||
text = when (status) {
|
text = when (status) {
|
||||||
SManga.ONGOING.toLong() -> localize(MR.strings.ongoing)
|
SManga.ONGOING.toLong() -> stringResource(MR.strings.ongoing)
|
||||||
SManga.COMPLETED.toLong() -> localize(MR.strings.completed)
|
SManga.COMPLETED.toLong() -> stringResource(MR.strings.completed)
|
||||||
SManga.LICENSED.toLong() -> localize(MR.strings.licensed)
|
SManga.LICENSED.toLong() -> stringResource(MR.strings.licensed)
|
||||||
SManga.PUBLISHING_FINISHED.toLong() -> localize(MR.strings.publishing_finished)
|
SManga.PUBLISHING_FINISHED.toLong() -> stringResource(MR.strings.publishing_finished)
|
||||||
SManga.CANCELLED.toLong() -> localize(MR.strings.cancelled)
|
SManga.CANCELLED.toLong() -> stringResource(MR.strings.cancelled)
|
||||||
SManga.ON_HIATUS.toLong() -> localize(MR.strings.on_hiatus)
|
SManga.ON_HIATUS.toLong() -> stringResource(MR.strings.on_hiatus)
|
||||||
else -> localize(MR.strings.unknown)
|
else -> stringResource(MR.strings.unknown)
|
||||||
},
|
},
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
@ -629,7 +629,7 @@ private fun MangaSummary(
|
|||||||
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_caret_down)
|
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_caret_down)
|
||||||
Icon(
|
Icon(
|
||||||
painter = rememberAnimatedVectorPainter(image, !expanded),
|
painter = rememberAnimatedVectorPainter(image, !expanded),
|
||||||
contentDescription = localize(
|
contentDescription = stringResource(
|
||||||
if (expanded) MR.strings.manga_info_collapse else MR.strings.manga_info_expand,
|
if (expanded) MR.strings.manga_info_collapse else MR.strings.manga_info_expand,
|
||||||
),
|
),
|
||||||
tint = MaterialTheme.colorScheme.onBackground,
|
tint = MaterialTheme.colorScheme.onBackground,
|
||||||
|
@ -30,7 +30,7 @@ import eu.kanade.presentation.components.UpIcon
|
|||||||
import eu.kanade.presentation.manga.DownloadAction
|
import eu.kanade.presentation.manga.DownloadAction
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.theme.active
|
import tachiyomi.presentation.core.theme.active
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -81,12 +81,12 @@ fun MangaToolbar(
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_select_all),
|
title = stringResource(MR.strings.action_select_all),
|
||||||
icon = Icons.Outlined.SelectAll,
|
icon = Icons.Outlined.SelectAll,
|
||||||
onClick = onSelectAll,
|
onClick = onSelectAll,
|
||||||
),
|
),
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_select_inverse),
|
title = stringResource(MR.strings.action_select_inverse),
|
||||||
icon = Icons.Outlined.FlipToBack,
|
icon = Icons.Outlined.FlipToBack,
|
||||||
onClick = onInvertSelection,
|
onClick = onInvertSelection,
|
||||||
),
|
),
|
||||||
@ -110,7 +110,7 @@ fun MangaToolbar(
|
|||||||
if (onClickDownload != null) {
|
if (onClickDownload != null) {
|
||||||
add(
|
add(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.manga_download),
|
title = stringResource(MR.strings.manga_download),
|
||||||
icon = Icons.Outlined.Download,
|
icon = Icons.Outlined.Download,
|
||||||
onClick = { downloadExpanded = !downloadExpanded },
|
onClick = { downloadExpanded = !downloadExpanded },
|
||||||
),
|
),
|
||||||
@ -118,7 +118,7 @@ fun MangaToolbar(
|
|||||||
}
|
}
|
||||||
add(
|
add(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_filter),
|
title = stringResource(MR.strings.action_filter),
|
||||||
icon = Icons.Outlined.FilterList,
|
icon = Icons.Outlined.FilterList,
|
||||||
iconTint = filterTint,
|
iconTint = filterTint,
|
||||||
onClick = onClickFilter,
|
onClick = onClickFilter,
|
||||||
@ -126,14 +126,14 @@ fun MangaToolbar(
|
|||||||
)
|
)
|
||||||
add(
|
add(
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_webview_refresh),
|
title = stringResource(MR.strings.action_webview_refresh),
|
||||||
onClick = onClickRefresh,
|
onClick = onClickRefresh,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
if (onClickEditCategory != null) {
|
if (onClickEditCategory != null) {
|
||||||
add(
|
add(
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_edit_categories),
|
title = stringResource(MR.strings.action_edit_categories),
|
||||||
onClick = onClickEditCategory,
|
onClick = onClickEditCategory,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -141,7 +141,7 @@ fun MangaToolbar(
|
|||||||
if (onClickMigrate != null) {
|
if (onClickMigrate != null) {
|
||||||
add(
|
add(
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_migrate),
|
title = stringResource(MR.strings.action_migrate),
|
||||||
onClick = onClickMigrate,
|
onClick = onClickMigrate,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -149,7 +149,7 @@ fun MangaToolbar(
|
|||||||
if (onClickShare != null) {
|
if (onClickShare != null) {
|
||||||
add(
|
add(
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_share),
|
title = stringResource(MR.strings.action_share),
|
||||||
onClick = onClickShare,
|
onClick = onClickShare,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -14,7 +14,7 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark
|
|||||||
import eu.kanade.presentation.theme.TachiyomiTheme
|
import eu.kanade.presentation.theme.TachiyomiTheme
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localizePlural
|
import tachiyomi.presentation.core.i18n.pluralStringResource
|
||||||
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -34,7 +34,7 @@ fun MissingChapterCountListItem(
|
|||||||
) {
|
) {
|
||||||
HorizontalDivider(modifier = Modifier.weight(1f))
|
HorizontalDivider(modifier = Modifier.weight(1f))
|
||||||
Text(
|
Text(
|
||||||
text = localizePlural(MR.plurals.missing_chapters, count = count, count),
|
text = pluralStringResource(MR.plurals.missing_chapters, count = count, count),
|
||||||
style = MaterialTheme.typography.labelMedium,
|
style = MaterialTheme.typography.labelMedium,
|
||||||
)
|
)
|
||||||
HorizontalDivider(modifier = Modifier.weight(1f))
|
HorizontalDivider(modifier = Modifier.weight(1f))
|
||||||
|
@ -20,9 +20,7 @@ import androidx.compose.material3.MaterialTheme
|
|||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.minimumInteractiveComponentSize
|
import androidx.compose.material3.minimumInteractiveComponentSize
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.compose.runtime.toMutableStateList
|
import androidx.compose.runtime.toMutableStateList
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
@ -32,7 +30,7 @@ import androidx.compose.ui.window.DialogProperties
|
|||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.TextButton
|
import tachiyomi.presentation.core.components.material.TextButton
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.isScrolledToEnd
|
import tachiyomi.presentation.core.util.isScrolledToEnd
|
||||||
import tachiyomi.presentation.core.util.isScrolledToStart
|
import tachiyomi.presentation.core.util.isScrolledToStart
|
||||||
|
|
||||||
@ -49,10 +47,10 @@ fun ScanlatorFilterDialog(
|
|||||||
val mutableExcludedScanlators = remember(excludedScanlators) { excludedScanlators.toMutableStateList() }
|
val mutableExcludedScanlators = remember(excludedScanlators) { excludedScanlators.toMutableStateList() }
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
title = { Text(text = localize(MR.strings.exclude_scanlators)) },
|
title = { Text(text = stringResource(MR.strings.exclude_scanlators)) },
|
||||||
text = textFunc@{
|
text = textFunc@{
|
||||||
if (sortedAvailableScanlators.isEmpty()) {
|
if (sortedAvailableScanlators.isEmpty()) {
|
||||||
Text(text = localize(MR.strings.no_scanlators_found))
|
Text(text = stringResource(MR.strings.no_scanlators_found))
|
||||||
return@textFunc
|
return@textFunc
|
||||||
}
|
}
|
||||||
Box {
|
Box {
|
||||||
@ -108,16 +106,16 @@ fun ScanlatorFilterDialog(
|
|||||||
confirmButton = {
|
confirmButton = {
|
||||||
if (sortedAvailableScanlators.isEmpty()) {
|
if (sortedAvailableScanlators.isEmpty()) {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
FlowRow {
|
FlowRow {
|
||||||
TextButton(onClick = mutableExcludedScanlators::clear) {
|
TextButton(onClick = mutableExcludedScanlators::clear) {
|
||||||
Text(text = localize(MR.strings.action_reset))
|
Text(text = stringResource(MR.strings.action_reset))
|
||||||
}
|
}
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
TextButton(
|
TextButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
@ -125,7 +123,7 @@ fun ScanlatorFilterDialog(
|
|||||||
onDismissRequest()
|
onDismissRequest()
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.outlined.OpenInNew
|
import androidx.compose.material.icons.automirrored.outlined.OpenInNew
|
||||||
import androidx.compose.material.icons.filled.OpenInNew
|
|
||||||
import androidx.compose.material.icons.outlined.NewReleases
|
import androidx.compose.material.icons.outlined.NewReleases
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
@ -23,7 +22,7 @@ import com.halilibo.richtext.ui.string.RichTextStringStyle
|
|||||||
import eu.kanade.presentation.theme.TachiyomiTheme
|
import eu.kanade.presentation.theme.TachiyomiTheme
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.InfoScreen
|
import tachiyomi.presentation.core.screens.InfoScreen
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -36,11 +35,11 @@ fun NewUpdateScreen(
|
|||||||
) {
|
) {
|
||||||
InfoScreen(
|
InfoScreen(
|
||||||
icon = Icons.Outlined.NewReleases,
|
icon = Icons.Outlined.NewReleases,
|
||||||
headingText = localize(MR.strings.update_check_notification_update_available),
|
headingText = stringResource(MR.strings.update_check_notification_update_available),
|
||||||
subtitleText = versionName,
|
subtitleText = versionName,
|
||||||
acceptText = localize(MR.strings.update_check_confirm),
|
acceptText = stringResource(MR.strings.update_check_confirm),
|
||||||
onAcceptClick = onAcceptUpdate,
|
onAcceptClick = onAcceptUpdate,
|
||||||
rejectText = localize(MR.strings.action_not_now),
|
rejectText = stringResource(MR.strings.action_not_now),
|
||||||
onRejectClick = onRejectUpdate,
|
onRejectClick = onRejectUpdate,
|
||||||
) {
|
) {
|
||||||
Material3RichText(
|
Material3RichText(
|
||||||
@ -59,7 +58,7 @@ fun NewUpdateScreen(
|
|||||||
onClick = onOpenInBrowser,
|
onClick = onOpenInBrowser,
|
||||||
modifier = Modifier.padding(top = MaterialTheme.padding.small),
|
modifier = Modifier.padding(top = MaterialTheme.padding.small),
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.update_check_open))
|
Text(text = stringResource(MR.strings.update_check_open))
|
||||||
Spacer(modifier = Modifier.width(MaterialTheme.padding.tiny))
|
Spacer(modifier = Modifier.width(MaterialTheme.padding.tiny))
|
||||||
Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null)
|
Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null)
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import androidx.compose.runtime.remember
|
|||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import eu.kanade.tachiyomi.data.track.Tracker
|
import eu.kanade.tachiyomi.data.track.Tracker
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.core.preference.Preference as PreferenceData
|
import tachiyomi.core.preference.Preference as PreferenceData
|
||||||
|
|
||||||
sealed class Preference {
|
sealed class Preference {
|
||||||
@ -112,7 +112,7 @@ sealed class Preference {
|
|||||||
v.map { e[it] }
|
v.map { e[it] }
|
||||||
.takeIf { it.isNotEmpty() }
|
.takeIf { it.isNotEmpty() }
|
||||||
?.joinToString()
|
?.joinToString()
|
||||||
} ?: localize(MR.strings.none)
|
} ?: stringResource(MR.strings.none)
|
||||||
subtitle?.format(combined)
|
subtitle?.format(combined)
|
||||||
},
|
},
|
||||||
override val icon: ImageVector? = null,
|
override val icon: ImageVector? = null,
|
||||||
|
@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import dev.icerock.moko.resources.StringResource
|
import dev.icerock.moko.resources.StringResource
|
||||||
import eu.kanade.presentation.components.AppBar
|
import eu.kanade.presentation.components.AppBar
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun PreferenceScaffold(
|
fun PreferenceScaffold(
|
||||||
@ -17,7 +17,7 @@ fun PreferenceScaffold(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
AppBar(
|
AppBar(
|
||||||
title = localize(titleRes),
|
title = stringResource(titleRes),
|
||||||
navigateUp = onBackPressed,
|
navigateUp = onBackPressed,
|
||||||
actions = actions,
|
actions = actions,
|
||||||
scrollBehavior = it,
|
scrollBehavior = it,
|
||||||
|
@ -6,7 +6,7 @@ import androidx.compose.ui.platform.LocalContext
|
|||||||
import eu.kanade.presentation.category.visualName
|
import eu.kanade.presentation.category.visualName
|
||||||
import tachiyomi.domain.category.model.Category
|
import tachiyomi.domain.category.model.Category
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a string of categories name for settings subtitle
|
* Returns a string of categories name for settings subtitle
|
||||||
@ -34,15 +34,15 @@ fun getCategoriesLabel(
|
|||||||
includedCategories.isNotEmpty() && includedCategories.size != allCategories.size ->
|
includedCategories.isNotEmpty() && includedCategories.size != allCategories.size ->
|
||||||
includedCategories.joinToString { it.visualName(context) }
|
includedCategories.joinToString { it.visualName(context) }
|
||||||
// All explicitly selected
|
// All explicitly selected
|
||||||
includedCategories.size == allCategories.size -> localize(MR.strings.all)
|
includedCategories.size == allCategories.size -> stringResource(MR.strings.all)
|
||||||
allExcluded -> localize(MR.strings.none)
|
allExcluded -> stringResource(MR.strings.none)
|
||||||
else -> localize(MR.strings.all)
|
else -> stringResource(MR.strings.all)
|
||||||
}
|
}
|
||||||
val excludedItemsText = when {
|
val excludedItemsText = when {
|
||||||
excludedCategories.isEmpty() -> localize(MR.strings.none)
|
excludedCategories.isEmpty() -> stringResource(MR.strings.none)
|
||||||
allExcluded -> localize(MR.strings.all)
|
allExcluded -> stringResource(MR.strings.all)
|
||||||
else -> excludedCategories.joinToString { it.visualName(context) }
|
else -> excludedCategories.joinToString { it.visualName(context) }
|
||||||
}
|
}
|
||||||
return localize(MR.strings.include, includedItemsText) + "\n" +
|
return stringResource(MR.strings.include, includedItemsText) + "\n" +
|
||||||
localize(MR.strings.exclude, excludedItemsText)
|
stringResource(MR.strings.exclude, excludedItemsText)
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,9 @@ import kotlinx.coroutines.flow.collectLatest
|
|||||||
import kotlinx.coroutines.flow.drop
|
import kotlinx.coroutines.flow.drop
|
||||||
import kotlinx.coroutines.flow.merge
|
import kotlinx.coroutines.flow.merge
|
||||||
import org.xmlpull.v1.XmlPullParser
|
import org.xmlpull.v1.XmlPullParser
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.collectAsState
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
@ -80,26 +80,26 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Preference.PreferenceGroup(
|
return Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.pref_category_theme),
|
title = stringResource(MR.strings.pref_category_theme),
|
||||||
preferenceItems = listOf(
|
preferenceItems = listOf(
|
||||||
Preference.PreferenceItem.ListPreference(
|
Preference.PreferenceItem.ListPreference(
|
||||||
pref = themeModePref,
|
pref = themeModePref,
|
||||||
title = localize(MR.strings.pref_theme_mode),
|
title = stringResource(MR.strings.pref_theme_mode),
|
||||||
entries = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
entries = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
mapOf(
|
mapOf(
|
||||||
ThemeMode.SYSTEM to localize(MR.strings.theme_system),
|
ThemeMode.SYSTEM to stringResource(MR.strings.theme_system),
|
||||||
ThemeMode.LIGHT to localize(MR.strings.theme_light),
|
ThemeMode.LIGHT to stringResource(MR.strings.theme_light),
|
||||||
ThemeMode.DARK to localize(MR.strings.theme_dark),
|
ThemeMode.DARK to stringResource(MR.strings.theme_dark),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
mapOf(
|
mapOf(
|
||||||
ThemeMode.LIGHT to localize(MR.strings.theme_light),
|
ThemeMode.LIGHT to stringResource(MR.strings.theme_light),
|
||||||
ThemeMode.DARK to localize(MR.strings.theme_dark),
|
ThemeMode.DARK to stringResource(MR.strings.theme_dark),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.CustomPreference(
|
Preference.PreferenceItem.CustomPreference(
|
||||||
title = localize(MR.strings.pref_app_theme),
|
title = stringResource(MR.strings.pref_app_theme),
|
||||||
) { item ->
|
) { item ->
|
||||||
val value by appThemePref.collectAsState()
|
val value by appThemePref.collectAsState()
|
||||||
AppThemePreferenceWidget(
|
AppThemePreferenceWidget(
|
||||||
@ -111,7 +111,7 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||||||
},
|
},
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = amoledPref,
|
pref = amoledPref,
|
||||||
title = localize(MR.strings.pref_dark_theme_pure_black),
|
title = stringResource(MR.strings.pref_dark_theme_pure_black),
|
||||||
enabled = themeMode != ThemeMode.LIGHT,
|
enabled = themeMode != ThemeMode.LIGHT,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -144,11 +144,11 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Preference.PreferenceGroup(
|
return Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.pref_category_display),
|
title = stringResource(MR.strings.pref_category_display),
|
||||||
preferenceItems = listOf(
|
preferenceItems = listOf(
|
||||||
Preference.PreferenceItem.BasicListPreference(
|
Preference.PreferenceItem.BasicListPreference(
|
||||||
value = currentLanguage,
|
value = currentLanguage,
|
||||||
title = localize(MR.strings.pref_app_language),
|
title = stringResource(MR.strings.pref_app_language),
|
||||||
entries = langs,
|
entries = langs,
|
||||||
onValueChanged = { newValue ->
|
onValueChanged = { newValue ->
|
||||||
currentLanguage = newValue
|
currentLanguage = newValue
|
||||||
@ -157,8 +157,8 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||||||
),
|
),
|
||||||
Preference.PreferenceItem.ListPreference(
|
Preference.PreferenceItem.ListPreference(
|
||||||
pref = uiPreferences.tabletUiMode(),
|
pref = uiPreferences.tabletUiMode(),
|
||||||
title = localize(MR.strings.pref_tablet_ui_mode),
|
title = stringResource(MR.strings.pref_tablet_ui_mode),
|
||||||
entries = TabletUiMode.entries.associateWith { localize(it.titleRes) },
|
entries = TabletUiMode.entries.associateWith { stringResource(it.titleRes) },
|
||||||
onValueChanged = {
|
onValueChanged = {
|
||||||
context.toast(MR.strings.requires_app_restart)
|
context.toast(MR.strings.requires_app_restart)
|
||||||
true
|
true
|
||||||
@ -166,19 +166,19 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||||||
),
|
),
|
||||||
Preference.PreferenceItem.ListPreference(
|
Preference.PreferenceItem.ListPreference(
|
||||||
pref = uiPreferences.dateFormat(),
|
pref = uiPreferences.dateFormat(),
|
||||||
title = localize(MR.strings.pref_date_format),
|
title = stringResource(MR.strings.pref_date_format),
|
||||||
entries = DateFormats
|
entries = DateFormats
|
||||||
.associateWith {
|
.associateWith {
|
||||||
val formattedDate = UiPreferences.dateFormat(it).format(now)
|
val formattedDate = UiPreferences.dateFormat(it).format(now)
|
||||||
"${it.ifEmpty { localize(MR.strings.label_default) }} ($formattedDate)"
|
"${it.ifEmpty { stringResource(MR.strings.label_default) }} ($formattedDate)"
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = uiPreferences.relativeTime(),
|
pref = uiPreferences.relativeTime(),
|
||||||
title = localize(MR.strings.pref_relative_format),
|
title = stringResource(MR.strings.pref_relative_format),
|
||||||
subtitle = localize(
|
subtitle = stringResource(
|
||||||
MR.strings.pref_relative_format_summary,
|
MR.strings.pref_relative_format_summary,
|
||||||
localize(MR.strings.relative_time_today),
|
stringResource(MR.strings.relative_time_today),
|
||||||
formattedNow,
|
formattedNow,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -205,7 +205,7 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
langs.sortBy { it.second }
|
langs.sortBy { it.second }
|
||||||
langs.add(0, Pair("", context.localize(MR.strings.label_default)))
|
langs.add(0, Pair("", context.stringResource(MR.strings.label_default)))
|
||||||
|
|
||||||
return langs.toMap()
|
return langs.toMap()
|
||||||
}
|
}
|
||||||
|
@ -44,14 +44,14 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil
|
|||||||
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.lang.launchNonCancellable
|
import tachiyomi.core.util.lang.launchNonCancellable
|
||||||
import tachiyomi.core.util.lang.withUIContext
|
import tachiyomi.core.util.lang.withUIContext
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.domain.backup.service.BackupPreferences
|
import tachiyomi.domain.backup.service.BackupPreferences
|
||||||
import tachiyomi.domain.library.service.LibraryPreferences
|
import tachiyomi.domain.library.service.LibraryPreferences
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.collectAsState
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
@ -82,7 +82,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp().collectAsState()
|
val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp().collectAsState()
|
||||||
|
|
||||||
return Preference.PreferenceGroup(
|
return Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.label_backup),
|
title = stringResource(MR.strings.label_backup),
|
||||||
preferenceItems = listOf(
|
preferenceItems = listOf(
|
||||||
// Manual actions
|
// Manual actions
|
||||||
getCreateBackupPref(),
|
getCreateBackupPref(),
|
||||||
@ -91,14 +91,14 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
// Automatic backups
|
// Automatic backups
|
||||||
Preference.PreferenceItem.ListPreference(
|
Preference.PreferenceItem.ListPreference(
|
||||||
pref = backupIntervalPref,
|
pref = backupIntervalPref,
|
||||||
title = localize(MR.strings.pref_backup_interval),
|
title = stringResource(MR.strings.pref_backup_interval),
|
||||||
entries = mapOf(
|
entries = mapOf(
|
||||||
0 to localize(MR.strings.off),
|
0 to stringResource(MR.strings.off),
|
||||||
6 to localize(MR.strings.update_6hour),
|
6 to stringResource(MR.strings.update_6hour),
|
||||||
12 to localize(MR.strings.update_12hour),
|
12 to stringResource(MR.strings.update_12hour),
|
||||||
24 to localize(MR.strings.update_24hour),
|
24 to stringResource(MR.strings.update_24hour),
|
||||||
48 to localize(MR.strings.update_48hour),
|
48 to stringResource(MR.strings.update_48hour),
|
||||||
168 to localize(MR.strings.update_weekly),
|
168 to stringResource(MR.strings.update_weekly),
|
||||||
),
|
),
|
||||||
onValueChanged = {
|
onValueChanged = {
|
||||||
BackupCreateJob.setupTask(context, it)
|
BackupCreateJob.setupTask(context, it)
|
||||||
@ -108,12 +108,12 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
Preference.PreferenceItem.ListPreference(
|
Preference.PreferenceItem.ListPreference(
|
||||||
pref = backupPreferences.numberOfBackups(),
|
pref = backupPreferences.numberOfBackups(),
|
||||||
enabled = backupInterval != 0,
|
enabled = backupInterval != 0,
|
||||||
title = localize(MR.strings.pref_backup_slots),
|
title = stringResource(MR.strings.pref_backup_slots),
|
||||||
entries = listOf(2, 3, 4, 5).associateWith { it.toString() },
|
entries = listOf(2, 3, 4, 5).associateWith { it.toString() },
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.InfoPreference(
|
Preference.PreferenceItem.InfoPreference(
|
||||||
localize(MR.strings.backup_info) + "\n\n" +
|
stringResource(MR.strings.backup_info) + "\n\n" +
|
||||||
localize(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)),
|
stringResource(MR.strings.last_auto_backup_info, relativeTimeSpanString(lastAutoBackup)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -123,8 +123,8 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
private fun getCreateBackupPref(): Preference.PreferenceItem.TextPreference {
|
private fun getCreateBackupPref(): Preference.PreferenceItem.TextPreference {
|
||||||
val navigator = LocalNavigator.currentOrThrow
|
val navigator = LocalNavigator.currentOrThrow
|
||||||
return Preference.PreferenceItem.TextPreference(
|
return Preference.PreferenceItem.TextPreference(
|
||||||
title = localize(MR.strings.pref_create_backup),
|
title = stringResource(MR.strings.pref_create_backup),
|
||||||
subtitle = localize(MR.strings.pref_create_backup_summ),
|
subtitle = stringResource(MR.strings.pref_create_backup_summ),
|
||||||
onClick = { navigator.push(CreateBackupScreen()) },
|
onClick = { navigator.push(CreateBackupScreen()) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -139,7 +139,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
is InvalidRestore -> {
|
is InvalidRestore -> {
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
title = { Text(text = localize(MR.strings.invalid_backup_file)) },
|
title = { Text(text = stringResource(MR.strings.invalid_backup_file)) },
|
||||||
text = { Text(text = listOfNotNull(err.uri, err.message).joinToString("\n\n")) },
|
text = { Text(text = listOfNotNull(err.uri, err.message).joinToString("\n\n")) },
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(
|
TextButton(
|
||||||
@ -148,12 +148,12 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
onDismissRequest()
|
onDismissRequest()
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_copy_to_clipboard))
|
Text(text = stringResource(MR.strings.action_copy_to_clipboard))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -161,15 +161,15 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
is MissingRestoreComponents -> {
|
is MissingRestoreComponents -> {
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
title = { Text(text = localize(MR.strings.pref_restore_backup)) },
|
title = { Text(text = stringResource(MR.strings.pref_restore_backup)) },
|
||||||
text = {
|
text = {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.verticalScroll(rememberScrollState()),
|
modifier = Modifier.verticalScroll(rememberScrollState()),
|
||||||
) {
|
) {
|
||||||
val msg = buildString {
|
val msg = buildString {
|
||||||
append(localize(MR.strings.backup_restore_content_full))
|
append(stringResource(MR.strings.backup_restore_content_full))
|
||||||
if (err.sources.isNotEmpty()) {
|
if (err.sources.isNotEmpty()) {
|
||||||
append("\n\n").append(localize(MR.strings.backup_restore_missing_sources))
|
append("\n\n").append(stringResource(MR.strings.backup_restore_missing_sources))
|
||||||
err.sources.joinTo(
|
err.sources.joinTo(
|
||||||
this,
|
this,
|
||||||
separator = "\n- ",
|
separator = "\n- ",
|
||||||
@ -177,7 +177,9 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (err.trackers.isNotEmpty()) {
|
if (err.trackers.isNotEmpty()) {
|
||||||
append("\n\n").append(localize(MR.strings.backup_restore_missing_trackers))
|
append(
|
||||||
|
"\n\n",
|
||||||
|
).append(stringResource(MR.strings.backup_restore_missing_trackers))
|
||||||
err.trackers.joinTo(
|
err.trackers.joinTo(
|
||||||
this,
|
this,
|
||||||
separator = "\n- ",
|
separator = "\n- ",
|
||||||
@ -195,7 +197,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
onDismissRequest()
|
onDismissRequest()
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_restore))
|
Text(text = stringResource(MR.strings.action_restore))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -208,7 +210,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
object : ActivityResultContracts.GetContent() {
|
object : ActivityResultContracts.GetContent() {
|
||||||
override fun createIntent(context: Context, input: String): Intent {
|
override fun createIntent(context: Context, input: String): Intent {
|
||||||
val intent = super.createIntent(context, input)
|
val intent = super.createIntent(context, input)
|
||||||
return Intent.createChooser(intent, context.localize(MR.strings.file_select_backup))
|
return Intent.createChooser(intent, context.stringResource(MR.strings.file_select_backup))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
@ -233,8 +235,8 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Preference.PreferenceItem.TextPreference(
|
return Preference.PreferenceItem.TextPreference(
|
||||||
title = localize(MR.strings.pref_restore_backup),
|
title = stringResource(MR.strings.pref_restore_backup),
|
||||||
subtitle = localize(MR.strings.pref_restore_backup_summ),
|
subtitle = stringResource(MR.strings.pref_restore_backup_summ),
|
||||||
onClick = {
|
onClick = {
|
||||||
if (!BackupRestoreJob.isRunning(context)) {
|
if (!BackupRestoreJob.isRunning(context)) {
|
||||||
if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) {
|
if (DeviceUtil.isMiui && DeviceUtil.isMiuiOptimizationDisabled()) {
|
||||||
@ -266,19 +268,19 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
return Preference.PreferenceGroup(
|
return Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.label_data),
|
title = stringResource(MR.strings.label_data),
|
||||||
preferenceItems = listOf(
|
preferenceItems = listOf(
|
||||||
getStorageInfoPref(cacheReadableSize),
|
getStorageInfoPref(cacheReadableSize),
|
||||||
|
|
||||||
Preference.PreferenceItem.TextPreference(
|
Preference.PreferenceItem.TextPreference(
|
||||||
title = localize(MR.strings.pref_clear_chapter_cache),
|
title = stringResource(MR.strings.pref_clear_chapter_cache),
|
||||||
subtitle = localize(MR.strings.used_cache, cacheReadableSize),
|
subtitle = stringResource(MR.strings.used_cache, cacheReadableSize),
|
||||||
onClick = {
|
onClick = {
|
||||||
scope.launchNonCancellable {
|
scope.launchNonCancellable {
|
||||||
try {
|
try {
|
||||||
val deletedFiles = chapterCache.clear()
|
val deletedFiles = chapterCache.clear()
|
||||||
withUIContext {
|
withUIContext {
|
||||||
context.toast(context.localize(MR.strings.cache_deleted, deletedFiles))
|
context.toast(context.stringResource(MR.strings.cache_deleted, deletedFiles))
|
||||||
cacheReadableSizeSema++
|
cacheReadableSizeSema++
|
||||||
}
|
}
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
@ -310,7 +312,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
// SY <--
|
// SY <--
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = libraryPreferences.autoClearChapterCache(),
|
pref = libraryPreferences.autoClearChapterCache(),
|
||||||
title = localize(MR.strings.pref_auto_clear_chapter_cache),
|
title = stringResource(MR.strings.pref_auto_clear_chapter_cache),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -329,10 +331,10 @@ object SettingsDataScreen : SearchableSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Preference.PreferenceItem.CustomPreference(
|
return Preference.PreferenceItem.CustomPreference(
|
||||||
title = localize(MR.strings.pref_storage_usage),
|
title = stringResource(MR.strings.pref_storage_usage),
|
||||||
) {
|
) {
|
||||||
BasePreferenceWidget(
|
BasePreferenceWidget(
|
||||||
title = localize(MR.strings.pref_storage_usage),
|
title = stringResource(MR.strings.pref_storage_usage),
|
||||||
subcomponent = {
|
subcomponent = {
|
||||||
// TODO: downloads, SD cards, bar representation?, i18n
|
// TODO: downloads, SD cards, bar representation?, i18n
|
||||||
Box(modifier = Modifier.padding(horizontal = PrefsHorizontalPadding)) {
|
Box(modifier = Modifier.padding(horizontal = PrefsHorizontalPadding)) {
|
||||||
|
@ -24,8 +24,8 @@ import tachiyomi.domain.category.interactor.GetCategories
|
|||||||
import tachiyomi.domain.category.model.Category
|
import tachiyomi.domain.category.model.Category
|
||||||
import tachiyomi.domain.download.service.DownloadPreferences
|
import tachiyomi.domain.download.service.DownloadPreferences
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.pluralStringResource
|
||||||
import tachiyomi.presentation.core.i18n.localizePlural
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.collectAsState
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
@ -47,16 +47,16 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||||||
getDownloadLocationPreference(downloadPreferences = downloadPreferences),
|
getDownloadLocationPreference(downloadPreferences = downloadPreferences),
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = downloadPreferences.downloadOnlyOverWifi(),
|
pref = downloadPreferences.downloadOnlyOverWifi(),
|
||||||
title = localize(MR.strings.connected_to_wifi),
|
title = stringResource(MR.strings.connected_to_wifi),
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = downloadPreferences.saveChaptersAsCBZ(),
|
pref = downloadPreferences.saveChaptersAsCBZ(),
|
||||||
title = localize(MR.strings.save_chapter_as_cbz),
|
title = stringResource(MR.strings.save_chapter_as_cbz),
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = downloadPreferences.splitTallImages(),
|
pref = downloadPreferences.splitTallImages(),
|
||||||
title = localize(MR.strings.split_tall_images),
|
title = stringResource(MR.strings.split_tall_images),
|
||||||
subtitle = localize(MR.strings.split_tall_images_summary),
|
subtitle = stringResource(MR.strings.split_tall_images_summary),
|
||||||
),
|
),
|
||||||
getDeleteChaptersGroup(
|
getDeleteChaptersGroup(
|
||||||
downloadPreferences = downloadPreferences,
|
downloadPreferences = downloadPreferences,
|
||||||
@ -97,15 +97,15 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||||||
|
|
||||||
return Preference.PreferenceItem.ListPreference(
|
return Preference.PreferenceItem.ListPreference(
|
||||||
pref = currentDirPref,
|
pref = currentDirPref,
|
||||||
title = localize(MR.strings.pref_download_directory),
|
title = stringResource(MR.strings.pref_download_directory),
|
||||||
subtitleProvider = { value, _ ->
|
subtitleProvider = { value, _ ->
|
||||||
remember(value) {
|
remember(value) {
|
||||||
UniFile.fromUri(context, value.toUri())?.filePath
|
UniFile.fromUri(context, value.toUri())?.filePath
|
||||||
} ?: localize(MR.strings.invalid_location, value)
|
} ?: stringResource(MR.strings.invalid_location, value)
|
||||||
},
|
},
|
||||||
entries = mapOf(
|
entries = mapOf(
|
||||||
defaultDirPair,
|
defaultDirPair,
|
||||||
customDirEntryKey to localize(MR.strings.custom_dir),
|
customDirEntryKey to stringResource(MR.strings.custom_dir),
|
||||||
),
|
),
|
||||||
onValueChanged = {
|
onValueChanged = {
|
||||||
val default = it == defaultDirPair.first
|
val default = it == defaultDirPair.first
|
||||||
@ -119,7 +119,7 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun rememberDefaultDownloadDir(): Pair<String, String> {
|
private fun rememberDefaultDownloadDir(): Pair<String, String> {
|
||||||
val appName = localize(MR.strings.app_name)
|
val appName = stringResource(MR.strings.app_name)
|
||||||
return remember {
|
return remember {
|
||||||
val file = UniFile.fromFile(
|
val file = UniFile.fromFile(
|
||||||
File(
|
File(
|
||||||
@ -137,27 +137,27 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||||||
categories: List<Category>,
|
categories: List<Category>,
|
||||||
): Preference.PreferenceGroup {
|
): Preference.PreferenceGroup {
|
||||||
return Preference.PreferenceGroup(
|
return Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.pref_category_delete_chapters),
|
title = stringResource(MR.strings.pref_category_delete_chapters),
|
||||||
preferenceItems = listOf(
|
preferenceItems = listOf(
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = downloadPreferences.removeAfterMarkedAsRead(),
|
pref = downloadPreferences.removeAfterMarkedAsRead(),
|
||||||
title = localize(MR.strings.pref_remove_after_marked_as_read),
|
title = stringResource(MR.strings.pref_remove_after_marked_as_read),
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.ListPreference(
|
Preference.PreferenceItem.ListPreference(
|
||||||
pref = downloadPreferences.removeAfterReadSlots(),
|
pref = downloadPreferences.removeAfterReadSlots(),
|
||||||
title = localize(MR.strings.pref_remove_after_read),
|
title = stringResource(MR.strings.pref_remove_after_read),
|
||||||
entries = mapOf(
|
entries = mapOf(
|
||||||
-1 to localize(MR.strings.disabled),
|
-1 to stringResource(MR.strings.disabled),
|
||||||
0 to localize(MR.strings.last_read_chapter),
|
0 to stringResource(MR.strings.last_read_chapter),
|
||||||
1 to localize(MR.strings.second_to_last),
|
1 to stringResource(MR.strings.second_to_last),
|
||||||
2 to localize(MR.strings.third_to_last),
|
2 to stringResource(MR.strings.third_to_last),
|
||||||
3 to localize(MR.strings.fourth_to_last),
|
3 to stringResource(MR.strings.fourth_to_last),
|
||||||
4 to localize(MR.strings.fifth_to_last),
|
4 to stringResource(MR.strings.fifth_to_last),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = downloadPreferences.removeBookmarkedChapters(),
|
pref = downloadPreferences.removeBookmarkedChapters(),
|
||||||
title = localize(MR.strings.pref_remove_bookmarked_chapters),
|
title = stringResource(MR.strings.pref_remove_bookmarked_chapters),
|
||||||
),
|
),
|
||||||
getExcludedCategoriesPreference(
|
getExcludedCategoriesPreference(
|
||||||
downloadPreferences = downloadPreferences,
|
downloadPreferences = downloadPreferences,
|
||||||
@ -174,7 +174,7 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||||||
): Preference.PreferenceItem.MultiSelectListPreference {
|
): Preference.PreferenceItem.MultiSelectListPreference {
|
||||||
return Preference.PreferenceItem.MultiSelectListPreference(
|
return Preference.PreferenceItem.MultiSelectListPreference(
|
||||||
pref = downloadPreferences.removeExcludeCategories(),
|
pref = downloadPreferences.removeExcludeCategories(),
|
||||||
title = localize(MR.strings.pref_remove_exclude_categories),
|
title = stringResource(MR.strings.pref_remove_exclude_categories),
|
||||||
entries = categories().associate { it.id.toString() to it.visualName },
|
entries = categories().associate { it.id.toString() to it.visualName },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -195,8 +195,8 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||||||
var showDialog by rememberSaveable { mutableStateOf(false) }
|
var showDialog by rememberSaveable { mutableStateOf(false) }
|
||||||
if (showDialog) {
|
if (showDialog) {
|
||||||
TriStateListDialog(
|
TriStateListDialog(
|
||||||
title = localize(MR.strings.categories),
|
title = stringResource(MR.strings.categories),
|
||||||
message = localize(MR.strings.pref_download_new_categories_details),
|
message = stringResource(MR.strings.pref_download_new_categories_details),
|
||||||
items = allCategories,
|
items = allCategories,
|
||||||
initialChecked = included.mapNotNull { id -> allCategories.find { it.id.toString() == id } },
|
initialChecked = included.mapNotNull { id -> allCategories.find { it.id.toString() == id } },
|
||||||
initialInversed = excluded.mapNotNull { id -> allCategories.find { it.id.toString() == id } },
|
initialInversed = excluded.mapNotNull { id -> allCategories.find { it.id.toString() == id } },
|
||||||
@ -211,14 +211,14 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Preference.PreferenceGroup(
|
return Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.pref_category_auto_download),
|
title = stringResource(MR.strings.pref_category_auto_download),
|
||||||
preferenceItems = listOf(
|
preferenceItems = listOf(
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = downloadNewChaptersPref,
|
pref = downloadNewChaptersPref,
|
||||||
title = localize(MR.strings.pref_download_new),
|
title = stringResource(MR.strings.pref_download_new),
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.TextPreference(
|
Preference.PreferenceItem.TextPreference(
|
||||||
title = localize(MR.strings.categories),
|
title = stringResource(MR.strings.categories),
|
||||||
subtitle = getCategoriesLabel(
|
subtitle = getCategoriesLabel(
|
||||||
allCategories = allCategories,
|
allCategories = allCategories,
|
||||||
included = included,
|
included = included,
|
||||||
@ -236,20 +236,20 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||||||
downloadPreferences: DownloadPreferences,
|
downloadPreferences: DownloadPreferences,
|
||||||
): Preference.PreferenceGroup {
|
): Preference.PreferenceGroup {
|
||||||
return Preference.PreferenceGroup(
|
return Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.download_ahead),
|
title = stringResource(MR.strings.download_ahead),
|
||||||
preferenceItems = listOf(
|
preferenceItems = listOf(
|
||||||
Preference.PreferenceItem.ListPreference(
|
Preference.PreferenceItem.ListPreference(
|
||||||
pref = downloadPreferences.autoDownloadWhileReading(),
|
pref = downloadPreferences.autoDownloadWhileReading(),
|
||||||
title = localize(MR.strings.auto_download_while_reading),
|
title = stringResource(MR.strings.auto_download_while_reading),
|
||||||
entries = listOf(0, 2, 3, 5, 10).associateWith {
|
entries = listOf(0, 2, 3, 5, 10).associateWith {
|
||||||
if (it == 0) {
|
if (it == 0) {
|
||||||
localize(MR.strings.disabled)
|
stringResource(MR.strings.disabled)
|
||||||
} else {
|
} else {
|
||||||
localizePlural(MR.plurals.next_unread_chapters, count = it, it)
|
pluralStringResource(MR.plurals.next_unread_chapters, count = it, it)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.InfoPreference(localize(MR.strings.download_ahead_info)),
|
Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.download_ahead_info)),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ import eu.kanade.presentation.more.settings.Preference
|
|||||||
import eu.kanade.presentation.util.Screen
|
import eu.kanade.presentation.util.Screen
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import tachiyomi.presentation.core.util.runOnEnterKeyPressed
|
import tachiyomi.presentation.core.util.runOnEnterKeyPressed
|
||||||
import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen
|
import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen
|
||||||
@ -118,7 +118,7 @@ class SettingsSearchScreen : Screen() {
|
|||||||
decorationBox = {
|
decorationBox = {
|
||||||
if (textFieldValue.text.isEmpty()) {
|
if (textFieldValue.text.isEmpty()) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.action_search_settings),
|
text = stringResource(MR.strings.action_search_settings),
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
style = MaterialTheme.typography.bodyLarge,
|
style = MaterialTheme.typography.bodyLarge,
|
||||||
)
|
)
|
||||||
@ -215,7 +215,7 @@ private fun SearchResult(
|
|||||||
when {
|
when {
|
||||||
it == null -> {}
|
it == null -> {}
|
||||||
it.isEmpty() -> {
|
it.isEmpty() -> {
|
||||||
EmptyScreen(localize(MR.strings.no_results_found))
|
EmptyScreen(stringResource(MR.strings.no_results_found))
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
LazyColumn(
|
LazyColumn(
|
||||||
@ -264,7 +264,7 @@ private fun getIndex() = settingScreens
|
|||||||
// SY <--
|
// SY <--
|
||||||
.map { screen ->
|
.map { screen ->
|
||||||
SettingsData(
|
SettingsData(
|
||||||
title = localize(screen.getTitleRes()),
|
title = stringResource(screen.getTitleRes()),
|
||||||
route = screen,
|
route = screen,
|
||||||
contents = screen.getPreferences(),
|
contents = screen.getPreferences(),
|
||||||
)
|
)
|
||||||
|
@ -56,7 +56,7 @@ import tachiyomi.core.util.lang.withUIContext
|
|||||||
import tachiyomi.domain.source.service.SourceManager
|
import tachiyomi.domain.source.service.SourceManager
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
IconButton(onClick = { uriHandler.openUri("https://tachiyomi.org/docs/guides/tracking") }) {
|
IconButton(onClick = { uriHandler.openUri("https://tachiyomi.org/docs/guides/tracking") }) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.AutoMirrored.Outlined.HelpOutline,
|
imageVector = Icons.AutoMirrored.Outlined.HelpOutline,
|
||||||
contentDescription = localize(MR.strings.tracking_guide),
|
contentDescription = stringResource(MR.strings.tracking_guide),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -109,9 +109,9 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
val acceptedSources = (service as EnhancedTracker).getAcceptedSources()
|
val acceptedSources = (service as EnhancedTracker).getAcceptedSources()
|
||||||
sourceManager.getCatalogueSources().any { it::class.qualifiedName in acceptedSources }
|
sourceManager.getCatalogueSources().any { it::class.qualifiedName in acceptedSources }
|
||||||
}
|
}
|
||||||
var enhancedTrackerInfo = localize(MR.strings.enhanced_tracking_info)
|
var enhancedTrackerInfo = stringResource(MR.strings.enhanced_tracking_info)
|
||||||
if (enhancedTrackers.second.isNotEmpty()) {
|
if (enhancedTrackers.second.isNotEmpty()) {
|
||||||
val missingSourcesInfo = localize(
|
val missingSourcesInfo = stringResource(
|
||||||
MR.strings.enhanced_services_not_installed,
|
MR.strings.enhanced_services_not_installed,
|
||||||
enhancedTrackers.second.joinToString { it.name },
|
enhancedTrackers.second.joinToString { it.name },
|
||||||
)
|
)
|
||||||
@ -121,10 +121,10 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
return listOf(
|
return listOf(
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = trackPreferences.autoUpdateTrack(),
|
pref = trackPreferences.autoUpdateTrack(),
|
||||||
title = localize(MR.strings.pref_auto_update_manga_sync),
|
title = stringResource(MR.strings.pref_auto_update_manga_sync),
|
||||||
),
|
),
|
||||||
Preference.PreferenceGroup(
|
Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.services),
|
title = stringResource(MR.strings.services),
|
||||||
preferenceItems = listOf(
|
preferenceItems = listOf(
|
||||||
Preference.PreferenceItem.TrackerPreference(
|
Preference.PreferenceItem.TrackerPreference(
|
||||||
title = trackerManager.myAnimeList.name,
|
title = trackerManager.myAnimeList.name,
|
||||||
@ -162,11 +162,11 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
login = { context.openInBrowser(BangumiApi.authUrl(), forceDefaultBrowser = true) },
|
login = { context.openInBrowser(BangumiApi.authUrl(), forceDefaultBrowser = true) },
|
||||||
logout = { dialog = LogoutDialog(trackerManager.bangumi) },
|
logout = { dialog = LogoutDialog(trackerManager.bangumi) },
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.InfoPreference(localize(MR.strings.tracking_info)),
|
Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.tracking_info)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Preference.PreferenceGroup(
|
Preference.PreferenceGroup(
|
||||||
title = localize(MR.strings.enhanced_services),
|
title = stringResource(MR.strings.enhanced_services),
|
||||||
preferenceItems = enhancedTrackers.first
|
preferenceItems = enhancedTrackers.first
|
||||||
.map { service ->
|
.map { service ->
|
||||||
Preference.PreferenceItem.TrackerPreference(
|
Preference.PreferenceItem.TrackerPreference(
|
||||||
@ -199,13 +199,13 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
title = {
|
title = {
|
||||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.login_title, tracker.name),
|
text = stringResource(MR.strings.login_title, tracker.name),
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
)
|
)
|
||||||
IconButton(onClick = onDismissRequest) {
|
IconButton(onClick = onDismissRequest) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Outlined.Close,
|
imageVector = Icons.Outlined.Close,
|
||||||
contentDescription = localize(MR.strings.action_close),
|
contentDescription = stringResource(MR.strings.action_close),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -216,7 +216,7 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
value = username,
|
value = username,
|
||||||
onValueChange = { username = it },
|
onValueChange = { username = it },
|
||||||
label = { Text(text = localize(uNameStringRes)) },
|
label = { Text(text = stringResource(uNameStringRes)) },
|
||||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
|
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
|
||||||
singleLine = true,
|
singleLine = true,
|
||||||
isError = inputError && !processing,
|
isError = inputError && !processing,
|
||||||
@ -227,7 +227,7 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
value = password,
|
value = password,
|
||||||
onValueChange = { password = it },
|
onValueChange = { password = it },
|
||||||
label = { Text(text = localize(MR.strings.password)) },
|
label = { Text(text = stringResource(MR.strings.password)) },
|
||||||
trailingIcon = {
|
trailingIcon = {
|
||||||
IconButton(onClick = { hidePassword = !hidePassword }) {
|
IconButton(onClick = { hidePassword = !hidePassword }) {
|
||||||
Icon(
|
Icon(
|
||||||
@ -274,7 +274,7 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
val id = if (processing) MR.strings.loading else MR.strings.login
|
val id = if (processing) MR.strings.loading else MR.strings.login
|
||||||
Text(text = localize(id))
|
Text(text = stringResource(id))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -307,7 +307,7 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
title = {
|
title = {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.logout_title, tracker.name),
|
text = stringResource(MR.strings.logout_title, tracker.name),
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
)
|
)
|
||||||
@ -318,7 +318,7 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
onClick = onDismissRequest,
|
onClick = onDismissRequest,
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
Button(
|
Button(
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
@ -332,7 +332,7 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||||||
contentColor = MaterialTheme.colorScheme.onError,
|
contentColor = MaterialTheme.colorScheme.onError,
|
||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.logout))
|
Text(text = stringResource(MR.strings.logout))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -21,7 +21,7 @@ import eu.kanade.presentation.util.Screen
|
|||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
class OpenSourceLibraryLicenseScreen(
|
class OpenSourceLibraryLicenseScreen(
|
||||||
private val name: String,
|
private val name: String,
|
||||||
@ -44,7 +44,7 @@ class OpenSourceLibraryLicenseScreen(
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.website),
|
title = stringResource(MR.strings.website),
|
||||||
icon = Icons.Default.Public,
|
icon = Icons.Default.Public,
|
||||||
onClick = { uriHandler.openUri(website) },
|
onClick = { uriHandler.openUri(website) },
|
||||||
),
|
),
|
||||||
|
@ -13,7 +13,7 @@ import eu.kanade.presentation.components.AppBar
|
|||||||
import eu.kanade.presentation.util.Screen
|
import eu.kanade.presentation.util.Screen
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
class OpenSourceLicensesScreen : Screen() {
|
class OpenSourceLicensesScreen : Screen() {
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ class OpenSourceLicensesScreen : Screen() {
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { scrollBehavior ->
|
topBar = { scrollBehavior ->
|
||||||
AppBar(
|
AppBar(
|
||||||
title = localize(MR.strings.licenses),
|
title = stringResource(MR.strings.licenses),
|
||||||
navigateUp = navigator::pop,
|
navigateUp = navigator::pop,
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
)
|
)
|
||||||
|
@ -23,7 +23,7 @@ import kotlinx.collections.immutable.persistentListOf
|
|||||||
import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator
|
import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
class BackupSchemaScreen : Screen() {
|
class BackupSchemaScreen : Screen() {
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ class BackupSchemaScreen : Screen() {
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_copy_to_clipboard),
|
title = stringResource(MR.strings.action_copy_to_clipboard),
|
||||||
icon = Icons.Default.ContentCopy,
|
icon = Icons.Default.ContentCopy,
|
||||||
onClick = {
|
onClick = {
|
||||||
context.copyToClipboard(title, schema)
|
context.copyToClipboard(title, schema)
|
||||||
|
@ -37,7 +37,7 @@ import kotlinx.coroutines.flow.map
|
|||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.plus
|
import tachiyomi.presentation.core.util.plus
|
||||||
|
|
||||||
class WorkerInfoScreen : Screen() {
|
class WorkerInfoScreen : Screen() {
|
||||||
@ -65,7 +65,7 @@ class WorkerInfoScreen : Screen() {
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_copy_to_clipboard),
|
title = stringResource(MR.strings.action_copy_to_clipboard),
|
||||||
icon = Icons.Default.ContentCopy,
|
icon = Icons.Default.ContentCopy,
|
||||||
onClick = {
|
onClick = {
|
||||||
context.copyToClipboard(title, enqueued + finished + running)
|
context.copyToClipboard(title, enqueued + finished + running)
|
||||||
|
@ -46,7 +46,7 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil
|
|||||||
import eu.kanade.tachiyomi.util.system.isDynamicColorAvailable
|
import eu.kanade.tachiyomi.util.system.isDynamicColorAvailable
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -104,7 +104,7 @@ private fun AppThemesList(
|
|||||||
Spacer(modifier = Modifier.height(8.dp))
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = localize(appTheme.titleRes!!),
|
text = stringResource(appTheme.titleRes!!),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.secondaryItemAlpha(),
|
.secondaryItemAlpha(),
|
||||||
@ -167,7 +167,7 @@ fun AppThemePreviewItem(
|
|||||||
if (selected) {
|
if (selected) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.CheckCircle,
|
imageVector = Icons.Filled.CheckCircle,
|
||||||
contentDescription = localize(MR.strings.selected),
|
contentDescription = stringResource(MR.strings.selected),
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
tint = MaterialTheme.colorScheme.primary,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ import androidx.compose.ui.text.input.TextFieldValue
|
|||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun EditTextPreferenceWidget(
|
fun EditTextPreferenceWidget(
|
||||||
@ -83,12 +83,12 @@ fun EditTextPreferenceWidget(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -15,7 +15,7 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark
|
|||||||
import eu.kanade.presentation.theme.TachiyomiTheme
|
import eu.kanade.presentation.theme.TachiyomiTheme
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -45,7 +45,7 @@ internal fun InfoWidget(text: String) {
|
|||||||
private fun InfoWidgetPreview() {
|
private fun InfoWidgetPreview() {
|
||||||
TachiyomiTheme {
|
TachiyomiTheme {
|
||||||
Surface {
|
Surface {
|
||||||
InfoWidget(text = localize(MR.strings.download_ahead_info))
|
InfoWidget(text = stringResource(MR.strings.download_ahead_info))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
|
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.isScrolledToEnd
|
import tachiyomi.presentation.core.util.isScrolledToEnd
|
||||||
import tachiyomi.presentation.core.util.isScrolledToStart
|
import tachiyomi.presentation.core.util.isScrolledToStart
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ fun <T> ListPreferenceWidget(
|
|||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(onClick = { isDialogShown = false }) {
|
TextButton(onClick = { isDialogShown = false }) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -14,7 +14,7 @@ import androidx.compose.ui.window.DialogProperties
|
|||||||
import eu.kanade.presentation.more.settings.Preference
|
import eu.kanade.presentation.more.settings.Preference
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.LabeledCheckbox
|
import tachiyomi.presentation.core.components.LabeledCheckbox
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MultiSelectListPreferenceWidget(
|
fun MultiSelectListPreferenceWidget(
|
||||||
@ -70,12 +70,12 @@ fun MultiSelectListPreferenceWidget(
|
|||||||
isDialogShown = false
|
isDialogShown = false
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = { isDialogShown = false }) {
|
TextButton(onClick = { isDialogShown = false }) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -20,7 +20,7 @@ import eu.kanade.presentation.more.settings.LocalPreferenceHighlighted
|
|||||||
import eu.kanade.presentation.track.components.TrackLogoIcon
|
import eu.kanade.presentation.track.components.TrackLogoIcon
|
||||||
import eu.kanade.tachiyomi.data.track.Tracker
|
import eu.kanade.tachiyomi.data.track.Tracker
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun TrackingPreferenceWidget(
|
fun TrackingPreferenceWidget(
|
||||||
@ -55,7 +55,7 @@ fun TrackingPreferenceWidget(
|
|||||||
.padding(4.dp)
|
.padding(4.dp)
|
||||||
.size(32.dp),
|
.size(32.dp),
|
||||||
tint = Color(0xFF4CAF50),
|
tint = Color(0xFF4CAF50),
|
||||||
contentDescription = localize(MR.strings.login_success),
|
contentDescription = stringResource(MR.strings.login_success),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.isScrolledToEnd
|
import tachiyomi.presentation.core.util.isScrolledToEnd
|
||||||
import tachiyomi.presentation.core.util.isScrolledToStart
|
import tachiyomi.presentation.core.util.isScrolledToStart
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ fun <T> TriStateListDialog(
|
|||||||
} else {
|
} else {
|
||||||
MaterialTheme.colorScheme.primary
|
MaterialTheme.colorScheme.primary
|
||||||
},
|
},
|
||||||
contentDescription = localize(
|
contentDescription = stringResource(
|
||||||
when (state) {
|
when (state) {
|
||||||
State.UNCHECKED -> MR.strings.not_selected
|
State.UNCHECKED -> MR.strings.not_selected
|
||||||
State.CHECKED -> MR.strings.selected
|
State.CHECKED -> MR.strings.selected
|
||||||
@ -130,7 +130,7 @@ fun <T> TriStateListDialog(
|
|||||||
},
|
},
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
@ -145,7 +145,7 @@ fun <T> TriStateListDialog(
|
|||||||
onValueChanged(included, excluded)
|
onValueChanged(included, excluded)
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -20,7 +20,7 @@ import eu.kanade.presentation.more.stats.data.StatsData
|
|||||||
import eu.kanade.presentation.util.toDurationString
|
import eu.kanade.presentation.util.toDurationString
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import kotlin.time.DurationUnit
|
import kotlin.time.DurationUnit
|
||||||
import kotlin.time.toDuration
|
import kotlin.time.toDuration
|
||||||
@ -55,7 +55,7 @@ fun StatsScreenContent(
|
|||||||
private fun OverviewSection(
|
private fun OverviewSection(
|
||||||
data: StatsData.Overview,
|
data: StatsData.Overview,
|
||||||
) {
|
) {
|
||||||
val none = localize(MR.strings.none)
|
val none = stringResource(MR.strings.none)
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val readDurationString = remember(data.totalReadDuration) {
|
val readDurationString = remember(data.totalReadDuration) {
|
||||||
data.totalReadDuration
|
data.totalReadDuration
|
||||||
@ -66,17 +66,17 @@ private fun OverviewSection(
|
|||||||
Row {
|
Row {
|
||||||
StatsOverviewItem(
|
StatsOverviewItem(
|
||||||
title = data.libraryMangaCount.toString(),
|
title = data.libraryMangaCount.toString(),
|
||||||
subtitle = localize(MR.strings.in_library),
|
subtitle = stringResource(MR.strings.in_library),
|
||||||
icon = Icons.Outlined.CollectionsBookmark,
|
icon = Icons.Outlined.CollectionsBookmark,
|
||||||
)
|
)
|
||||||
StatsOverviewItem(
|
StatsOverviewItem(
|
||||||
title = data.completedMangaCount.toString(),
|
title = data.completedMangaCount.toString(),
|
||||||
subtitle = localize(MR.strings.label_completed_titles),
|
subtitle = stringResource(MR.strings.label_completed_titles),
|
||||||
icon = Icons.Outlined.LocalLibrary,
|
icon = Icons.Outlined.LocalLibrary,
|
||||||
)
|
)
|
||||||
StatsOverviewItem(
|
StatsOverviewItem(
|
||||||
title = readDurationString,
|
title = readDurationString,
|
||||||
subtitle = localize(MR.strings.label_read_duration),
|
subtitle = stringResource(MR.strings.label_read_duration),
|
||||||
icon = Icons.Outlined.Schedule,
|
icon = Icons.Outlined.Schedule,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -91,15 +91,15 @@ private fun TitlesStats(
|
|||||||
Row {
|
Row {
|
||||||
StatsItem(
|
StatsItem(
|
||||||
data.globalUpdateItemCount.toString(),
|
data.globalUpdateItemCount.toString(),
|
||||||
localize(MR.strings.label_titles_in_global_update),
|
stringResource(MR.strings.label_titles_in_global_update),
|
||||||
)
|
)
|
||||||
StatsItem(
|
StatsItem(
|
||||||
data.startedMangaCount.toString(),
|
data.startedMangaCount.toString(),
|
||||||
localize(MR.strings.label_started),
|
stringResource(MR.strings.label_started),
|
||||||
)
|
)
|
||||||
StatsItem(
|
StatsItem(
|
||||||
data.localMangaCount.toString(),
|
data.localMangaCount.toString(),
|
||||||
localize(MR.strings.label_local),
|
stringResource(MR.strings.label_local),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,15 +113,15 @@ private fun ChapterStats(
|
|||||||
Row {
|
Row {
|
||||||
StatsItem(
|
StatsItem(
|
||||||
data.totalChapterCount.toString(),
|
data.totalChapterCount.toString(),
|
||||||
localize(MR.strings.label_total_chapters),
|
stringResource(MR.strings.label_total_chapters),
|
||||||
)
|
)
|
||||||
StatsItem(
|
StatsItem(
|
||||||
data.readChapterCount.toString(),
|
data.readChapterCount.toString(),
|
||||||
localize(MR.strings.label_read_chapters),
|
stringResource(MR.strings.label_read_chapters),
|
||||||
)
|
)
|
||||||
StatsItem(
|
StatsItem(
|
||||||
data.downloadCount.toString(),
|
data.downloadCount.toString(),
|
||||||
localize(MR.strings.label_downloaded),
|
stringResource(MR.strings.label_downloaded),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -131,7 +131,7 @@ private fun ChapterStats(
|
|||||||
private fun TrackerStats(
|
private fun TrackerStats(
|
||||||
data: StatsData.Trackers,
|
data: StatsData.Trackers,
|
||||||
) {
|
) {
|
||||||
val notApplicable = localize(MR.strings.not_applicable)
|
val notApplicable = stringResource(MR.strings.not_applicable)
|
||||||
val meanScoreStr = remember(data.trackedTitleCount, data.meanScore) {
|
val meanScoreStr = remember(data.trackedTitleCount, data.meanScore) {
|
||||||
if (data.trackedTitleCount > 0 && !data.meanScore.isNaN()) {
|
if (data.trackedTitleCount > 0 && !data.meanScore.isNaN()) {
|
||||||
// All other numbers are localized in English
|
// All other numbers are localized in English
|
||||||
@ -144,15 +144,15 @@ private fun TrackerStats(
|
|||||||
Row {
|
Row {
|
||||||
StatsItem(
|
StatsItem(
|
||||||
data.trackedTitleCount.toString(),
|
data.trackedTitleCount.toString(),
|
||||||
localize(MR.strings.label_tracked_titles),
|
stringResource(MR.strings.label_tracked_titles),
|
||||||
)
|
)
|
||||||
StatsItem(
|
StatsItem(
|
||||||
meanScoreStr,
|
meanScoreStr,
|
||||||
localize(MR.strings.label_mean_score),
|
stringResource(MR.strings.label_mean_score),
|
||||||
)
|
)
|
||||||
StatsItem(
|
StatsItem(
|
||||||
data.trackerCount.toString(),
|
data.trackerCount.toString(),
|
||||||
localize(MR.strings.label_used),
|
stringResource(MR.strings.label_used),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import dev.icerock.moko.resources.StringResource
|
import dev.icerock.moko.resources.StringResource
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun StatsSection(
|
fun StatsSection(
|
||||||
@ -19,7 +19,7 @@ fun StatsSection(
|
|||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.padding(horizontal = MaterialTheme.padding.extraLarge),
|
modifier = Modifier.padding(horizontal = MaterialTheme.padding.extraLarge),
|
||||||
text = localize(titleRes),
|
text = stringResource(titleRes),
|
||||||
style = MaterialTheme.typography.titleSmall,
|
style = MaterialTheme.typography.titleSmall,
|
||||||
)
|
)
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
|
@ -41,8 +41,8 @@ import eu.kanade.tachiyomi.ui.reader.model.ChapterTransition
|
|||||||
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
|
||||||
import tachiyomi.domain.chapter.service.calculateChapterGap
|
import tachiyomi.domain.chapter.service.calculateChapterGap
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.pluralStringResource
|
||||||
import tachiyomi.presentation.core.i18n.localizePlural
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
import tachiyomi.presentation.core.util.secondaryItemAlpha
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -58,25 +58,25 @@ fun ChapterTransition(
|
|||||||
when (transition) {
|
when (transition) {
|
||||||
is ChapterTransition.Prev -> {
|
is ChapterTransition.Prev -> {
|
||||||
TransitionText(
|
TransitionText(
|
||||||
topLabel = localize(MR.strings.transition_previous),
|
topLabel = stringResource(MR.strings.transition_previous),
|
||||||
topChapter = goingToChapter,
|
topChapter = goingToChapter,
|
||||||
topChapterDownloaded = goingToChapterDownloaded,
|
topChapterDownloaded = goingToChapterDownloaded,
|
||||||
bottomLabel = localize(MR.strings.transition_current),
|
bottomLabel = stringResource(MR.strings.transition_current),
|
||||||
bottomChapter = currChapter,
|
bottomChapter = currChapter,
|
||||||
bottomChapterDownloaded = currChapterDownloaded,
|
bottomChapterDownloaded = currChapterDownloaded,
|
||||||
fallbackLabel = localize(MR.strings.transition_no_previous),
|
fallbackLabel = stringResource(MR.strings.transition_no_previous),
|
||||||
chapterGap = calculateChapterGap(currChapter.toDomainChapter(), goingToChapter?.toDomainChapter()),
|
chapterGap = calculateChapterGap(currChapter.toDomainChapter(), goingToChapter?.toDomainChapter()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
is ChapterTransition.Next -> {
|
is ChapterTransition.Next -> {
|
||||||
TransitionText(
|
TransitionText(
|
||||||
topLabel = localize(MR.strings.transition_finished),
|
topLabel = stringResource(MR.strings.transition_finished),
|
||||||
topChapter = currChapter,
|
topChapter = currChapter,
|
||||||
topChapterDownloaded = currChapterDownloaded,
|
topChapterDownloaded = currChapterDownloaded,
|
||||||
bottomLabel = localize(MR.strings.transition_next),
|
bottomLabel = stringResource(MR.strings.transition_next),
|
||||||
bottomChapter = goingToChapter,
|
bottomChapter = goingToChapter,
|
||||||
bottomChapterDownloaded = goingToChapterDownloaded,
|
bottomChapterDownloaded = goingToChapterDownloaded,
|
||||||
fallbackLabel = localize(MR.strings.transition_no_next),
|
fallbackLabel = stringResource(MR.strings.transition_no_next),
|
||||||
chapterGap = calculateChapterGap(goingToChapter?.toDomainChapter(), currChapter.toDomainChapter()),
|
chapterGap = calculateChapterGap(goingToChapter?.toDomainChapter(), currChapter.toDomainChapter()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -191,7 +191,7 @@ private fun ChapterGapWarning(
|
|||||||
)
|
)
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
text = localizePlural(MR.plurals.missing_chapters_warning, count = gapCount, gapCount),
|
text = pluralStringResource(MR.plurals.missing_chapters_warning, count = gapCount, gapCount),
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -245,7 +245,7 @@ private fun ChapterText(
|
|||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.CheckCircle,
|
imageVector = Icons.Filled.CheckCircle,
|
||||||
contentDescription = localize(MR.strings.label_downloaded),
|
contentDescription = stringResource(MR.strings.label_downloaded),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -24,7 +24,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
|
|||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.SettingsIconGrid
|
import tachiyomi.presentation.core.components.SettingsIconGrid
|
||||||
import tachiyomi.presentation.core.components.material.IconToggleButton
|
import tachiyomi.presentation.core.components.material.IconToggleButton
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
private val ReaderOrientationsWithoutDefault = ReaderOrientation.entries - ReaderOrientation.DEFAULT
|
private val ReaderOrientationsWithoutDefault = ReaderOrientation.entries - ReaderOrientation.DEFAULT
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ private fun DialogContent(
|
|||||||
},
|
},
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
imageVector = ImageVector.vectorResource(mode.iconRes),
|
imageVector = ImageVector.vectorResource(mode.iconRes),
|
||||||
title = localize(mode.stringRes),
|
title = stringResource(mode.stringRes),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
|
|||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.SettingsIconGrid
|
import tachiyomi.presentation.core.components.SettingsIconGrid
|
||||||
import tachiyomi.presentation.core.components.material.IconToggleButton
|
import tachiyomi.presentation.core.components.material.IconToggleButton
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
private val ReadingModesWithoutDefault = ReadingMode.entries - ReadingMode.DEFAULT
|
private val ReadingModesWithoutDefault = ReadingMode.entries - ReadingMode.DEFAULT
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ private fun DialogContent(
|
|||||||
},
|
},
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
imageVector = ImageVector.vectorResource(mode.iconRes),
|
imageVector = ImageVector.vectorResource(mode.iconRes),
|
||||||
title = localize(mode.stringRes),
|
title = stringResource(mode.stringRes),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import eu.kanade.presentation.theme.TachiyomiTheme
|
import eu.kanade.presentation.theme.TachiyomiTheme
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.SettingsItemsPaddings
|
import tachiyomi.presentation.core.components.SettingsItemsPaddings
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ModeSelectionDialog(
|
fun ModeSelectionDialog(
|
||||||
@ -40,7 +40,7 @@ fun ModeSelectionDialog(
|
|||||||
) {
|
) {
|
||||||
onUseDefault?.let {
|
onUseDefault?.let {
|
||||||
OutlinedButton(onClick = it) {
|
OutlinedButton(onClick = it) {
|
||||||
Text(text = localize(MR.strings.action_revert_to_default))
|
Text(text = stringResource(MR.strings.action_revert_to_default))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ fun ModeSelectionDialog(
|
|||||||
imageVector = Icons.Outlined.Check,
|
imageVector = Icons.Outlined.Check,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
)
|
)
|
||||||
Text(text = localize(MR.strings.action_apply))
|
Text(text = stringResource(MR.strings.action_apply))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ import tachiyomi.i18n.MR
|
|||||||
import tachiyomi.presentation.core.components.CheckboxItem
|
import tachiyomi.presentation.core.components.CheckboxItem
|
||||||
import tachiyomi.presentation.core.components.SettingsChipRow
|
import tachiyomi.presentation.core.components.SettingsChipRow
|
||||||
import tachiyomi.presentation.core.components.SliderItem
|
import tachiyomi.presentation.core.components.SliderItem
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.collectAsState
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -38,11 +38,11 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}.map { localize(it) }
|
}.map { stringResource(it) }
|
||||||
|
|
||||||
val customBrightness by screenModel.preferences.customBrightness().collectAsState()
|
val customBrightness by screenModel.preferences.customBrightness().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_custom_brightness),
|
label = stringResource(MR.strings.pref_custom_brightness),
|
||||||
pref = screenModel.preferences.customBrightness(),
|
pref = screenModel.preferences.customBrightness(),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
if (customBrightness) {
|
if (customBrightness) {
|
||||||
val customBrightnessValue by screenModel.preferences.customBrightnessValue().collectAsState()
|
val customBrightnessValue by screenModel.preferences.customBrightnessValue().collectAsState()
|
||||||
SliderItem(
|
SliderItem(
|
||||||
label = localize(MR.strings.pref_custom_brightness),
|
label = stringResource(MR.strings.pref_custom_brightness),
|
||||||
min = -75,
|
min = -75,
|
||||||
max = 100,
|
max = 100,
|
||||||
value = customBrightnessValue,
|
value = customBrightnessValue,
|
||||||
@ -66,13 +66,13 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
|
|
||||||
val colorFilter by screenModel.preferences.colorFilter().collectAsState()
|
val colorFilter by screenModel.preferences.colorFilter().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_custom_color_filter),
|
label = stringResource(MR.strings.pref_custom_color_filter),
|
||||||
pref = screenModel.preferences.colorFilter(),
|
pref = screenModel.preferences.colorFilter(),
|
||||||
)
|
)
|
||||||
if (colorFilter) {
|
if (colorFilter) {
|
||||||
val colorFilterValue by screenModel.preferences.colorFilterValue().collectAsState()
|
val colorFilterValue by screenModel.preferences.colorFilterValue().collectAsState()
|
||||||
SliderItem(
|
SliderItem(
|
||||||
label = localize(MR.strings.color_filter_r_value),
|
label = stringResource(MR.strings.color_filter_r_value),
|
||||||
max = 255,
|
max = 255,
|
||||||
value = colorFilterValue.red,
|
value = colorFilterValue.red,
|
||||||
valueText = colorFilterValue.red.toString(),
|
valueText = colorFilterValue.red.toString(),
|
||||||
@ -83,7 +83,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
SliderItem(
|
SliderItem(
|
||||||
label = localize(MR.strings.color_filter_g_value),
|
label = stringResource(MR.strings.color_filter_g_value),
|
||||||
max = 255,
|
max = 255,
|
||||||
value = colorFilterValue.green,
|
value = colorFilterValue.green,
|
||||||
valueText = colorFilterValue.green.toString(),
|
valueText = colorFilterValue.green.toString(),
|
||||||
@ -94,7 +94,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
SliderItem(
|
SliderItem(
|
||||||
label = localize(MR.strings.color_filter_b_value),
|
label = stringResource(MR.strings.color_filter_b_value),
|
||||||
max = 255,
|
max = 255,
|
||||||
value = colorFilterValue.blue,
|
value = colorFilterValue.blue,
|
||||||
valueText = colorFilterValue.blue.toString(),
|
valueText = colorFilterValue.blue.toString(),
|
||||||
@ -105,7 +105,7 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
SliderItem(
|
SliderItem(
|
||||||
label = localize(MR.strings.color_filter_a_value),
|
label = stringResource(MR.strings.color_filter_a_value),
|
||||||
max = 255,
|
max = 255,
|
||||||
value = colorFilterValue.alpha,
|
value = colorFilterValue.alpha,
|
||||||
valueText = colorFilterValue.alpha.toString(),
|
valueText = colorFilterValue.alpha.toString(),
|
||||||
@ -129,11 +129,11 @@ internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_grayscale),
|
label = stringResource(MR.strings.pref_grayscale),
|
||||||
pref = screenModel.preferences.grayscale(),
|
pref = screenModel.preferences.grayscale(),
|
||||||
)
|
)
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_inverted_colors),
|
label = stringResource(MR.strings.pref_inverted_colors),
|
||||||
pref = screenModel.preferences.invertedColors(),
|
pref = screenModel.preferences.invertedColors(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ import eu.kanade.presentation.components.TabbedDialogPaddings
|
|||||||
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
|
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ReaderSettingsDialog(
|
fun ReaderSettingsDialog(
|
||||||
@ -27,9 +27,9 @@ fun ReaderSettingsDialog(
|
|||||||
screenModel: ReaderSettingsScreenModel,
|
screenModel: ReaderSettingsScreenModel,
|
||||||
) {
|
) {
|
||||||
val tabTitles = persistentListOf(
|
val tabTitles = persistentListOf(
|
||||||
localize(MR.strings.pref_category_reading_mode),
|
stringResource(MR.strings.pref_category_reading_mode),
|
||||||
localize(MR.strings.pref_category_general),
|
stringResource(MR.strings.pref_category_general),
|
||||||
localize(MR.strings.custom_filter),
|
stringResource(MR.strings.custom_filter),
|
||||||
)
|
)
|
||||||
val pagerState = rememberPagerState { tabTitles.size }
|
val pagerState = rememberPagerState { tabTitles.size }
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ import tachiyomi.presentation.core.components.CheckboxItem
|
|||||||
import tachiyomi.presentation.core.components.HeadingItem
|
import tachiyomi.presentation.core.components.HeadingItem
|
||||||
import tachiyomi.presentation.core.components.SettingsChipRow
|
import tachiyomi.presentation.core.components.SettingsChipRow
|
||||||
import tachiyomi.presentation.core.components.SliderItem
|
import tachiyomi.presentation.core.components.SliderItem
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.collectAsState
|
import tachiyomi.presentation.core.util.collectAsState
|
||||||
import java.text.NumberFormat
|
import java.text.NumberFormat
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel)
|
|||||||
FilterChip(
|
FilterChip(
|
||||||
selected = it == readingMode,
|
selected = it == readingMode,
|
||||||
onClick = { screenModel.onChangeReadingMode(it) },
|
onClick = { screenModel.onChangeReadingMode(it) },
|
||||||
label = { Text(localize(it.stringRes)) },
|
label = { Text(stringResource(it.stringRes)) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -45,7 +45,7 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel)
|
|||||||
FilterChip(
|
FilterChip(
|
||||||
selected = it == orientation,
|
selected = it == orientation,
|
||||||
onClick = { screenModel.onChangeOrientation(it) },
|
onClick = { screenModel.onChangeOrientation(it) },
|
||||||
label = { Text(localize(it.stringRes)) },
|
label = { Text(stringResource(it.stringRes)) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod
|
|||||||
FilterChip(
|
FilterChip(
|
||||||
selected = imageScaleType == index + 1,
|
selected = imageScaleType == index + 1,
|
||||||
onClick = { screenModel.preferences.imageScaleType().set(index + 1) },
|
onClick = { screenModel.preferences.imageScaleType().set(index + 1) },
|
||||||
label = { Text(localize(it)) },
|
label = { Text(stringResource(it)) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,7 +91,7 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod
|
|||||||
FilterChip(
|
FilterChip(
|
||||||
selected = zoomStart == index + 1,
|
selected = zoomStart == index + 1,
|
||||||
onClick = { screenModel.preferences.zoomStart().set(index + 1) },
|
onClick = { screenModel.preferences.zoomStart().set(index + 1) },
|
||||||
label = { Text(localize(it)) },
|
label = { Text(stringResource(it)) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -110,42 +110,42 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod
|
|||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_crop_borders),
|
label = stringResource(MR.strings.pref_crop_borders),
|
||||||
pref = screenModel.preferences.cropBorders(),
|
pref = screenModel.preferences.cropBorders(),
|
||||||
)
|
)
|
||||||
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_landscape_zoom),
|
label = stringResource(MR.strings.pref_landscape_zoom),
|
||||||
pref = screenModel.preferences.landscapeZoom(),
|
pref = screenModel.preferences.landscapeZoom(),
|
||||||
)
|
)
|
||||||
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_navigate_pan),
|
label = stringResource(MR.strings.pref_navigate_pan),
|
||||||
pref = screenModel.preferences.navigateToPan(),
|
pref = screenModel.preferences.navigateToPan(),
|
||||||
)
|
)
|
||||||
|
|
||||||
val dualPageSplitPaged by screenModel.preferences.dualPageSplitPaged().collectAsState()
|
val dualPageSplitPaged by screenModel.preferences.dualPageSplitPaged().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_dual_page_split),
|
label = stringResource(MR.strings.pref_dual_page_split),
|
||||||
pref = screenModel.preferences.dualPageSplitPaged(),
|
pref = screenModel.preferences.dualPageSplitPaged(),
|
||||||
)
|
)
|
||||||
|
|
||||||
if (dualPageSplitPaged) {
|
if (dualPageSplitPaged) {
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_dual_page_invert),
|
label = stringResource(MR.strings.pref_dual_page_invert),
|
||||||
pref = screenModel.preferences.dualPageInvertPaged(),
|
pref = screenModel.preferences.dualPageInvertPaged(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val dualPageRotateToFit by screenModel.preferences.dualPageRotateToFit().collectAsState()
|
val dualPageRotateToFit by screenModel.preferences.dualPageRotateToFit().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_page_rotate),
|
label = stringResource(MR.strings.pref_page_rotate),
|
||||||
pref = screenModel.preferences.dualPageRotateToFit(),
|
pref = screenModel.preferences.dualPageRotateToFit(),
|
||||||
)
|
)
|
||||||
|
|
||||||
if (dualPageRotateToFit) {
|
if (dualPageRotateToFit) {
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_page_rotate_invert),
|
label = stringResource(MR.strings.pref_page_rotate_invert),
|
||||||
pref = screenModel.preferences.dualPageRotateToFitInvert(),
|
pref = screenModel.preferences.dualPageRotateToFitInvert(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -191,7 +191,7 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
|
|||||||
|
|
||||||
val webtoonSidePadding by screenModel.preferences.webtoonSidePadding().collectAsState()
|
val webtoonSidePadding by screenModel.preferences.webtoonSidePadding().collectAsState()
|
||||||
SliderItem(
|
SliderItem(
|
||||||
label = localize(MR.strings.pref_webtoon_side_padding),
|
label = stringResource(MR.strings.pref_webtoon_side_padding),
|
||||||
min = ReaderPreferences.WEBTOON_PADDING_MIN,
|
min = ReaderPreferences.WEBTOON_PADDING_MIN,
|
||||||
max = ReaderPreferences.WEBTOON_PADDING_MAX,
|
max = ReaderPreferences.WEBTOON_PADDING_MAX,
|
||||||
value = webtoonSidePadding,
|
value = webtoonSidePadding,
|
||||||
@ -202,7 +202,7 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
|
|||||||
)
|
)
|
||||||
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_crop_borders),
|
label = stringResource(MR.strings.pref_crop_borders),
|
||||||
pref = screenModel.preferences.cropBordersWebtoon(),
|
pref = screenModel.preferences.cropBordersWebtoon(),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -225,19 +225,19 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
|
|||||||
|
|
||||||
val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState()
|
val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState()
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_dual_page_split),
|
label = stringResource(MR.strings.pref_dual_page_split),
|
||||||
pref = screenModel.preferences.dualPageSplitWebtoon(),
|
pref = screenModel.preferences.dualPageSplitWebtoon(),
|
||||||
)
|
)
|
||||||
|
|
||||||
if (dualPageSplitWebtoon) {
|
if (dualPageSplitWebtoon) {
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_dual_page_invert),
|
label = stringResource(MR.strings.pref_dual_page_invert),
|
||||||
pref = screenModel.preferences.dualPageInvertWebtoon(),
|
pref = screenModel.preferences.dualPageInvertWebtoon(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckboxItem(
|
CheckboxItem(
|
||||||
label = localize(MR.strings.pref_double_tap_zoom),
|
label = stringResource(MR.strings.pref_double_tap_zoom),
|
||||||
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
|
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -266,7 +266,7 @@ private fun ColumnScope.TapZonesItems(
|
|||||||
FilterChip(
|
FilterChip(
|
||||||
selected = selected == index,
|
selected = selected == index,
|
||||||
onClick = { onSelect(index) },
|
onClick = { onSelect(index) },
|
||||||
label = { Text(localize(it)) },
|
label = { Text(stringResource(it)) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -277,7 +277,7 @@ private fun ColumnScope.TapZonesItems(
|
|||||||
FilterChip(
|
FilterChip(
|
||||||
selected = it == invertMode,
|
selected = it == invertMode,
|
||||||
onClick = { onSelectInvertMode(it) },
|
onClick = { onSelectInvertMode(it) },
|
||||||
label = { Text(localize(it.titleRes)) },
|
label = { Text(stringResource(it.titleRes)) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ import eu.kanade.tachiyomi.data.track.Tracker
|
|||||||
import eu.kanade.tachiyomi.ui.manga.track.TrackItem
|
import eu.kanade.tachiyomi.ui.manga.track.TrackItem
|
||||||
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
import eu.kanade.tachiyomi.util.system.copyToClipboard
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
|
|
||||||
private const val UnsetStatusTextAlpha = 0.5F
|
private const val UnsetStatusTextAlpha = 0.5F
|
||||||
@ -194,7 +194,7 @@ private fun TrackInfoItem(
|
|||||||
Row(modifier = Modifier.height(IntrinsicSize.Min)) {
|
Row(modifier = Modifier.height(IntrinsicSize.Min)) {
|
||||||
TrackDetailsItem(
|
TrackDetailsItem(
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
text = status?.let { localize(it) } ?: "",
|
text = status?.let { stringResource(it) } ?: "",
|
||||||
onClick = onStatusClick,
|
onClick = onStatusClick,
|
||||||
)
|
)
|
||||||
VerticalDivider()
|
VerticalDivider()
|
||||||
@ -209,7 +209,7 @@ private fun TrackInfoItem(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.weight(1f)
|
.weight(1f)
|
||||||
.alpha(if (score == null) UnsetStatusTextAlpha else 1f),
|
.alpha(if (score == null) UnsetStatusTextAlpha else 1f),
|
||||||
text = score ?: localize(MR.strings.score),
|
text = score ?: stringResource(MR.strings.score),
|
||||||
onClick = onScoreClick,
|
onClick = onScoreClick,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -221,14 +221,14 @@ private fun TrackInfoItem(
|
|||||||
TrackDetailsItem(
|
TrackDetailsItem(
|
||||||
modifier = Modifier.weight(1F),
|
modifier = Modifier.weight(1F),
|
||||||
text = startDate,
|
text = startDate,
|
||||||
placeholder = localize(MR.strings.track_started_reading_date),
|
placeholder = stringResource(MR.strings.track_started_reading_date),
|
||||||
onClick = onStartDateClick,
|
onClick = onStartDateClick,
|
||||||
)
|
)
|
||||||
VerticalDivider()
|
VerticalDivider()
|
||||||
TrackDetailsItem(
|
TrackDetailsItem(
|
||||||
modifier = Modifier.weight(1F),
|
modifier = Modifier.weight(1F),
|
||||||
text = endDate,
|
text = endDate,
|
||||||
placeholder = localize(MR.strings.track_finished_reading_date),
|
placeholder = stringResource(MR.strings.track_finished_reading_date),
|
||||||
onClick = onEndDateClick,
|
onClick = onEndDateClick,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -279,7 +279,7 @@ private fun TrackInfoItemEmpty(
|
|||||||
.padding(start = 16.dp)
|
.padding(start = 16.dp)
|
||||||
.weight(1f),
|
.weight(1f),
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.add_tracking))
|
Text(text = stringResource(MR.strings.add_tracking))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -294,7 +294,7 @@ private fun TrackInfoItemMenu(
|
|||||||
IconButton(onClick = { expanded = true }) {
|
IconButton(onClick = { expanded = true }) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Default.MoreVert,
|
imageVector = Icons.Default.MoreVert,
|
||||||
contentDescription = localize(MR.strings.label_more),
|
contentDescription = stringResource(MR.strings.label_more),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
DropdownMenu(
|
DropdownMenu(
|
||||||
@ -302,14 +302,14 @@ private fun TrackInfoItemMenu(
|
|||||||
onDismissRequest = { expanded = false },
|
onDismissRequest = { expanded = false },
|
||||||
) {
|
) {
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(localize(MR.strings.action_open_in_browser)) },
|
text = { Text(stringResource(MR.strings.action_open_in_browser)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onOpenInBrowser()
|
onOpenInBrowser()
|
||||||
expanded = false
|
expanded = false
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(localize(MR.strings.action_remove)) },
|
text = { Text(stringResource(MR.strings.action_remove)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
onRemoved()
|
onRemoved()
|
||||||
expanded = false
|
expanded = false
|
||||||
|
@ -41,7 +41,7 @@ import tachiyomi.presentation.core.components.WheelNumberPicker
|
|||||||
import tachiyomi.presentation.core.components.WheelTextPicker
|
import tachiyomi.presentation.core.components.WheelTextPicker
|
||||||
import tachiyomi.presentation.core.components.material.AlertDialogContent
|
import tachiyomi.presentation.core.components.material.AlertDialogContent
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.isScrolledToEnd
|
import tachiyomi.presentation.core.util.isScrolledToEnd
|
||||||
import tachiyomi.presentation.core.util.isScrolledToStart
|
import tachiyomi.presentation.core.util.isScrolledToStart
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ fun TrackStatusSelector(
|
|||||||
onDismissRequest: () -> Unit,
|
onDismissRequest: () -> Unit,
|
||||||
) {
|
) {
|
||||||
BaseSelector(
|
BaseSelector(
|
||||||
title = localize(MR.strings.status),
|
title = stringResource(MR.strings.status),
|
||||||
content = {
|
content = {
|
||||||
val state = rememberLazyListState()
|
val state = rememberLazyListState()
|
||||||
ScrollbarLazyColumn(state = state) {
|
ScrollbarLazyColumn(state = state) {
|
||||||
@ -77,7 +77,7 @@ fun TrackStatusSelector(
|
|||||||
onClick = null,
|
onClick = null,
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = value?.let { localize(it) } ?: "",
|
text = value?.let { stringResource(it) } ?: "",
|
||||||
style = MaterialTheme.typography.bodyLarge.merge(),
|
style = MaterialTheme.typography.bodyLarge.merge(),
|
||||||
modifier = Modifier.padding(start = 24.dp),
|
modifier = Modifier.padding(start = 24.dp),
|
||||||
)
|
)
|
||||||
@ -102,7 +102,7 @@ fun TrackChapterSelector(
|
|||||||
onDismissRequest: () -> Unit,
|
onDismissRequest: () -> Unit,
|
||||||
) {
|
) {
|
||||||
BaseSelector(
|
BaseSelector(
|
||||||
title = localize(MR.strings.chapters),
|
title = stringResource(MR.strings.chapters),
|
||||||
content = {
|
content = {
|
||||||
WheelNumberPicker(
|
WheelNumberPicker(
|
||||||
items = range.toImmutableList(),
|
items = range.toImmutableList(),
|
||||||
@ -125,7 +125,7 @@ fun TrackScoreSelector(
|
|||||||
onDismissRequest: () -> Unit,
|
onDismissRequest: () -> Unit,
|
||||||
) {
|
) {
|
||||||
BaseSelector(
|
BaseSelector(
|
||||||
title = localize(MR.strings.score),
|
title = stringResource(MR.strings.score),
|
||||||
content = {
|
content = {
|
||||||
WheelTextPicker(
|
WheelTextPicker(
|
||||||
items = selections,
|
items = selections,
|
||||||
@ -172,15 +172,15 @@ fun TrackDateSelector(
|
|||||||
) {
|
) {
|
||||||
if (onRemove != null) {
|
if (onRemove != null) {
|
||||||
TextButton(onClick = onRemove) {
|
TextButton(onClick = onRemove) {
|
||||||
Text(text = localize(MR.strings.action_remove))
|
Text(text = stringResource(MR.strings.action_remove))
|
||||||
}
|
}
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
}
|
}
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
TextButton(onClick = { onConfirm(pickerState.selectedDateMillis!!) }) {
|
TextButton(onClick = { onConfirm(pickerState.selectedDateMillis!!) }) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,10 +215,10 @@ private fun BaseSelector(
|
|||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
}
|
}
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
TextButton(onClick = onConfirm) {
|
TextButton(onClick = onConfirm) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -65,7 +65,7 @@ import tachiyomi.i18n.MR
|
|||||||
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
|
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||||
import tachiyomi.presentation.core.util.plus
|
import tachiyomi.presentation.core.util.plus
|
||||||
@ -120,7 +120,7 @@ fun TrackerSearch(
|
|||||||
decorationBox = {
|
decorationBox = {
|
||||||
if (query.text.isEmpty()) {
|
if (query.text.isEmpty()) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.action_search_hint),
|
text = stringResource(MR.strings.action_search_hint),
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
style = MaterialTheme.typography.bodyLarge,
|
style = MaterialTheme.typography.bodyLarge,
|
||||||
)
|
)
|
||||||
@ -163,7 +163,7 @@ fun TrackerSearch(
|
|||||||
.fillMaxWidth(),
|
.fillMaxWidth(),
|
||||||
elevation = ButtonDefaults.elevatedButtonElevation(),
|
elevation = ButtonDefaults.elevatedButtonElevation(),
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_track))
|
Text(text = stringResource(MR.strings.action_track))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -204,7 +204,7 @@ fun TrackerSearch(
|
|||||||
EmptyScreen(
|
EmptyScreen(
|
||||||
modifier = Modifier.padding(innerPadding),
|
modifier = Modifier.padding(innerPadding),
|
||||||
message = queryResult.exceptionOrNull()?.message
|
message = queryResult.exceptionOrNull()?.message
|
||||||
?: localize(MR.strings.unknown_error),
|
?: stringResource(MR.strings.unknown_error),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -263,19 +263,19 @@ private fun SearchResultItem(
|
|||||||
)
|
)
|
||||||
if (type.isNotBlank()) {
|
if (type.isNotBlank()) {
|
||||||
SearchResultItemDetails(
|
SearchResultItemDetails(
|
||||||
title = localize(MR.strings.track_type),
|
title = stringResource(MR.strings.track_type),
|
||||||
text = type,
|
text = type,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (startDate.isNotBlank()) {
|
if (startDate.isNotBlank()) {
|
||||||
SearchResultItemDetails(
|
SearchResultItemDetails(
|
||||||
title = localize(MR.strings.label_started),
|
title = stringResource(MR.strings.label_started),
|
||||||
text = startDate,
|
text = startDate,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (status.isNotBlank()) {
|
if (status.isNotBlank()) {
|
||||||
SearchResultItemDetails(
|
SearchResultItemDetails(
|
||||||
title = localize(MR.strings.track_status),
|
title = stringResource(MR.strings.track_status),
|
||||||
text = status,
|
text = status,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.material3.TextButton
|
import androidx.compose.material3.TextButton
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun UpdatesDeleteConfirmationDialog(
|
fun UpdatesDeleteConfirmationDialog(
|
||||||
@ -14,7 +14,7 @@ fun UpdatesDeleteConfirmationDialog(
|
|||||||
) {
|
) {
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
text = {
|
text = {
|
||||||
Text(text = localize(MR.strings.confirm_delete_chapters))
|
Text(text = stringResource(MR.strings.confirm_delete_chapters))
|
||||||
},
|
},
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
@ -22,12 +22,12 @@ fun UpdatesDeleteConfirmationDialog(
|
|||||||
onConfirm()
|
onConfirm()
|
||||||
onDismissRequest()
|
onDismissRequest()
|
||||||
}) {
|
}) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dismissButton = {
|
dismissButton = {
|
||||||
TextButton(onClick = onDismissRequest) {
|
TextButton(onClick = onDismissRequest) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -34,7 +34,7 @@ import tachiyomi.i18n.MR
|
|||||||
import tachiyomi.presentation.core.components.FastScrollLazyColumn
|
import tachiyomi.presentation.core.components.FastScrollLazyColumn
|
||||||
import tachiyomi.presentation.core.components.material.PullRefresh
|
import tachiyomi.presentation.core.components.material.PullRefresh
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
@ -146,12 +146,12 @@ private fun UpdatesAppBar(
|
|||||||
) {
|
) {
|
||||||
AppBar(
|
AppBar(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
title = localize(MR.strings.label_recent_updates),
|
title = stringResource(MR.strings.label_recent_updates),
|
||||||
actions = {
|
actions = {
|
||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_update_library),
|
title = stringResource(MR.strings.action_update_library),
|
||||||
icon = Icons.Outlined.Refresh,
|
icon = Icons.Outlined.Refresh,
|
||||||
onClick = onUpdateLibrary,
|
onClick = onUpdateLibrary,
|
||||||
),
|
),
|
||||||
@ -164,12 +164,12 @@ private fun UpdatesAppBar(
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_select_all),
|
title = stringResource(MR.strings.action_select_all),
|
||||||
icon = Icons.Outlined.SelectAll,
|
icon = Icons.Outlined.SelectAll,
|
||||||
onClick = onSelectAll,
|
onClick = onSelectAll,
|
||||||
),
|
),
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_select_inverse),
|
title = stringResource(MR.strings.action_select_inverse),
|
||||||
icon = Icons.Outlined.FlipToBack,
|
icon = Icons.Outlined.FlipToBack,
|
||||||
onClick = onInvertSelection,
|
onClick = onInvertSelection,
|
||||||
),
|
),
|
||||||
|
@ -44,7 +44,7 @@ import tachiyomi.i18n.MR
|
|||||||
import tachiyomi.presentation.core.components.ListGroupHeader
|
import tachiyomi.presentation.core.components.ListGroupHeader
|
||||||
import tachiyomi.presentation.core.components.material.ReadItemAlpha
|
import tachiyomi.presentation.core.components.material.ReadItemAlpha
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.util.selectedBackground
|
import tachiyomi.presentation.core.util.selectedBackground
|
||||||
|
|
||||||
internal fun LazyListScope.updatesLastUpdatedItem(
|
internal fun LazyListScope.updatesLastUpdatedItem(
|
||||||
@ -56,7 +56,7 @@ internal fun LazyListScope.updatesLastUpdatedItem(
|
|||||||
.padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small),
|
.padding(horizontal = MaterialTheme.padding.medium, vertical = MaterialTheme.padding.small),
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)),
|
text = stringResource(MR.strings.updates_last_update_info, relativeTimeSpanString(lastUpdated)),
|
||||||
fontStyle = FontStyle.Italic,
|
fontStyle = FontStyle.Italic,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -107,7 +107,7 @@ internal fun LazyListScope.updatesUiItems(
|
|||||||
)/* SY <-- */ && it > 0L
|
)/* SY <-- */ && it > 0L
|
||||||
}
|
}
|
||||||
?.let {
|
?.let {
|
||||||
localize(
|
stringResource(
|
||||||
MR.strings.chapter_progress,
|
MR.strings.chapter_progress,
|
||||||
it + 1,
|
it + 1,
|
||||||
)
|
)
|
||||||
@ -190,7 +190,7 @@ private fun UpdatesUiItem(
|
|||||||
if (!update.read) {
|
if (!update.read) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.Circle,
|
imageVector = Icons.Filled.Circle,
|
||||||
contentDescription = localize(MR.strings.unread),
|
contentDescription = stringResource(MR.strings.unread),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.height(8.dp)
|
.height(8.dp)
|
||||||
.padding(end = 4.dp),
|
.padding(end = 4.dp),
|
||||||
@ -200,7 +200,7 @@ private fun UpdatesUiItem(
|
|||||||
if (update.bookmark) {
|
if (update.bookmark) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.Bookmark,
|
imageVector = Icons.Filled.Bookmark,
|
||||||
contentDescription = localize(MR.strings.action_filter_bookmarked),
|
contentDescription = stringResource(MR.strings.action_filter_bookmarked),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }),
|
.sizeIn(maxHeight = with(LocalDensity.current) { textHeight.toDp() - 2.dp }),
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
tint = MaterialTheme.colorScheme.primary,
|
||||||
|
@ -4,7 +4,7 @@ import android.content.Context
|
|||||||
import eu.kanade.tachiyomi.network.HttpException
|
import eu.kanade.tachiyomi.network.HttpException
|
||||||
import eu.kanade.tachiyomi.source.online.LicensedMangaChaptersException
|
import eu.kanade.tachiyomi.source.online.LicensedMangaChaptersException
|
||||||
import eu.kanade.tachiyomi.util.system.isOnline
|
import eu.kanade.tachiyomi.util.system.isOnline
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.data.source.NoResultsException
|
import tachiyomi.data.source.NoResultsException
|
||||||
import tachiyomi.domain.source.model.SourceNotInstalledException
|
import tachiyomi.domain.source.model.SourceNotInstalledException
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
@ -14,18 +14,18 @@ context(Context)
|
|||||||
val Throwable.formattedMessage: String
|
val Throwable.formattedMessage: String
|
||||||
get() {
|
get() {
|
||||||
when (this) {
|
when (this) {
|
||||||
is HttpException -> return localize(MR.strings.exception_http, code)
|
is HttpException -> return stringResource(MR.strings.exception_http, code)
|
||||||
is UnknownHostException -> {
|
is UnknownHostException -> {
|
||||||
return if (!isOnline()) {
|
return if (!isOnline()) {
|
||||||
localize(MR.strings.exception_offline)
|
stringResource(MR.strings.exception_offline)
|
||||||
} else {
|
} else {
|
||||||
localize(MR.strings.exception_unknown_host, message ?: "")
|
stringResource(MR.strings.exception_unknown_host, message ?: "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is NoResultsException -> return localize(MR.strings.no_results_found)
|
is NoResultsException -> return stringResource(MR.strings.no_results_found)
|
||||||
is SourceNotInstalledException -> return localize(MR.strings.loader_not_implemented_error)
|
is SourceNotInstalledException -> return stringResource(MR.strings.loader_not_implemented_error)
|
||||||
is LicensedMangaChaptersException -> return localize(MR.strings.licensed_manga_chapters_error)
|
is LicensedMangaChaptersException -> return stringResource(MR.strings.licensed_manga_chapters_error)
|
||||||
}
|
}
|
||||||
return when (val className = this::class.simpleName) {
|
return when (val className = this::class.simpleName) {
|
||||||
"Exception", "IOException" -> message ?: className
|
"Exception", "IOException" -> message ?: className
|
||||||
|
@ -4,9 +4,9 @@ import android.content.Context
|
|||||||
import android.text.format.DateUtils
|
import android.text.format.DateUtils
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.ReadOnlyComposable
|
import androidx.compose.runtime.ReadOnlyComposable
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
import kotlin.time.Duration.Companion.minutes
|
import kotlin.time.Duration.Companion.minutes
|
||||||
@ -14,10 +14,14 @@ import kotlin.time.Duration.Companion.minutes
|
|||||||
fun Duration.toDurationString(context: Context, fallback: String): String {
|
fun Duration.toDurationString(context: Context, fallback: String): String {
|
||||||
return toComponents { days, hours, minutes, seconds, _ ->
|
return toComponents { days, hours, minutes, seconds, _ ->
|
||||||
buildList(4) {
|
buildList(4) {
|
||||||
if (days != 0L) add(context.localize(MR.strings.day_short, days))
|
if (days != 0L) add(context.stringResource(MR.strings.day_short, days))
|
||||||
if (hours != 0) add(context.localize(MR.strings.hour_short, hours))
|
if (hours != 0) add(context.stringResource(MR.strings.hour_short, hours))
|
||||||
if (minutes != 0 && (days == 0L || hours == 0)) add(context.localize(MR.strings.minute_short, minutes))
|
if (minutes != 0 && (days == 0L || hours == 0)) {
|
||||||
if (seconds != 0 && days == 0L && hours == 0) add(context.localize(MR.strings.seconds_short, seconds))
|
add(
|
||||||
|
context.stringResource(MR.strings.minute_short, minutes),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (seconds != 0 && days == 0L && hours == 0) add(context.stringResource(MR.strings.seconds_short, seconds))
|
||||||
}.joinToString(" ").ifBlank { fallback }
|
}.joinToString(" ").ifBlank { fallback }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -27,8 +31,10 @@ fun Duration.toDurationString(context: Context, fallback: String): String {
|
|||||||
fun relativeTimeSpanString(epochMillis: Long): String {
|
fun relativeTimeSpanString(epochMillis: Long): String {
|
||||||
val now = Date().time
|
val now = Date().time
|
||||||
return when {
|
return when {
|
||||||
epochMillis <= 0L -> localize(MR.strings.relative_time_span_never)
|
epochMillis <= 0L -> stringResource(MR.strings.relative_time_span_never)
|
||||||
now - epochMillis < 1.minutes.inWholeMilliseconds -> localize(MR.strings.updates_last_update_info_just_now)
|
now - epochMillis < 1.minutes.inWholeMilliseconds -> stringResource(
|
||||||
|
MR.strings.updates_last_update_info_just_now,
|
||||||
|
)
|
||||||
else -> DateUtils.getRelativeTimeSpanString(epochMillis, now, DateUtils.MINUTE_IN_MILLIS).toString()
|
else -> DateUtils.getRelativeTimeSpanString(epochMillis, now, DateUtils.MINUTE_IN_MILLIS).toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ import kotlinx.collections.immutable.persistentListOf
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun WebViewScreenContent(
|
fun WebViewScreenContent(
|
||||||
@ -125,7 +125,7 @@ fun WebViewScreenContent(
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_webview_back),
|
title = stringResource(MR.strings.action_webview_back),
|
||||||
icon = Icons.AutoMirrored.Outlined.ArrowBack,
|
icon = Icons.AutoMirrored.Outlined.ArrowBack,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (navigator.canGoBack) {
|
if (navigator.canGoBack) {
|
||||||
@ -135,7 +135,7 @@ fun WebViewScreenContent(
|
|||||||
enabled = navigator.canGoBack,
|
enabled = navigator.canGoBack,
|
||||||
),
|
),
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_webview_forward),
|
title = stringResource(MR.strings.action_webview_forward),
|
||||||
icon = Icons.AutoMirrored.Outlined.ArrowForward,
|
icon = Icons.AutoMirrored.Outlined.ArrowForward,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (navigator.canGoForward) {
|
if (navigator.canGoForward) {
|
||||||
@ -145,19 +145,19 @@ fun WebViewScreenContent(
|
|||||||
enabled = navigator.canGoForward,
|
enabled = navigator.canGoForward,
|
||||||
),
|
),
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_webview_refresh),
|
title = stringResource(MR.strings.action_webview_refresh),
|
||||||
onClick = { navigator.reload() },
|
onClick = { navigator.reload() },
|
||||||
),
|
),
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_share),
|
title = stringResource(MR.strings.action_share),
|
||||||
onClick = { onShare(currentUrl) },
|
onClick = { onShare(currentUrl) },
|
||||||
),
|
),
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_open_in_browser),
|
title = stringResource(MR.strings.action_open_in_browser),
|
||||||
onClick = { onOpenInBrowser(currentUrl) },
|
onClick = { onOpenInBrowser(currentUrl) },
|
||||||
),
|
),
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.pref_clear_cookies),
|
title = stringResource(MR.strings.pref_clear_cookies),
|
||||||
onClick = { onClearCookies(currentUrl) },
|
onClick = { onClearCookies(currentUrl) },
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -68,7 +68,7 @@ import kotlinx.coroutines.flow.onEach
|
|||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import logcat.LogcatLogger
|
import logcat.LogcatLogger
|
||||||
import org.conscrypt.Conscrypt
|
import org.conscrypt.Conscrypt
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.widget.WidgetManager
|
import tachiyomi.presentation.widget.WidgetManager
|
||||||
@ -129,8 +129,8 @@ class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
|
|||||||
Notifications.ID_INCOGNITO_MODE,
|
Notifications.ID_INCOGNITO_MODE,
|
||||||
Notifications.CHANNEL_INCOGNITO_MODE,
|
Notifications.CHANNEL_INCOGNITO_MODE,
|
||||||
) {
|
) {
|
||||||
setContentTitle(localize(MR.strings.pref_incognito_mode))
|
setContentTitle(stringResource(MR.strings.pref_incognito_mode))
|
||||||
setContentText(localize(MR.strings.notification_incognito_text))
|
setContentText(stringResource(MR.strings.notification_incognito_text))
|
||||||
setSmallIcon(R.drawable.ic_glasses_24dp)
|
setSmallIcon(R.drawable.ic_glasses_24dp)
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ import logcat.LogPriority
|
|||||||
import okio.buffer
|
import okio.buffer
|
||||||
import okio.gzip
|
import okio.gzip
|
||||||
import okio.sink
|
import okio.sink
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.preference.Preference
|
import tachiyomi.core.preference.Preference
|
||||||
import tachiyomi.core.preference.PreferenceStore
|
import tachiyomi.core.preference.PreferenceStore
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
@ -95,7 +95,7 @@ class BackupCreator(
|
|||||||
*/
|
*/
|
||||||
suspend fun createBackup(uri: Uri, flags: Int, isAutoBackup: Boolean): String {
|
suspend fun createBackup(uri: Uri, flags: Int, isAutoBackup: Boolean): String {
|
||||||
if (!context.hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
if (!context.hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||||
throw IllegalStateException(context.localize(MR.strings.missing_storage_permission))
|
throw IllegalStateException(context.stringResource(MR.strings.missing_storage_permission))
|
||||||
}
|
}
|
||||||
|
|
||||||
val databaseManga = getFavorites.await() /* SY --> */ +
|
val databaseManga = getFavorites.await() /* SY --> */ +
|
||||||
@ -138,7 +138,7 @@ class BackupCreator(
|
|||||||
UniFile.fromUri(context, uri)
|
UniFile.fromUri(context, uri)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
?: throw Exception(context.localize(MR.strings.create_backup_file_error))
|
?: throw Exception(context.stringResource(MR.strings.create_backup_file_error))
|
||||||
|
|
||||||
if (!file.isFile) {
|
if (!file.isFile) {
|
||||||
throw IllegalStateException("Failed to get handle on a backup file")
|
throw IllegalStateException("Failed to get handle on a backup file")
|
||||||
@ -146,7 +146,7 @@ class BackupCreator(
|
|||||||
|
|
||||||
val byteArray = parser.encodeToByteArray(BackupSerializer, backup)
|
val byteArray = parser.encodeToByteArray(BackupSerializer, backup)
|
||||||
if (byteArray.isEmpty()) {
|
if (byteArray.isEmpty()) {
|
||||||
throw IllegalStateException(context.localize(MR.strings.empty_backup_error))
|
throw IllegalStateException(context.stringResource(MR.strings.empty_backup_error))
|
||||||
}
|
}
|
||||||
|
|
||||||
file.openOutputStream().also {
|
file.openOutputStream().also {
|
||||||
|
@ -4,7 +4,7 @@ import android.content.Context
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import eu.kanade.tachiyomi.data.track.TrackerManager
|
import eu.kanade.tachiyomi.data.track.TrackerManager
|
||||||
import eu.kanade.tachiyomi.util.BackupUtil
|
import eu.kanade.tachiyomi.util.BackupUtil
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.domain.source.service.SourceManager
|
import tachiyomi.domain.source.service.SourceManager
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
@ -29,7 +29,7 @@ class BackupFileValidator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (backup.backupManga.isEmpty()) {
|
if (backup.backupManga.isEmpty()) {
|
||||||
throw IllegalStateException(context.localize(MR.strings.invalid_backup_file_missing_manga))
|
throw IllegalStateException(context.stringResource(MR.strings.invalid_backup_file_missing_manga))
|
||||||
}
|
}
|
||||||
|
|
||||||
val sources = backup.backupSources.associate { it.sourceId to it.name }
|
val sources = backup.backupSources.associate { it.sourceId to it.name }
|
||||||
|
@ -12,8 +12,8 @@ import eu.kanade.tachiyomi.util.storage.getUriCompat
|
|||||||
import eu.kanade.tachiyomi.util.system.cancelNotification
|
import eu.kanade.tachiyomi.util.system.cancelNotification
|
||||||
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
||||||
import eu.kanade.tachiyomi.util.system.notify
|
import eu.kanade.tachiyomi.util.system.notify
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.pluralStringResource
|
||||||
import tachiyomi.core.i18n.localizePlural
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@ -47,7 +47,7 @@ class BackupNotifier(private val context: Context) {
|
|||||||
|
|
||||||
fun showBackupProgress(): NotificationCompat.Builder {
|
fun showBackupProgress(): NotificationCompat.Builder {
|
||||||
val builder = with(progressNotificationBuilder) {
|
val builder = with(progressNotificationBuilder) {
|
||||||
setContentTitle(context.localize(MR.strings.creating_backup))
|
setContentTitle(context.stringResource(MR.strings.creating_backup))
|
||||||
|
|
||||||
setProgress(0, 0, true)
|
setProgress(0, 0, true)
|
||||||
}
|
}
|
||||||
@ -61,7 +61,7 @@ class BackupNotifier(private val context: Context) {
|
|||||||
context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)
|
context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)
|
||||||
|
|
||||||
with(completeNotificationBuilder) {
|
with(completeNotificationBuilder) {
|
||||||
setContentTitle(context.localize(MR.strings.creating_backup_error))
|
setContentTitle(context.stringResource(MR.strings.creating_backup_error))
|
||||||
setContentText(error)
|
setContentText(error)
|
||||||
|
|
||||||
show(Notifications.ID_BACKUP_COMPLETE)
|
show(Notifications.ID_BACKUP_COMPLETE)
|
||||||
@ -72,13 +72,13 @@ class BackupNotifier(private val context: Context) {
|
|||||||
context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)
|
context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)
|
||||||
|
|
||||||
with(completeNotificationBuilder) {
|
with(completeNotificationBuilder) {
|
||||||
setContentTitle(context.localize(MR.strings.backup_created))
|
setContentTitle(context.stringResource(MR.strings.backup_created))
|
||||||
setContentText(unifile.filePath ?: unifile.name)
|
setContentText(unifile.filePath ?: unifile.name)
|
||||||
|
|
||||||
clearActions()
|
clearActions()
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_share_24dp,
|
R.drawable.ic_share_24dp,
|
||||||
context.localize(MR.strings.action_share),
|
context.stringResource(MR.strings.action_share),
|
||||||
NotificationReceiver.shareBackupPendingBroadcast(
|
NotificationReceiver.shareBackupPendingBroadcast(
|
||||||
context,
|
context,
|
||||||
unifile.uri,
|
unifile.uri,
|
||||||
@ -92,7 +92,7 @@ class BackupNotifier(private val context: Context) {
|
|||||||
|
|
||||||
fun showRestoreProgress(
|
fun showRestoreProgress(
|
||||||
content: String = "",
|
content: String = "",
|
||||||
contentTitle: String = context.localize(
|
contentTitle: String = context.stringResource(
|
||||||
MR.strings.restoring_backup,
|
MR.strings.restoring_backup,
|
||||||
),
|
),
|
||||||
progress: Int = 0,
|
progress: Int = 0,
|
||||||
@ -111,7 +111,7 @@ class BackupNotifier(private val context: Context) {
|
|||||||
clearActions()
|
clearActions()
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_close_24dp,
|
R.drawable.ic_close_24dp,
|
||||||
context.localize(MR.strings.action_cancel),
|
context.stringResource(MR.strings.action_cancel),
|
||||||
NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE_PROGRESS),
|
NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE_PROGRESS),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -125,7 +125,7 @@ class BackupNotifier(private val context: Context) {
|
|||||||
context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)
|
context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)
|
||||||
|
|
||||||
with(completeNotificationBuilder) {
|
with(completeNotificationBuilder) {
|
||||||
setContentTitle(context.localize(MR.strings.restoring_backup_error))
|
setContentTitle(context.stringResource(MR.strings.restoring_backup_error))
|
||||||
setContentText(error)
|
setContentText(error)
|
||||||
|
|
||||||
show(Notifications.ID_RESTORE_COMPLETE)
|
show(Notifications.ID_RESTORE_COMPLETE)
|
||||||
@ -137,13 +137,13 @@ class BackupNotifier(private val context: Context) {
|
|||||||
errorCount: Int,
|
errorCount: Int,
|
||||||
path: String?,
|
path: String?,
|
||||||
file: String?,
|
file: String?,
|
||||||
contentTitle: String = context.localize(
|
contentTitle: String = context.stringResource(
|
||||||
MR.strings.restore_completed,
|
MR.strings.restore_completed,
|
||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)
|
context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)
|
||||||
|
|
||||||
val timeString = context.localize(
|
val timeString = context.stringResource(
|
||||||
MR.strings.restore_duration,
|
MR.strings.restore_duration,
|
||||||
TimeUnit.MILLISECONDS.toMinutes(time),
|
TimeUnit.MILLISECONDS.toMinutes(time),
|
||||||
TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds(
|
TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds(
|
||||||
@ -154,7 +154,7 @@ class BackupNotifier(private val context: Context) {
|
|||||||
with(completeNotificationBuilder) {
|
with(completeNotificationBuilder) {
|
||||||
setContentTitle(contentTitle)
|
setContentTitle(contentTitle)
|
||||||
setContentText(
|
setContentText(
|
||||||
context.localizePlural(
|
context.pluralStringResource(
|
||||||
MR.plurals.restore_completed_message,
|
MR.plurals.restore_completed_message,
|
||||||
errorCount,
|
errorCount,
|
||||||
timeString,
|
timeString,
|
||||||
@ -171,7 +171,7 @@ class BackupNotifier(private val context: Context) {
|
|||||||
setContentIntent(errorLogIntent)
|
setContentIntent(errorLogIntent)
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_folder_24dp,
|
R.drawable.ic_folder_24dp,
|
||||||
context.localize(MR.strings.action_show_errors),
|
context.stringResource(MR.strings.action_show_errors),
|
||||||
errorLogIntent,
|
errorLogIntent,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.util.system.isRunning
|
|||||||
import eu.kanade.tachiyomi.util.system.workManager
|
import eu.kanade.tachiyomi.util.system.workManager
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ class BackupRestoreJob(private val context: Context, workerParams: WorkerParamet
|
|||||||
Result.success()
|
Result.success()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
if (e is CancellationException) {
|
if (e is CancellationException) {
|
||||||
notifier.showRestoreError(context.localize(MR.strings.restoring_backup_canceled))
|
notifier.showRestoreError(context.stringResource(MR.strings.restoring_backup_canceled))
|
||||||
Result.success()
|
Result.success()
|
||||||
} else {
|
} else {
|
||||||
logcat(LogPriority.ERROR, e)
|
logcat(LogPriority.ERROR, e)
|
||||||
|
@ -28,7 +28,7 @@ import exh.source.MERGED_SOURCE_ID
|
|||||||
import exh.util.nullIfBlank
|
import exh.util.nullIfBlank
|
||||||
import kotlinx.coroutines.coroutineScope
|
import kotlinx.coroutines.coroutineScope
|
||||||
import kotlinx.coroutines.isActive
|
import kotlinx.coroutines.isActive
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.preference.AndroidPreferenceStore
|
import tachiyomi.core.preference.AndroidPreferenceStore
|
||||||
import tachiyomi.core.preference.PreferenceStore
|
import tachiyomi.core.preference.PreferenceStore
|
||||||
import tachiyomi.data.DatabaseHandler
|
import tachiyomi.data.DatabaseHandler
|
||||||
@ -112,7 +112,7 @@ class BackupRestorer(
|
|||||||
errors.size,
|
errors.size,
|
||||||
logFile.parent,
|
logFile.parent,
|
||||||
logFile.name,
|
logFile.name,
|
||||||
contentTitle = context.localize(MR.strings.library_sync_complete),
|
contentTitle = context.stringResource(MR.strings.library_sync_complete),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
notifier.showRestoreComplete(time, errors.size, logFile.parent, logFile.name)
|
notifier.showRestoreComplete(time, errors.size, logFile.parent, logFile.name)
|
||||||
@ -218,8 +218,8 @@ class BackupRestorer(
|
|||||||
showRestoreProgress(
|
showRestoreProgress(
|
||||||
restoreProgress,
|
restoreProgress,
|
||||||
restoreAmount,
|
restoreAmount,
|
||||||
context.localize(MR.strings.categories),
|
context.stringResource(MR.strings.categories),
|
||||||
context.localize(MR.strings.restoring_backup),
|
context.stringResource(MR.strings.restoring_backup),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,14 +314,14 @@ class BackupRestorer(
|
|||||||
restoreProgress,
|
restoreProgress,
|
||||||
restoreAmount,
|
restoreAmount,
|
||||||
manga.title,
|
manga.title,
|
||||||
context.localize(MR.strings.syncing_library),
|
context.stringResource(MR.strings.syncing_library),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
showRestoreProgress(
|
showRestoreProgress(
|
||||||
restoreProgress,
|
restoreProgress,
|
||||||
restoreAmount,
|
restoreAmount,
|
||||||
manga.title,
|
manga.title,
|
||||||
context.localize(MR.strings.restoring_backup),
|
context.stringResource(MR.strings.restoring_backup),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -822,8 +822,8 @@ class BackupRestorer(
|
|||||||
showRestoreProgress(
|
showRestoreProgress(
|
||||||
restoreProgress,
|
restoreProgress,
|
||||||
restoreAmount,
|
restoreAmount,
|
||||||
context.localize(MR.strings.app_settings),
|
context.stringResource(MR.strings.app_settings),
|
||||||
context.localize(MR.strings.restoring_backup),
|
context.stringResource(MR.strings.restoring_backup),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -837,8 +837,8 @@ class BackupRestorer(
|
|||||||
showRestoreProgress(
|
showRestoreProgress(
|
||||||
restoreProgress,
|
restoreProgress,
|
||||||
restoreAmount,
|
restoreAmount,
|
||||||
context.localize(MR.strings.source_settings),
|
context.stringResource(MR.strings.source_settings),
|
||||||
context.localize(MR.strings.restoring_backup),
|
context.stringResource(MR.strings.restoring_backup),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ import eu.kanade.tachiyomi.util.lang.chop
|
|||||||
import eu.kanade.tachiyomi.util.system.cancelNotification
|
import eu.kanade.tachiyomi.util.system.cancelNotification
|
||||||
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
||||||
import eu.kanade.tachiyomi.util.system.notify
|
import eu.kanade.tachiyomi.util.system.notify
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
@ -80,12 +80,12 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
// Pause action
|
// Pause action
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_pause_24dp,
|
R.drawable.ic_pause_24dp,
|
||||||
context.localize(MR.strings.action_pause),
|
context.stringResource(MR.strings.action_pause),
|
||||||
NotificationReceiver.pauseDownloadsPendingBroadcast(context),
|
NotificationReceiver.pauseDownloadsPendingBroadcast(context),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val downloadingProgressText = context.localize(
|
val downloadingProgressText = context.stringResource(
|
||||||
MR.strings.chapter_downloading_progress,
|
MR.strings.chapter_downloading_progress,
|
||||||
download.downloadedImages,
|
download.downloadedImages,
|
||||||
download.pages!!.size,
|
download.pages!!.size,
|
||||||
@ -117,8 +117,8 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
*/
|
*/
|
||||||
fun onPaused() {
|
fun onPaused() {
|
||||||
with(progressNotificationBuilder) {
|
with(progressNotificationBuilder) {
|
||||||
setContentTitle(context.localize(MR.strings.chapter_paused))
|
setContentTitle(context.stringResource(MR.strings.chapter_paused))
|
||||||
setContentText(context.localize(MR.strings.download_notifier_download_paused))
|
setContentText(context.stringResource(MR.strings.download_notifier_download_paused))
|
||||||
setSmallIcon(R.drawable.ic_pause_24dp)
|
setSmallIcon(R.drawable.ic_pause_24dp)
|
||||||
setProgress(0, 0, false)
|
setProgress(0, 0, false)
|
||||||
setOngoing(false)
|
setOngoing(false)
|
||||||
@ -128,13 +128,13 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
// Resume action
|
// Resume action
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_play_arrow_24dp,
|
R.drawable.ic_play_arrow_24dp,
|
||||||
context.localize(MR.strings.action_resume),
|
context.stringResource(MR.strings.action_resume),
|
||||||
NotificationReceiver.resumeDownloadsPendingBroadcast(context),
|
NotificationReceiver.resumeDownloadsPendingBroadcast(context),
|
||||||
)
|
)
|
||||||
// Clear action
|
// Clear action
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_close_24dp,
|
R.drawable.ic_close_24dp,
|
||||||
context.localize(MR.strings.action_cancel_all),
|
context.stringResource(MR.strings.action_cancel_all),
|
||||||
NotificationReceiver.clearDownloadsPendingBroadcast(context),
|
NotificationReceiver.clearDownloadsPendingBroadcast(context),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -164,7 +164,7 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
*/
|
*/
|
||||||
fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null) {
|
fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null) {
|
||||||
with(errorNotificationBuilder) {
|
with(errorNotificationBuilder) {
|
||||||
setContentTitle(context.localize(MR.strings.download_notifier_downloader_title))
|
setContentTitle(context.stringResource(MR.strings.download_notifier_downloader_title))
|
||||||
setStyle(NotificationCompat.BigTextStyle().bigText(reason))
|
setStyle(NotificationCompat.BigTextStyle().bigText(reason))
|
||||||
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
||||||
setAutoCancel(true)
|
setAutoCancel(true)
|
||||||
@ -192,9 +192,9 @@ internal class DownloadNotifier(private val context: Context) {
|
|||||||
// Create notification
|
// Create notification
|
||||||
with(errorNotificationBuilder) {
|
with(errorNotificationBuilder) {
|
||||||
setContentTitle(
|
setContentTitle(
|
||||||
mangaTitle?.plus(": $chapter") ?: context.localize(MR.strings.download_notifier_downloader_title),
|
mangaTitle?.plus(": $chapter") ?: context.stringResource(MR.strings.download_notifier_downloader_title),
|
||||||
)
|
)
|
||||||
setContentText(error ?: context.localize(MR.strings.download_notifier_unknown_error))
|
setContentText(error ?: context.stringResource(MR.strings.download_notifier_unknown_error))
|
||||||
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
||||||
clearActions()
|
clearActions()
|
||||||
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
||||||
|
@ -9,7 +9,7 @@ import kotlinx.coroutines.MainScope
|
|||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.domain.chapter.model.Chapter
|
import tachiyomi.domain.chapter.model.Chapter
|
||||||
import tachiyomi.domain.download.service.DownloadPreferences
|
import tachiyomi.domain.download.service.DownloadPreferences
|
||||||
@ -59,7 +59,7 @@ class DownloadProvider(
|
|||||||
.createDirectory(getMangaDirName(mangaTitle))
|
.createDirectory(getMangaDirName(mangaTitle))
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
logcat(LogPriority.ERROR, e) { "Invalid download directory" }
|
logcat(LogPriority.ERROR, e) { "Invalid download directory" }
|
||||||
throw Exception(context.localize(MR.strings.invalid_location, downloadsDir))
|
throw Exception(context.stringResource(MR.strings.invalid_location, downloadsDir))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ import kotlinx.coroutines.flow.launchIn
|
|||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import ru.beryukhov.reactivenetwork.ReactiveNetwork
|
import ru.beryukhov.reactivenetwork.ReactiveNetwork
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.lang.withUIContext
|
import tachiyomi.core.util.lang.withUIContext
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.domain.download.service.DownloadPreferences
|
import tachiyomi.domain.download.service.DownloadPreferences
|
||||||
@ -113,7 +113,7 @@ class DownloadService : Service() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun downloaderStop(string: StringResource) {
|
private fun downloaderStop(string: StringResource) {
|
||||||
downloadManager.downloaderStop(localize(string))
|
downloadManager.downloaderStop(stringResource(string))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun listenNetworkChanges() {
|
private fun listenNetworkChanges() {
|
||||||
@ -145,7 +145,7 @@ class DownloadService : Service() {
|
|||||||
|
|
||||||
private fun getPlaceholderNotification(): Notification {
|
private fun getPlaceholderNotification(): Notification {
|
||||||
return notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
return notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
||||||
setContentTitle(localize(MR.strings.download_notifier_downloader_title))
|
setContentTitle(stringResource(MR.strings.download_notifier_downloader_title))
|
||||||
}.build()
|
}.build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import androidx.core.app.NotificationManagerCompat.IMPORTANCE_HIGH
|
|||||||
import androidx.core.app.NotificationManagerCompat.IMPORTANCE_LOW
|
import androidx.core.app.NotificationManagerCompat.IMPORTANCE_LOW
|
||||||
import eu.kanade.tachiyomi.util.system.buildNotificationChannel
|
import eu.kanade.tachiyomi.util.system.buildNotificationChannel
|
||||||
import eu.kanade.tachiyomi.util.system.buildNotificationChannelGroup
|
import eu.kanade.tachiyomi.util.system.buildNotificationChannelGroup
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,16 +103,16 @@ object Notifications {
|
|||||||
notificationManager.createNotificationChannelGroupsCompat(
|
notificationManager.createNotificationChannelGroupsCompat(
|
||||||
listOf(
|
listOf(
|
||||||
buildNotificationChannelGroup(GROUP_BACKUP_RESTORE) {
|
buildNotificationChannelGroup(GROUP_BACKUP_RESTORE) {
|
||||||
setName(context.localize(MR.strings.label_backup))
|
setName(context.stringResource(MR.strings.label_backup))
|
||||||
},
|
},
|
||||||
buildNotificationChannelGroup(GROUP_DOWNLOADER) {
|
buildNotificationChannelGroup(GROUP_DOWNLOADER) {
|
||||||
setName(context.localize(MR.strings.download_notifier_downloader_title))
|
setName(context.stringResource(MR.strings.download_notifier_downloader_title))
|
||||||
},
|
},
|
||||||
buildNotificationChannelGroup(GROUP_LIBRARY) {
|
buildNotificationChannelGroup(GROUP_LIBRARY) {
|
||||||
setName(context.localize(MR.strings.label_library))
|
setName(context.stringResource(MR.strings.label_library))
|
||||||
},
|
},
|
||||||
buildNotificationChannelGroup(GROUP_APK_UPDATES) {
|
buildNotificationChannelGroup(GROUP_APK_UPDATES) {
|
||||||
setName(context.localize(MR.strings.label_recent_updates))
|
setName(context.stringResource(MR.strings.label_recent_updates))
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -120,57 +120,57 @@ object Notifications {
|
|||||||
notificationManager.createNotificationChannelsCompat(
|
notificationManager.createNotificationChannelsCompat(
|
||||||
listOf(
|
listOf(
|
||||||
buildNotificationChannel(CHANNEL_COMMON, IMPORTANCE_LOW) {
|
buildNotificationChannel(CHANNEL_COMMON, IMPORTANCE_LOW) {
|
||||||
setName(context.localize(MR.strings.channel_common))
|
setName(context.stringResource(MR.strings.channel_common))
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_LIBRARY_PROGRESS, IMPORTANCE_LOW) {
|
buildNotificationChannel(CHANNEL_LIBRARY_PROGRESS, IMPORTANCE_LOW) {
|
||||||
setName(context.localize(MR.strings.channel_progress))
|
setName(context.stringResource(MR.strings.channel_progress))
|
||||||
setGroup(GROUP_LIBRARY)
|
setGroup(GROUP_LIBRARY)
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_LIBRARY_ERROR, IMPORTANCE_LOW) {
|
buildNotificationChannel(CHANNEL_LIBRARY_ERROR, IMPORTANCE_LOW) {
|
||||||
setName(context.localize(MR.strings.channel_errors))
|
setName(context.stringResource(MR.strings.channel_errors))
|
||||||
setGroup(GROUP_LIBRARY)
|
setGroup(GROUP_LIBRARY)
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_LIBRARY_SKIPPED, IMPORTANCE_LOW) {
|
buildNotificationChannel(CHANNEL_LIBRARY_SKIPPED, IMPORTANCE_LOW) {
|
||||||
setName(context.localize(MR.strings.channel_skipped))
|
setName(context.stringResource(MR.strings.channel_skipped))
|
||||||
setGroup(GROUP_LIBRARY)
|
setGroup(GROUP_LIBRARY)
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_NEW_CHAPTERS, IMPORTANCE_DEFAULT) {
|
buildNotificationChannel(CHANNEL_NEW_CHAPTERS, IMPORTANCE_DEFAULT) {
|
||||||
setName(context.localize(MR.strings.channel_new_chapters))
|
setName(context.stringResource(MR.strings.channel_new_chapters))
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_DOWNLOADER_PROGRESS, IMPORTANCE_LOW) {
|
buildNotificationChannel(CHANNEL_DOWNLOADER_PROGRESS, IMPORTANCE_LOW) {
|
||||||
setName(context.localize(MR.strings.channel_progress))
|
setName(context.stringResource(MR.strings.channel_progress))
|
||||||
setGroup(GROUP_DOWNLOADER)
|
setGroup(GROUP_DOWNLOADER)
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_DOWNLOADER_ERROR, IMPORTANCE_LOW) {
|
buildNotificationChannel(CHANNEL_DOWNLOADER_ERROR, IMPORTANCE_LOW) {
|
||||||
setName(context.localize(MR.strings.channel_errors))
|
setName(context.stringResource(MR.strings.channel_errors))
|
||||||
setGroup(GROUP_DOWNLOADER)
|
setGroup(GROUP_DOWNLOADER)
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_BACKUP_RESTORE_PROGRESS, IMPORTANCE_LOW) {
|
buildNotificationChannel(CHANNEL_BACKUP_RESTORE_PROGRESS, IMPORTANCE_LOW) {
|
||||||
setName(context.localize(MR.strings.channel_progress))
|
setName(context.stringResource(MR.strings.channel_progress))
|
||||||
setGroup(GROUP_BACKUP_RESTORE)
|
setGroup(GROUP_BACKUP_RESTORE)
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_BACKUP_RESTORE_COMPLETE, IMPORTANCE_HIGH) {
|
buildNotificationChannel(CHANNEL_BACKUP_RESTORE_COMPLETE, IMPORTANCE_HIGH) {
|
||||||
setName(context.localize(MR.strings.channel_complete))
|
setName(context.stringResource(MR.strings.channel_complete))
|
||||||
setGroup(GROUP_BACKUP_RESTORE)
|
setGroup(GROUP_BACKUP_RESTORE)
|
||||||
setShowBadge(false)
|
setShowBadge(false)
|
||||||
setSound(null, null)
|
setSound(null, null)
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_INCOGNITO_MODE, IMPORTANCE_LOW) {
|
buildNotificationChannel(CHANNEL_INCOGNITO_MODE, IMPORTANCE_LOW) {
|
||||||
setName(context.localize(MR.strings.pref_incognito_mode))
|
setName(context.stringResource(MR.strings.pref_incognito_mode))
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_APP_UPDATE, IMPORTANCE_DEFAULT) {
|
buildNotificationChannel(CHANNEL_APP_UPDATE, IMPORTANCE_DEFAULT) {
|
||||||
setGroup(GROUP_APK_UPDATES)
|
setGroup(GROUP_APK_UPDATES)
|
||||||
setName(context.localize(MR.strings.channel_app_updates))
|
setName(context.stringResource(MR.strings.channel_app_updates))
|
||||||
},
|
},
|
||||||
buildNotificationChannel(CHANNEL_EXTENSIONS_UPDATE, IMPORTANCE_DEFAULT) {
|
buildNotificationChannel(CHANNEL_EXTENSIONS_UPDATE, IMPORTANCE_DEFAULT) {
|
||||||
setGroup(GROUP_APK_UPDATES)
|
setGroup(GROUP_APK_UPDATES)
|
||||||
setName(context.localize(MR.strings.channel_ext_updates))
|
setName(context.stringResource(MR.strings.channel_ext_updates))
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.util.storage.cacheImageDir
|
|||||||
import eu.kanade.tachiyomi.util.storage.getUriCompat
|
import eu.kanade.tachiyomi.util.storage.getUriCompat
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import okio.IOException
|
import okio.IOException
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.system.ImageUtil
|
import tachiyomi.core.util.system.ImageUtil
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
@ -71,7 +71,7 @@ class ImageSaver(
|
|||||||
val imageLocation = (image.location as Location.Pictures).relativePath
|
val imageLocation = (image.location as Location.Pictures).relativePath
|
||||||
val relativePath = listOf(
|
val relativePath = listOf(
|
||||||
Environment.DIRECTORY_PICTURES,
|
Environment.DIRECTORY_PICTURES,
|
||||||
context.localize(MR.strings.app_name),
|
context.stringResource(MR.strings.app_name),
|
||||||
imageLocation,
|
imageLocation,
|
||||||
).joinToString(File.separator)
|
).joinToString(File.separator)
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ class ImageSaver(
|
|||||||
context.contentResolver.insert(
|
context.contentResolver.insert(
|
||||||
pictureDir,
|
pictureDir,
|
||||||
contentValues,
|
contentValues,
|
||||||
) ?: throw IOException(context.localize(MR.strings.error_saving_picture))
|
) ?: throw IOException(context.stringResource(MR.strings.error_saving_picture))
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -97,7 +97,7 @@ class ImageSaver(
|
|||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
logcat(LogPriority.ERROR, e)
|
logcat(LogPriority.ERROR, e)
|
||||||
throw IOException(context.localize(MR.strings.error_saving_picture))
|
throw IOException(context.stringResource(MR.strings.error_saving_picture))
|
||||||
}
|
}
|
||||||
|
|
||||||
DiskUtil.scanMedia(context, picture)
|
DiskUtil.scanMedia(context, picture)
|
||||||
@ -185,7 +185,7 @@ sealed interface Location {
|
|||||||
is Pictures -> {
|
is Pictures -> {
|
||||||
val file = File(
|
val file = File(
|
||||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
|
||||||
context.localize(MR.strings.app_name),
|
context.stringResource(MR.strings.app_name),
|
||||||
)
|
)
|
||||||
if (relativePath.isNotEmpty()) {
|
if (relativePath.isNotEmpty()) {
|
||||||
return File(
|
return File(
|
||||||
|
@ -21,7 +21,7 @@ import eu.kanade.tachiyomi.util.system.workManager
|
|||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import okhttp3.internal.http2.ErrorCode
|
import okhttp3.internal.http2.ErrorCode
|
||||||
import okhttp3.internal.http2.StreamResetException
|
import okhttp3.internal.http2.StreamResetException
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.lang.withIOContext
|
import tachiyomi.core.util.lang.withIOContext
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
@ -37,7 +37,7 @@ class AppUpdateDownloadJob(private val context: Context, workerParams: WorkerPar
|
|||||||
|
|
||||||
override suspend fun doWork(): Result {
|
override suspend fun doWork(): Result {
|
||||||
val url = inputData.getString(EXTRA_DOWNLOAD_URL)
|
val url = inputData.getString(EXTRA_DOWNLOAD_URL)
|
||||||
val title = inputData.getString(EXTRA_DOWNLOAD_TITLE) ?: context.localize(MR.strings.app_name)
|
val title = inputData.getString(EXTRA_DOWNLOAD_TITLE) ?: context.stringResource(MR.strings.app_name)
|
||||||
|
|
||||||
if (url.isNullOrEmpty()) {
|
if (url.isNullOrEmpty()) {
|
||||||
return Result.failure()
|
return Result.failure()
|
||||||
|
@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
|||||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||||
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
||||||
import eu.kanade.tachiyomi.util.system.notify
|
import eu.kanade.tachiyomi.util.system.notify
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.domain.release.model.Release
|
import tachiyomi.domain.release.model.Release
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
with(notificationBuilder) {
|
with(notificationBuilder) {
|
||||||
setContentTitle(context.localize(MR.strings.update_check_notification_update_available))
|
setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available))
|
||||||
setContentText(release.version)
|
setContentText(release.version)
|
||||||
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
||||||
setContentIntent(updateIntent)
|
setContentIntent(updateIntent)
|
||||||
@ -61,12 +61,12 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
clearActions()
|
clearActions()
|
||||||
addAction(
|
addAction(
|
||||||
android.R.drawable.stat_sys_download_done,
|
android.R.drawable.stat_sys_download_done,
|
||||||
context.localize(MR.strings.action_download),
|
context.stringResource(MR.strings.action_download),
|
||||||
updateIntent,
|
updateIntent,
|
||||||
)
|
)
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_info_24dp,
|
R.drawable.ic_info_24dp,
|
||||||
context.localize(MR.strings.whats_new),
|
context.stringResource(MR.strings.whats_new),
|
||||||
releaseIntent,
|
releaseIntent,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -81,14 +81,14 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
fun onDownloadStarted(title: String? = null): NotificationCompat.Builder {
|
fun onDownloadStarted(title: String? = null): NotificationCompat.Builder {
|
||||||
with(notificationBuilder) {
|
with(notificationBuilder) {
|
||||||
title?.let { setContentTitle(title) }
|
title?.let { setContentTitle(title) }
|
||||||
setContentText(context.localize(MR.strings.update_check_notification_download_in_progress))
|
setContentText(context.stringResource(MR.strings.update_check_notification_download_in_progress))
|
||||||
setSmallIcon(android.R.drawable.stat_sys_download)
|
setSmallIcon(android.R.drawable.stat_sys_download)
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
|
|
||||||
clearActions()
|
clearActions()
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_close_24dp,
|
R.drawable.ic_close_24dp,
|
||||||
context.localize(MR.strings.action_cancel),
|
context.stringResource(MR.strings.action_cancel),
|
||||||
NotificationReceiver.cancelDownloadAppUpdatePendingBroadcast(context),
|
NotificationReceiver.cancelDownloadAppUpdatePendingBroadcast(context),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -117,7 +117,7 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
fun promptInstall(uri: Uri) {
|
fun promptInstall(uri: Uri) {
|
||||||
val installIntent = NotificationHandler.installApkPendingActivity(context, uri)
|
val installIntent = NotificationHandler.installApkPendingActivity(context, uri)
|
||||||
with(notificationBuilder) {
|
with(notificationBuilder) {
|
||||||
setContentText(context.localize(MR.strings.update_check_notification_download_complete))
|
setContentText(context.stringResource(MR.strings.update_check_notification_download_complete))
|
||||||
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
||||||
setOnlyAlertOnce(false)
|
setOnlyAlertOnce(false)
|
||||||
setProgress(0, 0, false)
|
setProgress(0, 0, false)
|
||||||
@ -127,12 +127,12 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
clearActions()
|
clearActions()
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_system_update_alt_white_24dp,
|
R.drawable.ic_system_update_alt_white_24dp,
|
||||||
context.localize(MR.strings.action_install),
|
context.stringResource(MR.strings.action_install),
|
||||||
installIntent,
|
installIntent,
|
||||||
)
|
)
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_close_24dp,
|
R.drawable.ic_close_24dp,
|
||||||
context.localize(MR.strings.action_cancel),
|
context.stringResource(MR.strings.action_cancel),
|
||||||
NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATE_PROMPT),
|
NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATE_PROMPT),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -147,8 +147,8 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
*/
|
*/
|
||||||
fun promptFdroidUpdate() {
|
fun promptFdroidUpdate() {
|
||||||
with(notificationBuilder) {
|
with(notificationBuilder) {
|
||||||
setContentTitle(context.localize(MR.strings.update_check_notification_update_available))
|
setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available))
|
||||||
setContentText(context.localize(MR.strings.update_check_fdroid_migration_info))
|
setContentText(context.stringResource(MR.strings.update_check_fdroid_migration_info))
|
||||||
setSmallIcon(R.drawable.ic_tachi)
|
setSmallIcon(R.drawable.ic_tachi)
|
||||||
setContentIntent(
|
setContentIntent(
|
||||||
NotificationHandler.openUrl(
|
NotificationHandler.openUrl(
|
||||||
@ -167,7 +167,7 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
*/
|
*/
|
||||||
fun onDownloadError(url: String) {
|
fun onDownloadError(url: String) {
|
||||||
with(notificationBuilder) {
|
with(notificationBuilder) {
|
||||||
setContentText(context.localize(MR.strings.update_check_notification_download_error))
|
setContentText(context.stringResource(MR.strings.update_check_notification_download_error))
|
||||||
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
setSmallIcon(R.drawable.ic_warning_white_24dp)
|
||||||
setOnlyAlertOnce(false)
|
setOnlyAlertOnce(false)
|
||||||
setProgress(0, 0, false)
|
setProgress(0, 0, false)
|
||||||
@ -175,12 +175,12 @@ internal class AppUpdateNotifier(private val context: Context) {
|
|||||||
clearActions()
|
clearActions()
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_refresh_24dp,
|
R.drawable.ic_refresh_24dp,
|
||||||
context.localize(MR.strings.action_retry),
|
context.stringResource(MR.strings.action_retry),
|
||||||
NotificationReceiver.downloadAppUpdatePendingBroadcast(context, url),
|
NotificationReceiver.downloadAppUpdatePendingBroadcast(context, url),
|
||||||
)
|
)
|
||||||
addAction(
|
addAction(
|
||||||
R.drawable.ic_close_24dp,
|
R.drawable.ic_close_24dp,
|
||||||
context.localize(MR.strings.action_cancel),
|
context.stringResource(MR.strings.action_cancel),
|
||||||
NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATER),
|
NotificationReceiver.dismissNotificationPendingBroadcast(context, Notifications.ID_APP_UPDATER),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
|||||||
import eu.kanade.tachiyomi.data.notification.Notifications
|
import eu.kanade.tachiyomi.data.notification.Notifications
|
||||||
import eu.kanade.tachiyomi.util.system.cancelNotification
|
import eu.kanade.tachiyomi.util.system.cancelNotification
|
||||||
import eu.kanade.tachiyomi.util.system.notify
|
import eu.kanade.tachiyomi.util.system.notify
|
||||||
import tachiyomi.core.i18n.localizePlural
|
import tachiyomi.core.i18n.pluralStringResource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
|
|
||||||
class ExtensionUpdateNotifier(private val context: Context) {
|
class ExtensionUpdateNotifier(private val context: Context) {
|
||||||
@ -18,7 +18,7 @@ class ExtensionUpdateNotifier(private val context: Context) {
|
|||||||
Notifications.CHANNEL_EXTENSIONS_UPDATE,
|
Notifications.CHANNEL_EXTENSIONS_UPDATE,
|
||||||
) {
|
) {
|
||||||
setContentTitle(
|
setContentTitle(
|
||||||
context.localizePlural(
|
context.pluralStringResource(
|
||||||
MR.plurals.update_check_notification_ext_updates,
|
MR.plurals.update_check_notification_ext_updates,
|
||||||
names.size,
|
names.size,
|
||||||
names.size,
|
names.size,
|
||||||
|
@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.extension.util.ExtensionInstaller.Companion.EXTRA_DOW
|
|||||||
import eu.kanade.tachiyomi.util.system.getSerializableExtraCompat
|
import eu.kanade.tachiyomi.util.system.getSerializableExtraCompat
|
||||||
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.system.logcat
|
import tachiyomi.core.util.system.logcat
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ class ExtensionInstallService : Service() {
|
|||||||
setAutoCancel(false)
|
setAutoCancel(false)
|
||||||
setOngoing(true)
|
setOngoing(true)
|
||||||
setShowWhen(false)
|
setShowWhen(false)
|
||||||
setContentTitle(localize(MR.strings.ext_install_service_notif))
|
setContentTitle(stringResource(MR.strings.ext_install_service_notif))
|
||||||
setProgress(100, 100, true)
|
setProgress(100, 100, true)
|
||||||
}.build()
|
}.build()
|
||||||
startForeground(Notifications.ID_EXTENSION_INSTALLER, notification)
|
startForeground(Notifications.ID_EXTENSION_INSTALLER, notification)
|
||||||
|
@ -11,7 +11,7 @@ import cafe.adriel.voyager.navigator.currentOrThrow
|
|||||||
import eu.kanade.presentation.browse.ExtensionFilterScreen
|
import eu.kanade.presentation.browse.ExtensionFilterScreen
|
||||||
import eu.kanade.presentation.util.Screen
|
import eu.kanade.presentation.util.Screen
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ class ExtensionFilterScreen : Screen() {
|
|||||||
screenModel.events.collectLatest {
|
screenModel.events.collectLatest {
|
||||||
when (it) {
|
when (it) {
|
||||||
ExtensionFilterEvent.FailedFetchingLanguages -> {
|
ExtensionFilterEvent.FailedFetchingLanguages -> {
|
||||||
context.localize(MR.strings.internal_error)
|
context.stringResource(MR.strings.internal_error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import eu.kanade.tachiyomi.extension.model.Extension
|
|||||||
import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen
|
import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun extensionsTab(
|
fun extensionsTab(
|
||||||
@ -29,7 +29,7 @@ fun extensionsTab(
|
|||||||
searchEnabled = true,
|
searchEnabled = true,
|
||||||
actions = persistentListOf(
|
actions = persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_filter),
|
title = stringResource(MR.strings.action_filter),
|
||||||
icon = Icons.Outlined.Translate,
|
icon = Icons.Outlined.Translate,
|
||||||
onClick = { navigator.push(ExtensionFilterScreen()) },
|
onClick = { navigator.push(ExtensionFilterScreen()) },
|
||||||
),
|
),
|
||||||
|
@ -16,7 +16,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaScreen
|
|||||||
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||||
|
|
||||||
class DeepLinkScreen(
|
class DeepLinkScreen(
|
||||||
@ -35,7 +35,7 @@ class DeepLinkScreen(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { scrollBehavior ->
|
topBar = { scrollBehavior ->
|
||||||
AppBar(
|
AppBar(
|
||||||
title = localize(MR.strings.action_search_hint),
|
title = stringResource(MR.strings.action_search_hint),
|
||||||
navigateUp = navigator::pop,
|
navigateUp = navigator::pop,
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
)
|
)
|
||||||
|
@ -58,7 +58,7 @@ import tachiyomi.i18n.MR
|
|||||||
import tachiyomi.presentation.core.components.Pill
|
import tachiyomi.presentation.core.components.Pill
|
||||||
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
|
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ object DownloadQueueScreen : Screen() {
|
|||||||
titleContent = {
|
titleContent = {
|
||||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.label_download_queue),
|
text = stringResource(MR.strings.label_download_queue),
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
modifier = Modifier.weight(1f, false),
|
modifier = Modifier.weight(1f, false),
|
||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
@ -131,10 +131,10 @@ object DownloadQueueScreen : Screen() {
|
|||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
) {
|
) {
|
||||||
NestedMenuItem(
|
NestedMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_order_by_upload_date)) },
|
text = { Text(text = stringResource(MR.strings.action_order_by_upload_date)) },
|
||||||
children = { closeMenu ->
|
children = { closeMenu ->
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_newest)) },
|
text = { Text(text = stringResource(MR.strings.action_newest)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
screenModel.reorderQueue(
|
screenModel.reorderQueue(
|
||||||
{ it.download.chapter.dateUpload },
|
{ it.download.chapter.dateUpload },
|
||||||
@ -144,7 +144,7 @@ object DownloadQueueScreen : Screen() {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_oldest)) },
|
text = { Text(text = stringResource(MR.strings.action_oldest)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
screenModel.reorderQueue(
|
screenModel.reorderQueue(
|
||||||
{ it.download.chapter.dateUpload },
|
{ it.download.chapter.dateUpload },
|
||||||
@ -156,10 +156,10 @@ object DownloadQueueScreen : Screen() {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
NestedMenuItem(
|
NestedMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_order_by_chapter_number)) },
|
text = { Text(text = stringResource(MR.strings.action_order_by_chapter_number)) },
|
||||||
children = { closeMenu ->
|
children = { closeMenu ->
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_asc)) },
|
text = { Text(text = stringResource(MR.strings.action_asc)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
screenModel.reorderQueue(
|
screenModel.reorderQueue(
|
||||||
{ it.download.chapter.chapterNumber },
|
{ it.download.chapter.chapterNumber },
|
||||||
@ -169,7 +169,7 @@ object DownloadQueueScreen : Screen() {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = localize(MR.strings.action_desc)) },
|
text = { Text(text = stringResource(MR.strings.action_desc)) },
|
||||||
onClick = {
|
onClick = {
|
||||||
screenModel.reorderQueue(
|
screenModel.reorderQueue(
|
||||||
{ it.download.chapter.chapterNumber },
|
{ it.download.chapter.chapterNumber },
|
||||||
@ -185,12 +185,12 @@ object DownloadQueueScreen : Screen() {
|
|||||||
AppBarActions(
|
AppBarActions(
|
||||||
persistentListOf(
|
persistentListOf(
|
||||||
AppBar.Action(
|
AppBar.Action(
|
||||||
title = localize(MR.strings.action_sort),
|
title = stringResource(MR.strings.action_sort),
|
||||||
icon = Icons.AutoMirrored.Outlined.Sort,
|
icon = Icons.AutoMirrored.Outlined.Sort,
|
||||||
onClick = { sortExpanded = true },
|
onClick = { sortExpanded = true },
|
||||||
),
|
),
|
||||||
AppBar.OverflowAction(
|
AppBar.OverflowAction(
|
||||||
title = localize(MR.strings.action_cancel_all),
|
title = stringResource(MR.strings.action_cancel_all),
|
||||||
onClick = { screenModel.clearQueue() },
|
onClick = { screenModel.clearQueue() },
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -214,7 +214,7 @@ object DownloadQueueScreen : Screen() {
|
|||||||
} else {
|
} else {
|
||||||
MR.strings.action_resume
|
MR.strings.action_resume
|
||||||
}
|
}
|
||||||
Text(text = localize(id))
|
Text(text = stringResource(id))
|
||||||
},
|
},
|
||||||
icon = {
|
icon = {
|
||||||
val icon = if (isRunning) {
|
val icon = if (isRunning) {
|
||||||
|
@ -59,7 +59,7 @@ import tachiyomi.i18n.MR
|
|||||||
import tachiyomi.presentation.core.components.material.NavigationBar
|
import tachiyomi.presentation.core.components.material.NavigationBar
|
||||||
import tachiyomi.presentation.core.components.material.NavigationRail
|
import tachiyomi.presentation.core.components.material.NavigationRail
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localizePlural
|
import tachiyomi.presentation.core.i18n.pluralStringResource
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
@ -262,7 +262,7 @@ object HomeScreen : Screen() {
|
|||||||
}
|
}
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
Badge {
|
Badge {
|
||||||
val desc = localizePlural(
|
val desc = pluralStringResource(
|
||||||
MR.plurals.notification_chapters_generic,
|
MR.plurals.notification_chapters_generic,
|
||||||
count = count,
|
count = count,
|
||||||
count,
|
count,
|
||||||
@ -281,7 +281,7 @@ object HomeScreen : Screen() {
|
|||||||
}
|
}
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
Badge {
|
Badge {
|
||||||
val desc = localizePlural(
|
val desc = pluralStringResource(
|
||||||
MR.plurals.update_check_notification_ext_updates,
|
MR.plurals.update_check_notification_ext_updates,
|
||||||
count = count,
|
count = count,
|
||||||
count,
|
count,
|
||||||
|
@ -55,7 +55,7 @@ import kotlinx.coroutines.channels.Channel
|
|||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.flow.receiveAsFlow
|
import kotlinx.coroutines.flow.receiveAsFlow
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.lang.launchIO
|
import tachiyomi.core.util.lang.launchIO
|
||||||
import tachiyomi.domain.UnsortedPreferences
|
import tachiyomi.domain.UnsortedPreferences
|
||||||
import tachiyomi.domain.category.model.Category
|
import tachiyomi.domain.category.model.Category
|
||||||
@ -64,7 +64,7 @@ import tachiyomi.domain.library.model.LibraryManga
|
|||||||
import tachiyomi.domain.manga.model.Manga
|
import tachiyomi.domain.manga.model.Manga
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreen
|
import tachiyomi.presentation.core.screens.EmptyScreen
|
||||||
import tachiyomi.presentation.core.screens.EmptyScreenAction
|
import tachiyomi.presentation.core.screens.EmptyScreenAction
|
||||||
import tachiyomi.presentation.core.screens.LoadingScreen
|
import tachiyomi.presentation.core.screens.LoadingScreen
|
||||||
@ -81,7 +81,7 @@ object LibraryTab : Tab {
|
|||||||
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_library_enter)
|
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_library_enter)
|
||||||
return TabOptions(
|
return TabOptions(
|
||||||
index = 0u,
|
index = 0u,
|
||||||
title = localize(MR.strings.label_library),
|
title = stringResource(MR.strings.label_library),
|
||||||
icon = rememberAnimatedVectorPainter(image, isSelected),
|
icon = rememberAnimatedVectorPainter(image, isSelected),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -123,7 +123,7 @@ object LibraryTab : Tab {
|
|||||||
category != null -> MR.strings.updating_category
|
category != null -> MR.strings.updating_category
|
||||||
else -> MR.strings.updating_library
|
else -> MR.strings.updating_library
|
||||||
}
|
}
|
||||||
snackbarHostState.showSnackbar(context.localize(msgRes))
|
snackbarHostState.showSnackbar(context.stringResource(msgRes))
|
||||||
}
|
}
|
||||||
started
|
started
|
||||||
}
|
}
|
||||||
@ -131,8 +131,8 @@ object LibraryTab : Tab {
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = { scrollBehavior ->
|
topBar = { scrollBehavior ->
|
||||||
val title = state.getToolbarTitle(
|
val title = state.getToolbarTitle(
|
||||||
defaultTitle = localize(MR.strings.label_library),
|
defaultTitle = stringResource(MR.strings.label_library),
|
||||||
defaultCategoryTitle = localize(MR.strings.label_default),
|
defaultCategoryTitle = stringResource(MR.strings.label_default),
|
||||||
page = screenModel.activeCategoryIndex,
|
page = screenModel.activeCategoryIndex,
|
||||||
)
|
)
|
||||||
val tabVisible = state.showCategoryTabs && state.categories.size > 1
|
val tabVisible = state.showCategoryTabs && state.categories.size > 1
|
||||||
@ -155,7 +155,7 @@ object LibraryTab : Tab {
|
|||||||
navigator.push(MangaScreen(randomItem.libraryManga.manga.id))
|
navigator.push(MangaScreen(randomItem.libraryManga.manga.id))
|
||||||
} else {
|
} else {
|
||||||
snackbarHostState.showSnackbar(
|
snackbarHostState.showSnackbar(
|
||||||
context.localize(MR.strings.information_no_entries_found),
|
context.stringResource(MR.strings.information_no_entries_found),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -235,7 +235,7 @@ object LibraryTab : Tab {
|
|||||||
ReaderActivity.newIntent(context, chapter.mangaId, chapter.id),
|
ReaderActivity.newIntent(context, chapter.mangaId, chapter.id),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
snackbarHostState.showSnackbar(context.localize(MR.strings.no_next_chapter))
|
snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Unit
|
Unit
|
||||||
|
@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.util.system.toShareIntent
|
|||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.lang.launchIO
|
import tachiyomi.core.util.lang.launchIO
|
||||||
import tachiyomi.core.util.lang.withIOContext
|
import tachiyomi.core.util.lang.withIOContext
|
||||||
import tachiyomi.core.util.lang.withUIContext
|
import tachiyomi.core.util.lang.withUIContext
|
||||||
@ -52,13 +52,13 @@ class MangaCoverScreenModel(
|
|||||||
try {
|
try {
|
||||||
saveCoverInternal(context, temp = false)
|
saveCoverInternal(context, temp = false)
|
||||||
snackbarHostState.showSnackbar(
|
snackbarHostState.showSnackbar(
|
||||||
context.localize(MR.strings.cover_saved),
|
context.stringResource(MR.strings.cover_saved),
|
||||||
withDismissAction = true,
|
withDismissAction = true,
|
||||||
)
|
)
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
logcat(LogPriority.ERROR, e)
|
logcat(LogPriority.ERROR, e)
|
||||||
snackbarHostState.showSnackbar(
|
snackbarHostState.showSnackbar(
|
||||||
context.localize(MR.strings.error_saving_cover),
|
context.stringResource(MR.strings.error_saving_cover),
|
||||||
withDismissAction = true,
|
withDismissAction = true,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -75,7 +75,7 @@ class MangaCoverScreenModel(
|
|||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
logcat(LogPriority.ERROR, e)
|
logcat(LogPriority.ERROR, e)
|
||||||
snackbarHostState.showSnackbar(
|
snackbarHostState.showSnackbar(
|
||||||
context.localize(MR.strings.error_sharing_cover),
|
context.stringResource(MR.strings.error_sharing_cover),
|
||||||
withDismissAction = true,
|
withDismissAction = true,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -146,7 +146,7 @@ class MangaCoverScreenModel(
|
|||||||
private fun notifyCoverUpdated(context: Context) {
|
private fun notifyCoverUpdated(context: Context) {
|
||||||
screenModelScope.launch {
|
screenModelScope.launch {
|
||||||
snackbarHostState.showSnackbar(
|
snackbarHostState.showSnackbar(
|
||||||
context.localize(MR.strings.cover_updated),
|
context.stringResource(MR.strings.cover_updated),
|
||||||
withDismissAction = true,
|
withDismissAction = true,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -155,7 +155,7 @@ class MangaCoverScreenModel(
|
|||||||
private fun notifyFailedCoverUpdate(context: Context, e: Throwable) {
|
private fun notifyFailedCoverUpdate(context: Context, e: Throwable) {
|
||||||
screenModelScope.launch {
|
screenModelScope.launch {
|
||||||
snackbarHostState.showSnackbar(
|
snackbarHostState.showSnackbar(
|
||||||
context.localize(MR.strings.notification_cover_update_failed),
|
context.stringResource(MR.strings.notification_cover_update_failed),
|
||||||
withDismissAction = true,
|
withDismissAction = true,
|
||||||
)
|
)
|
||||||
logcat(LogPriority.ERROR, e)
|
logcat(LogPriority.ERROR, e)
|
||||||
|
@ -65,7 +65,7 @@ import kotlinx.coroutines.flow.map
|
|||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import tachiyomi.core.util.lang.launchNonCancellable
|
import tachiyomi.core.util.lang.launchNonCancellable
|
||||||
import tachiyomi.core.util.lang.withIOContext
|
import tachiyomi.core.util.lang.withIOContext
|
||||||
import tachiyomi.core.util.lang.withUIContext
|
import tachiyomi.core.util.lang.withUIContext
|
||||||
@ -79,7 +79,7 @@ import tachiyomi.i18n.MR
|
|||||||
import tachiyomi.presentation.core.components.LabeledCheckbox
|
import tachiyomi.presentation.core.components.LabeledCheckbox
|
||||||
import tachiyomi.presentation.core.components.material.AlertDialogContent
|
import tachiyomi.presentation.core.components.material.AlertDialogContent
|
||||||
import tachiyomi.presentation.core.components.material.padding
|
import tachiyomi.presentation.core.components.material.padding
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
@ -229,7 +229,7 @@ data class TrackInfoDialogHomeScreen(
|
|||||||
}
|
}
|
||||||
withUIContext {
|
withUIContext {
|
||||||
context.toast(
|
context.toast(
|
||||||
context.localize(
|
context.stringResource(
|
||||||
MR.strings.track_error,
|
MR.strings.track_error,
|
||||||
track!!.name,
|
track!!.name,
|
||||||
e.message ?: "",
|
e.message ?: "",
|
||||||
@ -502,9 +502,9 @@ private data class TrackDateSelectorScreen(
|
|||||||
}
|
}
|
||||||
TrackDateSelector(
|
TrackDateSelector(
|
||||||
title = if (start) {
|
title = if (start) {
|
||||||
localize(MR.strings.track_started_reading_date)
|
stringResource(MR.strings.track_started_reading_date)
|
||||||
} else {
|
} else {
|
||||||
localize(MR.strings.track_finished_reading_date)
|
stringResource(MR.strings.track_finished_reading_date)
|
||||||
},
|
},
|
||||||
initialSelectedDateMillis = screenModel.initialSelection,
|
initialSelectedDateMillis = screenModel.initialSelection,
|
||||||
selectableDates = selectableDates,
|
selectableDates = selectableDates,
|
||||||
@ -577,7 +577,7 @@ private data class TrackDateRemoverScreen(
|
|||||||
},
|
},
|
||||||
title = {
|
title = {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.track_remove_date_conf_title),
|
text = stringResource(MR.strings.track_remove_date_conf_title),
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
@ -585,9 +585,9 @@ private data class TrackDateRemoverScreen(
|
|||||||
val serviceName = screenModel.getServiceName()
|
val serviceName = screenModel.getServiceName()
|
||||||
Text(
|
Text(
|
||||||
text = if (start) {
|
text = if (start) {
|
||||||
localize(MR.strings.track_remove_start_date_conf_text, serviceName)
|
stringResource(MR.strings.track_remove_start_date_conf_text, serviceName)
|
||||||
} else {
|
} else {
|
||||||
localize(MR.strings.track_remove_finish_date_conf_text, serviceName)
|
stringResource(MR.strings.track_remove_finish_date_conf_text, serviceName)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
@ -597,7 +597,7 @@ private data class TrackDateRemoverScreen(
|
|||||||
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small, Alignment.End),
|
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small, Alignment.End),
|
||||||
) {
|
) {
|
||||||
TextButton(onClick = navigator::pop) {
|
TextButton(onClick = navigator::pop) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
FilledTonalButton(
|
FilledTonalButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
@ -609,7 +609,7 @@ private data class TrackDateRemoverScreen(
|
|||||||
contentColor = MaterialTheme.colorScheme.onErrorContainer,
|
contentColor = MaterialTheme.colorScheme.onErrorContainer,
|
||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_remove))
|
Text(text = stringResource(MR.strings.action_remove))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -753,7 +753,7 @@ private data class TrackerRemoveScreen(
|
|||||||
},
|
},
|
||||||
title = {
|
title = {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.track_delete_title, serviceName),
|
text = stringResource(MR.strings.track_delete_title, serviceName),
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
@ -762,12 +762,12 @@ private data class TrackerRemoveScreen(
|
|||||||
verticalArrangement = Arrangement.spacedBy(8.dp),
|
verticalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = localize(MR.strings.track_delete_text, serviceName),
|
text = stringResource(MR.strings.track_delete_text, serviceName),
|
||||||
)
|
)
|
||||||
|
|
||||||
if (screenModel.isDeletable()) {
|
if (screenModel.isDeletable()) {
|
||||||
LabeledCheckbox(
|
LabeledCheckbox(
|
||||||
label = localize(MR.strings.track_delete_remote_text, serviceName),
|
label = stringResource(MR.strings.track_delete_remote_text, serviceName),
|
||||||
checked = removeRemoteTrack,
|
checked = removeRemoteTrack,
|
||||||
onCheckedChange = { removeRemoteTrack = it },
|
onCheckedChange = { removeRemoteTrack = it },
|
||||||
)
|
)
|
||||||
@ -783,7 +783,7 @@ private data class TrackerRemoveScreen(
|
|||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
TextButton(onClick = navigator::pop) {
|
TextButton(onClick = navigator::pop) {
|
||||||
Text(text = localize(MR.strings.action_cancel))
|
Text(text = stringResource(MR.strings.action_cancel))
|
||||||
}
|
}
|
||||||
FilledTonalButton(
|
FilledTonalButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
@ -796,7 +796,7 @@ private data class TrackerRemoveScreen(
|
|||||||
contentColor = MaterialTheme.colorScheme.onErrorContainer,
|
contentColor = MaterialTheme.colorScheme.onErrorContainer,
|
||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
Text(text = localize(MR.strings.action_ok))
|
Text(text = stringResource(MR.strings.action_ok))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -38,7 +38,7 @@ import kotlinx.coroutines.flow.collectLatest
|
|||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import tachiyomi.core.util.lang.launchIO
|
import tachiyomi.core.util.lang.launchIO
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.i18n.localize
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ object MoreTab : Tab {
|
|||||||
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_more_enter)
|
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_more_enter)
|
||||||
return TabOptions(
|
return TabOptions(
|
||||||
index = 4u,
|
index = 4u,
|
||||||
title = localize(MR.strings.label_more),
|
title = stringResource(MR.strings.label_more),
|
||||||
icon = rememberAnimatedVectorPainter(image, isSelected),
|
icon = rememberAnimatedVectorPainter(image, isSelected),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ import androidx.core.graphics.withTranslation
|
|||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation
|
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation
|
||||||
import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation
|
import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation
|
||||||
import tachiyomi.core.i18n.localize
|
import tachiyomi.core.i18n.stringResource
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet) : View(context, attributeSet) {
|
class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet) : View(context, attributeSet) {
|
||||||
@ -80,8 +80,8 @@ class ReaderNavigationOverlayView(context: Context, attributeSet: AttributeSet)
|
|||||||
// Calculate center of rect height on screen
|
// Calculate center of rect height on screen
|
||||||
val y = height * (abs(rect.top - rect.bottom) / 2)
|
val y = height * (abs(rect.top - rect.bottom) / 2)
|
||||||
|
|
||||||
drawText(context.localize(region.type.nameRes), x, y, textBorderPaint)
|
drawText(context.stringResource(region.type.nameRes), x, y, textBorderPaint)
|
||||||
drawText(context.localize(region.type.nameRes), x, y, textPaint)
|
drawText(context.stringResource(region.type.nameRes), x, y, textPaint)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user