mirror of
https://github.com/mihonapp/mihon.git
synced 2025-06-27 03:27:51 +02:00
Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
0c07e05a2b | |||
060f0682f4 | |||
88032e11df | |||
493c8b0943 | |||
af2ef0621a | |||
095461e31b | |||
3ddd1033c3 | |||
912687ac78 | |||
40a9595012 | |||
12ff37d052 | |||
4857073f30 | |||
cdbefd9191 | |||
2e9d89574d | |||
569c99496b | |||
ea3b8767de | |||
8e8c30c1eb | |||
d921ba81c8 | |||
ad9f646102 | |||
2ef277bcef | |||
9e396e1624 | |||
9708d84e60 | |||
4efc195548 | |||
0d15cbe334 | |||
e381d9fc8e | |||
85ed7a7457 |
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
@ -2,7 +2,7 @@
|
||||
|
||||
I acknowledge that:
|
||||
|
||||
- I have updated to the latest version of the app (stable is v0.10.0)
|
||||
- I have updated to the latest version of the app (stable is v0.10.3)
|
||||
- I have updated all extensions
|
||||
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
||||
|
||||
|
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -9,7 +9,7 @@ labels: "bug"
|
||||
|
||||
I acknowledge that:
|
||||
|
||||
- I have updated to the latest version of the app (stable is v0.10.0)
|
||||
- I have updated to the latest version of the app (stable is v0.10.3)
|
||||
- I have updated all extensions
|
||||
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
||||
|
||||
|
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -9,7 +9,7 @@ labels: "feature"
|
||||
|
||||
I acknowledge that:
|
||||
|
||||
- I have updated to the latest version of the app (stable is v0.10.0)
|
||||
- I have updated to the latest version of the app (stable is v0.10.3)
|
||||
- I have updated all extensions
|
||||
- If this is an issue with an extension, that I should be opening an issue in https://github.com/inorichi/tachiyomi-extensions
|
||||
|
||||
|
@ -40,8 +40,8 @@ android {
|
||||
minSdkVersion AndroidConfig.minSdk
|
||||
targetSdkVersion AndroidConfig.targetSdk
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
versionCode 46
|
||||
versionName "0.10.0"
|
||||
versionCode 49
|
||||
versionName "0.10.3"
|
||||
|
||||
buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\""
|
||||
buildConfigField "String", "COMMIT_SHA", "\"${getGitSha()}\""
|
||||
@ -139,7 +139,6 @@ dependencies {
|
||||
implementation 'androidx.preference:preference:1.1.1'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha05'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01'
|
||||
implementation 'androidx.webkit:webkit:1.3.0-rc01'
|
||||
|
||||
final lifecycle_version = '2.3.0-alpha06'
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
||||
@ -154,6 +153,8 @@ dependencies {
|
||||
// UI library
|
||||
implementation 'com.google.android.material:material:1.3.0-alpha02'
|
||||
|
||||
implementation 'dev.chrisbanes:insetter-ktx:0.3.1'
|
||||
|
||||
standardImplementation 'com.google.firebase:firebase-core:17.4.4'
|
||||
|
||||
// ReactiveX
|
||||
@ -200,7 +201,7 @@ dependencies {
|
||||
implementation 'io.requery:sqlite-android:3.32.2'
|
||||
|
||||
// Preferences
|
||||
implementation 'com.github.tfcporciuncula:flow-preferences:1.1.1'
|
||||
implementation 'com.github.tfcporciuncula:flow-preferences:1.3.0'
|
||||
|
||||
// Model View Presenter
|
||||
final nucleus_version = '3.0.0'
|
||||
@ -276,8 +277,7 @@ dependencies {
|
||||
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
|
||||
// Do not update until we bump to Kotlin 1.4, see https://github.com/Kotlin/kotlinx.coroutines/issues/2049
|
||||
final coroutines_version = '1.3.6'
|
||||
final coroutines_version = '1.3.8'
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
|
||||
|
||||
|
@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.util.lang.chop
|
||||
import eu.kanade.tachiyomi.util.system.notificationBuilder
|
||||
import eu.kanade.tachiyomi.util.system.notificationManager
|
||||
import java.util.regex.Pattern
|
||||
import uy.kohesive.injekt.api.get
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
/**
|
||||
@ -25,12 +24,22 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
|
||||
private val preferences: PreferencesHelper by injectLazy()
|
||||
|
||||
private val progressNotificationBuilder = context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
||||
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
||||
private val progressNotificationBuilder by lazy {
|
||||
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_PROGRESS) {
|
||||
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.ic_launcher))
|
||||
}
|
||||
}
|
||||
|
||||
private val completeNotificationBuilder = context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_COMPLETE) {
|
||||
setAutoCancel(false)
|
||||
private val completeNotificationBuilder by lazy {
|
||||
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_COMPLETE) {
|
||||
setAutoCancel(false)
|
||||
}
|
||||
}
|
||||
|
||||
private val errorNotificationBuilder by lazy {
|
||||
context.notificationBuilder(Notifications.CHANNEL_DOWNLOADER_ERROR) {
|
||||
setAutoCancel(false)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,7 +62,7 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
*
|
||||
* @param id the id of the notification.
|
||||
*/
|
||||
private fun NotificationCompat.Builder.show(id: Int = Notifications.ID_DOWNLOAD_CHAPTER) {
|
||||
private fun NotificationCompat.Builder.show(id: Int) {
|
||||
context.notificationManager.notify(id, build())
|
||||
}
|
||||
|
||||
@ -70,8 +79,8 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
* Dismiss the downloader's notification. Downloader error notifications use a different id, so
|
||||
* those can only be dismissed by the user.
|
||||
*/
|
||||
fun dismiss() {
|
||||
context.notificationManager.cancel(Notifications.ID_DOWNLOAD_CHAPTER)
|
||||
fun dismissProgress() {
|
||||
context.notificationManager.cancel(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -112,14 +121,15 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
}
|
||||
|
||||
setProgress(download.pages!!.size, download.downloadedImages, false)
|
||||
|
||||
show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)
|
||||
}
|
||||
progressNotificationBuilder.show()
|
||||
}
|
||||
|
||||
/**
|
||||
* Show notification when download is paused.
|
||||
*/
|
||||
fun onDownloadPaused() {
|
||||
fun onPaused() {
|
||||
with(progressNotificationBuilder) {
|
||||
setContentTitle(context.getString(R.string.chapter_paused))
|
||||
setContentText(context.getString(R.string.download_notifier_download_paused))
|
||||
@ -141,8 +151,9 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
context.getString(R.string.action_cancel_all),
|
||||
NotificationReceiver.clearDownloadsPendingBroadcast(context)
|
||||
)
|
||||
|
||||
show(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS)
|
||||
}
|
||||
progressNotificationBuilder.show()
|
||||
|
||||
// Reset initial values
|
||||
isDownloading = false
|
||||
@ -151,18 +162,21 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
/**
|
||||
* This function shows a notification to inform download tasks are done.
|
||||
*/
|
||||
fun downloadFinished() {
|
||||
// Create notification
|
||||
with(completeNotificationBuilder) {
|
||||
setContentTitle(context.getString(R.string.download_notifier_downloader_title))
|
||||
setContentText(context.getString(R.string.download_notifier_download_finish))
|
||||
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
||||
clearActions()
|
||||
setAutoCancel(true)
|
||||
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
||||
setProgress(0, 0, false)
|
||||
fun onComplete() {
|
||||
if (!errorThrown) {
|
||||
// Create notification
|
||||
with(completeNotificationBuilder) {
|
||||
setContentTitle(context.getString(R.string.download_notifier_downloader_title))
|
||||
setContentText(context.getString(R.string.download_notifier_download_finish))
|
||||
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
||||
clearActions()
|
||||
setAutoCancel(true)
|
||||
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
||||
setProgress(0, 0, false)
|
||||
|
||||
show(Notifications.ID_DOWNLOAD_CHAPTER_COMPLETE)
|
||||
}
|
||||
}
|
||||
completeNotificationBuilder.show(Notifications.ID_DOWNLOAD_CHAPTER_COMPLETE)
|
||||
|
||||
// Reset states to default
|
||||
errorThrown = false
|
||||
@ -175,7 +189,7 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
* @param reason the text to show.
|
||||
*/
|
||||
fun onWarning(reason: String) {
|
||||
with(completeNotificationBuilder) {
|
||||
with(errorNotificationBuilder) {
|
||||
setContentTitle(context.getString(R.string.download_notifier_downloader_title))
|
||||
setContentText(reason)
|
||||
setSmallIcon(android.R.drawable.stat_sys_warning)
|
||||
@ -183,8 +197,9 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
clearActions()
|
||||
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
||||
setProgress(0, 0, false)
|
||||
|
||||
show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR)
|
||||
}
|
||||
completeNotificationBuilder.show()
|
||||
|
||||
// Reset download information
|
||||
isDownloading = false
|
||||
@ -199,7 +214,7 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
*/
|
||||
fun onError(error: String? = null, chapter: String? = null) {
|
||||
// Create notification
|
||||
with(completeNotificationBuilder) {
|
||||
with(errorNotificationBuilder) {
|
||||
setContentTitle(
|
||||
chapter
|
||||
?: context.getString(R.string.download_notifier_downloader_title)
|
||||
@ -210,8 +225,9 @@ internal class DownloadNotifier(private val context: Context) {
|
||||
setAutoCancel(false)
|
||||
setContentIntent(NotificationHandler.openDownloadManagerPendingActivity(context))
|
||||
setProgress(0, 0, false)
|
||||
|
||||
show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR)
|
||||
}
|
||||
completeNotificationBuilder.show(Notifications.ID_DOWNLOAD_CHAPTER_ERROR)
|
||||
|
||||
// Reset download information
|
||||
errorThrown = true
|
||||
|
@ -83,7 +83,7 @@ class DownloadService : Service() {
|
||||
*/
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
startForeground(Notifications.ID_DOWNLOAD_CHAPTER, getPlaceholderNotification())
|
||||
startForeground(Notifications.ID_DOWNLOAD_CHAPTER_PROGRESS, getPlaceholderNotification())
|
||||
wakeLock = acquireWakeLock(javaClass.name)
|
||||
runningRelay.call(true)
|
||||
subscriptions = CompositeSubscription()
|
||||
|
@ -137,9 +137,10 @@ class Downloader(
|
||||
} else {
|
||||
if (notifier.paused) {
|
||||
notifier.paused = false
|
||||
notifier.onDownloadPaused()
|
||||
notifier.onPaused()
|
||||
} else {
|
||||
notifier.downloadFinished()
|
||||
notifier.dismissProgress()
|
||||
notifier.onComplete()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -170,7 +171,7 @@ class Downloader(
|
||||
.forEach { it.status = Download.NOT_DOWNLOADED }
|
||||
}
|
||||
queue.clear()
|
||||
notifier.dismiss()
|
||||
notifier.dismissProgress()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -32,10 +32,11 @@ object Notifications {
|
||||
*/
|
||||
private const val GROUP_DOWNLOADER = "group_downloader"
|
||||
const val CHANNEL_DOWNLOADER_PROGRESS = "downloader_progress_channel"
|
||||
const val ID_DOWNLOAD_CHAPTER = -201
|
||||
const val ID_DOWNLOAD_CHAPTER_PROGRESS = -201
|
||||
const val CHANNEL_DOWNLOADER_COMPLETE = "downloader_complete_channel"
|
||||
const val ID_DOWNLOAD_CHAPTER_ERROR = -202
|
||||
const val ID_DOWNLOAD_CHAPTER_COMPLETE = -203
|
||||
const val CHANNEL_DOWNLOADER_ERROR = "downloader_error_channel"
|
||||
const val ID_DOWNLOAD_CHAPTER_ERROR = -202
|
||||
|
||||
/**
|
||||
* Notification channel and ids used by the library updater.
|
||||
@ -104,6 +105,13 @@ object Notifications {
|
||||
group = GROUP_DOWNLOADER
|
||||
setShowBadge(false)
|
||||
},
|
||||
NotificationChannel(
|
||||
CHANNEL_DOWNLOADER_ERROR, context.getString(R.string.channel_errors),
|
||||
NotificationManager.IMPORTANCE_LOW
|
||||
).apply {
|
||||
group = GROUP_DOWNLOADER
|
||||
setShowBadge(false)
|
||||
},
|
||||
NotificationChannel(
|
||||
CHANNEL_NEW_CHAPTERS, context.getString(R.string.channel_new_chapters),
|
||||
NotificationManager.IMPORTANCE_DEFAULT
|
||||
|
@ -1,43 +1,29 @@
|
||||
package eu.kanade.tachiyomi.extension.api
|
||||
|
||||
import android.content.Context
|
||||
import com.github.salomonbrys.kotson.fromJson
|
||||
import com.github.salomonbrys.kotson.get
|
||||
import com.github.salomonbrys.kotson.int
|
||||
import com.github.salomonbrys.kotson.string
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.JsonArray
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.extension.model.Extension
|
||||
import eu.kanade.tachiyomi.extension.model.LoadResult
|
||||
import eu.kanade.tachiyomi.extension.util.ExtensionLoader
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||
import eu.kanade.tachiyomi.network.await
|
||||
import java.util.Date
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import okhttp3.Response
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
internal class ExtensionGithubApi {
|
||||
|
||||
private val network: NetworkHelper by injectLazy()
|
||||
private val preferences: PreferencesHelper by injectLazy()
|
||||
|
||||
private val gson: Gson by injectLazy()
|
||||
|
||||
suspend fun findExtensions(): List<Extension.Available> {
|
||||
val call = GET(EXT_URL)
|
||||
val service: ExtensionGithubService = ExtensionGithubService.create()
|
||||
|
||||
return withContext(Dispatchers.IO) {
|
||||
val response = network.client.newCall(call).await()
|
||||
if (response.isSuccessful) {
|
||||
parseResponse(response)
|
||||
} else {
|
||||
response.close()
|
||||
throw Exception("Failed to get extensions")
|
||||
}
|
||||
val response = service.getRepo()
|
||||
parseResponse(response)
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,11 +50,7 @@ internal class ExtensionGithubApi {
|
||||
return extensionsWithUpdate
|
||||
}
|
||||
|
||||
private fun parseResponse(response: Response): List<Extension.Available> {
|
||||
val text = response.body?.use { it.string() } ?: return emptyList()
|
||||
|
||||
val json = gson.fromJson<JsonArray>(text)
|
||||
|
||||
private fun parseResponse(json: JsonArray): List<Extension.Available> {
|
||||
return json
|
||||
.filter { element ->
|
||||
val versionName = element["version"].string
|
||||
@ -82,18 +64,18 @@ internal class ExtensionGithubApi {
|
||||
val versionName = element["version"].string
|
||||
val versionCode = element["code"].int
|
||||
val lang = element["lang"].string
|
||||
val icon = "$REPO_URL/icon/${apkName.replace(".apk", ".png")}"
|
||||
val icon = "$REPO_URL_PREFIX/icon/${apkName.replace(".apk", ".png")}"
|
||||
|
||||
Extension.Available(name, pkgName, versionName, versionCode, lang, apkName, icon)
|
||||
}
|
||||
}
|
||||
|
||||
fun getApkUrl(extension: Extension.Available): String {
|
||||
return "$REPO_URL/apk/${extension.apkName}"
|
||||
return "$REPO_URL_PREFIX/apk/${extension.apkName}"
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val REPO_URL = "https://raw.githubusercontent.com/inorichi/tachiyomi-extensions/repo"
|
||||
private const val EXT_URL = "$REPO_URL/index.json"
|
||||
const val BASE_URL = "https://raw.githubusercontent.com/"
|
||||
const val REPO_URL_PREFIX = "${BASE_URL}inorichi/tachiyomi-extensions/repo/"
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,42 @@
|
||||
package eu.kanade.tachiyomi.extension.api
|
||||
|
||||
import com.google.gson.JsonArray
|
||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
import retrofit2.http.GET
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
/**
|
||||
* Used to get the extension repo listing from GitHub.
|
||||
*/
|
||||
interface ExtensionGithubService {
|
||||
|
||||
companion object {
|
||||
private val client by lazy {
|
||||
val network: NetworkHelper by injectLazy()
|
||||
network.client.newBuilder()
|
||||
.addNetworkInterceptor { chain ->
|
||||
val originalResponse = chain.proceed(chain.request())
|
||||
originalResponse.newBuilder()
|
||||
.header("Content-Encoding", "gzip")
|
||||
.header("Content-Type", "application/json")
|
||||
.build()
|
||||
}
|
||||
.build()
|
||||
}
|
||||
|
||||
fun create(): ExtensionGithubService {
|
||||
val adapter = Retrofit.Builder()
|
||||
.baseUrl(ExtensionGithubApi.BASE_URL)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.client(client)
|
||||
.build()
|
||||
|
||||
return adapter.create(ExtensionGithubService::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@GET("${ExtensionGithubApi.REPO_URL_PREFIX}index.json.gz")
|
||||
suspend fun getRepo(): JsonArray
|
||||
}
|
@ -2,18 +2,16 @@ package eu.kanade.tachiyomi.network
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebResourceResponse
|
||||
import android.webkit.WebSettings
|
||||
import android.webkit.WebView
|
||||
import android.widget.Toast
|
||||
import androidx.webkit.WebViewClientCompat
|
||||
import androidx.webkit.WebViewFeature
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.util.lang.launchUI
|
||||
import eu.kanade.tachiyomi.util.system.WebViewClientCompat
|
||||
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||
import eu.kanade.tachiyomi.util.system.isOutdated
|
||||
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
||||
@ -116,7 +114,7 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
|
||||
}
|
||||
|
||||
// HTTP error codes are only received since M
|
||||
if (WebViewFeature.isFeatureSupported(WebViewFeature.RECEIVE_WEB_RESOURCE_ERROR) &&
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
|
||||
url == origRequestUrl && !challengeFound
|
||||
) {
|
||||
// The first request didn't return the challenge, abort.
|
||||
@ -124,13 +122,15 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onReceivedHttpError(
|
||||
override fun onReceivedErrorCompat(
|
||||
view: WebView,
|
||||
request: WebResourceRequest,
|
||||
errorResponse: WebResourceResponse
|
||||
errorCode: Int,
|
||||
description: String?,
|
||||
failingUrl: String,
|
||||
isMainFrame: Boolean
|
||||
) {
|
||||
if (request.isForMainFrame) {
|
||||
if (errorResponse.statusCode == 503) {
|
||||
if (isMainFrame) {
|
||||
if (errorCode == 503) {
|
||||
// Found the Cloudflare challenge page.
|
||||
challengeFound = true
|
||||
} else {
|
||||
|
@ -1,4 +1,4 @@
|
||||
package eu.kanade.tachiyomi.ui.browse.source
|
||||
package eu.kanade.tachiyomi.ui.browse
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
@ -23,8 +23,8 @@ class SourceDividerItemDecoration(context: Context) : RecyclerView.ItemDecoratio
|
||||
for (i in 0 until childCount - 1) {
|
||||
val child = parent.getChildAt(i)
|
||||
val holder = parent.getChildViewHolder(child)
|
||||
if (holder is SourceHolder &&
|
||||
parent.getChildViewHolder(parent.getChildAt(i + 1)) is SourceHolder
|
||||
if (holder is SourceListItem &&
|
||||
parent.getChildViewHolder(parent.getChildAt(i + 1)) is SourceListItem
|
||||
) {
|
||||
val top = child.bottom + child.marginBottom
|
||||
val bottom = top + divider.intrinsicHeight
|
@ -0,0 +1,5 @@
|
||||
package eu.kanade.tachiyomi.ui.browse
|
||||
|
||||
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||
|
||||
interface SourceListItem : SlicedHolder
|
@ -18,6 +18,7 @@ import eu.kanade.tachiyomi.extension.model.Extension
|
||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
||||
import eu.kanade.tachiyomi.ui.browse.SourceDividerItemDecoration
|
||||
import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsController
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
@ -75,7 +76,7 @@ open class ExtensionController :
|
||||
// Create recycler and set adapter.
|
||||
binding.recycler.layoutManager = LinearLayoutManager(view.context)
|
||||
binding.recycler.adapter = adapter
|
||||
binding.recycler.addItemDecoration(ExtensionDividerItemDecoration(view.context))
|
||||
binding.recycler.addItemDecoration(SourceDividerItemDecoration(view.context))
|
||||
adapter?.fastScroller = binding.fastScroller
|
||||
}
|
||||
|
||||
|
@ -1,48 +0,0 @@
|
||||
package eu.kanade.tachiyomi.ui.browse.extension
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.view.View
|
||||
import androidx.core.view.marginBottom
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
class ExtensionDividerItemDecoration(context: Context) : RecyclerView.ItemDecoration() {
|
||||
|
||||
private val divider: Drawable
|
||||
|
||||
init {
|
||||
val a = context.obtainStyledAttributes(intArrayOf(android.R.attr.listDivider))
|
||||
divider = a.getDrawable(0)!!
|
||||
a.recycle()
|
||||
}
|
||||
|
||||
override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
|
||||
val childCount = parent.childCount
|
||||
for (i in 0 until childCount - 1) {
|
||||
val child = parent.getChildAt(i)
|
||||
val holder = parent.getChildViewHolder(child)
|
||||
if (holder is ExtensionHolder &&
|
||||
parent.getChildViewHolder(parent.getChildAt(i + 1)) is ExtensionHolder
|
||||
) {
|
||||
val top = child.bottom + child.marginBottom
|
||||
val bottom = top + divider.intrinsicHeight
|
||||
val left = parent.paddingStart + holder.margin
|
||||
val right = parent.width - parent.paddingEnd - holder.margin
|
||||
|
||||
divider.setBounds(left, top, right, bottom)
|
||||
divider.draw(c)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemOffsets(
|
||||
outRect: Rect,
|
||||
view: View,
|
||||
parent: RecyclerView,
|
||||
state: RecyclerView.State
|
||||
) {
|
||||
outRect.set(0, 0, 0, divider.intrinsicHeight)
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.extension.model.Extension
|
||||
import eu.kanade.tachiyomi.extension.model.InstallStep
|
||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||
import eu.kanade.tachiyomi.ui.browse.SourceListItem
|
||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||
import io.github.mthli.slice.Slice
|
||||
import kotlinx.android.synthetic.main.extension_card_item.card
|
||||
@ -19,6 +20,7 @@ import kotlinx.android.synthetic.main.extension_card_item.warning
|
||||
|
||||
class ExtensionHolder(view: View, override val adapter: ExtensionAdapter) :
|
||||
BaseFlexibleViewHolder(view, adapter),
|
||||
SourceListItem,
|
||||
SlicedHolder {
|
||||
|
||||
override val slice = Slice(card).apply {
|
||||
|
@ -10,8 +10,8 @@ import eu.davidea.flexibleadapter.items.IFlexible
|
||||
import eu.kanade.tachiyomi.databinding.MigrationMangaControllerBinding
|
||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||
import eu.kanade.tachiyomi.ui.browse.SourceDividerItemDecoration
|
||||
import eu.kanade.tachiyomi.ui.browse.migration.search.SearchController
|
||||
import eu.kanade.tachiyomi.ui.browse.source.SourceDividerItemDecoration
|
||||
|
||||
class MigrationMangaController :
|
||||
NucleusController<MigrationMangaControllerBinding, MigrationMangaPresenter>,
|
||||
|
@ -8,8 +8,8 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.kanade.tachiyomi.databinding.MigrationSourcesControllerBinding
|
||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||
import eu.kanade.tachiyomi.ui.browse.SourceDividerItemDecoration
|
||||
import eu.kanade.tachiyomi.ui.browse.migration.manga.MigrationMangaController
|
||||
import eu.kanade.tachiyomi.ui.browse.source.SourceDividerItemDecoration
|
||||
|
||||
class MigrationSourcesController :
|
||||
NucleusController<MigrationSourcesControllerBinding, MigrationSourcesPresenter>(),
|
||||
|
@ -4,6 +4,7 @@ import android.view.View
|
||||
import eu.kanade.tachiyomi.source.icon
|
||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||
import eu.kanade.tachiyomi.ui.browse.SourceListItem
|
||||
import io.github.mthli.slice.Slice
|
||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.card
|
||||
import kotlinx.android.synthetic.main.source_main_controller_card_item.image
|
||||
@ -11,6 +12,7 @@ import kotlinx.android.synthetic.main.source_main_controller_card_item.title
|
||||
|
||||
class SourceHolder(view: View, override val adapter: SourceAdapter) :
|
||||
BaseFlexibleViewHolder(view, adapter),
|
||||
SourceListItem,
|
||||
SlicedHolder {
|
||||
|
||||
override val slice = Slice(card).apply {
|
||||
|
@ -30,6 +30,7 @@ import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||
import eu.kanade.tachiyomi.ui.browse.BrowseController
|
||||
import eu.kanade.tachiyomi.ui.browse.SourceDividerItemDecoration
|
||||
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceController
|
||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
|
||||
import eu.kanade.tachiyomi.ui.browse.source.latest.LatestUpdatesController
|
||||
@ -148,7 +149,7 @@ class SourceController :
|
||||
)
|
||||
}
|
||||
|
||||
SourceOptionsDialog(item, items).showDialog(router)
|
||||
SourceOptionsDialog(item.source.toString(), items).showDialog(router)
|
||||
}
|
||||
|
||||
private fun disableSource(source: Source) {
|
||||
@ -269,17 +270,17 @@ class SourceController :
|
||||
|
||||
class SourceOptionsDialog(bundle: Bundle? = null) : DialogController(bundle) {
|
||||
|
||||
private lateinit var item: SourceItem
|
||||
private lateinit var source: String
|
||||
private lateinit var items: List<Pair<String, () -> Unit>>
|
||||
|
||||
constructor(item: SourceItem, items: List<Pair<String, () -> Unit>>) : this() {
|
||||
this.item = item
|
||||
constructor(source: String, items: List<Pair<String, () -> Unit>>) : this() {
|
||||
this.source = source
|
||||
this.items = items
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(text = item.source.toString())
|
||||
.title(text = source)
|
||||
.listItems(
|
||||
items = items.map { it.first },
|
||||
waitForPositiveButton = false
|
||||
|
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.source.LocalSource
|
||||
import eu.kanade.tachiyomi.source.icon
|
||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
|
||||
import eu.kanade.tachiyomi.ui.base.holder.SlicedHolder
|
||||
import eu.kanade.tachiyomi.ui.browse.SourceListItem
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.view.setVectorCompat
|
||||
import io.github.mthli.slice.Slice
|
||||
@ -18,6 +19,7 @@ import kotlinx.android.synthetic.main.source_main_controller_card_item.title
|
||||
|
||||
class SourceHolder(private val view: View, override val adapter: SourceAdapter) :
|
||||
BaseFlexibleViewHolder(view, adapter),
|
||||
SourceListItem,
|
||||
SlicedHolder {
|
||||
|
||||
override val slice = Slice(card).apply {
|
||||
|
@ -103,7 +103,10 @@ class SourcePresenter(
|
||||
}
|
||||
|
||||
private fun updateLastUsedSource(sourceId: Long) {
|
||||
val source = (sourceManager.get(sourceId) as? CatalogueSource)?.let { SourceItem(it) }
|
||||
val source = (sourceManager.get(sourceId) as? CatalogueSource)?.let {
|
||||
val isPinned = it.id.toString() in preferences.pinnedSources().get()
|
||||
SourceItem(it, null, isPinned)
|
||||
}
|
||||
source?.let { view?.setLastUsedSource(it) }
|
||||
}
|
||||
|
||||
|
@ -46,6 +46,7 @@ import eu.kanade.tachiyomi.util.view.shrinkOnScroll
|
||||
import eu.kanade.tachiyomi.util.view.snack
|
||||
import eu.kanade.tachiyomi.widget.AutofitRecyclerView
|
||||
import eu.kanade.tachiyomi.widget.EmptyView
|
||||
import kotlinx.android.synthetic.main.main_activity.root_coordinator
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.drop
|
||||
import kotlinx.coroutines.flow.filter
|
||||
@ -403,7 +404,7 @@ open class BrowseSourceController(bundle: Bundle) :
|
||||
|
||||
binding.emptyView.show(message, actions)
|
||||
} else {
|
||||
snack = binding.catalogueView.snack(message, Snackbar.LENGTH_INDEFINITE) {
|
||||
snack = activity!!.root_coordinator?.snack(message, Snackbar.LENGTH_INDEFINITE) {
|
||||
setAction(R.string.action_retry, retryAction)
|
||||
}
|
||||
}
|
||||
|
@ -16,11 +16,14 @@ class TriStateSectionItem(filter: Filter.TriState) : TriStateItem(filter), ISect
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
return filter == (other as TriStateSectionItem).filter
|
||||
|
||||
other as TriStateSectionItem
|
||||
if (head != other.head) return false
|
||||
return filter == other.filter
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return filter.hashCode()
|
||||
return filter.hashCode() + (head?.hashCode() ?: 0)
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,11 +40,14 @@ class TextSectionItem(filter: Filter.Text) : TextItem(filter), ISectionable<Text
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
return filter == (other as TextSectionItem).filter
|
||||
|
||||
other as TextSectionItem
|
||||
if (head != other.head) return false
|
||||
return filter == other.filter
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return filter.hashCode()
|
||||
return filter.hashCode() + (head?.hashCode() ?: 0)
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,11 +64,14 @@ class CheckboxSectionItem(filter: Filter.CheckBox) : CheckboxItem(filter), ISect
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
return filter == (other as CheckboxSectionItem).filter
|
||||
|
||||
other as CheckboxSectionItem
|
||||
if (head != other.head) return false
|
||||
return filter == other.filter
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return filter.hashCode()
|
||||
return filter.hashCode() + (head?.hashCode() ?: 0)
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,10 +88,13 @@ class SelectSectionItem(filter: Filter.Select<*>) : SelectItem(filter), ISection
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
return filter == (other as SelectSectionItem).filter
|
||||
|
||||
other as SelectSectionItem
|
||||
if (head != other.head) return false
|
||||
return filter == other.filter
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return filter.hashCode()
|
||||
return filter.hashCode() + (head?.hashCode() ?: 0)
|
||||
}
|
||||
}
|
||||
|
@ -4,14 +4,11 @@ import android.app.Activity
|
||||
import android.app.SearchManager
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Toast
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import com.bluelinelabs.conductor.Conductor
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
@ -19,12 +16,12 @@ import com.bluelinelabs.conductor.Router
|
||||
import com.bluelinelabs.conductor.RouterTransaction
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.google.android.material.behavior.HideBottomViewOnScrollBehavior
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.Migrations
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
|
||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
|
||||
import eu.kanade.tachiyomi.databinding.MainActivityBinding
|
||||
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
|
||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
||||
@ -45,14 +42,12 @@ import eu.kanade.tachiyomi.ui.recent.updates.UpdatesController
|
||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
import eu.kanade.tachiyomi.util.lang.launchUI
|
||||
import eu.kanade.tachiyomi.util.system.toast
|
||||
import eu.kanade.tachiyomi.util.view.snack
|
||||
import java.util.Date
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlinx.android.synthetic.main.main_activity.appbar
|
||||
import kotlinx.android.synthetic.main.main_activity.tabs
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import timber.log.Timber
|
||||
|
||||
class MainActivity : BaseActivity<MainActivityBinding>() {
|
||||
@ -155,13 +150,12 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
||||
if (savedInstanceState == null) {
|
||||
// Show changelog prompt on update
|
||||
if (Migrations.upgrade(preferences) && !BuildConfig.DEBUG) {
|
||||
showUpdateInfoSnackbar()
|
||||
WhatsNewDialogController().showDialog(router)
|
||||
}
|
||||
}
|
||||
|
||||
setExtensionsBadge()
|
||||
preferences.extensionUpdatesCount().asFlow()
|
||||
.onEach { setExtensionsBadge() }
|
||||
preferences.extensionUpdatesCount()
|
||||
.asImmediateFlow { setExtensionsBadge() }
|
||||
.launchIn(scope)
|
||||
}
|
||||
|
||||
@ -382,32 +376,6 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun showUpdateInfoSnackbar() {
|
||||
val snack = binding.rootCoordinator.snack(
|
||||
getString(R.string.updated_version, BuildConfig.VERSION_NAME),
|
||||
Snackbar.LENGTH_INDEFINITE
|
||||
) {
|
||||
setAction(R.string.whats_new) {
|
||||
val url = "https://github.com/inorichi/tachiyomi/releases/tag/v${BuildConfig.VERSION_NAME}"
|
||||
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
|
||||
startActivity(intent)
|
||||
}
|
||||
|
||||
// Ensure the snackbar sits above the bottom nav
|
||||
view.updateLayoutParams<CoordinatorLayout.LayoutParams> {
|
||||
anchorId = binding.bottomNav.id
|
||||
anchorGravity = Gravity.TOP
|
||||
gravity = Gravity.TOP
|
||||
}
|
||||
}
|
||||
|
||||
// Manually handle dismiss delay since Snackbar.LENGTH_LONG is a too short
|
||||
launchIO {
|
||||
delay(10000)
|
||||
snack.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
// Shortcut actions
|
||||
const val SHORTCUT_LIBRARY = "eu.kanade.tachiyomi.SHOW_LIBRARY"
|
||||
|
@ -0,0 +1,24 @@
|
||||
package eu.kanade.tachiyomi.ui.main
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.core.net.toUri
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
|
||||
class WhatsNewDialogController(bundle: Bundle? = null) : DialogController(bundle) {
|
||||
|
||||
override fun onCreateDialog(savedViewState: Bundle?): Dialog {
|
||||
return MaterialDialog(activity!!)
|
||||
.title(text = activity!!.getString(R.string.updated_version, BuildConfig.VERSION_NAME))
|
||||
.positiveButton(android.R.string.ok)
|
||||
.neutralButton(R.string.whats_new) {
|
||||
val url = "https://github.com/inorichi/tachiyomi/releases/tag/v${BuildConfig.VERSION_NAME}"
|
||||
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
}
|
@ -14,6 +14,9 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.view.ActionMode
|
||||
import androidx.core.graphics.blue
|
||||
import androidx.core.graphics.green
|
||||
import androidx.core.graphics.red
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.ConcatAdapter
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@ -122,7 +125,6 @@ class MangaController :
|
||||
private val coverCache: CoverCache by injectLazy()
|
||||
|
||||
private val toolbarTextColor by lazy { view!!.context.getResourceColor(R.attr.colorOnPrimary) }
|
||||
private var toolbarTextAlpha = 255
|
||||
|
||||
private var mangaInfoAdapter: MangaInfoHeaderAdapter? = null
|
||||
private var chaptersHeaderAdapter: MangaChaptersHeaderAdapter? = null
|
||||
@ -157,6 +159,19 @@ class MangaController :
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
override fun getTitle(): String? {
|
||||
return manga?.title
|
||||
}
|
||||
|
||||
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
||||
super.onChangeStarted(handler, type)
|
||||
|
||||
// Hide toolbar title on enter
|
||||
if (type.isEnter) {
|
||||
updateToolbarTitleAlpha()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChangeEnded(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
||||
super.onChangeEnded(handler, type)
|
||||
if (manga == null || source == null) {
|
||||
@ -204,7 +219,6 @@ class MangaController :
|
||||
// Delayed in case we need to jump to chapters
|
||||
binding.recycler.post {
|
||||
updateToolbarTitleAlpha()
|
||||
setTitle(manga?.title)
|
||||
}
|
||||
}
|
||||
|
||||
@ -243,18 +257,14 @@ class MangaController :
|
||||
else -> min(binding.recycler.computeVerticalScrollOffset(), 255)
|
||||
}
|
||||
|
||||
if (calculatedAlpha != toolbarTextAlpha) {
|
||||
toolbarTextAlpha = calculatedAlpha
|
||||
|
||||
activity?.toolbar?.setTitleTextColor(
|
||||
Color.argb(
|
||||
toolbarTextAlpha,
|
||||
Color.red(toolbarTextColor),
|
||||
Color.green(toolbarTextColor),
|
||||
Color.blue(toolbarTextColor)
|
||||
)
|
||||
activity?.toolbar?.setTitleTextColor(
|
||||
Color.argb(
|
||||
calculatedAlpha,
|
||||
toolbarTextColor.red,
|
||||
toolbarTextColor.green,
|
||||
toolbarTextColor.blue
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private fun updateFilterIconState() {
|
||||
@ -881,7 +891,7 @@ class MangaController :
|
||||
val manga = presenter.manga
|
||||
presenter.downloadChapters(chapters)
|
||||
if (view != null && !manga.favorite) {
|
||||
binding.recycler.snack(view.context.getString(R.string.snack_add_to_library), Snackbar.LENGTH_INDEFINITE) {
|
||||
activity!!.root_coordinator?.snack(view.context.getString(R.string.snack_add_to_library), Snackbar.LENGTH_INDEFINITE) {
|
||||
setAction(R.string.action_add) {
|
||||
addToLibrary(manga)
|
||||
}
|
||||
|
@ -20,11 +20,11 @@ import android.view.WindowManager
|
||||
import android.view.animation.Animation
|
||||
import android.view.animation.AnimationUtils
|
||||
import android.widget.SeekBar
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.setPadding
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dev.chrisbanes.insetter.applySystemWindowInsetsToPadding
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
@ -238,7 +238,7 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
||||
R.id.action_settings -> ReaderSettingsSheet(this).show()
|
||||
R.id.action_custom_filter -> {
|
||||
val sheet = ReaderColorFilterSheet(this)
|
||||
// Remove dimmed backdrop so changes can be previewd
|
||||
// Remove dimmed backdrop so changes can be previewed
|
||||
.apply { window?.setDimAmount(0f) }
|
||||
|
||||
// Hide toolbars while sheet is open for better preview
|
||||
@ -288,16 +288,13 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
||||
onBackPressed()
|
||||
}
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.readerMenu) { _, insets ->
|
||||
if (!window.isDefaultBar()) {
|
||||
binding.readerMenu.setPadding(
|
||||
insets.systemWindowInsetLeft,
|
||||
insets.systemWindowInsetTop,
|
||||
insets.systemWindowInsetRight,
|
||||
insets.systemWindowInsetBottom
|
||||
)
|
||||
}
|
||||
insets
|
||||
if (!window.isDefaultBar()) {
|
||||
binding.readerMenu.applySystemWindowInsetsToPadding(
|
||||
left = true,
|
||||
top = true,
|
||||
right = true,
|
||||
bottom = true
|
||||
)
|
||||
}
|
||||
|
||||
// Init listeners on bottom menu
|
||||
@ -658,9 +655,11 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
|
||||
.onEach { setTrueColor(it) }
|
||||
.launchIn(scope)
|
||||
|
||||
preferences.cutoutShort().asFlow()
|
||||
.onEach { setCutoutShort(it) }
|
||||
.launchIn(scope)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
preferences.cutoutShort().asFlow()
|
||||
.onEach { setCutoutShort(it) }
|
||||
.launchIn(scope)
|
||||
}
|
||||
|
||||
preferences.keepScreenOn().asFlow()
|
||||
.onEach { setKeepScreenOn(it) }
|
||||
|
@ -80,29 +80,38 @@ abstract class PagerViewer(val activity: ReaderActivity) : BaseViewer {
|
||||
isIdle = state == ViewPager.SCROLL_STATE_IDLE
|
||||
}
|
||||
})
|
||||
pager.tapListener = { event ->
|
||||
pager.tapListener = f@{ event ->
|
||||
if (!config.tappingEnabled) {
|
||||
activity.toggleMenu()
|
||||
return@f
|
||||
}
|
||||
|
||||
val positionX = event.x
|
||||
val positionY = event.y
|
||||
val topSideTap = positionY < pager.height * 0.25f
|
||||
val bottomSideTap = positionY > pager.height * 0.75f
|
||||
val leftSideTap = positionX < pager.width * 0.33f
|
||||
val rightSideTap = positionX > pager.width * 0.66f
|
||||
|
||||
val invertMode = config.tappingInverted
|
||||
val invertVertical = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
||||
val invertHorizontal = invertMode == TappingInvertMode.HORIZONTAL || invertMode == TappingInvertMode.BOTH
|
||||
|
||||
if (this is VerticalPagerViewer) {
|
||||
val positionY = event.y
|
||||
val tappingInverted = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
||||
val topSideTap = positionY < pager.height * 0.33f && config.tappingEnabled
|
||||
val bottomSideTap = positionY > pager.height * 0.66f && config.tappingEnabled
|
||||
|
||||
when {
|
||||
topSideTap && !tappingInverted || bottomSideTap && tappingInverted -> moveLeft()
|
||||
bottomSideTap && !tappingInverted || topSideTap && tappingInverted -> moveRight()
|
||||
topSideTap && !invertVertical || bottomSideTap && invertVertical -> moveLeft()
|
||||
bottomSideTap && !invertVertical || topSideTap && invertVertical -> moveRight()
|
||||
|
||||
leftSideTap && !invertHorizontal || rightSideTap && invertHorizontal -> moveLeft()
|
||||
rightSideTap && !invertHorizontal || leftSideTap && invertHorizontal -> moveRight()
|
||||
|
||||
else -> activity.toggleMenu()
|
||||
}
|
||||
} else {
|
||||
val positionX = event.x
|
||||
val tappingInverted = invertMode == TappingInvertMode.HORIZONTAL || invertMode == TappingInvertMode.BOTH
|
||||
val leftSideTap = positionX < pager.width * 0.33f && config.tappingEnabled
|
||||
val rightSideTap = positionX > pager.width * 0.66f && config.tappingEnabled
|
||||
|
||||
when {
|
||||
leftSideTap && !tappingInverted || rightSideTap && tappingInverted -> moveLeft()
|
||||
rightSideTap && !tappingInverted || leftSideTap && tappingInverted -> moveRight()
|
||||
leftSideTap && !invertHorizontal || rightSideTap && invertHorizontal -> moveLeft()
|
||||
rightSideTap && !invertHorizontal || leftSideTap && invertHorizontal -> moveRight()
|
||||
|
||||
else -> activity.toggleMenu()
|
||||
}
|
||||
}
|
||||
|
@ -93,17 +93,30 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
|
||||
}
|
||||
}
|
||||
})
|
||||
recycler.tapListener = { event ->
|
||||
val positionY = event.rawY
|
||||
val invertMode = config.tappingInverted
|
||||
val topSideTap = positionY < recycler.height * 0.33f && config.tappingEnabled
|
||||
val bottomSideTap = positionY > recycler.height * 0.66f && config.tappingEnabled
|
||||
recycler.tapListener = f@{ event ->
|
||||
if (!config.tappingEnabled) {
|
||||
activity.toggleMenu()
|
||||
return@f
|
||||
}
|
||||
|
||||
val tappingInverted = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
||||
val positionX = event.rawX
|
||||
val positionY = event.rawY
|
||||
val topSideTap = positionY < recycler.height * 0.25f
|
||||
val bottomSideTap = positionY > recycler.height * 0.75f
|
||||
val leftSideTap = positionX < recycler.width * 0.33f
|
||||
val rightSideTap = positionX > recycler.width * 0.66f
|
||||
|
||||
val invertMode = config.tappingInverted
|
||||
val invertVertical = invertMode == TappingInvertMode.VERTICAL || invertMode == TappingInvertMode.BOTH
|
||||
val invertHorizontal = invertMode == TappingInvertMode.HORIZONTAL || invertMode == TappingInvertMode.BOTH
|
||||
|
||||
when {
|
||||
topSideTap && !tappingInverted || bottomSideTap && tappingInverted -> scrollUp()
|
||||
bottomSideTap && !tappingInverted || topSideTap && tappingInverted -> scrollDown()
|
||||
topSideTap && !invertVertical || bottomSideTap && invertVertical -> scrollUp()
|
||||
bottomSideTap && !invertVertical || topSideTap && invertVertical -> scrollDown()
|
||||
|
||||
leftSideTap && !invertHorizontal || rightSideTap && invertHorizontal -> scrollUp()
|
||||
rightSideTap && !invertHorizontal || leftSideTap && invertHorizontal -> scrollDown()
|
||||
|
||||
else -> activity.toggleMenu()
|
||||
}
|
||||
}
|
||||
|
@ -204,7 +204,6 @@ class SettingsGeneralController : SettingsController() {
|
||||
"sr",
|
||||
"sv",
|
||||
"th",
|
||||
"tl",
|
||||
"tr",
|
||||
"uk",
|
||||
"ur-rPK",
|
||||
|
@ -9,19 +9,18 @@ import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.webkit.WebChromeClient
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebView
|
||||
import android.widget.Toast
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.webkit.WebViewClientCompat
|
||||
import eu.kanade.tachiyomi.BuildConfig
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.databinding.WebviewActivityBinding
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
||||
import eu.kanade.tachiyomi.util.system.WebViewClientCompat
|
||||
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.system.openInBrowser
|
||||
@ -100,8 +99,8 @@ class WebViewActivity : BaseActivity<WebviewActivityBinding>() {
|
||||
}
|
||||
|
||||
binding.webview.webViewClient = object : WebViewClientCompat() {
|
||||
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
|
||||
view.loadUrl(request.url.toString())
|
||||
override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
|
||||
view.loadUrl(url)
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -36,13 +36,15 @@ fun syncChaptersWithSource(
|
||||
// Chapters from db.
|
||||
val dbChapters = db.getChapters(manga).executeAsBlocking()
|
||||
|
||||
val sourceChapters = rawSourceChapters.mapIndexed { i, sChapter ->
|
||||
Chapter.create().apply {
|
||||
copyFrom(sChapter)
|
||||
manga_id = manga.id
|
||||
source_order = i
|
||||
val sourceChapters = rawSourceChapters
|
||||
.distinctBy { it.url }
|
||||
.mapIndexed { i, sChapter ->
|
||||
Chapter.create().apply {
|
||||
copyFrom(sChapter)
|
||||
manga_id = manga.id
|
||||
source_order = i
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Chapters from the source not in db.
|
||||
val toAdd = mutableListOf<Chapter>()
|
||||
|
@ -34,11 +34,14 @@ object DiskUtil {
|
||||
* Gets the available space for the disk that a file path points to, in bytes.
|
||||
*/
|
||||
fun getAvailableStorageSpace(f: UniFile): Long {
|
||||
val stat = StatFs(f.filePath)
|
||||
val availBlocks = stat.availableBlocksLong
|
||||
val blockSize = stat.blockSizeLong
|
||||
val stat = try {
|
||||
StatFs(f.filePath)
|
||||
} catch (_: Exception) {
|
||||
// Assume that exception is thrown when path is on external storage
|
||||
StatFs(Environment.getExternalStorageDirectory().path)
|
||||
}
|
||||
|
||||
return availBlocks * blockSize
|
||||
return stat.availableBlocksLong * stat.blockSizeLong
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,91 @@
|
||||
package eu.kanade.tachiyomi.util.system
|
||||
|
||||
import android.annotation.TargetApi
|
||||
import android.os.Build
|
||||
import android.webkit.WebResourceError
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebResourceResponse
|
||||
import android.webkit.WebView
|
||||
import android.webkit.WebViewClient
|
||||
|
||||
@Suppress("OverridingDeprecatedMember")
|
||||
abstract class WebViewClientCompat : WebViewClient() {
|
||||
|
||||
open fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
open fun shouldInterceptRequestCompat(view: WebView, url: String): WebResourceResponse? {
|
||||
return null
|
||||
}
|
||||
|
||||
open fun onReceivedErrorCompat(
|
||||
view: WebView,
|
||||
errorCode: Int,
|
||||
description: String?,
|
||||
failingUrl: String,
|
||||
isMainFrame: Boolean
|
||||
) {
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.N)
|
||||
final override fun shouldOverrideUrlLoading(
|
||||
view: WebView,
|
||||
request: WebResourceRequest
|
||||
): Boolean {
|
||||
return shouldOverrideUrlCompat(view, request.url.toString())
|
||||
}
|
||||
|
||||
final override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
|
||||
return shouldOverrideUrlCompat(view, url)
|
||||
}
|
||||
|
||||
final override fun shouldInterceptRequest(
|
||||
view: WebView,
|
||||
request: WebResourceRequest
|
||||
): WebResourceResponse? {
|
||||
return shouldInterceptRequestCompat(view, request.url.toString())
|
||||
}
|
||||
|
||||
final override fun shouldInterceptRequest(
|
||||
view: WebView,
|
||||
url: String
|
||||
): WebResourceResponse? {
|
||||
return shouldInterceptRequestCompat(view, url)
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
final override fun onReceivedError(
|
||||
view: WebView,
|
||||
request: WebResourceRequest,
|
||||
error: WebResourceError
|
||||
) {
|
||||
onReceivedErrorCompat(
|
||||
view, error.errorCode, error.description?.toString(),
|
||||
request.url.toString(), request.isForMainFrame
|
||||
)
|
||||
}
|
||||
|
||||
final override fun onReceivedError(
|
||||
view: WebView,
|
||||
errorCode: Int,
|
||||
description: String?,
|
||||
failingUrl: String
|
||||
) {
|
||||
onReceivedErrorCompat(view, errorCode, description, failingUrl, failingUrl == view.url)
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
final override fun onReceivedHttpError(
|
||||
view: WebView,
|
||||
request: WebResourceRequest,
|
||||
error: WebResourceResponse
|
||||
) {
|
||||
onReceivedErrorCompat(
|
||||
view, error.statusCode, error.reasonPhrase,
|
||||
request.url
|
||||
.toString(),
|
||||
request.isForMainFrame
|
||||
)
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/holder"
|
||||
style="@style/Theme.Widget.CardView.Item"
|
||||
android:padding="0dp">
|
||||
@ -19,7 +20,8 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintDimensionRatio="h,3:2"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:src="@mipmap/ic_launcher" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
@ -38,13 +40,15 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:textAppearance="@style/TextAppearance.Medium" />
|
||||
android:textAppearance="@style/TextAppearance.Medium"
|
||||
tools:text="Title" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/manga_subtitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp" />
|
||||
android:layout_marginTop="4dp"
|
||||
tools:text="Subtitle" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@ -59,7 +63,7 @@
|
||||
app:layout_constraintEnd_toStartOf="@+id/resume"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_delete_24dp"
|
||||
app:tint="?attr/colorOnPrimary" />
|
||||
app:tint="?android:attr/textColorPrimary" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/resume"
|
||||
@ -73,7 +77,7 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_play_arrow_24dp"
|
||||
app:tint="?attr/colorOnPrimary" />
|
||||
app:tint="?android:attr/textColorPrimary" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
android:id="@+id/downloaded_only"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/pale_green"
|
||||
android:background="@color/green"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
android:layout_gravity="center"
|
||||
android:padding="4dp"
|
||||
android:text="@string/label_downloaded_only"
|
||||
android:textColor="@color/md_black_1000" />
|
||||
android:textColor="@color/md_white_1000" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
@ -41,13 +41,13 @@
|
||||
style="@style/TextAppearance.Regular.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/pale_green"
|
||||
android:background="@color/green"
|
||||
android:paddingStart="3dp"
|
||||
android:paddingTop="1dp"
|
||||
android:paddingEnd="3dp"
|
||||
android:paddingBottom="1dp"
|
||||
android:text="@string/local_source_badge"
|
||||
android:textColor="@color/md_black_1000"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
@ -56,12 +56,12 @@
|
||||
style="@style/TextAppearance.Regular.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/pale_green"
|
||||
android:background="@color/green"
|
||||
android:paddingStart="3dp"
|
||||
android:paddingTop="1dp"
|
||||
android:paddingEnd="3dp"
|
||||
android:paddingBottom="1dp"
|
||||
android:textColor="@color/md_black_1000"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:visibility="gone"
|
||||
tools:text="120"
|
||||
tools:visibility="visible" />
|
||||
|
@ -41,13 +41,13 @@
|
||||
style="@style/TextAppearance.Regular.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/pale_green"
|
||||
android:background="@color/green"
|
||||
android:paddingStart="3dp"
|
||||
android:paddingTop="1dp"
|
||||
android:paddingEnd="3dp"
|
||||
android:paddingBottom="1dp"
|
||||
android:text="@string/local_source_badge"
|
||||
android:textColor="@color/md_black_1000"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
@ -56,12 +56,12 @@
|
||||
style="@style/TextAppearance.Regular.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/pale_green"
|
||||
android:background="@color/green"
|
||||
android:paddingStart="3dp"
|
||||
android:paddingTop="1dp"
|
||||
android:paddingEnd="3dp"
|
||||
android:paddingBottom="1dp"
|
||||
android:textColor="@color/md_black_1000"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:visibility="gone"
|
||||
tools:text="120"
|
||||
tools:visibility="visible" />
|
||||
|
@ -54,14 +54,14 @@
|
||||
style="@style/TextAppearance.Regular.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/pale_green"
|
||||
android:background="@color/green"
|
||||
android:maxLines="1"
|
||||
android:paddingStart="3dp"
|
||||
android:paddingTop="1dp"
|
||||
android:paddingEnd="3dp"
|
||||
android:paddingBottom="1dp"
|
||||
android:text="@string/local_source_badge"
|
||||
android:textColor="@color/md_black_1000"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
@ -70,13 +70,13 @@
|
||||
style="@style/TextAppearance.Regular.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/pale_green"
|
||||
android:background="@color/green"
|
||||
android:maxLines="1"
|
||||
android:paddingStart="3dp"
|
||||
android:paddingTop="1dp"
|
||||
android:paddingEnd="3dp"
|
||||
android:paddingBottom="1dp"
|
||||
android:textColor="@color/md_black_1000"
|
||||
android:textColor="@color/md_white_1000"
|
||||
android:visibility="gone"
|
||||
tools:text="122"
|
||||
tools:visibility="visible" />
|
||||
|
@ -86,7 +86,7 @@
|
||||
<string name="portrait">ঘুরান</string>
|
||||
<string name="landscape">আড়াআড়ি ভাবে</string>
|
||||
<string name="default_columns">ডিফল্ট</string>
|
||||
<string name="pref_library_update_interval">"মাংগাশালা আপডেট কাল"</string>
|
||||
<string name="pref_library_update_interval">মাংগাশালা আপডেট কাল</string>
|
||||
<string name="update_never">সারগ্রন্থ</string>
|
||||
<string name="update_1hour">ঘন্টায়</string>
|
||||
<string name="update_2hour">প্রতি ২ ঘন্টায়</string>
|
||||
@ -178,7 +178,9 @@
|
||||
<string name="pref_backup_slots">স্বয়ংক্রিয় ব্যাকআপের উচ্চমাত্রা</string>
|
||||
<string name="backup_created">পুনরুদ্ধার তৈরী হয়েছে</string>
|
||||
<string name="restore_completed">পুনরুদ্ধার হয়েছে</string>
|
||||
<string name="backup_restore_content">পুনরুদ্ধারের সন্ধান করার জন্য উৎস ব্যবহার করা হয়, ক্যারিয়ারের খরচগুলি প্রযোজ্য হতে পারে। এছাড়াও নিশ্চিত করুন যে আপনি পুনরুদ্ধারের আগে উৎসগুলোতে যথাযথভাবে লগ-ইন করা আছেন যেখানে প্রোয়জন হয়।</string>
|
||||
<string name="backup_restore_content">পুনরুদ্ধারের সন্ধান করার জন্য উৎস ব্যবহার করা হয়, ক্যারিয়ারের খরচগুলি প্রযোজ্য হতে পারে। এছাড়াও নিশ্চিত করুন যে আপনি
|
||||
\n
|
||||
\nপুনরুদ্ধারের আগে উৎসগুলোতে যথাযথভাবে লগ-ইন করা আছেন যেখানে প্রোয়জন হয়।</string>
|
||||
<string name="backup_choice">আপনি কি ব্যাকআপ করতে ইচ্ছুক?</string>
|
||||
<string name="restoring_backup">ব্যাকআপ পুনরুদ্ধার হচ্ছে</string>
|
||||
<string name="creating_backup">ব্যাকআপ তৈরী হচ্ছে</string>
|
||||
|
@ -195,7 +195,7 @@
|
||||
<string name="update_check_notification_file_download">Stáhnout aktualizaci</string>
|
||||
<string name="update_check_notification_download_complete">Stahování dokončeno</string>
|
||||
<string name="update_check_notification_download_error">Chyba při stahování</string>
|
||||
<string name="update_check_notification_update_available">Dostupná aktualizace</string>
|
||||
<string name="update_check_notification_update_available">Dostupná aktualizace!</string>
|
||||
<string name="information_no_recent">Žádné nedávné kapitoly</string>
|
||||
<string name="information_no_recent_manga">Žádné nedávno čtené mangy</string>
|
||||
<string name="download_notifier_title_error">Chyba</string>
|
||||
@ -349,6 +349,7 @@
|
||||
<string name="pref_restore_backup_summ">Obnovit knihovnu ze záložního souboru</string>
|
||||
<string name="pref_backup_slots">Maximální automatické zálohování</string>
|
||||
<string name="backup_restore_content">Obnovení používá zdroje pro načítání dat, mohou být účtovány poplatky od operátora (v případě použití datového připojení).
|
||||
\n
|
||||
\nTaké se před obnovením ujistěte, že jste správně přihlášeni do zdrojů, které to vyžadují.</string>
|
||||
<string name="choices_reset">Volby dialogu se vynulují</string>
|
||||
<string name="login_title">Přihlásit se do %1$s</string>
|
||||
@ -401,4 +402,5 @@
|
||||
<string name="logout_title">Odhlásit z %1$s\?</string>
|
||||
<string name="logout_success">Byl jste odhlášen</string>
|
||||
<string name="paused">Pozastaveno</string>
|
||||
<string name="label_more">Více</string>
|
||||
</resources>
|
@ -634,4 +634,5 @@
|
||||
<string name="group_downloader">Descargas</string>
|
||||
<string name="channel_complete">Completo</string>
|
||||
<string name="channel_progress">Progreso</string>
|
||||
<string name="channel_errors">Errores</string>
|
||||
</resources>
|
@ -603,4 +603,5 @@
|
||||
<string name="channel_complete">पूर्ण</string>
|
||||
<string name="channel_progress">प्रगती</string>
|
||||
<string name="download_notifier_download_finish">डाउनलोड सम्पन्न हुआ</string>
|
||||
<string name="channel_errors">त्रुटियाँ</string>
|
||||
</resources>
|
@ -191,7 +191,7 @@
|
||||
<string name="action_select_inverse">Kiválasztás megfordítása</string>
|
||||
<string name="action_sort_last_checked">Utoljára ellenőrizve</string>
|
||||
<string name="action_menu">Menü</string>
|
||||
<string name="confirm_exit">A befejezéshez nyomd meg újfent a Vissza gombot!</string>
|
||||
<string name="confirm_exit">A befejezéshez nyomd meg újfent a Vissza gombot</string>
|
||||
<string name="unlock_app">Tachiyomi feloldása</string>
|
||||
<string name="information_empty_library">A könyvtárad üres. Adj hozzá új sorozatokat a Böngészőből.</string>
|
||||
<string name="information_no_recent">Nincs új frissítés</string>
|
||||
@ -205,7 +205,7 @@
|
||||
<string name="download_notifier_page_error">Egy oldal hiányzik a könyvtárból</string>
|
||||
<string name="download_notifier_unknown_error">Egy váratlan hiba miatt nem sikerült letölteni a fejezetet</string>
|
||||
<string name="download_notifier_title_error">Hiba</string>
|
||||
<string name="information_webview_outdated">A jobb kompatibilitás érdekében kérlek, frissítsd a WebView alkalmazást!</string>
|
||||
<string name="information_webview_outdated">A jobb kompatibilitás érdekében kérlek, frissítsd a WebView alkalmazást</string>
|
||||
<plurals name="update_check_notification_ext_updates">
|
||||
<item quantity="one">Egy új bővítményfrissítés érhető el</item>
|
||||
<item quantity="other">%d bővítményfrissítés érhető el</item>
|
||||
|
@ -592,4 +592,5 @@
|
||||
<string name="channel_complete">Lengkap</string>
|
||||
<string name="channel_progress">Kemajuan</string>
|
||||
<string name="download_notifier_download_finish">Unduhan selesai</string>
|
||||
<string name="channel_errors">error</string>
|
||||
</resources>
|
@ -87,7 +87,7 @@
|
||||
<string name="action_webview_back">უკან</string>
|
||||
<string name="action_webview_forward">წინ</string>
|
||||
<string name="action_webview_refresh">განახლება</string>
|
||||
<string name="loading">იტვირთება...</string>
|
||||
<string name="loading">იტვირთება…</string>
|
||||
<string name="app_not_available">აპლიკაცია არ არის ხელმისაწვდომი</string>
|
||||
<string name="short_recent_updates">განახლებები</string>
|
||||
<string name="pref_category_general">ზოგადი</string>
|
||||
@ -302,7 +302,7 @@
|
||||
<string name="logout_success">გამოსვლა წარმატებით მოხერხდა</string>
|
||||
<string name="invalid_login">შესვლა ვერ მოხერხდა</string>
|
||||
<string name="unknown_error">დაფიქსირდა უცნობი შეცდომა</string>
|
||||
<string name="library_search_hint">სათაური ან ავტორი...</string>
|
||||
<string name="library_search_hint">სათაური ან ავტორი…</string>
|
||||
<string name="updating_category">კატეგორია ახლდება</string>
|
||||
<string name="local_source_badge">ლოკალური</string>
|
||||
<string name="confirm_delete_manga">დარწმუნებული ხართ რომ გსურთ წაშალოთ შერჩეული მანგა?</string>
|
||||
@ -320,7 +320,7 @@
|
||||
<string name="last_used_source">ბოლოს გამოყენებული</string>
|
||||
<string name="invalid_combination">ნაგულისხმევის მონიშვნა შეუძლებელია სხვა კატეგორიასთან ერთად</string>
|
||||
<string name="added_to_library">მანგა დაემატა თქვენს ბიბლიოთეკას</string>
|
||||
<string name="action_global_search_hint">გლობალური ძებნა...</string>
|
||||
<string name="action_global_search_hint">გლობალური ძებნა…</string>
|
||||
<string name="latest">უკანასკნელი</string>
|
||||
<string name="browse">დათვალიერება</string>
|
||||
<string name="manga_detail_tab">ინფორმაცია</string>
|
||||
@ -338,7 +338,8 @@
|
||||
<string name="manga_info_expand">მეტი ინფორმაციის ჩვენება</string>
|
||||
<string name="manga_info_collapse">ნაკლები ინფორმაციის ჩვენება</string>
|
||||
<string name="delete_downloads_for_manga">გადმოწერილი თავების წაშლა</string>
|
||||
<string name="copied_to_clipboard">დაკოპირებულია ბუფერში:\\n%1$s</string>
|
||||
<string name="copied_to_clipboard">დაკოპირებულია ბუფერში:
|
||||
\n%1$s</string>
|
||||
<string name="source_not_installed">წყარო არ არის დაინსტალირებული: %1$s</string>
|
||||
<string name="snack_add_to_library">დავამატო მანგა ბიბლიოთეკაში?</string>
|
||||
<string name="manga_chapters_tab">თავები</string>
|
||||
@ -392,9 +393,9 @@
|
||||
<string name="snack_categories_deleted">კატეგორიები წაიშალა</string>
|
||||
<string name="dialog_with_checkbox_remove_description">ეს წაშლის ამ თავის წაკითხვის თარიღს. დარწმუნებული ხართ?</string>
|
||||
<string name="picture_saved">სურათი შენახულია</string>
|
||||
<string name="saving_picture">სურათი ინახება...</string>
|
||||
<string name="saving_picture">სურათი ინახება</string>
|
||||
<string name="options">პარამეტრები</string>
|
||||
<string name="downloading">გადმოწერა...</string>
|
||||
<string name="downloading">გადმოწერა…</string>
|
||||
<string name="download_progress">გადმოწერილია %1$d%%</string>
|
||||
<string name="chapter_progress">გვერდი: %1$d</string>
|
||||
<string name="chapter_subtitle">თავი: %1$d</string>
|
||||
@ -409,7 +410,7 @@
|
||||
<string name="transition_previous">წინა:</string>
|
||||
<string name="transition_no_next">შემდეგი თავი არ არის</string>
|
||||
<string name="transition_no_previous">წინა თავი არ არის</string>
|
||||
<string name="transition_pages_loading">გვერდები იტვირთება...</string>
|
||||
<string name="transition_pages_loading">გვერდები იტვირთება…</string>
|
||||
<string name="transition_pages_error">გვერდების ჩატვირთვა ვერ მოხერხდა: %1$s</string>
|
||||
<string name="page_list_empty_error">ვერცერთი გვერდი ვერ მოიძევნა</string>
|
||||
<string name="updating_library">ბიბლიოთეკის განახლება</string>
|
||||
@ -427,7 +428,7 @@
|
||||
<string name="notification_chapters_single_and_more">თავი %1$s და %2$d მეტი</string>
|
||||
<string name="notification_chapters_multiple">თავები %1$s</string>
|
||||
<string name="notification_cover_update_failed">ვერ მოხერხდა ყდის განახლება</string>
|
||||
<string name="notification_first_add_to_library">"გთხოვთ ჯერ დაამატოთ მანგა თქვენს ბიბლიოთეკაში "</string>
|
||||
<string name="notification_first_add_to_library">გთხოვთ ჯერ დაამატოთ მანგა თქვენს ბიბლიოთეკაში</string>
|
||||
<string name="notification_not_connected_to_ac_title">სინქრონიზაცია გაუქმებულია</string>
|
||||
<string name="notification_no_connection_title">სინქრონიზაცია გაუქმებულია</string>
|
||||
<string name="notification_not_connected_to_ac_body">არ არის შეერთებული დენის წყაროსთან</string>
|
||||
@ -437,10 +438,10 @@
|
||||
<string name="file_select_icon">ამოირჩიე მალსახმობის ნიშნაკი</string>
|
||||
<string name="update_check_confirm">გადმოწერა</string>
|
||||
<string name="update_check_ignore">დაიგნორება</string>
|
||||
<string name="update_check_no_new_updates">"განახლება ვერ მოიძებნა "</string>
|
||||
<string name="update_check_look_for_updates">განახლების ძებნა...</string>
|
||||
<string name="update_check_no_new_updates">განახლება ვერ მოიძებნა</string>
|
||||
<string name="update_check_look_for_updates">განახლების ძებნა…</string>
|
||||
<string name="update_check_notification_file_download">განახლების გადმოწერა</string>
|
||||
<string name="update_check_notification_download_in_progress">გადმოწერა...</string>
|
||||
<string name="update_check_notification_download_in_progress">გადმოწერა…</string>
|
||||
<string name="update_check_notification_download_complete">გადმოწერა დასრულებულია</string>
|
||||
<string name="update_check_notification_download_error">გადმოწერის შეცდომა</string>
|
||||
<string name="update_check_notification_update_available">ხელმისაწვდომია ახალი ვერსია!</string>
|
||||
@ -513,10 +514,16 @@
|
||||
<string name="download_notifier_page_error">გვერდი გამოტოვებულია დირექტორიაში</string>
|
||||
<string name="action_enable_all">ჩართე ყველა</string>
|
||||
<string name="action_disable_all">გამორთე ყველა</string>
|
||||
<string name="secure_screen_summary">"აპლიკაციებს შორის გადართვისას შემადგენლობის დამალვა და სკრინშოტების დაბლოკვა "</string>
|
||||
<string name="untrusted_extension_message">ეს დამატება ხელმოწერილია უცნობი სერთიფიკატის მიერ და არ არის აქტივირებული\\n\\nმავნე დამატებას შეუძლია წაიკითხოს შესვლის მონაცემები შენახული ამ აპლიკაციაში ან გაუშვას თავისი კოდი \\n\\nამ სერტიფიკატის ნდობით თქვენ თქვენს თავზე იღებთ რისკებს და პასუხისმგებლობას.</string>
|
||||
<string name="secure_screen_summary">აპლიკაციებს შორის გადართვისას შემადგენლობის დამალვა და სკრინშოტების დაბლოკვა</string>
|
||||
<string name="untrusted_extension_message">ეს დამატება ხელმოწერილია უცნობი სერთიფიკატის მიერ და არ არის აქტივირებული\\n\\nმავნე დამატებას შეუძლია
|
||||
\n
|
||||
\nწაიკითხოს შესვლის მონაცემები შენახული ამ აპლიკაციაში ან გაუშვას თავისი კოდი \\n\\nამ სერტიფიკატის ნდობით თქვენ
|
||||
\n
|
||||
\nთქვენს თავზე იღებთ რისკებს და პასუხისმგებლობას.</string>
|
||||
<string name="tracking_info">ცალმხრივი სინქრონიზაცია თვალყურის სადევნებელ სერვისებში თავების პროგრესის განსაახლებლად. მიადევნე თვალყური ინდივიდუალურ მანგებს მათი ჩანართებიდან</string>
|
||||
<string name="backup_restore_content">აღდგენა იყენებს წყაროებს მონაცემების გადმოსაწერად.\\n\\nდარწმუნდი რომ გაქვს დაინსტალირებული ყველა საჭირო დამატება და ხარ დალოგინებული წყაროებში და თვალყურის სადევნებელ სერვისებში ააღდგენამდე.</string>
|
||||
<string name="backup_restore_content">აღდგენა იყენებს წყაროებს მონაცემების გადმოსაწერად.\\n\\nდარწმუნდი რომ გაქვს დაინსტალირებული ყველა
|
||||
\n
|
||||
\nსაჭირო დამატება და ხარ დალოგინებული წყაროებში და თვალყურის სადევნებელ სერვისებში ააღდგენამდე.</string>
|
||||
<string name="pref_refresh_library_tracking_summary">ანახლებს სტატუსს, შეფასებას და ბოლო თავს წაკითხულს თვალყურის სადევნებელ სერვისებიდან</string>
|
||||
<string name="download_notifier_page_ready_error">გვერდი ვერ ჩაიტვირთა</string>
|
||||
<string name="filter_mode_overlay">გადაფარება</string>
|
||||
|
@ -283,12 +283,12 @@
|
||||
<string name="update_check_confirm">다운로드</string>
|
||||
<string name="update_check_ignore">무시</string>
|
||||
<string name="update_check_no_new_updates">새로운 업데이트 없음</string>
|
||||
<string name="update_check_look_for_updates">"업데이트를 찾는중 "</string>
|
||||
<string name="update_check_look_for_updates">업데이트를 찾는중…</string>
|
||||
<string name="update_check_notification_file_download">업데이트 다운로드</string>
|
||||
<string name="update_check_notification_download_in_progress">다운로드 진행중</string>
|
||||
<string name="update_check_notification_download_in_progress">다운로드 진행중…</string>
|
||||
<string name="update_check_notification_download_complete">다운로드 완료됨</string>
|
||||
<string name="update_check_notification_download_error">다운로드 오류</string>
|
||||
<string name="update_check_notification_update_available">업데이트 이용 가능</string>
|
||||
<string name="update_check_notification_update_available">업데이트 이용 가능!</string>
|
||||
<string name="description_cover">만화 표지</string>
|
||||
<string name="information_no_downloads">다운로드 없음</string>
|
||||
<string name="information_no_recent">최신 챕터 없음</string>
|
||||
@ -339,7 +339,7 @@
|
||||
<string name="invalid_combination">기본 카테고리는 다른 카테고리와 함께 선택될 수 없습니다</string>
|
||||
<string name="added_to_library">만화가 서재에 추가되었습니다</string>
|
||||
<string name="browse">찾아보기</string>
|
||||
<string name="manga_not_in_db">이 만화는 데이터베이스에서 제거되었습니다!</string>
|
||||
<string name="manga_not_in_db">이 만화는 데이터베이스에서 제거되었습니다</string>
|
||||
<string name="licensed">판권작</string>
|
||||
<string name="copied_to_clipboard">클립보드에 %1$s 복사됨</string>
|
||||
<string name="manga_chapter_no_title">제목 없음</string>
|
||||
|
@ -205,21 +205,21 @@
|
||||
<string name="creating_backup">Oppretter sikkerhetskopi</string>
|
||||
<string name="pref_clear_chapter_cache">Tøm kapittelhurtiglager</string>
|
||||
<string name="used_cache">Brukt: %1$s</string>
|
||||
<string name="cache_deleted">Hurtiglager tømt. %1$d filer har blitt slettet.</string>
|
||||
<string name="cache_deleted">Hurtiglager tømt. %1$d filer har blitt slettet</string>
|
||||
<string name="cache_delete_error">Feil oppstod under tømming av hurtiglager</string>
|
||||
<string name="pref_clear_cookies">Tøm kaker</string>
|
||||
<string name="cookies_cleared">Kaker tømt</string>
|
||||
<string name="choices_reset">Dialogvinduvalg tilbakestilt</string>
|
||||
<string name="pref_clear_database">Tøm database</string>
|
||||
<string name="pref_clear_database_summary">Slett manga og kapittel som ikke finnes i biblioteket ditt</string>
|
||||
<string name="clear_database_confirmation">Er du sikker\? Leste kapittel og framdrift for manga som ikke er i biblioteket vil gå tapt.</string>
|
||||
<string name="clear_database_confirmation">Er du sikker\? Leste kapittel og framdrift for manga som ikke er i biblioteket vil gå tapt</string>
|
||||
<string name="clear_database_completed">Oppføringer slettet</string>
|
||||
<string name="pref_refresh_library_tracking">Gjenopprett sporingsmetadata</string>
|
||||
<string name="pref_refresh_library_tracking_summary">Oppdaterer status, poengsum og sist leste kapittel fra sporingstjenestene</string>
|
||||
<string name="version">Versjon</string>
|
||||
<string name="build_time">Byggtid</string>
|
||||
<string name="pref_enable_acra">Send kræsjrapporter</string>
|
||||
<string name="pref_acra_summary">Hjelper til med fiksing av feil. Ingen sensitiv data vil bli sendt.</string>
|
||||
<string name="pref_acra_summary">Hjelper til med fiksing av feil. Ingen sensitiv data vil bli sendt</string>
|
||||
<string name="login_title">Innlogging for %1$s</string>
|
||||
<string name="username">Brukernavn</string>
|
||||
<string name="password">Passord</string>
|
||||
@ -295,7 +295,7 @@
|
||||
<string name="track_start_date">Startet</string>
|
||||
<string name="track_type">Type</string>
|
||||
<string name="track_author">Forfatter</string>
|
||||
<string name="error_category_exists">En kategori ved dette navnet finnes allerede.</string>
|
||||
<string name="error_category_exists">En kategori ved dette navnet finnes allerede!</string>
|
||||
<string name="snack_categories_deleted">Kategorier slettet</string>
|
||||
<string name="dialog_with_checkbox_remove_description">Lesningsdato for dette kapittelet vil bli fjernet. Er du sikker\?</string>
|
||||
<string name="dialog_with_checkbox_reset">Tilbakestill alle kapittel for denne mangaen</string>
|
||||
@ -348,7 +348,7 @@
|
||||
\nForsikre deg om at du har installert alle nødvendige utvidelser og er logget inn i kilder og sporingstjenester før du gjenoppretter.</string>
|
||||
<string name="confirm_set_image_as_cover">Bruk dette bildet som omslag\?</string>
|
||||
<string name="migration_info">Trykk for å velge kilde å migrere fra</string>
|
||||
<string name="download_queue_error">Kunne ikke laste ned kapitler. Du kan prøve igjen i nedlastingsdelen.</string>
|
||||
<string name="download_queue_error">Kunne ikke laste ned kapitler. Du kan prøve igjen i nedlastingsdelen</string>
|
||||
<string name="notification_update_progress">Oppdateringsfremdrift: %1$d/%2$d</string>
|
||||
<string name="notification_first_add_to_library">Legg til mangaen i biblioteket ditt før du gjør dette</string>
|
||||
<string name="notification_not_connected_to_ac_title">Synkronisering avbrutt</string>
|
||||
|
@ -603,4 +603,5 @@
|
||||
<string name="group_backup_restore">Backup e restauração</string>
|
||||
<string name="group_downloader">Downloads</string>
|
||||
<string name="channel_complete">Concluído</string>
|
||||
<string name="channel_errors">Erros</string>
|
||||
</resources>
|
@ -49,7 +49,7 @@
|
||||
<string name="action_stop">Стоп</string>
|
||||
<string name="action_update">Обновить</string>
|
||||
<string name="action_update_library">Обновить библиотеку</string>
|
||||
<string name="all">Всё</string>
|
||||
<string name="all">Все</string>
|
||||
<string name="backup">Резервная копия</string>
|
||||
<string name="black_background">Черный</string>
|
||||
<string name="build_time">Дата сборки</string>
|
||||
@ -621,4 +621,5 @@
|
||||
<string name="group_downloader">Загрузки</string>
|
||||
<string name="channel_complete">Завершено</string>
|
||||
<string name="channel_progress">Прогресс</string>
|
||||
<string name="channel_errors">Ошибки</string>
|
||||
</resources>
|
@ -176,7 +176,7 @@
|
||||
<string name="rotation_lock">Zaključano</string>
|
||||
<string name="rotation_force_portrait">Forsirano vertikalno</string>
|
||||
<string name="rotation_force_landscape">Forsirano horizontalno</string>
|
||||
<string name="color_filter_r_value">"R "</string>
|
||||
<string name="color_filter_r_value">R</string>
|
||||
<string name="color_filter_g_value">G</string>
|
||||
<string name="color_filter_b_value">B</string>
|
||||
<string name="color_filter_a_value">A</string>
|
||||
|
@ -251,7 +251,7 @@
|
||||
<string name="action_global_search_hint">ค้นหาทั้งหมด…</string>
|
||||
<string name="latest">ล่าสุด</string>
|
||||
<string name="browse">เปิดดู</string>
|
||||
<string name="manga_not_in_db">มังงะนี้ถูกลบออกจากฐานข้อมูล!</string>
|
||||
<string name="manga_not_in_db">มังงะนี้ถูกลบออกจากฐานข้อมูล</string>
|
||||
<string name="manga_detail_tab">ข้อมูล</string>
|
||||
<string name="description">คำอธิบาย</string>
|
||||
<string name="ongoing">ยังดำเนินการอยู่</string>
|
||||
|
@ -1,464 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="categories">Mga Kategorya</string>
|
||||
<string name="manga">Mga Manga</string>
|
||||
<string name="chapters">Mga Kabanata</string>
|
||||
<string name="track">Sinusundan</string>
|
||||
<string name="history">Kasaysayan</string>
|
||||
<string name="label_settings">Pagsasaayos</string>
|
||||
<string name="label_download_queue">Toka sa Download</string>
|
||||
<string name="label_library">Aklatan</string>
|
||||
<string name="label_recent_manga">Kamakailang Binása</string>
|
||||
<string name="label_recent_updates">Mga Update</string>
|
||||
<string name="label_categories">Mga Kategorya</string>
|
||||
<string name="label_backup">Pag-backup</string>
|
||||
<string name="label_migration">Ilipat</string>
|
||||
<string name="label_extensions">Mga Dugtong</string>
|
||||
<string name="label_extension_info">Tungkol sa Dugtong</string>
|
||||
<string name="action_settings">Pagsasaayos</string>
|
||||
<string name="action_filter">Salain</string>
|
||||
<string name="action_filter_downloaded">Na-download</string>
|
||||
<string name="action_filter_bookmarked">Tinandaan</string>
|
||||
<string name="action_filter_unread">Babasáhin</string>
|
||||
<string name="action_filter_read">Nabása</string>
|
||||
<string name="action_filter_empty">Tanggalin ang pagsala</string>
|
||||
<string name="action_sort_alpha">Pa-alpabeto</string>
|
||||
<string name="action_sort_total">Dami ng kabanata</string>
|
||||
<string name="action_sort_last_read">Huling binása</string>
|
||||
<string name="action_search">Maghanap</string>
|
||||
<string name="action_global_search">Panlahatang paghahanap</string>
|
||||
<string name="action_select_all">Piliin lahat</string>
|
||||
<string name="name">Pangalan</string>
|
||||
<string name="action_mark_as_read">Markahang nabása</string>
|
||||
<string name="action_mark_as_unread">Markahang babasáhin</string>
|
||||
<string name="action_mark_previous_as_read">Markahang nabása ang huli</string>
|
||||
<string name="action_download">I-download</string>
|
||||
<string name="action_bookmark">Tandaan</string>
|
||||
<string name="action_remove_bookmark">Tanggalin ang pananda</string>
|
||||
<string name="action_delete">Burahin</string>
|
||||
<string name="action_update">I-update</string>
|
||||
<string name="action_update_library">I-update ang aklatan</string>
|
||||
<string name="action_edit">I-edit</string>
|
||||
<string name="action_add">Magdagdag</string>
|
||||
<string name="action_add_category">Magdagdag ng kategorya</string>
|
||||
<string name="action_edit_categories">I-edit ang mga kategorya</string>
|
||||
<string name="action_rename_category">Baguhin ang pangalan</string>
|
||||
<string name="action_move_category">I-kategorya</string>
|
||||
<string name="action_edit_cover">I-edit ang pabalat</string>
|
||||
<string name="action_sort_up">Ayusin pataas</string>
|
||||
<string name="action_sort_down">Ayusin pababa</string>
|
||||
<string name="action_show_downloaded">Mga na-download</string>
|
||||
<string name="action_next_unread">Susunod na babasáhin</string>
|
||||
<string name="action_stop">Itigil</string>
|
||||
<string name="action_pause">Ihinto</string>
|
||||
<string name="action_close">Isara</string>
|
||||
<string name="action_previous_chapter">Nakaraang kabanata</string>
|
||||
<string name="action_next_chapter">Susunod na kabanata</string>
|
||||
<string name="action_retry">Subukan muli</string>
|
||||
<string name="action_remove">Tanggalin</string>
|
||||
<string name="action_resume">Ipagpatuloy</string>
|
||||
<string name="action_move">Ilipat</string>
|
||||
<string name="action_open_in_browser">Buksan sa browser</string>
|
||||
<string name="action_open_in_web_view">Buksan sa WebView</string>
|
||||
<string name="action_display_mode">Kaparaanan</string>
|
||||
<string name="action_display">Pagpapakita</string>
|
||||
<string name="action_display_grid">Siksik</string>
|
||||
<string name="action_display_list">Listahan</string>
|
||||
<string name="action_display_download_badge">Bilang ng na-download</string>
|
||||
<string name="action_cancel">Ikansela</string>
|
||||
<string name="action_sort">Ibukod</string>
|
||||
<string name="action_install">I-install</string>
|
||||
<string name="action_share">Ibahagi</string>
|
||||
<string name="action_save">I-save</string>
|
||||
<string name="action_reset">I-reset</string>
|
||||
<string name="action_undo">I-undo</string>
|
||||
<string name="action_open_log">Buksan ang log</string>
|
||||
<string name="action_create">Gumawa</string>
|
||||
<string name="action_restore">Ipanumbalik</string>
|
||||
<string name="action_open">Buksan</string>
|
||||
<string name="action_login">Mag-log in</string>
|
||||
<string name="loading">Nagkakarga…</string>
|
||||
<string name="app_not_available">Hindi available ang app</string>
|
||||
<string name="short_recent_updates">Mga Update</string>
|
||||
<string name="pref_category_general">Pangkalahatan</string>
|
||||
<string name="pref_category_reader">Pagbása</string>
|
||||
<string name="pref_category_downloads">Mga Download</string>
|
||||
<string name="pref_category_tracking">Sinusundan</string>
|
||||
<string name="pref_category_advanced">Higit pa</string>
|
||||
<string name="pref_category_about">Tungkol</string>
|
||||
<string name="pref_library_columns">Kada hilera</string>
|
||||
<string name="portrait">Patayo</string>
|
||||
<string name="landscape">Pahiga</string>
|
||||
<string name="default_columns">Itinakda</string>
|
||||
<string name="pref_library_update_interval">Dalas ng pag-update</string>
|
||||
<string name="update_never">Mano-mano</string>
|
||||
<string name="update_1hour">Oras-oras</string>
|
||||
<string name="update_2hour">Kada 2 oras</string>
|
||||
<string name="update_3hour">Kada 3 oras</string>
|
||||
<string name="update_6hour">Kada 6 na oras</string>
|
||||
<string name="update_12hour">Kada 12 oras</string>
|
||||
<string name="update_24hour">Araw-araw</string>
|
||||
<string name="update_48hour">Kada 2 araw</string>
|
||||
<string name="update_weekly">Linggo-linggo</string>
|
||||
<string name="update_monthly">Buwan-buwan</string>
|
||||
<string name="pref_library_update_categories">Mga Kategoryang isasama sa pangkalahatang update</string>
|
||||
<string name="all">Lahat</string>
|
||||
<string name="pref_library_update_restriction">Kondisyon sa pag-update</string>
|
||||
<string name="pref_library_update_restriction_summary">I-update lamang kapag nakamit ang (mga) kondisyon</string>
|
||||
<string name="wifi">Naka-wifi</string>
|
||||
<string name="charging">Naka-charge</string>
|
||||
<string name="pref_update_only_non_completed">I-update lamang ang (mga) nagpapatuloy na manga</string>
|
||||
<string name="pref_auto_update_manga_sync">I-sync ang mga kabanata pagkatapos basahin</string>
|
||||
<string name="pref_start_screen">Pambungad na iskrin</string>
|
||||
<string name="pref_language">Wika</string>
|
||||
<string name="system_default">Bahala ang sistema</string>
|
||||
<string name="default_category">Default na kategorya</string>
|
||||
<string name="default_category_summary">Palaging tanungin</string>
|
||||
<string name="all_lang">Lahat</string>
|
||||
<string name="ext_update">I-update</string>
|
||||
<string name="ext_install">I-install</string>
|
||||
<string name="ext_pending">Hinihintay</string>
|
||||
<string name="ext_downloading">Dina-download</string>
|
||||
<string name="ext_installing">Ini-install</string>
|
||||
<string name="ext_installed">Naka-install</string>
|
||||
<string name="ext_trust">Tiwala</string>
|
||||
<string name="ext_untrusted">Hindi tiwala</string>
|
||||
<string name="ext_uninstall">I-uninstall</string>
|
||||
<string name="ext_available">Available</string>
|
||||
<string name="untrusted_extension">Untrusted na extension</string>
|
||||
<string name="untrusted_extension_message">Ang extension na ito ay na-sign gamit ang isang untrusted certificate at hindi pinagana.
|
||||
\n
|
||||
\nAng isang malisyosong extension ay kayang mabasa ang kahit anong mga login credentials na nakatago sa Tachiyomi o di kaya\'y mag-execute ng arbitrary code.
|
||||
\n
|
||||
\nSa pamamagitan ng pagtitiwala sa certificate na ito, tinatanggap mo ang mga panganib na ito.</string>
|
||||
<string name="ext_version_info">Bersyon: %1$s</string>
|
||||
<string name="ext_language_info">Wika: %1$s</string>
|
||||
<string name="pref_fullscreen">I-fullscreen</string>
|
||||
<string name="pref_lock_orientation">I-lock ang oryentasyon</string>
|
||||
<string name="pref_page_transitions">Mga transisyon ng pahina</string>
|
||||
<string name="pref_double_tap_anim_speed">Bilis ng animation sa pag-dobleng pindot</string>
|
||||
<string name="pref_show_page_number">Ipakita ang bilang ng pahina</string>
|
||||
<string name="pref_true_color">Kulay na 32-bit</string>
|
||||
<string name="pref_crop_borders">I-crop ang mga gilid</string>
|
||||
<string name="pref_custom_brightness">Gamitin ang pansariling kaliwanagan</string>
|
||||
<string name="pref_custom_color_filter">Gamitin ang pansariling pagsalâ ng kulay</string>
|
||||
<string name="pref_keep_screen_on">Panatilihing nakabukas ang screen</string>
|
||||
<string name="pref_skip_read_chapters">Laktawan ang mga kabanatang namarkahang nabasa</string>
|
||||
<string name="pref_reader_navigation">Pangangalugad</string>
|
||||
<string name="pref_read_with_volume_keys">Mga buton sa volume</string>
|
||||
<string name="pref_read_with_volume_keys_inverted">Baligtarin ang buton sa volume</string>
|
||||
<string name="pref_read_with_tapping">Pag-pindot</string>
|
||||
<string name="pref_read_with_long_tap">Dialog sa mahabang pindot</string>
|
||||
<string name="pref_reader_theme">Kulay ng likuran</string>
|
||||
<string name="white_background">Puti</string>
|
||||
<string name="black_background">Itim</string>
|
||||
<string name="pref_viewer_type">Default na viewer</string>
|
||||
<string name="default_viewer">Default</string>
|
||||
<string name="left_to_right_viewer">Kaliwa pakanan</string>
|
||||
<string name="right_to_left_viewer">Kanan pakaliwa</string>
|
||||
<string name="vertical_viewer">Patayo</string>
|
||||
<string name="webtoon_viewer">Pa-webtoon</string>
|
||||
<string name="pager_viewer">Pager</string>
|
||||
<string name="pref_image_decoder">Decoder ng larawan</string>
|
||||
<string name="pref_image_scale_type">Uri ng pag-scale</string>
|
||||
<string name="scale_type_fit_screen">Pagkasyahin sa screen</string>
|
||||
<string name="scale_type_stretch">Banatin</string>
|
||||
<string name="scale_type_fit_width">Pagkasyahin ang lapad</string>
|
||||
<string name="scale_type_fit_height">Pagkasyahin ang tangkad</string>
|
||||
<string name="scale_type_original_size">Orihinal na laki</string>
|
||||
<string name="scale_type_smart_fit">Matalinong ipagkasya</string>
|
||||
<string name="pref_zoom_start">Panimulang posisyon na isu-zoom</string>
|
||||
<string name="zoom_start_automatic">Awtomatiko</string>
|
||||
<string name="zoom_start_left">Kaliwa</string>
|
||||
<string name="zoom_start_right">Kanan</string>
|
||||
<string name="zoom_start_center">Gitna</string>
|
||||
<string name="double_tap_anim_speed_0">Walang animasyon</string>
|
||||
<string name="double_tap_anim_speed_normal">Normal</string>
|
||||
<string name="double_tap_anim_speed_fast">Mabilis</string>
|
||||
<string name="pref_rotation_type">Pag-ikot</string>
|
||||
<string name="rotation_free">Malaya</string>
|
||||
<string name="rotation_lock">I-lock</string>
|
||||
<string name="rotation_force_portrait">Pwersahang patayo</string>
|
||||
<string name="rotation_force_landscape">Pwersahang pahiga</string>
|
||||
<string name="color_filter_r_value">R</string>
|
||||
<string name="color_filter_g_value">G</string>
|
||||
<string name="color_filter_b_value">B</string>
|
||||
<string name="color_filter_a_value">A</string>
|
||||
<string name="pref_download_directory">Directory ng mga Download</string>
|
||||
<string name="pref_download_only_over_wifi">Mag-download lamang sa Wi-Fi</string>
|
||||
<string name="pref_remove_after_marked_as_read">Tanggalin kapag namarkahang nabasa</string>
|
||||
<string name="pref_remove_after_read">Tanggalin pagkatapos basahin</string>
|
||||
<string name="custom_dir">Custom na directory</string>
|
||||
<string name="disabled">I-disable</string>
|
||||
<string name="last_read_chapter">Huling nabasang kabanata</string>
|
||||
<string name="second_to_last">Ikalawa sa huling kabanata</string>
|
||||
<string name="third_to_last">Ikatlo sa huling kabanata</string>
|
||||
<string name="fourth_to_last">Ikaapat sa huling kabanata</string>
|
||||
<string name="fifth_to_last">Ikalima sa huling kabanata</string>
|
||||
<string name="pref_download_new">Mag-download ng mga bagong kabanata</string>
|
||||
<string name="pref_download_new_categories">Mga kategoryang isasama sa pag-download</string>
|
||||
<string name="services">Mga Serbisyo</string>
|
||||
<string name="backup">Backup</string>
|
||||
<string name="pref_create_backup">Gumawa ng backup</string>
|
||||
<string name="pref_create_backup_summ">Maaring magamit para ma-restore ang kasalukuyang aklatan</string>
|
||||
<string name="pref_restore_backup">I-restore ang backup</string>
|
||||
<string name="pref_restore_backup_summ">I-restore ang aklatan mula sa backup file</string>
|
||||
<string name="pref_backup_directory">Directory ng backup</string>
|
||||
<string name="pref_backup_service_category">Serbisyo</string>
|
||||
<string name="pref_backup_interval">Dalas ng pag-backup</string>
|
||||
<string name="pref_backup_slots">Hangganan ng mga awtomatikong backup</string>
|
||||
<string name="backup_created">Nagawa na ang backup</string>
|
||||
<string name="restore_completed">Nakumpleto na ang pagre-restore</string>
|
||||
<string name="backup_restore_content">Ginagamit ng pagre-restore ang source para makakuha ng data, maaring magamit ang inyong data.
|
||||
\nSiguraduhin din na ikaw ay maayos na naka-login sa mga source that nangangailangan nito bago mag-restore.</string>
|
||||
<string name="pref_color_filter_mode">Blend mode ng color filter</string>
|
||||
<string name="filter_mode_default">Default</string>
|
||||
<string name="filter_mode_overlay">Patong (Overlay)</string>
|
||||
<string name="filter_mode_multiply">Paramihin (Multiply)</string>
|
||||
<string name="filter_mode_screen">Iskrin (Screen)</string>
|
||||
<string name="filter_mode_lighten">Iwas / Liwanag (Dodge / Lighten)</string>
|
||||
<string name="filter_mode_darken">Sunog / Dilim (Burn / Darken)</string>
|
||||
<string name="label_help">Tulong</string>
|
||||
<string name="pref_library_update_prioritization">Ayos ng pag-update</string>
|
||||
<string name="backup_choice">Ano ang gusto mong i-backup\?</string>
|
||||
<string name="restoring_backup">Nire-restore ang backup</string>
|
||||
<string name="creating_backup">Ginagawa ang backup</string>
|
||||
<string name="pref_clear_chapter_cache">Linisin ang cache ng kabanata</string>
|
||||
<string name="used_cache">Nagamit: %1$s</string>
|
||||
<string name="cache_deleted">Nalinis ang cache. Nabura ang %1$d na (mga) file</string>
|
||||
<string name="cache_delete_error">Nagkaproblema habang nililinis ang cache</string>
|
||||
<string name="pref_clear_cookies">Linisin ang mga cookies</string>
|
||||
<string name="cookies_cleared">Nalinis ang mga cookies</string>
|
||||
<string name="choices_reset">I-reset ang mga pinili sa dialog</string>
|
||||
<string name="pref_clear_database">Linisin ang database</string>
|
||||
<string name="pref_clear_database_summary">Burahin ang mga manga at kabanatang wala sa iyong aklatan</string>
|
||||
<string name="clear_database_confirmation">Sigurado ka ba\? Mawawala ang mga nabasang kabanata at ang daloy ng mga manga na wala sa aklatan</string>
|
||||
<string name="clear_database_completed">Binura ang mga tala</string>
|
||||
<string name="pref_refresh_library_tracking">I-refresh ang metadata ng mga sinusubaybayan</string>
|
||||
<string name="pref_refresh_library_tracking_summary">Ini-a-update ang estado, iskor, at huling nabasang kabanata mula sa mga tracking service</string>
|
||||
<string name="version">Bersyon</string>
|
||||
<string name="build_time">Oras ng build</string>
|
||||
<string name="pref_enable_acra">Ipadala ang mga ulat ng pagka-crash</string>
|
||||
<string name="pref_acra_summary">Nakakatulong sa pagsasaayos ng mga bugs. Walang sensitibong data ang ipapadala</string>
|
||||
<string name="login_title">Mag-login para kay %1$s</string>
|
||||
<string name="username">Taguri (Username)</string>
|
||||
<string name="password">Kontrasenyas (Password)</string>
|
||||
<string name="show_password">Ipakita ang kontrasenyas</string>
|
||||
<string name="login">Mag-login</string>
|
||||
<string name="login_success">Tagumpay ang login</string>
|
||||
<string name="invalid_login">Error sa login</string>
|
||||
<string name="unknown_error">Hindi malamang error</string>
|
||||
<string name="library_search_hint">Pamagat o Gumawa…</string>
|
||||
<string name="updating_category">Ini-a-update ang kategorya</string>
|
||||
<string name="local_source_badge">Lokal</string>
|
||||
<string name="confirm_delete_manga">Sigurado ka bang gusto mong tanggalin ang mga napiling manga\?</string>
|
||||
<string name="also_delete_chapters">Burahin din ang mga na-download na kabanata</string>
|
||||
<string name="source_requires_login">Kinakailangan ng source na ito na mag-login ka</string>
|
||||
<string name="select_source">Pumili ng source</string>
|
||||
<string name="no_valid_sources">Mangyaring i-enable ang kahit isang tunay na source</string>
|
||||
<string name="no_more_results">Wala nang mga resulta</string>
|
||||
<string name="local_source">Lokal na manga</string>
|
||||
<string name="other_source">Iba pa</string>
|
||||
<string name="invalid_combination">Hindi maaring mapili ang Default sa iba pang mga kategorya</string>
|
||||
<string name="added_to_library">Naidagdag na ang manga sa iyong aklatan</string>
|
||||
<string name="action_global_search_hint">Pangkalahatang paghahanap…</string>
|
||||
<string name="latest">Pinakabago</string>
|
||||
<string name="browse">Mag-browse</string>
|
||||
<string name="manga_not_in_db">Ang manga na ito ay tinanggal mula sa database!</string>
|
||||
<string name="manga_detail_tab">Impo</string>
|
||||
<string name="description">Paglalarawan</string>
|
||||
<string name="ongoing">Nagpapatuloy</string>
|
||||
<string name="unknown">Hindi alam</string>
|
||||
<string name="licensed">Lisensyado</string>
|
||||
<string name="remove_from_library">Tanggalin sa aklatan</string>
|
||||
<string name="manga_info_full_title_label">Pamagat</string>
|
||||
<string name="manga_added_library">Nadagdag sa aklatan</string>
|
||||
<string name="manga_removed_library">Natanggal sa aklatan</string>
|
||||
<string name="delete_downloads_for_manga">Burahin ang mga na-download na kabanata\?</string>
|
||||
<string name="copied_to_clipboard">Nakopya sa clipboard ang %1$s</string>
|
||||
<string name="source_not_installed">Hindi na-install ang source: %1$s</string>
|
||||
<string name="manga_chapters_tab">Mga Kabanata</string>
|
||||
<string name="manga_chapter_no_title">Walang Pamagat</string>
|
||||
<string name="display_mode_chapter">Kabanata %1$s</string>
|
||||
<string name="chapter_downloaded">Na-download</string>
|
||||
<string name="chapter_queued">Nakatoka</string>
|
||||
<string name="chapter_downloading">Dina-download</string>
|
||||
<string name="chapter_downloading_progress">Dina-download (%1$d/%2$d)</string>
|
||||
<string name="chapter_error">Nabigo</string>
|
||||
<string name="chapter_paused">Naka-tigil</string>
|
||||
<string name="fetch_chapters_error">Nagka-error habang kinukuha ang mga kabanata</string>
|
||||
<string name="show_title">Ipakita ang pamagat</string>
|
||||
<string name="show_chapter_number">Ipakita ang bilang ng kabanata</string>
|
||||
<string name="sorting_mode">Paraan ng pag-aayos</string>
|
||||
<string name="sort_by_source">Base sa source</string>
|
||||
<string name="sort_by_number">Base sa bilang ng kabanata</string>
|
||||
<string name="manga_download">I-download</string>
|
||||
<string name="custom_download">I-download ang custom na rami</string>
|
||||
<string name="download_1">Susunod na kabanata</string>
|
||||
<string name="download_5">Susunod na 5 kabanata</string>
|
||||
<string name="download_10">Susunod na 10 kabanata</string>
|
||||
<string name="download_custom">Custom</string>
|
||||
<string name="download_all">Lahat</string>
|
||||
<string name="download_unread">Hindi na nababasa</string>
|
||||
<string name="confirm_delete_chapters">Sigurado ka bang gusto mong burahin ang mga napiling kabanata\?</string>
|
||||
<string name="manga_tracking_tab">Sinusubaybayan</string>
|
||||
<string name="reading">Binabasa</string>
|
||||
<string name="completed">Nakumpleto</string>
|
||||
<string name="dropped">Umalis</string>
|
||||
<string name="on_hold">Nakatigil</string>
|
||||
<string name="plan_to_read">Planong basahin</string>
|
||||
<string name="repeating">Babasahin muli</string>
|
||||
<string name="score">Iskor</string>
|
||||
<string name="title">Pamagat</string>
|
||||
<string name="status">Estado</string>
|
||||
<string name="track_status">Estado</string>
|
||||
<string name="track_start_date">Nagsimula</string>
|
||||
<string name="track_type">Uri</string>
|
||||
<string name="track_author">Gumawa</string>
|
||||
<string name="error_category_exists">Mayroon nang kategoryang kasing-pangalan nito!</string>
|
||||
<string name="snack_categories_deleted">Binura ang mga kategorya</string>
|
||||
<string name="dialog_with_checkbox_remove_description">Tatanggalin nito ang petsa ng pagbasa ng kabanatang ito. Sigurado ka ba\?</string>
|
||||
<string name="dialog_with_checkbox_reset">I-reset ang lahat ng mga kabanata para sa manga na ito</string>
|
||||
<string name="snack_add_to_library">Idagdag ang manga sa Aklatan\?</string>
|
||||
<string name="picture_saved">Na-save ang larawan</string>
|
||||
<string name="saving_picture">Sine-save ang larawan</string>
|
||||
<string name="options">Mga Pagpipilian</string>
|
||||
<string name="custom_filter">Pasadyang pagsala</string>
|
||||
<string name="set_as_cover">I-set bilang pabalat</string>
|
||||
<string name="cover_updated">Na-update ang pabalat</string>
|
||||
<string name="page_downloaded">Nakopya ang pahina sa %1$s</string>
|
||||
<string name="downloading">Dina-download…</string>
|
||||
<string name="download_progress">Na-download %1$d%%</string>
|
||||
<string name="chapter_progress">Pahina: %1$d</string>
|
||||
<string name="chapter_subtitle">Kabanata %1$s</string>
|
||||
<string name="no_next_chapter">Hindi nakita ang susunod na kabanata</string>
|
||||
<string name="no_previous_chapter">Hindi nakita ang nakaraang kabanata</string>
|
||||
<string name="decode_image_error">Hindi ma-decode ang larawan</string>
|
||||
<string name="confirm_set_image_as_cover">Gusto mo bang i-set ang larawang ito bilang pabalat\?</string>
|
||||
<string name="transition_finished">Natapos:</string>
|
||||
<string name="transition_current">Kasalukuyan:</string>
|
||||
<string name="transition_next">Susunod:</string>
|
||||
<string name="transition_previous">Nakaraan:</string>
|
||||
<string name="transition_no_next">Walang susunod na kabanata</string>
|
||||
<string name="transition_no_previous">Walang nakaraang kabanata</string>
|
||||
<string name="transition_pages_loading">Kinakarga ang mga pahina…</string>
|
||||
<string name="transition_pages_error">Pumalya sa pagkarga ng mga pahina: %1$s</string>
|
||||
<string name="migration_info">Pindutin para mapili ang source na paglilipat</string>
|
||||
<string name="migration_dialog_what_to_include">Piliin ang mga isasamang data</string>
|
||||
<string name="migrate">Lumipat</string>
|
||||
<string name="copy">Kopyahin</string>
|
||||
<string name="download_queue_error">Nagkaproblema habang nagda-download ng mga kabanata. Maaring mong ulitin ito sa Downloads section.</string>
|
||||
<string name="notification_update_progress">Usad: %1$d/%2$d</string>
|
||||
<string name="notification_new_chapters">May (mga) bagong kabanatang nakita</string>
|
||||
<string name="notification_cover_update_failed">Pumalya sa pag-update ng pabalat</string>
|
||||
<string name="notification_first_add_to_library">Mangyaring idagdag muna ang manga sa iyong aklatan bago gawin ito</string>
|
||||
<string name="notification_not_connected_to_ac_title">Kinansela ang pag-sync</string>
|
||||
<string name="notification_not_connected_to_ac_body">Hindi nakakonekta sa AC power</string>
|
||||
<string name="notification_no_connection_title">Kinansela ang pag-sync</string>
|
||||
<string name="notification_no_connection_body">Walang koneksyon</string>
|
||||
<string name="file_select_cover">Pumili ng larawang pabalat</string>
|
||||
<string name="file_select_backup">Pumili ng backup file</string>
|
||||
<string name="file_select_icon">Pumili ng shortcut icon</string>
|
||||
<string name="update_check_confirm">Download</string>
|
||||
<string name="update_check_ignore">Pabayaan</string>
|
||||
<string name="update_check_no_new_updates">Walang mga bagong update</string>
|
||||
<string name="update_check_look_for_updates">Naghahanap ng mga update…</string>
|
||||
<string name="update_check_notification_file_download">Download update</string>
|
||||
<string name="update_check_notification_download_in_progress">Kasalukuyang nagda-download</string>
|
||||
<string name="update_check_notification_download_complete">Nakumpleto ang pag-download</string>
|
||||
<string name="update_check_notification_download_error">Error sa pag-download</string>
|
||||
<string name="update_check_notification_update_available">Mayroong update</string>
|
||||
<string name="description_cover">Pabalat ng manga</string>
|
||||
<string name="information_no_downloads">Walang mga download</string>
|
||||
<string name="information_no_recent">Walang bago kamakailan</string>
|
||||
<string name="information_no_recent_manga">Walang binása kamakailan</string>
|
||||
<string name="information_empty_library">Walang laman ang Aklatan mo, magdagdag ng serye sa iyong Aklatan mula sa Mangalugad.</string>
|
||||
<string name="information_empty_category">Wala ka pang kategorya. Pindutin lang ang plus button para makagawa ng isa para maorganisa mo na ang Aklatan mo.</string>
|
||||
<string name="download_notifier_downloader_title">Tagapag-download</string>
|
||||
<string name="download_notifier_title_error">Error</string>
|
||||
<string name="download_notifier_unknown_error">Nangyari ang isang hindi inaasahang error habang dina-download ang kabanata</string>
|
||||
<string name="download_notifier_page_error">May nawawalang pahina sa directory</string>
|
||||
<string name="download_notifier_page_ready_error">Hindi naikarga ang isang pahina</string>
|
||||
<string name="download_notifier_text_only_wifi">Walang koneksyon sa Wi-Fi</string>
|
||||
<string name="download_notifier_no_network">Walang koneksyon sa Network</string>
|
||||
<string name="download_notifier_download_paused">Nakahinto ang pag-download</string>
|
||||
<string name="channel_common">Karaniwan</string>
|
||||
<string name="channel_library">Aklatan</string>
|
||||
<string name="no_results_found">Walang nahanap na resulta</string>
|
||||
<string name="action_webview_back">Bumalik</string>
|
||||
<string name="action_webview_forward">Susunod</string>
|
||||
<string name="pref_category_library">Aklatan</string>
|
||||
<string name="action_sort_latest_chapter">Pinakabagong kabanata</string>
|
||||
<string name="action_view_chapters">Mga kabanata</string>
|
||||
<string name="action_cancel_all">Kanselahin lahat</string>
|
||||
<string name="notification_chapters_single">Kabanata %1$s</string>
|
||||
<string name="track_finished_reading_date">Petsa na natapos basahin</string>
|
||||
<string name="track_started_reading_date">Petsa nagsimulang basahin</string>
|
||||
<string name="want_to_read">Gustong basahin</string>
|
||||
<string name="manga_info_about_label">Tungkol</string>
|
||||
<string name="pref_category_reading">Binabasa</string>
|
||||
<string name="pref_category_security">Seguridad</string>
|
||||
<string name="action_move_to_bottom">I-baba</string>
|
||||
<string name="action_move_to_top">I-taas</string>
|
||||
<string name="action_oldest">Pinakaluma</string>
|
||||
<string name="action_newest">Pinakabago</string>
|
||||
<string name="label_sources">Mga Pinagkunan</string>
|
||||
<string name="action_sort_last_checked">Huling sinilip</string>
|
||||
<string name="unlock_app">Buksan ang Tachiyomi</string>
|
||||
<string name="action_pin">I-pin</string>
|
||||
<string name="action_display_show_tabs">Ipakita ang mga kategorya</string>
|
||||
<string name="action_display_unread_badge">Bilang ng babasáhin</string>
|
||||
<string name="action_display_comfortable_grid">Maginhawa</string>
|
||||
<string name="action_migrate">Lumipat</string>
|
||||
<string name="action_start">Magsimula</string>
|
||||
<string name="action_disable_all">Isara lahat</string>
|
||||
<string name="action_enable_all">Buksan lahat</string>
|
||||
<string name="action_select_inverse">Baligtarin</string>
|
||||
<string name="action_menu">Pagpipilian</string>
|
||||
<string name="confirm_exit">Pindutin muli upang makaalis</string>
|
||||
<string name="label_more">Karagdagan</string>
|
||||
<string name="notification_chapters_single_and_more">Kabanata %q$s at %2$d pa</string>
|
||||
<plurals name="notification_chapters_generic">
|
||||
<item quantity="one">Isang bagong kabanata</item>
|
||||
<item quantity="other">%1$d (na) bagong kabanata</item>
|
||||
</plurals>
|
||||
<plurals name="notification_new_chapters_summary">
|
||||
<item quantity="one">Para sa isang serye</item>
|
||||
<item quantity="other">Para sa %d (na) serye</item>
|
||||
</plurals>
|
||||
<string name="notification_check_updates">Naghahanap ng mga bagong kabanata</string>
|
||||
<string name="information_webview_outdated">Mangyaring i-update po ang inyong WebView para sa mas maayos na pagpapakita</string>
|
||||
<string name="information_cloudflare_bypass_failure"/>
|
||||
<string name="pref_library_update_refresh_metadata">Awtomatikong i-refresh ang metadata</string>
|
||||
<string name="pref_category_library_update">Mga Update</string>
|
||||
<string name="pref_category_display">Pagpapakita</string>
|
||||
<string name="hide_notification_content">Itago ang nilalaman ng abiso</string>
|
||||
<string name="secure_screen_summary">Itago ang mga laman ng app sa tuwing lumilipat sa ibang app at harangin ang mga screenshot</string>
|
||||
<string name="secure_screen">Bantayán ang iskrin</string>
|
||||
<plurals name="lock_after_mins">
|
||||
<item quantity="one">Matapos ng 1 minuto</item>
|
||||
<item quantity="other">Matapos ng %1$s (na) minuto</item>
|
||||
</plurals>
|
||||
<string name="lock_never">Di kailanman</string>
|
||||
<string name="lock_always">Palagi</string>
|
||||
<string name="lock_when_idle">I-lock kapag di ginagamit</string>
|
||||
<string name="lock_with_biometrics">I-lock gamit ang biometrics</string>
|
||||
<string name="pref_manage_notifications">Mga abiso</string>
|
||||
<string name="pref_confirm_exit">Kumpirmahing aalis</string>
|
||||
<string name="pref_date_format">Pagsulat ng petsa</string>
|
||||
<string name="theme_dark_amoled">AMOLED na itim</string>
|
||||
<string name="theme_dark_blue">May bughaw</string>
|
||||
<string name="theme_dark_default">Orihinal</string>
|
||||
<string name="pref_theme_light">Maliwanag na tema</string>
|
||||
<string name="pref_theme_dark">Madilim na tema</string>
|
||||
<string name="theme_light_blue">May bughaw</string>
|
||||
<string name="theme_light_default">Orihinal</string>
|
||||
<string name="theme_light">Nakasara</string>
|
||||
<string name="theme_dark">Nakabukás</string>
|
||||
<string name="theme_system">Sundan ang sistema</string>
|
||||
<string name="pref_theme_mode">Madilim</string>
|
||||
<string name="action_webview_refresh">Sariwain</string>
|
||||
<string name="action_reorganize_by">I-reorder</string>
|
||||
<string name="action_unpin">I-unpin</string>
|
||||
<string name="action_disable">Isara</string>
|
||||
</resources>
|
@ -74,6 +74,6 @@
|
||||
<color name="md_blue_grey_900">#263238</color>
|
||||
<color name="md_blue_grey_800">#37474F</color>
|
||||
|
||||
<color name="pale_green">#99CC99</color>
|
||||
<color name="green">#47a84a</color>
|
||||
|
||||
</resources>
|
||||
|
@ -678,6 +678,7 @@
|
||||
<string name="channel_common">Common</string>
|
||||
<string name="channel_progress">Progress</string>
|
||||
<string name="channel_complete">Complete</string>
|
||||
<string name="channel_errors">Errors</string>
|
||||
<string name="channel_library">Library</string>
|
||||
<string name="group_downloader">Downloads</string>
|
||||
<string name="group_backup_restore">Backup and restore</string>
|
||||
|
Reference in New Issue
Block a user