Replace remaining Android-specific strings

Also renaming the helper composables so it's a bit easier to find/replace everything
in forks.
This commit is contained in:
arkon
2023-11-18 19:41:33 -05:00
parent 46e734fc8e
commit 0d1bced122
165 changed files with 1179 additions and 1167 deletions
+3 -3
View File
@@ -55,7 +55,7 @@ import org.acra.config.httpSender
import org.acra.ktx.initAcra
import org.acra.sender.HttpSender
import org.conscrypt.Conscrypt
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.system.logcat
import tachiyomi.i18n.MR
import tachiyomi.presentation.widget.WidgetManager
@@ -106,8 +106,8 @@ class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
Notifications.ID_INCOGNITO_MODE,
Notifications.CHANNEL_INCOGNITO_MODE,
) {
setContentTitle(localize(MR.strings.pref_incognito_mode))
setContentText(localize(MR.strings.notification_incognito_text))
setContentTitle(stringResource(MR.strings.pref_incognito_mode))
setContentText(stringResource(MR.strings.notification_incognito_text))
setSmallIcon(R.drawable.ic_glasses_24dp)
setOngoing(true)
@@ -37,7 +37,7 @@ import logcat.LogPriority
import okio.buffer
import okio.gzip
import okio.sink
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.preference.Preference
import tachiyomi.core.preference.PreferenceStore
import tachiyomi.core.util.system.logcat
@@ -76,7 +76,7 @@ class BackupCreator(
*/
suspend fun createBackup(uri: Uri, flags: Int, isAutoBackup: Boolean): String {
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()
@@ -111,7 +111,7 @@ class BackupCreator(
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) {
throw IllegalStateException("Failed to get handle on a backup file")
@@ -119,7 +119,7 @@ class BackupCreator(
val byteArray = parser.encodeToByteArray(BackupSerializer, backup)
if (byteArray.isEmpty()) {
throw IllegalStateException(context.localize(MR.strings.empty_backup_error))
throw IllegalStateException(context.stringResource(MR.strings.empty_backup_error))
}
file.openOutputStream().also {
@@ -4,7 +4,7 @@ import android.content.Context
import android.net.Uri
import eu.kanade.tachiyomi.data.track.TrackerManager
import eu.kanade.tachiyomi.util.BackupUtil
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.domain.source.service.SourceManager
import tachiyomi.i18n.MR
import uy.kohesive.injekt.Injekt
@@ -29,7 +29,7 @@ class BackupFileValidator(
}
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 }
@@ -12,8 +12,8 @@ import eu.kanade.tachiyomi.util.storage.getUriCompat
import eu.kanade.tachiyomi.util.system.cancelNotification
import eu.kanade.tachiyomi.util.system.notificationBuilder
import eu.kanade.tachiyomi.util.system.notify
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.localizePlural
import tachiyomi.core.i18n.pluralStringResource
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
import uy.kohesive.injekt.injectLazy
import java.io.File
@@ -47,7 +47,7 @@ class BackupNotifier(private val context: Context) {
fun showBackupProgress(): NotificationCompat.Builder {
val builder = with(progressNotificationBuilder) {
setContentTitle(context.localize(MR.strings.creating_backup))
setContentTitle(context.stringResource(MR.strings.creating_backup))
setProgress(0, 0, true)
}
@@ -61,7 +61,7 @@ class BackupNotifier(private val context: Context) {
context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)
with(completeNotificationBuilder) {
setContentTitle(context.localize(MR.strings.creating_backup_error))
setContentTitle(context.stringResource(MR.strings.creating_backup_error))
setContentText(error)
show(Notifications.ID_BACKUP_COMPLETE)
@@ -72,13 +72,13 @@ class BackupNotifier(private val context: Context) {
context.cancelNotification(Notifications.ID_BACKUP_PROGRESS)
with(completeNotificationBuilder) {
setContentTitle(context.localize(MR.strings.backup_created))
setContentTitle(context.stringResource(MR.strings.backup_created))
setContentText(unifile.filePath ?: unifile.name)
clearActions()
addAction(
R.drawable.ic_share_24dp,
context.localize(MR.strings.action_share),
context.stringResource(MR.strings.action_share),
NotificationReceiver.shareBackupPendingBroadcast(
context,
unifile.uri,
@@ -92,7 +92,7 @@ class BackupNotifier(private val context: Context) {
fun showRestoreProgress(
content: String = "",
contentTitle: String = context.localize(
contentTitle: String = context.stringResource(
MR.strings.restoring_backup,
),
progress: Int = 0,
@@ -111,7 +111,7 @@ class BackupNotifier(private val context: Context) {
clearActions()
addAction(
R.drawable.ic_close_24dp,
context.localize(MR.strings.action_cancel),
context.stringResource(MR.strings.action_cancel),
NotificationReceiver.cancelRestorePendingBroadcast(context, Notifications.ID_RESTORE_PROGRESS),
)
}
@@ -125,7 +125,7 @@ class BackupNotifier(private val context: Context) {
context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)
with(completeNotificationBuilder) {
setContentTitle(context.localize(MR.strings.restoring_backup_error))
setContentTitle(context.stringResource(MR.strings.restoring_backup_error))
setContentText(error)
show(Notifications.ID_RESTORE_COMPLETE)
@@ -137,13 +137,13 @@ class BackupNotifier(private val context: Context) {
errorCount: Int,
path: String?,
file: String?,
contentTitle: String = context.localize(
contentTitle: String = context.stringResource(
MR.strings.restore_completed,
),
) {
context.cancelNotification(Notifications.ID_RESTORE_PROGRESS)
val timeString = context.localize(
val timeString = context.stringResource(
MR.strings.restore_duration,
TimeUnit.MILLISECONDS.toMinutes(time),
TimeUnit.MILLISECONDS.toSeconds(time) - TimeUnit.MINUTES.toSeconds(
@@ -154,7 +154,7 @@ class BackupNotifier(private val context: Context) {
with(completeNotificationBuilder) {
setContentTitle(contentTitle)
setContentText(
context.localizePlural(
context.pluralStringResource(
MR.plurals.restore_completed_message,
errorCount,
timeString,
@@ -171,7 +171,7 @@ class BackupNotifier(private val context: Context) {
setContentIntent(errorLogIntent)
addAction(
R.drawable.ic_folder_24dp,
context.localize(MR.strings.action_show_errors),
context.stringResource(MR.strings.action_show_errors),
errorLogIntent,
)
}
@@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.util.system.isRunning
import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.coroutines.CancellationException
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.system.logcat
import tachiyomi.i18n.MR
@@ -41,7 +41,7 @@ class BackupRestoreJob(private val context: Context, workerParams: WorkerParamet
Result.success()
} catch (e: Exception) {
if (e is CancellationException) {
notifier.showRestoreError(context.localize(MR.strings.restoring_backup_canceled))
notifier.showRestoreError(context.stringResource(MR.strings.restoring_backup_canceled))
Result.success()
} else {
logcat(LogPriority.ERROR, e)
@@ -22,7 +22,7 @@ import eu.kanade.tachiyomi.util.BackupUtil
import eu.kanade.tachiyomi.util.system.createFileInCacheDir
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.isActive
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.preference.AndroidPreferenceStore
import tachiyomi.core.preference.PreferenceStore
import tachiyomi.data.DatabaseHandler
@@ -94,7 +94,7 @@ class BackupRestorer(
errors.size,
logFile.parent,
logFile.name,
contentTitle = context.localize(MR.strings.library_sync_complete),
contentTitle = context.stringResource(MR.strings.library_sync_complete),
)
} else {
notifier.showRestoreComplete(time, errors.size, logFile.parent, logFile.name)
@@ -193,8 +193,8 @@ class BackupRestorer(
showRestoreProgress(
restoreProgress,
restoreAmount,
context.localize(MR.strings.categories),
context.localize(MR.strings.restoring_backup),
context.stringResource(MR.strings.categories),
context.stringResource(MR.strings.restoring_backup),
)
}
@@ -230,14 +230,14 @@ class BackupRestorer(
restoreProgress,
restoreAmount,
manga.title,
context.localize(MR.strings.syncing_library),
context.stringResource(MR.strings.syncing_library),
)
} else {
showRestoreProgress(
restoreProgress,
restoreAmount,
manga.title,
context.localize(MR.strings.restoring_backup),
context.stringResource(MR.strings.restoring_backup),
)
}
}
@@ -634,8 +634,8 @@ class BackupRestorer(
showRestoreProgress(
restoreProgress,
restoreAmount,
context.localize(MR.strings.app_settings),
context.localize(MR.strings.restoring_backup),
context.stringResource(MR.strings.app_settings),
context.stringResource(MR.strings.restoring_backup),
)
}
@@ -649,8 +649,8 @@ class BackupRestorer(
showRestoreProgress(
restoreProgress,
restoreAmount,
context.localize(MR.strings.source_settings),
context.localize(MR.strings.restoring_backup),
context.stringResource(MR.strings.source_settings),
context.stringResource(MR.strings.restoring_backup),
)
}
@@ -14,7 +14,7 @@ import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.runBlocking
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.launchIO
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.category.interactor.GetCategories
@@ -159,7 +159,7 @@ class DownloadManager(
.filter { "image" in it.type.orEmpty() }
if (files.isEmpty()) {
throw Exception(context.localize(MR.strings.page_list_empty_error))
throw Exception(context.stringResource(MR.strings.page_list_empty_error))
}
return files.sortedBy { it.name }
@@ -14,7 +14,7 @@ import eu.kanade.tachiyomi.util.lang.chop
import eu.kanade.tachiyomi.util.system.cancelNotification
import eu.kanade.tachiyomi.util.system.notificationBuilder
import eu.kanade.tachiyomi.util.system.notify
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
import uy.kohesive.injekt.injectLazy
import java.util.regex.Pattern
@@ -80,12 +80,12 @@ internal class DownloadNotifier(private val context: Context) {
// Pause action
addAction(
R.drawable.ic_pause_24dp,
context.localize(MR.strings.action_pause),
context.stringResource(MR.strings.action_pause),
NotificationReceiver.pauseDownloadsPendingBroadcast(context),
)
}
val downloadingProgressText = context.localize(
val downloadingProgressText = context.stringResource(
MR.strings.chapter_downloading_progress,
download.downloadedImages,
download.pages!!.size,
@@ -117,8 +117,8 @@ internal class DownloadNotifier(private val context: Context) {
*/
fun onPaused() {
with(progressNotificationBuilder) {
setContentTitle(context.localize(MR.strings.chapter_paused))
setContentText(context.localize(MR.strings.download_notifier_download_paused))
setContentTitle(context.stringResource(MR.strings.chapter_paused))
setContentText(context.stringResource(MR.strings.download_notifier_download_paused))
setSmallIcon(R.drawable.ic_pause_24dp)
setProgress(0, 0, false)
setOngoing(false)
@@ -128,13 +128,13 @@ internal class DownloadNotifier(private val context: Context) {
// Resume action
addAction(
R.drawable.ic_play_arrow_24dp,
context.localize(MR.strings.action_resume),
context.stringResource(MR.strings.action_resume),
NotificationReceiver.resumeDownloadsPendingBroadcast(context),
)
// Clear action
addAction(
R.drawable.ic_close_24dp,
context.localize(MR.strings.action_cancel_all),
context.stringResource(MR.strings.action_cancel_all),
NotificationReceiver.clearDownloadsPendingBroadcast(context),
)
@@ -164,7 +164,7 @@ internal class DownloadNotifier(private val context: Context) {
*/
fun onWarning(reason: String, timeout: Long? = null, contentIntent: PendingIntent? = null) {
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))
setSmallIcon(R.drawable.ic_warning_white_24dp)
setAutoCancel(true)
@@ -192,9 +192,9 @@ internal class DownloadNotifier(private val context: Context) {
// Create notification
with(errorNotificationBuilder) {
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)
clearActions()
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
@@ -9,7 +9,7 @@ import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.download.service.DownloadPreferences
@@ -59,7 +59,7 @@ class DownloadProvider(
.createDirectory(getMangaDirName(mangaTitle))
} catch (e: Throwable) {
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 logcat.LogPriority
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.system.logcat
import tachiyomi.domain.download.service.DownloadPreferences
@@ -113,7 +113,7 @@ class DownloadService : Service() {
}
private fun downloaderStop(string: StringResource) {
downloadManager.downloaderStop(localize(string))
downloadManager.downloaderStop(stringResource(string))
}
private fun listenNetworkChanges() {
@@ -145,7 +145,7 @@ class DownloadService : Service() {
private fun getPlaceholderNotification(): Notification {
return notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
setContentTitle(localize(MR.strings.download_notifier_downloader_title))
setContentTitle(stringResource(MR.strings.download_notifier_downloader_title))
}.build()
}
}
@@ -40,7 +40,7 @@ import kotlinx.coroutines.supervisorScope
import logcat.LogPriority
import nl.adaptivity.xmlutil.serialization.XML
import okhttp3.Response
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.metadata.comicinfo.COMIC_INFO_FILE
import tachiyomi.core.metadata.comicinfo.ComicInfo
import tachiyomi.core.util.lang.launchIO
@@ -303,7 +303,7 @@ class Downloader(
) {
withUIContext {
notifier.onWarning(
context.localize(MR.strings.download_queue_size_warning),
context.stringResource(MR.strings.download_queue_size_warning),
WARNING_NOTIF_TIMEOUT_MS,
NotificationHandler.openUrl(context, LibraryUpdateNotifier.HELP_WARNING_URL),
)
@@ -326,7 +326,7 @@ class Downloader(
if (availSpace != -1L && availSpace < MIN_DISK_SPACE) {
download.status = Download.State.ERROR
notifier.onError(
context.localize(MR.strings.download_insufficient_space),
context.stringResource(MR.strings.download_insufficient_space),
download.chapter.name,
download.manga.title,
)
@@ -343,7 +343,7 @@ class Downloader(
val pages = download.source.getPageList(download.chapter.toSChapter())
if (pages.isEmpty()) {
throw Exception(context.localize(MR.strings.page_list_empty_error))
throw Exception(context.stringResource(MR.strings.page_list_empty_error))
}
// Don't trust index from source
val reIndexedPages = pages.mapIndexed { index, page -> Page(index, page.url, page.imageUrl, page.uri) }
@@ -547,7 +547,7 @@ class Downloader(
try {
val filenamePrefix = String.format("%03d", page.number)
val imageFile = tmpDir.listFiles()?.firstOrNull { it.name.orEmpty().startsWith(filenamePrefix) }
?: error(context.localize(MR.strings.download_notifier_split_page_not_found, page.number))
?: error(context.stringResource(MR.strings.download_notifier_split_page_not_found, page.number))
// If the original page was previously split, then skip
if (imageFile.name.orEmpty().startsWith("${filenamePrefix}__")) return
@@ -38,7 +38,7 @@ import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.sync.withPermit
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.preference.getAndSet
import tachiyomi.core.util.lang.withIOContext
import tachiyomi.core.util.system.logcat
@@ -181,28 +181,30 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
.filter {
when {
it.manga.updateStrategy != UpdateStrategy.ALWAYS_UPDATE -> {
skippedUpdates.add(it.manga to context.localize(MR.strings.skipped_reason_not_always_update))
skippedUpdates.add(
it.manga to context.stringResource(MR.strings.skipped_reason_not_always_update),
)
false
}
MANGA_NON_COMPLETED in restrictions && it.manga.status.toInt() == SManga.COMPLETED -> {
skippedUpdates.add(it.manga to context.localize(MR.strings.skipped_reason_completed))
skippedUpdates.add(it.manga to context.stringResource(MR.strings.skipped_reason_completed))
false
}
MANGA_HAS_UNREAD in restrictions && it.unreadCount != 0L -> {
skippedUpdates.add(it.manga to context.localize(MR.strings.skipped_reason_not_caught_up))
skippedUpdates.add(it.manga to context.stringResource(MR.strings.skipped_reason_not_caught_up))
false
}
MANGA_NON_READ in restrictions && it.totalChapters > 0L && !it.hasStarted -> {
skippedUpdates.add(it.manga to context.localize(MR.strings.skipped_reason_not_started))
skippedUpdates.add(it.manga to context.stringResource(MR.strings.skipped_reason_not_started))
false
}
MANGA_OUTSIDE_RELEASE_PERIOD in restrictions && it.manga.nextUpdate > fetchWindow.second -> {
skippedUpdates.add(
it.manga to context.localize(MR.strings.skipped_reason_not_in_release_period),
it.manga to context.stringResource(MR.strings.skipped_reason_not_in_release_period),
)
false
}
@@ -287,9 +289,11 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
}
} catch (e: Throwable) {
val errorMessage = when (e) {
is NoChaptersException -> context.localize(MR.strings.no_chapters_error)
is NoChaptersException -> context.stringResource(
MR.strings.no_chapters_error,
)
// failedUpdates will already have the source, don't need to copy it into the message
is SourceNotInstalledException -> context.localize(
is SourceNotInstalledException -> context.stringResource(
MR.strings.loader_not_implemented_error,
)
else -> e.message
@@ -388,7 +392,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
if (errors.isNotEmpty()) {
val file = context.createFileInCacheDir("tachiyomi_update_errors.txt")
file.bufferedWriter().use { out ->
out.write(context.localize(MR.strings.library_errors_help, ERROR_LOG_HELP_URL) + "\n\n")
out.write(context.stringResource(MR.strings.library_errors_help, ERROR_LOG_HELP_URL) + "\n\n")
// Error file format:
// ! Error
// # Source
@@ -26,8 +26,8 @@ import eu.kanade.tachiyomi.util.system.getBitmapOrNull
import eu.kanade.tachiyomi.util.system.notificationBuilder
import eu.kanade.tachiyomi.util.system.notify
import tachiyomi.core.Constants
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.localizePlural
import tachiyomi.core.i18n.pluralStringResource
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.launchUI
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.manga.model.Manga
@@ -61,12 +61,12 @@ class LibraryUpdateNotifier(private val context: Context) {
*/
val progressNotificationBuilder by lazy {
context.notificationBuilder(Notifications.CHANNEL_LIBRARY_PROGRESS) {
setContentTitle(context.localize(MR.strings.app_name))
setContentTitle(context.stringResource(MR.strings.app_name))
setSmallIcon(R.drawable.ic_refresh_24dp)
setLargeIcon(notificationBitmap)
setOngoing(true)
setOnlyAlertOnce(true)
addAction(R.drawable.ic_close_24dp, context.localize(MR.strings.action_cancel), cancelIntent)
addAction(R.drawable.ic_close_24dp, context.stringResource(MR.strings.action_cancel), cancelIntent)
}
}
@@ -80,13 +80,13 @@ class LibraryUpdateNotifier(private val context: Context) {
fun showProgressNotification(manga: List<Manga>, current: Int, total: Int) {
if (preferences.hideNotificationContent().get()) {
progressNotificationBuilder
.setContentTitle(context.localize(MR.strings.notification_check_updates))
.setContentTitle(context.stringResource(MR.strings.notification_check_updates))
.setContentText("($current/$total)")
} else {
val updatingText = manga.joinToString("\n") { it.title.chop(40) }
progressNotificationBuilder
.setContentTitle(
context.localize(
context.stringResource(
MR.strings.notification_updating_progress,
percentFormatter.format(current.toFloat() / total),
),
@@ -107,8 +107,10 @@ class LibraryUpdateNotifier(private val context: Context) {
Notifications.ID_LIBRARY_SIZE_WARNING,
Notifications.CHANNEL_LIBRARY_PROGRESS,
) {
setContentTitle(context.localize(MR.strings.label_warning))
setStyle(NotificationCompat.BigTextStyle().bigText(context.localize(MR.strings.notification_size_warning)))
setContentTitle(context.stringResource(MR.strings.label_warning))
setStyle(
NotificationCompat.BigTextStyle().bigText(context.stringResource(MR.strings.notification_size_warning)),
)
setSmallIcon(R.drawable.ic_warning_white_24dp)
setTimeoutAfter(Downloader.WARNING_NOTIF_TIMEOUT_MS)
setContentIntent(NotificationHandler.openUrl(context, HELP_WARNING_URL))
@@ -130,8 +132,8 @@ class LibraryUpdateNotifier(private val context: Context) {
Notifications.ID_LIBRARY_ERROR,
Notifications.CHANNEL_LIBRARY_ERROR,
) {
setContentTitle(context.localize(MR.strings.notification_update_error, failed))
setContentText(context.localize(MR.strings.action_show_errors))
setContentTitle(context.stringResource(MR.strings.notification_update_error, failed))
setContentText(context.stringResource(MR.strings.action_show_errors))
setSmallIcon(R.drawable.ic_tachi)
setContentIntent(NotificationReceiver.openErrorLogPendingActivity(context, uri))
@@ -152,8 +154,8 @@ class LibraryUpdateNotifier(private val context: Context) {
Notifications.ID_LIBRARY_SKIPPED,
Notifications.CHANNEL_LIBRARY_SKIPPED,
) {
setContentTitle(context.localize(MR.strings.notification_update_skipped, skipped))
setContentText(context.localize(MR.strings.learn_more))
setContentTitle(context.stringResource(MR.strings.notification_update_skipped, skipped))
setContentText(context.stringResource(MR.strings.learn_more))
setSmallIcon(R.drawable.ic_tachi)
setContentIntent(NotificationHandler.openUrl(context, HELP_SKIPPED_URL))
}
@@ -170,12 +172,12 @@ class LibraryUpdateNotifier(private val context: Context) {
Notifications.ID_NEW_CHAPTERS,
Notifications.CHANNEL_NEW_CHAPTERS,
) {
setContentTitle(context.localize(MR.strings.notification_new_chapters))
setContentTitle(context.stringResource(MR.strings.notification_new_chapters))
if (updates.size == 1 && !preferences.hideNotificationContent().get()) {
setContentText(updates.first().first.title.chop(NOTIF_TITLE_MAX_LEN))
} else {
setContentText(
context.localizePlural(
context.pluralStringResource(
MR.plurals.notification_new_chapters_summary,
updates.size,
updates.size,
@@ -246,7 +248,7 @@ class LibraryUpdateNotifier(private val context: Context) {
// Mark chapters as read action
addAction(
R.drawable.ic_glasses_24dp,
context.localize(MR.strings.action_mark_as_read),
context.stringResource(MR.strings.action_mark_as_read),
NotificationReceiver.markAsReadPendingBroadcast(
context,
manga,
@@ -257,7 +259,7 @@ class LibraryUpdateNotifier(private val context: Context) {
// View chapters action
addAction(
R.drawable.ic_book_24dp,
context.localize(MR.strings.action_view_chapters),
context.stringResource(MR.strings.action_view_chapters),
NotificationReceiver.openChapterPendingActivity(
context,
manga,
@@ -269,7 +271,7 @@ class LibraryUpdateNotifier(private val context: Context) {
if (chapters.size <= Downloader.CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD) {
addAction(
android.R.drawable.stat_sys_download_done,
context.localize(MR.strings.action_download),
context.stringResource(MR.strings.action_download),
NotificationReceiver.downloadChaptersPendingBroadcast(
context,
manga,
@@ -309,7 +311,7 @@ class LibraryUpdateNotifier(private val context: Context) {
// No sensible chapter numbers to show (i.e. no chapters have parsed chapter number)
0 -> {
// "1 new chapter" or "5 new chapters"
context.localizePlural(
context.pluralStringResource(
MR.plurals.notification_chapters_generic,
chapters.size,
chapters.size,
@@ -320,13 +322,13 @@ class LibraryUpdateNotifier(private val context: Context) {
val remaining = chapters.size - displayableChapterNumbers.size
if (remaining == 0) {
// "Chapter 2.5"
context.localize(
context.stringResource(
MR.strings.notification_chapters_single,
displayableChapterNumbers.first(),
)
} else {
// "Chapter 2.5 and 10 more"
context.localize(
context.stringResource(
MR.strings.notification_chapters_single_and_more,
displayableChapterNumbers.first(),
remaining,
@@ -342,7 +344,7 @@ class LibraryUpdateNotifier(private val context: Context) {
val joinedChapterNumbers = displayableChapterNumbers
.take(NOTIF_MAX_CHAPTERS)
.joinToString(", ")
context.localizePlural(
context.pluralStringResource(
MR.plurals.notification_chapters_multiple_and_more,
remaining,
joinedChapterNumbers,
@@ -350,7 +352,7 @@ class LibraryUpdateNotifier(private val context: Context) {
)
} else {
// "Chapters 1, 2.5, 3"
context.localize(
context.stringResource(
MR.strings.notification_chapters_multiple,
displayableChapterNumbers.joinToString(", "),
)
@@ -7,7 +7,7 @@ import androidx.core.app.NotificationManagerCompat.IMPORTANCE_HIGH
import androidx.core.app.NotificationManagerCompat.IMPORTANCE_LOW
import eu.kanade.tachiyomi.util.system.buildNotificationChannel
import eu.kanade.tachiyomi.util.system.buildNotificationChannelGroup
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
/**
@@ -103,16 +103,16 @@ object Notifications {
notificationManager.createNotificationChannelGroupsCompat(
listOf(
buildNotificationChannelGroup(GROUP_BACKUP_RESTORE) {
setName(context.localize(MR.strings.label_backup))
setName(context.stringResource(MR.strings.label_backup))
},
buildNotificationChannelGroup(GROUP_DOWNLOADER) {
setName(context.localize(MR.strings.download_notifier_downloader_title))
setName(context.stringResource(MR.strings.download_notifier_downloader_title))
},
buildNotificationChannelGroup(GROUP_LIBRARY) {
setName(context.localize(MR.strings.label_library))
setName(context.stringResource(MR.strings.label_library))
},
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(
listOf(
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) {
setName(context.localize(MR.strings.channel_progress))
setName(context.stringResource(MR.strings.channel_progress))
setGroup(GROUP_LIBRARY)
setShowBadge(false)
},
buildNotificationChannel(CHANNEL_LIBRARY_ERROR, IMPORTANCE_LOW) {
setName(context.localize(MR.strings.channel_errors))
setName(context.stringResource(MR.strings.channel_errors))
setGroup(GROUP_LIBRARY)
setShowBadge(false)
},
buildNotificationChannel(CHANNEL_LIBRARY_SKIPPED, IMPORTANCE_LOW) {
setName(context.localize(MR.strings.channel_skipped))
setName(context.stringResource(MR.strings.channel_skipped))
setGroup(GROUP_LIBRARY)
setShowBadge(false)
},
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) {
setName(context.localize(MR.strings.channel_progress))
setName(context.stringResource(MR.strings.channel_progress))
setGroup(GROUP_DOWNLOADER)
setShowBadge(false)
},
buildNotificationChannel(CHANNEL_DOWNLOADER_ERROR, IMPORTANCE_LOW) {
setName(context.localize(MR.strings.channel_errors))
setName(context.stringResource(MR.strings.channel_errors))
setGroup(GROUP_DOWNLOADER)
setShowBadge(false)
},
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)
setShowBadge(false)
},
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)
setShowBadge(false)
setSound(null, null)
},
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) {
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) {
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 logcat.LogPriority
import okio.IOException
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.system.ImageUtil
import tachiyomi.core.util.system.logcat
import tachiyomi.i18n.MR
@@ -71,7 +71,7 @@ class ImageSaver(
val imageLocation = (image.location as Location.Pictures).relativePath
val relativePath = listOf(
Environment.DIRECTORY_PICTURES,
context.localize(MR.strings.app_name),
context.stringResource(MR.strings.app_name),
imageLocation,
).joinToString(File.separator)
@@ -86,7 +86,7 @@ class ImageSaver(
context.contentResolver.insert(
pictureDir,
contentValues,
) ?: throw IOException(context.localize(MR.strings.error_saving_picture))
) ?: throw IOException(context.stringResource(MR.strings.error_saving_picture))
}
try {
@@ -97,7 +97,7 @@ class ImageSaver(
}
} catch (e: Exception) {
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)
@@ -185,7 +185,7 @@ sealed interface Location {
is Pictures -> {
val file = File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
context.localize(MR.strings.app_name),
context.stringResource(MR.strings.app_name),
)
if (relativePath.isNotEmpty()) {
return File(
@@ -21,7 +21,7 @@ import eu.kanade.tachiyomi.util.system.workManager
import logcat.LogPriority
import okhttp3.internal.http2.ErrorCode
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.system.logcat
import tachiyomi.i18n.MR
@@ -37,7 +37,7 @@ class AppUpdateDownloadJob(private val context: Context, workerParams: WorkerPar
override suspend fun doWork(): Result {
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()) {
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.util.system.notificationBuilder
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.i18n.MR
@@ -53,7 +53,7 @@ internal class AppUpdateNotifier(private val context: Context) {
}
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)
setSmallIcon(android.R.drawable.stat_sys_download_done)
setContentIntent(updateIntent)
@@ -61,12 +61,12 @@ internal class AppUpdateNotifier(private val context: Context) {
clearActions()
addAction(
android.R.drawable.stat_sys_download_done,
context.localize(MR.strings.action_download),
context.stringResource(MR.strings.action_download),
updateIntent,
)
addAction(
R.drawable.ic_info_24dp,
context.localize(MR.strings.whats_new),
context.stringResource(MR.strings.whats_new),
releaseIntent,
)
}
@@ -81,14 +81,14 @@ internal class AppUpdateNotifier(private val context: Context) {
fun onDownloadStarted(title: String? = null): NotificationCompat.Builder {
with(notificationBuilder) {
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)
setOngoing(true)
clearActions()
addAction(
R.drawable.ic_close_24dp,
context.localize(MR.strings.action_cancel),
context.stringResource(MR.strings.action_cancel),
NotificationReceiver.cancelDownloadAppUpdatePendingBroadcast(context),
)
}
@@ -117,7 +117,7 @@ internal class AppUpdateNotifier(private val context: Context) {
fun promptInstall(uri: Uri) {
val installIntent = NotificationHandler.installApkPendingActivity(context, uri)
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)
setOnlyAlertOnce(false)
setProgress(0, 0, false)
@@ -127,12 +127,12 @@ internal class AppUpdateNotifier(private val context: Context) {
clearActions()
addAction(
R.drawable.ic_system_update_alt_white_24dp,
context.localize(MR.strings.action_install),
context.stringResource(MR.strings.action_install),
installIntent,
)
addAction(
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),
)
}
@@ -147,8 +147,8 @@ internal class AppUpdateNotifier(private val context: Context) {
*/
fun promptFdroidUpdate() {
with(notificationBuilder) {
setContentTitle(context.localize(MR.strings.update_check_notification_update_available))
setContentText(context.localize(MR.strings.update_check_fdroid_migration_info))
setContentTitle(context.stringResource(MR.strings.update_check_notification_update_available))
setContentText(context.stringResource(MR.strings.update_check_fdroid_migration_info))
setSmallIcon(R.drawable.ic_tachi)
setContentIntent(
NotificationHandler.openUrl(
@@ -167,7 +167,7 @@ internal class AppUpdateNotifier(private val context: Context) {
*/
fun onDownloadError(url: String) {
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)
setOnlyAlertOnce(false)
setProgress(0, 0, false)
@@ -175,12 +175,12 @@ internal class AppUpdateNotifier(private val context: Context) {
clearActions()
addAction(
R.drawable.ic_refresh_24dp,
context.localize(MR.strings.action_retry),
context.stringResource(MR.strings.action_retry),
NotificationReceiver.downloadAppUpdatePendingBroadcast(context, url),
)
addAction(
R.drawable.ic_close_24dp,
context.localize(MR.strings.action_cancel),
context.stringResource(MR.strings.action_cancel),
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.util.system.cancelNotification
import eu.kanade.tachiyomi.util.system.notify
import tachiyomi.core.i18n.localizePlural
import tachiyomi.core.i18n.pluralStringResource
import tachiyomi.i18n.MR
class ExtensionUpdateNotifier(private val context: Context) {
@@ -18,7 +18,7 @@ class ExtensionUpdateNotifier(private val context: Context) {
Notifications.CHANNEL_EXTENSIONS_UPDATE,
) {
setContentTitle(
context.localizePlural(
context.pluralStringResource(
MR.plurals.update_check_notification_ext_updates,
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.notificationBuilder
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.system.logcat
import tachiyomi.i18n.MR
@@ -29,7 +29,7 @@ class ExtensionInstallService : Service() {
setAutoCancel(false)
setOngoing(true)
setShowWhen(false)
setContentTitle(localize(MR.strings.ext_install_service_notif))
setContentTitle(stringResource(MR.strings.ext_install_service_notif))
setProgress(100, 100, true)
}.build()
startForeground(Notifications.ID_EXTENSION_INSTALLER, notification)
@@ -24,7 +24,7 @@ import eu.kanade.tachiyomi.ui.browse.source.sourcesTab
import eu.kanade.tachiyomi.ui.main.MainActivity
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
data class BrowseTab(
private val toExtensions: Boolean = false,
@@ -37,7 +37,7 @@ data class BrowseTab(
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_browse_enter)
return TabOptions(
index = 3u,
title = localize(MR.strings.browse),
title = stringResource(MR.strings.browse),
icon = rememberAnimatedVectorPainter(image, isSelected),
)
}
@@ -11,7 +11,7 @@ import cafe.adriel.voyager.navigator.currentOrThrow
import eu.kanade.presentation.browse.ExtensionFilterScreen
import eu.kanade.presentation.util.Screen
import kotlinx.coroutines.flow.collectLatest
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.screens.LoadingScreen
@@ -41,7 +41,7 @@ class ExtensionFilterScreen : Screen() {
screenModel.events.collectLatest {
when (it) {
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 kotlinx.collections.immutable.persistentListOf
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
@Composable
fun extensionsTab(
@@ -29,7 +29,7 @@ fun extensionsTab(
searchEnabled = true,
actions = persistentListOf(
AppBar.Action(
title = localize(MR.strings.action_filter),
title = stringResource(MR.strings.action_filter),
icon = Icons.Outlined.Translate,
onClick = { navigator.push(ExtensionFilterScreen()) },
),
@@ -49,7 +49,7 @@ import tachiyomi.domain.track.interactor.GetTracks
import tachiyomi.domain.track.interactor.InsertTrack
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.LabeledCheckbox
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.screens.LoadingScreen
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -79,7 +79,7 @@ internal fun MigrateDialog(
AlertDialog(
onDismissRequest = onDismissRequest,
title = {
Text(text = localize(MR.strings.migration_dialog_what_to_include))
Text(text = stringResource(MR.strings.migration_dialog_what_to_include))
},
text = {
Column(
@@ -87,7 +87,7 @@ internal fun MigrateDialog(
) {
flags.forEachIndexed { index, flag ->
LabeledCheckbox(
label = localize(flag.titleId),
label = stringResource(flag.titleId),
checked = selectedFlags[index],
onCheckedChange = { selectedFlags[index] = it },
)
@@ -104,7 +104,7 @@ internal fun MigrateDialog(
onClickTitle()
},
) {
Text(text = localize(MR.strings.action_show_manga))
Text(text = stringResource(MR.strings.action_show_manga))
}
Spacer(modifier = Modifier.weight(1f))
@@ -122,7 +122,7 @@ internal fun MigrateDialog(
}
},
) {
Text(text = localize(MR.strings.copy))
Text(text = stringResource(MR.strings.copy))
}
TextButton(
onClick = {
@@ -138,7 +138,7 @@ internal fun MigrateDialog(
}
},
) {
Text(text = localize(MR.strings.migrate))
Text(text = stringResource(MR.strings.migrate))
}
}
},
@@ -33,7 +33,7 @@ import tachiyomi.domain.manga.model.Manga
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.source.local.LocalSource
data class SourceSearchScreen(
@@ -66,7 +66,7 @@ data class SourceSearchScreen(
floatingActionButton = {
AnimatedVisibility(visible = state.filters.isNotEmpty()) {
ExtendedFloatingActionButton(
text = { Text(text = localize(MR.strings.action_filter)) },
text = { Text(text = stringResource(MR.strings.action_filter)) },
icon = { Icon(Icons.Outlined.FilterList, contentDescription = null) },
onClick = screenModel::openFilterSheet,
)
@@ -16,7 +16,7 @@ import eu.kanade.presentation.components.TabContent
import eu.kanade.tachiyomi.ui.browse.migration.manga.MigrateMangaScreen
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
@Composable
fun Screen.migrateSourceTab(): TabContent {
@@ -29,7 +29,7 @@ fun Screen.migrateSourceTab(): TabContent {
titleRes = MR.strings.label_migration,
actions = persistentListOf(
AppBar.Action(
title = localize(MR.strings.migration_help_guide),
title = stringResource(MR.strings.migration_help_guide),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
onClick = {
uriHandler.openUri("https://tachiyomi.org/docs/guides/source-migration")
@@ -21,7 +21,7 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
@Composable
fun Screen.sourcesTab(): TabContent {
@@ -33,12 +33,12 @@ fun Screen.sourcesTab(): TabContent {
titleRes = MR.strings.label_sources,
actions = persistentListOf(
AppBar.Action(
title = localize(MR.strings.action_global_search),
title = stringResource(MR.strings.action_global_search),
icon = Icons.Outlined.TravelExplore,
onClick = { navigator.push(GlobalSearchScreen()) },
),
AppBar.Action(
title = localize(MR.strings.action_filter),
title = stringResource(MR.strings.action_filter),
icon = Icons.Outlined.FilterList,
onClick = { navigator.push(SourcesFilterScreen()) },
),
@@ -70,7 +70,7 @@ fun Screen.sourcesTab(): TabContent {
)
}
val internalErrString = localize(MR.strings.internal_error)
val internalErrString = stringResource(MR.strings.internal_error)
LaunchedEffect(Unit) {
screenModel.events.collectLatest { event ->
when (event) {
@@ -59,7 +59,7 @@ import tachiyomi.domain.source.model.StubSource
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.components.material.padding
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.source.local.LocalSource
data class BrowseSourceScreen(
@@ -150,7 +150,7 @@ data class BrowseSourceScreen(
)
},
label = {
Text(text = localize(MR.strings.popular))
Text(text = stringResource(MR.strings.popular))
},
)
if ((screenModel.source as CatalogueSource).supportsLatest) {
@@ -169,7 +169,7 @@ data class BrowseSourceScreen(
)
},
label = {
Text(text = localize(MR.strings.latest))
Text(text = stringResource(MR.strings.latest))
},
)
}
@@ -186,7 +186,7 @@ data class BrowseSourceScreen(
)
},
label = {
Text(text = localize(MR.strings.action_filter))
Text(text = stringResource(MR.strings.action_filter))
},
)
}
@@ -28,7 +28,7 @@ import tachiyomi.presentation.core.components.SortItem
import tachiyomi.presentation.core.components.TextItem
import tachiyomi.presentation.core.components.TriStateItem
import tachiyomi.presentation.core.components.material.Button
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
@Composable
fun SourceFilterDialog(
@@ -52,7 +52,7 @@ fun SourceFilterDialog(
) {
TextButton(onClick = onReset) {
Text(
text = localize(MR.strings.action_reset),
text = stringResource(MR.strings.action_reset),
style = LocalTextStyle.current.copy(
color = MaterialTheme.colorScheme.primary,
),
@@ -65,7 +65,7 @@ fun SourceFilterDialog(
onFilter()
onDismissRequest()
}) {
Text(localize(MR.strings.action_filter))
Text(stringResource(MR.strings.action_filter))
}
}
HorizontalDivider()
@@ -16,7 +16,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaScreen
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import tachiyomi.i18n.MR
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
class DeepLinkScreen(
@@ -35,7 +35,7 @@ class DeepLinkScreen(
Scaffold(
topBar = { scrollBehavior ->
AppBar(
title = localize(MR.strings.action_search_hint),
title = stringResource(MR.strings.action_search_hint),
navigateUp = navigator::pop,
scrollBehavior = scrollBehavior,
)
@@ -58,7 +58,7 @@ import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.Pill
import tachiyomi.presentation.core.components.material.ExtendedFloatingActionButton
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 kotlin.math.roundToInt
@@ -104,7 +104,7 @@ object DownloadQueueScreen : Screen() {
titleContent = {
Row(verticalAlignment = Alignment.CenterVertically) {
Text(
text = localize(MR.strings.label_download_queue),
text = stringResource(MR.strings.label_download_queue),
maxLines = 1,
modifier = Modifier.weight(1f, false),
overflow = TextOverflow.Ellipsis,
@@ -131,10 +131,10 @@ object DownloadQueueScreen : Screen() {
onDismissRequest = onDismissRequest,
) {
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 ->
DropdownMenuItem(
text = { Text(text = localize(MR.strings.action_newest)) },
text = { Text(text = stringResource(MR.strings.action_newest)) },
onClick = {
screenModel.reorderQueue(
{ it.download.chapter.dateUpload },
@@ -144,7 +144,7 @@ object DownloadQueueScreen : Screen() {
},
)
DropdownMenuItem(
text = { Text(text = localize(MR.strings.action_oldest)) },
text = { Text(text = stringResource(MR.strings.action_oldest)) },
onClick = {
screenModel.reorderQueue(
{ it.download.chapter.dateUpload },
@@ -156,10 +156,10 @@ object DownloadQueueScreen : Screen() {
},
)
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 ->
DropdownMenuItem(
text = { Text(text = localize(MR.strings.action_asc)) },
text = { Text(text = stringResource(MR.strings.action_asc)) },
onClick = {
screenModel.reorderQueue(
{ it.download.chapter.chapterNumber },
@@ -169,7 +169,7 @@ object DownloadQueueScreen : Screen() {
},
)
DropdownMenuItem(
text = { Text(text = localize(MR.strings.action_desc)) },
text = { Text(text = stringResource(MR.strings.action_desc)) },
onClick = {
screenModel.reorderQueue(
{ it.download.chapter.chapterNumber },
@@ -185,12 +185,12 @@ object DownloadQueueScreen : Screen() {
AppBarActions(
persistentListOf(
AppBar.Action(
title = localize(MR.strings.action_sort),
title = stringResource(MR.strings.action_sort),
icon = Icons.AutoMirrored.Outlined.Sort,
onClick = { sortExpanded = true },
),
AppBar.OverflowAction(
title = localize(MR.strings.action_cancel_all),
title = stringResource(MR.strings.action_cancel_all),
onClick = { screenModel.clearQueue() },
),
),
@@ -214,7 +214,7 @@ object DownloadQueueScreen : Screen() {
} else {
MR.strings.action_resume
}
Text(text = localize(id))
Text(text = stringResource(id))
},
icon = {
val icon = if (isRunning) {
@@ -27,10 +27,10 @@ import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.receiveAsFlow
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
object HistoryTab : Tab {
@@ -45,7 +45,7 @@ object HistoryTab : Tab {
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_history_enter)
return TabOptions(
index = 2u,
title = localize(MR.strings.label_recent_manga),
title = stringResource(MR.strings.label_recent_manga),
icon = rememberAnimatedVectorPainter(image, isSelected),
)
}
@@ -103,9 +103,9 @@ object HistoryTab : Tab {
screenModel.events.collectLatest { e ->
when (e) {
HistoryScreenModel.Event.InternalError ->
snackbarHostState.showSnackbar(context.localize(MR.strings.internal_error))
snackbarHostState.showSnackbar(context.stringResource(MR.strings.internal_error))
HistoryScreenModel.Event.HistoryCleared ->
snackbarHostState.showSnackbar(context.localize(MR.strings.clear_history_completed))
snackbarHostState.showSnackbar(context.stringResource(MR.strings.clear_history_completed))
is HistoryScreenModel.Event.OpenChapter -> openChapter(context, e.chapter)
}
}
@@ -123,7 +123,7 @@ object HistoryTab : Tab {
val intent = ReaderActivity.newIntent(context, chapter.mangaId, chapter.id)
context.startActivity(intent)
} else {
snackbarHostState.showSnackbar(context.localize(MR.strings.no_next_chapter))
snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter))
}
}
}
@@ -55,7 +55,7 @@ import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.material.NavigationBar
import tachiyomi.presentation.core.components.material.NavigationRail
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.api.get
@@ -241,7 +241,7 @@ object HomeScreen : Screen() {
}
if (count > 0) {
Badge {
val desc = localizePlural(
val desc = pluralStringResource(
MR.plurals.notification_chapters_generic,
count = count,
count,
@@ -260,7 +260,7 @@ object HomeScreen : Screen() {
}
if (count > 0) {
Badge {
val desc = localizePlural(
val desc = pluralStringResource(
MR.plurals.update_check_notification_ext_updates,
count = count,
count,
@@ -47,14 +47,14 @@ import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.launchIO
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.library.model.LibraryManga
import tachiyomi.domain.manga.model.Manga
import tachiyomi.i18n.MR
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.EmptyScreenAction
import tachiyomi.presentation.core.screens.LoadingScreen
@@ -69,7 +69,7 @@ object LibraryTab : Tab {
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_library_enter)
return TabOptions(
index = 0u,
title = localize(MR.strings.label_library),
title = stringResource(MR.strings.label_library),
icon = rememberAnimatedVectorPainter(image, isSelected),
)
}
@@ -99,7 +99,7 @@ object LibraryTab : Tab {
category != null -> MR.strings.updating_category
else -> MR.strings.updating_library
}
snackbarHostState.showSnackbar(context.localize(msgRes))
snackbarHostState.showSnackbar(context.stringResource(msgRes))
}
started
}
@@ -107,8 +107,8 @@ object LibraryTab : Tab {
Scaffold(
topBar = { scrollBehavior ->
val title = state.getToolbarTitle(
defaultTitle = localize(MR.strings.label_library),
defaultCategoryTitle = localize(MR.strings.label_default),
defaultTitle = stringResource(MR.strings.label_library),
defaultCategoryTitle = stringResource(MR.strings.label_default),
page = screenModel.activeCategoryIndex,
)
val tabVisible = state.showCategoryTabs && state.categories.size > 1
@@ -129,7 +129,7 @@ object LibraryTab : Tab {
navigator.push(MangaScreen(randomItem.libraryManga.manga.id))
} else {
snackbarHostState.showSnackbar(
context.localize(MR.strings.information_no_entries_found),
context.stringResource(MR.strings.information_no_entries_found),
)
}
}
@@ -187,7 +187,7 @@ object LibraryTab : Tab {
ReaderActivity.newIntent(context, chapter.mangaId, chapter.id),
)
} else {
snackbarHostState.showSnackbar(context.localize(MR.strings.no_next_chapter))
snackbarHostState.showSnackbar(context.stringResource(MR.strings.no_next_chapter))
}
}
Unit
@@ -93,7 +93,7 @@ import tachiyomi.domain.library.service.LibraryPreferences
import tachiyomi.domain.release.interactor.GetApplicationRelease
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.material.Scaffold
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.collectAsState
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -257,15 +257,15 @@ class MainActivity : BaseActivity() {
if (showChangelog) {
AlertDialog(
onDismissRequest = { showChangelog = false },
title = { Text(text = localize(MR.strings.updated_version, BuildConfig.VERSION_NAME)) },
title = { Text(text = stringResource(MR.strings.updated_version, BuildConfig.VERSION_NAME)) },
dismissButton = {
TextButton(onClick = { openInBrowser(RELEASE_URL) }) {
Text(text = localize(MR.strings.whats_new))
Text(text = stringResource(MR.strings.whats_new))
}
},
confirmButton = {
TextButton(onClick = { showChangelog = false }) {
Text(text = localize(MR.strings.action_ok))
Text(text = stringResource(MR.strings.action_ok))
}
},
)
@@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.util.system.toShareIntent
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.launchIO
import tachiyomi.core.util.lang.withIOContext
import tachiyomi.core.util.lang.withUIContext
@@ -52,13 +52,13 @@ class MangaCoverScreenModel(
try {
saveCoverInternal(context, temp = false)
snackbarHostState.showSnackbar(
context.localize(MR.strings.cover_saved),
context.stringResource(MR.strings.cover_saved),
withDismissAction = true,
)
} catch (e: Throwable) {
logcat(LogPriority.ERROR, e)
snackbarHostState.showSnackbar(
context.localize(MR.strings.error_saving_cover),
context.stringResource(MR.strings.error_saving_cover),
withDismissAction = true,
)
}
@@ -75,7 +75,7 @@ class MangaCoverScreenModel(
} catch (e: Throwable) {
logcat(LogPriority.ERROR, e)
snackbarHostState.showSnackbar(
context.localize(MR.strings.error_sharing_cover),
context.stringResource(MR.strings.error_sharing_cover),
withDismissAction = true,
)
}
@@ -146,7 +146,7 @@ class MangaCoverScreenModel(
private fun notifyCoverUpdated(context: Context) {
screenModelScope.launch {
snackbarHostState.showSnackbar(
context.localize(MR.strings.cover_updated),
context.stringResource(MR.strings.cover_updated),
withDismissAction = true,
)
}
@@ -155,7 +155,7 @@ class MangaCoverScreenModel(
private fun notifyFailedCoverUpdate(context: Context, e: Throwable) {
screenModelScope.launch {
snackbarHostState.showSnackbar(
context.localize(MR.strings.notification_cover_update_failed),
context.stringResource(MR.strings.notification_cover_update_failed),
withDismissAction = true,
)
logcat(LogPriority.ERROR, e)
@@ -53,7 +53,7 @@ import eu.kanade.tachiyomi.util.system.toShareIntent
import eu.kanade.tachiyomi.util.system.toast
import kotlinx.coroutines.launch
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.withIOContext
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.chapter.model.Chapter
@@ -292,7 +292,7 @@ class MangaScreen(
context.startActivity(
Intent.createChooser(
intent,
context.localize(MR.strings.action_share),
context.stringResource(MR.strings.action_share),
),
)
}
@@ -49,7 +49,7 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.preference.CheckboxState
import tachiyomi.core.preference.TriState
import tachiyomi.core.preference.mapAsCheckboxState
@@ -282,8 +282,8 @@ class MangaScreenModel(
screenModelScope.launch {
if (!hasDownloads()) return@launch
val result = snackbarHostState.showSnackbar(
message = context.localize(MR.strings.delete_downloads_for_manga),
actionLabel = context.localize(MR.strings.action_delete),
message = context.stringResource(MR.strings.delete_downloads_for_manga),
actionLabel = context.stringResource(MR.strings.action_delete),
withDismissAction = true,
)
if (result == SnackbarResult.ActionPerformed) {
@@ -551,7 +551,7 @@ class MangaScreenModel(
}
} catch (e: Throwable) {
val message = if (e is NoChaptersException) {
context.localize(MR.strings.no_chapters_error)
context.stringResource(MR.strings.no_chapters_error)
} else {
logcat(LogPriority.ERROR, e)
with(context) { e.formattedMessage }
@@ -648,8 +648,8 @@ class MangaScreenModel(
}
screenModelScope.launch {
val result = snackbarHostState.showSnackbar(
message = context.localize(MR.strings.snack_add_to_library),
actionLabel = context.localize(MR.strings.action_add),
message = context.stringResource(MR.strings.snack_add_to_library),
actionLabel = context.stringResource(MR.strings.action_add),
withDismissAction = true,
)
if (result == SnackbarResult.ActionPerformed && !isFavorited) {
@@ -870,7 +870,7 @@ class MangaScreenModel(
if (applyToExisting) {
setMangaDefaultChapterFlags.awaitAll()
}
snackbarHostState.showSnackbar(message = context.localize(MR.strings.chapter_settings_updated))
snackbarHostState.showSnackbar(message = context.stringResource(MR.strings.chapter_settings_updated))
}
}
@@ -65,7 +65,7 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.launchNonCancellable
import tachiyomi.core.util.lang.withIOContext
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.material.AlertDialogContent
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.api.get
import java.time.Instant
@@ -229,7 +229,7 @@ data class TrackInfoDialogHomeScreen(
}
withUIContext {
context.toast(
context.localize(
context.stringResource(
MR.strings.track_error,
track!!.name,
e.message ?: "",
@@ -502,9 +502,9 @@ private data class TrackDateSelectorScreen(
}
TrackDateSelector(
title = if (start) {
localize(MR.strings.track_started_reading_date)
stringResource(MR.strings.track_started_reading_date)
} else {
localize(MR.strings.track_finished_reading_date)
stringResource(MR.strings.track_finished_reading_date)
},
initialSelectedDateMillis = screenModel.initialSelection,
selectableDates = selectableDates,
@@ -577,7 +577,7 @@ private data class TrackDateRemoverScreen(
},
title = {
Text(
text = localize(MR.strings.track_remove_date_conf_title),
text = stringResource(MR.strings.track_remove_date_conf_title),
textAlign = TextAlign.Center,
)
},
@@ -585,9 +585,9 @@ private data class TrackDateRemoverScreen(
val serviceName = screenModel.getServiceName()
Text(
text = if (start) {
localize(MR.strings.track_remove_start_date_conf_text, serviceName)
stringResource(MR.strings.track_remove_start_date_conf_text, serviceName)
} 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),
) {
TextButton(onClick = navigator::pop) {
Text(text = localize(MR.strings.action_cancel))
Text(text = stringResource(MR.strings.action_cancel))
}
FilledTonalButton(
onClick = {
@@ -609,7 +609,7 @@ private data class TrackDateRemoverScreen(
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 = {
Text(
text = localize(MR.strings.track_delete_title, serviceName),
text = stringResource(MR.strings.track_delete_title, serviceName),
textAlign = TextAlign.Center,
)
},
@@ -762,12 +762,12 @@ private data class TrackerRemoveScreen(
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
Text(
text = localize(MR.strings.track_delete_text, serviceName),
text = stringResource(MR.strings.track_delete_text, serviceName),
)
if (screenModel.isDeletable()) {
LabeledCheckbox(
label = localize(MR.strings.track_delete_remote_text, serviceName),
label = stringResource(MR.strings.track_delete_remote_text, serviceName),
checked = removeRemoteTrack,
onCheckedChange = { removeRemoteTrack = it },
)
@@ -783,7 +783,7 @@ private data class TrackerRemoveScreen(
),
) {
TextButton(onClick = navigator::pop) {
Text(text = localize(MR.strings.action_cancel))
Text(text = stringResource(MR.strings.action_cancel))
}
FilledTonalButton(
onClick = {
@@ -796,7 +796,7 @@ private data class TrackerRemoveScreen(
contentColor = MaterialTheme.colorScheme.onErrorContainer,
),
) {
Text(text = localize(MR.strings.action_ok))
Text(text = stringResource(MR.strings.action_ok))
}
}
},
@@ -34,7 +34,7 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import tachiyomi.core.util.lang.launchIO
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.api.get
@@ -47,7 +47,7 @@ object MoreTab : Tab {
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_more_enter)
return TabOptions(
index = 4u,
title = localize(MR.strings.label_more),
title = stringResource(MR.strings.label_more),
icon = rememberAnimatedVectorPainter(image, isSelected),
)
}
@@ -84,7 +84,7 @@ import kotlinx.coroutines.flow.sample
import kotlinx.coroutines.launch
import logcat.LogPriority
import tachiyomi.core.Constants
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.launchIO
import tachiyomi.core.util.lang.launchNonCancellable
import tachiyomi.core.util.lang.withUIContext
@@ -400,7 +400,7 @@ class ReaderActivity : BaseActivity() {
verticalAlignment = Alignment.CenterVertically,
) {
CircularProgressIndicator()
Text(localize(MR.strings.loading))
Text(stringResource(MR.strings.loading))
}
},
)
@@ -537,7 +537,7 @@ class ReaderActivity : BaseActivity() {
private fun shareChapter() {
assistUrl?.let {
val intent = it.toUri().toShareIntent(this, type = "text/plain")
startActivity(Intent.createChooser(intent, localize(MR.strings.action_share)))
startActivity(Intent.createChooser(intent, stringResource(MR.strings.action_share)))
}
}
@@ -684,9 +684,9 @@ class ReaderActivity : BaseActivity() {
val intent = uri.toShareIntent(
context = applicationContext,
message = localize(MR.strings.share_page_info, manga.title, chapter.name, page.number),
message = stringResource(MR.strings.share_page_info, manga.title, chapter.name, page.number),
)
startActivity(Intent.createChooser(intent, localize(MR.strings.action_share)))
startActivity(Intent.createChooser(intent, stringResource(MR.strings.action_share)))
}
/**
@@ -13,7 +13,7 @@ import androidx.core.graphics.withTranslation
import androidx.core.view.isVisible
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation
import eu.kanade.tachiyomi.ui.reader.viewer.navigation.DisabledNavigation
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import kotlin.math.abs
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
val y = height * (abs(rect.top - rect.bottom) / 2)
drawText(context.localize(region.type.nameRes), x, y, textBorderPaint)
drawText(context.localize(region.type.nameRes), x, y, textPaint)
drawText(context.stringResource(region.type.nameRes), x, y, textBorderPaint)
drawText(context.stringResource(region.type.nameRes), x, y, textPaint)
}
}
}
@@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.util.system.cancelNotification
import eu.kanade.tachiyomi.util.system.getBitmapOrNull
import eu.kanade.tachiyomi.util.system.notificationBuilder
import eu.kanade.tachiyomi.util.system.notify
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
/**
@@ -58,8 +58,8 @@ class SaveImageNotifier(private val context: Context) {
fun onError(error: String?) {
// Create notification
with(notificationBuilder) {
setContentTitle(context.localize(MR.strings.download_notifier_title_error))
setContentText(error ?: context.localize(MR.strings.unknown_error))
setContentTitle(context.stringResource(MR.strings.download_notifier_title_error))
setContentText(error ?: context.stringResource(MR.strings.unknown_error))
setSmallIcon(android.R.drawable.ic_menu_report_image)
}
updateNotification()
@@ -67,7 +67,7 @@ class SaveImageNotifier(private val context: Context) {
private fun showCompleteNotification(uri: Uri, image: Bitmap?) {
with(notificationBuilder) {
setContentTitle(context.localize(MR.strings.picture_saved))
setContentTitle(context.stringResource(MR.strings.picture_saved))
setSmallIcon(R.drawable.ic_photo_24dp)
image?.let { setStyle(NotificationCompat.BigPictureStyle().bigPicture(it)) }
setLargeIcon(image)
@@ -80,13 +80,13 @@ class SaveImageNotifier(private val context: Context) {
// Share action
addAction(
R.drawable.ic_share_24dp,
context.localize(MR.strings.action_share),
context.stringResource(MR.strings.action_share),
NotificationReceiver.shareImagePendingBroadcast(context, uri.path!!, notificationId),
)
// Delete action
addAction(
R.drawable.ic_delete_24dp,
context.localize(MR.strings.action_delete),
context.stringResource(MR.strings.action_delete),
NotificationReceiver.deleteImagePendingBroadcast(context, uri.path!!, notificationId),
)
@@ -7,7 +7,7 @@ import eu.kanade.tachiyomi.data.download.DownloadProvider
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.withIOContext
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.manga.model.Manga
@@ -47,7 +47,7 @@ class ChapterLoader(
.onEach { it.chapter = chapter }
if (pages.isEmpty()) {
throw Exception(context.localize(MR.strings.page_list_empty_error))
throw Exception(context.stringResource(MR.strings.page_list_empty_error))
}
// If the chapter is partially read, set the starting page to the last the user read
@@ -92,14 +92,14 @@ class ChapterLoader(
is Format.Rar -> try {
RarPageLoader(format.file)
} catch (e: UnsupportedRarV5Exception) {
error(context.localize(MR.strings.loader_rar5_error))
error(context.stringResource(MR.strings.loader_rar5_error))
}
is Format.Epub -> EpubPageLoader(format.file)
}
}
source is HttpSource -> HttpPageLoader(chapter, source)
source is StubSource -> error(context.localize(MR.strings.source_not_installed, source.toString()))
else -> error(context.localize(MR.strings.loader_not_implemented_error))
source is StubSource -> error(context.stringResource(MR.strings.source_not_installed, source.toString()))
else -> error(context.stringResource(MR.strings.loader_not_implemented_error))
}
}
}
@@ -20,7 +20,7 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
/**
@@ -105,7 +105,7 @@ class PagerTransitionHolder(
val textView = AppCompatTextView(context).apply {
wrapContent()
text = context.localize(MR.strings.transition_pages_loading)
text = context.stringResource(MR.strings.transition_pages_loading)
}
pagesContainer.addView(progress)
@@ -118,13 +118,13 @@ class PagerTransitionHolder(
private fun setError(error: Throwable) {
val textView = AppCompatTextView(context).apply {
wrapContent()
text = context.localize(MR.strings.transition_pages_error, error.message ?: "")
text = context.stringResource(MR.strings.transition_pages_error, error.message ?: "")
}
val retryBtn = ReaderButton(context).apply {
viewer = this@PagerTransitionHolder.viewer
wrapContent()
text = context.localize(MR.strings.action_retry)
text = context.stringResource(MR.strings.action_retry)
setOnClickListener {
val toChapter = transition.to
if (toChapter != null) {
@@ -17,7 +17,7 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
/**
@@ -107,7 +107,7 @@ class WebtoonTransitionHolder(
val textView = AppCompatTextView(context).apply {
wrapContent()
text = context.localize(MR.strings.transition_pages_loading)
text = context.stringResource(MR.strings.transition_pages_loading)
}
pagesContainer.addView(progress)
@@ -120,12 +120,12 @@ class WebtoonTransitionHolder(
private fun setError(error: Throwable, transition: ChapterTransition) {
val textView = AppCompatTextView(context).apply {
wrapContent()
text = context.localize(MR.strings.transition_pages_error, error.message ?: "")
text = context.stringResource(MR.strings.transition_pages_error, error.message ?: "")
}
val retryBtn = AppCompatButton(context).apply {
wrapContent()
text = context.localize(MR.strings.action_retry)
text = context.stringResource(MR.strings.action_retry)
setOnClickListener {
val toChapter = transition.to
if (toChapter != null) {
@@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.startAuthentication
import logcat.LogPriority
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.system.logcat
import tachiyomi.i18n.MR
@@ -20,7 +20,7 @@ class UnlockActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startAuthentication(
localize(MR.strings.unlock_app_title, localize(MR.strings.app_name)),
stringResource(MR.strings.unlock_app_title, stringResource(MR.strings.app_name)),
confirmationRequired = false,
callback = object : AuthenticatorUtil.AuthenticationCallback() {
override fun onAuthenticationError(
@@ -12,7 +12,7 @@ import eu.kanade.presentation.more.stats.StatsScreenState
import eu.kanade.presentation.util.Screen
import tachiyomi.i18n.MR
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
class StatsScreen : Screen() {
@@ -27,7 +27,7 @@ class StatsScreen : Screen() {
Scaffold(
topBar = { scrollBehavior ->
AppBar(
title = localize(MR.strings.label_stats),
title = stringResource(MR.strings.label_stats),
navigateUp = navigator::pop,
scrollBehavior = scrollBehavior,
)
@@ -26,9 +26,9 @@ import eu.kanade.tachiyomi.ui.manga.MangaScreen
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.ui.updates.UpdatesScreenModel.Event
import kotlinx.coroutines.flow.collectLatest
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.localize
import tachiyomi.presentation.core.i18n.stringResource
object UpdatesTab : Tab {
@@ -39,7 +39,7 @@ object UpdatesTab : Tab {
val image = AnimatedImageVector.animatedVectorResource(R.drawable.anim_updates_enter)
return TabOptions(
index = 1u,
title = localize(MR.strings.label_recent_updates),
title = stringResource(MR.strings.label_recent_updates),
icon = rememberAnimatedVectorPainter(image, isSelected),
)
}
@@ -90,7 +90,7 @@ object UpdatesTab : Tab {
screenModel.events.collectLatest { event ->
when (event) {
Event.InternalError -> screenModel.snackbarHostState.showSnackbar(
context.localize(MR.strings.internal_error),
context.stringResource(MR.strings.internal_error),
)
is Event.LibraryUpdateTriggered -> {
val msg = if (event.started) {
@@ -98,7 +98,7 @@ object UpdatesTab : Tab {
} else {
MR.strings.update_already_running
}
screenModel.snackbarHostState.showSnackbar(context.localize(msg))
screenModel.snackbarHostState.showSnackbar(context.stringResource(msg))
}
}
}
@@ -1,8 +1,8 @@
package eu.kanade.tachiyomi.util.lang
import android.content.Context
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.localizePlural
import tachiyomi.core.i18n.pluralStringResource
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
import java.text.DateFormat
import java.time.Instant
@@ -63,8 +63,8 @@ fun Date.toRelativeString(
val days = difference.floorDiv(MILLISECONDS_IN_DAY).toInt()
return when {
difference < 0 -> dateFormat.format(this)
difference < MILLISECONDS_IN_DAY -> context.localize(MR.strings.relative_time_today)
difference < MILLISECONDS_IN_DAY.times(7) -> context.localizePlural(
difference < MILLISECONDS_IN_DAY -> context.stringResource(MR.strings.relative_time_today)
difference < MILLISECONDS_IN_DAY.times(7) -> context.pluralStringResource(
MR.plurals.relative_time,
days,
days,
@@ -11,7 +11,7 @@ import androidx.biometric.auth.startClass2BiometricOrCredentialAuthentication
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentActivity
import kotlinx.coroutines.suspendCancellableCoroutine
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
import kotlin.coroutines.resume
@@ -49,7 +49,7 @@ object AuthenticatorUtil {
suspend fun FragmentActivity.authenticate(
title: String,
subtitle: String? = localize(MR.strings.confirm_lock_change),
subtitle: String? = stringResource(MR.strings.confirm_lock_change),
): Boolean = suspendCancellableCoroutine { cont ->
if (!isAuthenticationSupported()) {
cont.resume(true)
@@ -24,7 +24,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.util.lang.truncateCenter
import logcat.LogPriority
import rikka.sui.Sui
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.system.logcat
import tachiyomi.i18n.MR
import uy.kohesive.injekt.Injekt
@@ -47,7 +47,7 @@ fun Context.copyToClipboard(label: String, content: String) {
// Android 13 and higher shows a visual confirmation of copied contents
// https://developer.android.com/about/versions/13/features/copy-paste
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
toast(localize(MR.strings.copied_to_clipboard, content.truncateCenter(50)))
toast(stringResource(MR.strings.copied_to_clipboard, content.truncateCenter(50)))
}
} catch (e: Throwable) {
logcat(LogPriority.ERROR, e)
@@ -6,7 +6,7 @@ import android.content.Intent
import android.net.Uri
import android.os.Build
import androidx.core.content.IntentCompat
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
import java.io.Serializable
@@ -28,7 +28,7 @@ fun Uri.toShareIntent(context: Context, type: String = "image/*", message: Strin
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
}
return Intent.createChooser(shareIntent, context.localize(MR.strings.action_share)).apply {
return Intent.createChooser(shareIntent, context.stringResource(MR.strings.action_share)).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
}
@@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.util.system
import android.content.Context
import androidx.core.os.LocaleListCompat
import eu.kanade.tachiyomi.ui.browse.source.SourcesScreenModel
import tachiyomi.core.i18n.localize
import tachiyomi.core.i18n.stringResource
import tachiyomi.i18n.MR
import java.util.Locale
@@ -30,10 +30,10 @@ object LocaleHelper {
*/
fun getSourceDisplayName(lang: String?, context: Context): String {
return when (lang) {
SourcesScreenModel.LAST_USED_KEY -> context.localize(MR.strings.last_used_source)
SourcesScreenModel.PINNED_KEY -> context.localize(MR.strings.pinned_sources)
"other" -> context.localize(MR.strings.other_source)
"all" -> context.localize(MR.strings.multi_lang)
SourcesScreenModel.LAST_USED_KEY -> context.stringResource(MR.strings.last_used_source)
SourcesScreenModel.PINNED_KEY -> context.stringResource(MR.strings.pinned_sources)
"other" -> context.stringResource(MR.strings.other_source)
"all" -> context.stringResource(MR.strings.multi_lang)
else -> getDisplayName(lang)
}
}