Cleanup resources and code
This commit is contained in:
@@ -7,6 +7,16 @@ import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.viewbinding.ViewBinding
|
||||
|
||||
private const val SYSTEM_UI_FLAGS_SHOWN = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
|
||||
private const val SYSTEM_UI_FLAGS_HIDDEN = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
|
||||
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
|
||||
View.SYSTEM_UI_FLAG_FULLSCREEN or
|
||||
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
||||
|
||||
abstract class BaseFullscreenActivity<B : ViewBinding> : BaseActivity<B>(),
|
||||
View.OnSystemUiVisibilityChangeListener {
|
||||
@@ -25,6 +35,7 @@ abstract class BaseFullscreenActivity<B : ViewBinding> : BaseActivity<B>(),
|
||||
showSystemUI()
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
final override fun onSystemUiVisibilityChange(visibility: Int) {
|
||||
onSystemUiVisibilityChanged(visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0)
|
||||
}
|
||||
@@ -39,19 +50,4 @@ abstract class BaseFullscreenActivity<B : ViewBinding> : BaseActivity<B>(),
|
||||
}
|
||||
|
||||
protected open fun onSystemUiVisibilityChanged(isVisible: Boolean) = Unit
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
private companion object {
|
||||
|
||||
const val SYSTEM_UI_FLAGS_SHOWN = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||
|
||||
const val SYSTEM_UI_FLAGS_HIDDEN = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
|
||||
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
|
||||
View.SYSTEM_UI_FLAG_FULLSCREEN or
|
||||
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
|
||||
}
|
||||
}
|
||||
@@ -2,14 +2,21 @@ package org.koitharu.kotatsu.base.ui.widgets
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.LinearLayout.HORIZONTAL
|
||||
import android.widget.LinearLayout.VERTICAL
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.core.content.withStyledAttributes
|
||||
import com.google.android.material.imageview.ShapeableImageView
|
||||
import org.koitharu.kotatsu.R
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
private const val ASPECT_RATIO_HEIGHT = 18f
|
||||
private const val ASPECT_RATIO_WIDTH = 13f
|
||||
|
||||
class CoverImageView @JvmOverloads constructor(
|
||||
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0,
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
@AttrRes defStyleAttr: Int = 0,
|
||||
) : ShapeableImageView(context, attrs, defStyleAttr) {
|
||||
|
||||
private var orientation: Int = HORIZONTAL
|
||||
@@ -33,13 +40,4 @@ class CoverImageView @JvmOverloads constructor(
|
||||
}
|
||||
setMeasuredDimension(desiredWidth, desiredHeight)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
const val VERTICAL = LinearLayout.VERTICAL
|
||||
const val HORIZONTAL = LinearLayout.HORIZONTAL
|
||||
|
||||
private const val ASPECT_RATIO_HEIGHT = 18f
|
||||
private const val ASPECT_RATIO_WIDTH = 13f
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,10 @@ import androidx.annotation.StringRes
|
||||
import androidx.core.view.postDelayed
|
||||
import org.koitharu.kotatsu.R
|
||||
|
||||
private const val ENTER_DURATION = 300L
|
||||
private const val EXIT_DURATION = 200L
|
||||
private const val SHORT_DURATION = 1_500L
|
||||
private const val LONG_DURATION = 2_750L
|
||||
/**
|
||||
* A custom snackbar implementation allowing more control over placement and entry/exit animations.
|
||||
*
|
||||
@@ -87,11 +91,4 @@ class FadingSnackbar @JvmOverloads constructor(
|
||||
dismissListener()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val ENTER_DURATION = 300L
|
||||
private const val EXIT_DURATION = 200L
|
||||
private const val SHORT_DURATION = 1_500L
|
||||
private const val LONG_DURATION = 2_750L
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import androidx.core.view.updatePadding
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.base.ui.BaseActivity
|
||||
import org.koitharu.kotatsu.databinding.ActivityBrowserBinding
|
||||
import com.google.android.material.R as materialR
|
||||
|
||||
@SuppressLint("SetJavaScriptEnabled")
|
||||
class BrowserActivity : BaseActivity<ActivityBrowserBinding>(), BrowserCallback {
|
||||
@@ -23,7 +24,7 @@ class BrowserActivity : BaseActivity<ActivityBrowserBinding>(), BrowserCallback
|
||||
setContentView(ActivityBrowserBinding.inflate(layoutInflater))
|
||||
supportActionBar?.run {
|
||||
setDisplayHomeAsUpEnabled(true)
|
||||
setHomeAsUpIndicator(R.drawable.ic_cross)
|
||||
setHomeAsUpIndicator(materialR.drawable.abc_ic_clear_material)
|
||||
}
|
||||
with(binding.webView.settings) {
|
||||
javaScriptEnabled = true
|
||||
|
||||
@@ -6,6 +6,8 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import org.koitharu.kotatsu.core.network.AndroidCookieJar
|
||||
import org.koitharu.kotatsu.core.network.WebViewClientCompat
|
||||
|
||||
private const val CF_CLEARANCE = "cf_clearance"
|
||||
|
||||
class CloudFlareClient(
|
||||
private val cookieJar: AndroidCookieJar,
|
||||
private val callback: CloudFlareCallback,
|
||||
@@ -40,9 +42,4 @@ class CloudFlareClient(
|
||||
return cookieJar.loadForRequest(targetUrl.toHttpUrl())
|
||||
.find { it.name == name }?.value
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val CF_CLEARANCE = "cf_clearance"
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,8 @@ import org.koitharu.kotatsu.favourites.data.FavouriteCategoryEntity
|
||||
import org.koitharu.kotatsu.favourites.data.FavouriteEntity
|
||||
import org.koitharu.kotatsu.history.data.HistoryEntity
|
||||
|
||||
private const val PAGE_SIZE = 10
|
||||
|
||||
class BackupRepository(private val db: MangaDatabase) {
|
||||
|
||||
suspend fun dumpHistory(): BackupEntry {
|
||||
@@ -65,7 +67,7 @@ class BackupRepository(private val db: MangaDatabase) {
|
||||
return entry
|
||||
}
|
||||
|
||||
suspend fun createIndex(): BackupEntry {
|
||||
fun createIndex(): BackupEntry {
|
||||
val entry = BackupEntry(BackupEntry.INDEX, JSONArray())
|
||||
val json = JSONObject()
|
||||
json.put("app_id", BuildConfig.APPLICATION_ID)
|
||||
@@ -129,9 +131,4 @@ class BackupRepository(private val db: MangaDatabase) {
|
||||
jo.put("created_at", createdAt)
|
||||
return jo
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val PAGE_SIZE = 10
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,9 @@ import org.koitharu.kotatsu.core.exceptions.CloudFlareProtectedException
|
||||
import java.net.HttpURLConnection.HTTP_FORBIDDEN
|
||||
import java.net.HttpURLConnection.HTTP_UNAVAILABLE
|
||||
|
||||
private const val HEADER_SERVER = "Server"
|
||||
private const val SERVER_CLOUDFLARE = "cloudflare"
|
||||
|
||||
class CloudFlareInterceptor : Interceptor {
|
||||
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
@@ -19,10 +22,4 @@ class CloudFlareInterceptor : Interceptor {
|
||||
}
|
||||
return response
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
private const val HEADER_SERVER = "Server"
|
||||
private const val SERVER_CLOUDFLARE = "cloudflare"
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,8 @@ import okio.Buffer
|
||||
import java.io.IOException
|
||||
import java.nio.charset.StandardCharsets
|
||||
|
||||
private const val TAG = "CURL"
|
||||
|
||||
class CurlLoggingInterceptor(
|
||||
private val extraCurlOptions: String? = null,
|
||||
) : Interceptor {
|
||||
@@ -51,9 +53,4 @@ class CurlLoggingInterceptor(
|
||||
Log.d(TAG, "╰--- (copy and paste the above line to a terminal)")
|
||||
return chain.proceed(request)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val TAG = "CURL"
|
||||
}
|
||||
}
|
||||
@@ -11,9 +11,16 @@ import org.koitharu.kotatsu.utils.ext.*
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
private const val PAGE_SIZE = 70
|
||||
private const val PAGE_SIZE_SEARCH = 50
|
||||
|
||||
abstract class GroupleRepository(loaderContext: MangaLoaderContext) :
|
||||
RemoteMangaRepository(loaderContext) {
|
||||
|
||||
private val headers = Headers.Builder()
|
||||
.add("User-Agent", "readmangafun")
|
||||
.build()
|
||||
|
||||
override val sortOrders: Set<SortOrder> = EnumSet.of(
|
||||
SortOrder.UPDATED,
|
||||
SortOrder.POPULARITY,
|
||||
@@ -41,14 +48,14 @@ abstract class GroupleRepository(loaderContext: MangaLoaderContext) :
|
||||
getSortKey(
|
||||
sortOrder
|
||||
)
|
||||
}&offset=${offset upBy PAGE_SIZE}", HEADER
|
||||
}&offset=${offset upBy PAGE_SIZE}", headers
|
||||
)
|
||||
tags.size == 1 -> loaderContext.httpGet(
|
||||
"https://$domain/list/genre/${tags.first().key}?sortType=${
|
||||
getSortKey(
|
||||
sortOrder
|
||||
)
|
||||
}&offset=${offset upBy PAGE_SIZE}", HEADER
|
||||
}&offset=${offset upBy PAGE_SIZE}", headers
|
||||
)
|
||||
offset > 0 -> return emptyList()
|
||||
else -> advancedSearch(domain, tags)
|
||||
@@ -106,7 +113,7 @@ abstract class GroupleRepository(loaderContext: MangaLoaderContext) :
|
||||
}
|
||||
|
||||
override suspend fun getDetails(manga: Manga): Manga {
|
||||
val doc = loaderContext.httpGet(manga.url.withDomain(), HEADER).parseHtml()
|
||||
val doc = loaderContext.httpGet(manga.url.withDomain(), headers).parseHtml()
|
||||
val root = doc.body().getElementById("mangaBox")?.selectFirst("div.leftContent")
|
||||
?: throw ParseException("Cannot find root")
|
||||
val dateFormat = SimpleDateFormat("dd.MM.yy", Locale.US)
|
||||
@@ -150,7 +157,7 @@ abstract class GroupleRepository(loaderContext: MangaLoaderContext) :
|
||||
}
|
||||
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
val doc = loaderContext.httpGet(chapter.url.withDomain() + "?mtr=1", HEADER).parseHtml()
|
||||
val doc = loaderContext.httpGet(chapter.url.withDomain() + "?mtr=1", headers).parseHtml()
|
||||
val scripts = doc.select("script")
|
||||
for (script in scripts) {
|
||||
val data = script.html()
|
||||
@@ -178,7 +185,7 @@ abstract class GroupleRepository(loaderContext: MangaLoaderContext) :
|
||||
}
|
||||
|
||||
override suspend fun getTags(): Set<MangaTag> {
|
||||
val doc = loaderContext.httpGet("https://${getDomain()}/list/genres/sort_name", HEADER).parseHtml()
|
||||
val doc = loaderContext.httpGet("https://${getDomain()}/list/genres/sort_name", headers).parseHtml()
|
||||
val root = doc.body().getElementById("mangaBox")?.selectFirst("div.leftContent")
|
||||
?.selectFirst("table.table") ?: parseFailed("Cannot find root")
|
||||
return root.select("a.element-link").mapToSet { a ->
|
||||
@@ -203,7 +210,7 @@ abstract class GroupleRepository(loaderContext: MangaLoaderContext) :
|
||||
private suspend fun advancedSearch(domain: String, tags: Set<MangaTag>): Response {
|
||||
val url = "https://$domain/search/advanced"
|
||||
// Step 1: map catalog genres names to advanced-search genres ids
|
||||
val tagsIndex = loaderContext.httpGet(url, HEADER).parseHtml()
|
||||
val tagsIndex = loaderContext.httpGet(url, headers).parseHtml()
|
||||
.body().selectFirst("form.search-form")
|
||||
?.select("div.form-group")
|
||||
?.get(1) ?: parseFailed("Genres filter element not found")
|
||||
@@ -236,14 +243,4 @@ abstract class GroupleRepository(loaderContext: MangaLoaderContext) :
|
||||
payload["+"] = "Искать".urlEncoded()
|
||||
return loaderContext.httpPost(url, payload)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
private const val PAGE_SIZE = 70
|
||||
private const val PAGE_SIZE_SEARCH = 50
|
||||
private val HEADER = Headers.Builder()
|
||||
.add("User-Agent", "readmangafun")
|
||||
.build()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.koitharu.kotatsu.core.parser.site
|
||||
|
||||
import org.intellij.lang.annotations.Language
|
||||
import org.koitharu.kotatsu.base.domain.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.core.exceptions.ParseException
|
||||
import org.koitharu.kotatsu.core.model.*
|
||||
@@ -25,6 +24,8 @@ class MangaTownRepository(loaderContext: MangaLoaderContext) :
|
||||
SortOrder.UPDATED
|
||||
)
|
||||
|
||||
private val regexTag = Regex("[^\\-]+-[^\\-]+-[^\\-]+-[^\\-]+-[^\\-]+-[^\\-]+")
|
||||
|
||||
override suspend fun getList2(
|
||||
offset: Int,
|
||||
query: String?,
|
||||
@@ -217,11 +218,5 @@ class MangaTownRepository(loaderContext: MangaLoaderContext) :
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.parseTagKey() = split('/').findLast { TAG_REGEX matches it }
|
||||
|
||||
private companion object {
|
||||
|
||||
@Language("RegExp")
|
||||
val TAG_REGEX = Regex("[^\\-]+-[^\\-]+-[^\\-]+-[^\\-]+-[^\\-]+-[^\\-]+")
|
||||
}
|
||||
private fun String.parseTagKey() = split('/').findLast { regexTag matches it }
|
||||
}
|
||||
@@ -10,6 +10,8 @@ import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
private const val PAGE_SIZE = 12
|
||||
|
||||
class MangareadRepository(
|
||||
loaderContext: MangaLoaderContext
|
||||
) : RemoteMangaRepository(loaderContext) {
|
||||
@@ -230,16 +232,11 @@ class MangareadRepository(
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
private const val PAGE_SIZE = 12
|
||||
|
||||
private fun createRequestTemplate() =
|
||||
"action=madara_load_more&page=1&template=madara-core%2Fcontent%2Fcontent-search&vars%5Bs%5D=&vars%5Borderby%5D=meta_value_num&vars%5Bpaged%5D=1&vars%5Btemplate%5D=search&vars%5Bmeta_query%5D%5B0%5D%5Brelation%5D=AND&vars%5Bmeta_query%5D%5Brelation%5D=OR&vars%5Bpost_type%5D=wp-manga&vars%5Bpost_status%5D=publish&vars%5Bmeta_key%5D=_latest_update&vars%5Border%5D=desc&vars%5Bmanga_archives_item_layout%5D=default"
|
||||
.split('&')
|
||||
.map {
|
||||
val pos = it.indexOf('=')
|
||||
it.substring(0, pos) to it.substring(pos + 1)
|
||||
}.toMutableMap()
|
||||
}
|
||||
private fun createRequestTemplate() =
|
||||
"action=madara_load_more&page=1&template=madara-core%2Fcontent%2Fcontent-search&vars%5Bs%5D=&vars%5Borderby%5D=meta_value_num&vars%5Bpaged%5D=1&vars%5Btemplate%5D=search&vars%5Bmeta_query%5D%5B0%5D%5Brelation%5D=AND&vars%5Bmeta_query%5D%5Brelation%5D=OR&vars%5Bpost_type%5D=wp-manga&vars%5Bpost_status%5D=publish&vars%5Bmeta_key%5D=_latest_update&vars%5Border%5D=desc&vars%5Bmanga_archives_item_layout%5D=default"
|
||||
.split('&')
|
||||
.map {
|
||||
val pos = it.indexOf('=')
|
||||
it.substring(0, pos) to it.substring(pos + 1)
|
||||
}.toMutableMap()
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ import org.koitharu.kotatsu.utils.ext.*
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
private const val PAGE_SIZE = 26
|
||||
|
||||
abstract class NineMangaRepository(
|
||||
loaderContext: MangaLoaderContext,
|
||||
override val source: MangaSource,
|
||||
@@ -20,6 +22,10 @@ abstract class NineMangaRepository(
|
||||
loaderContext.cookieJar.insertCookies(getDomain(), "ninemanga_template_desk=yes")
|
||||
}
|
||||
|
||||
private val headers = Headers.Builder()
|
||||
.add("Accept-Language", "en-US;q=0.7,en;q=0.3")
|
||||
.build()
|
||||
|
||||
override val sortOrders: Set<SortOrder> = EnumSet.of(
|
||||
SortOrder.POPULARITY,
|
||||
)
|
||||
@@ -55,7 +61,7 @@ abstract class NineMangaRepository(
|
||||
append(page)
|
||||
append(".html")
|
||||
}
|
||||
val doc = loaderContext.httpGet(url, PREDEFINED_HEADERS).parseHtml()
|
||||
val doc = loaderContext.httpGet(url, headers).parseHtml()
|
||||
val root = doc.body().selectFirst("ul.direlist")
|
||||
?: throw ParseException("Cannot find root")
|
||||
val baseHost = root.baseUri().toHttpUrl().host
|
||||
@@ -84,7 +90,7 @@ abstract class NineMangaRepository(
|
||||
override suspend fun getDetails(manga: Manga): Manga {
|
||||
val doc = loaderContext.httpGet(
|
||||
manga.url.withDomain() + "?waring=1",
|
||||
PREDEFINED_HEADERS
|
||||
headers
|
||||
).parseHtml()
|
||||
val root = doc.body().selectFirst("div.manga")
|
||||
?: throw ParseException("Cannot find root")
|
||||
@@ -122,7 +128,7 @@ abstract class NineMangaRepository(
|
||||
}
|
||||
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
val doc = loaderContext.httpGet(chapter.url.withDomain(), PREDEFINED_HEADERS).parseHtml()
|
||||
val doc = loaderContext.httpGet(chapter.url.withDomain(), headers).parseHtml()
|
||||
return doc.body().getElementById("page")?.select("option")?.map { option ->
|
||||
val url = option.attr("value")
|
||||
MangaPage(
|
||||
@@ -136,14 +142,14 @@ abstract class NineMangaRepository(
|
||||
}
|
||||
|
||||
override suspend fun getPageUrl(page: MangaPage): String {
|
||||
val doc = loaderContext.httpGet(page.url.withDomain(), PREDEFINED_HEADERS).parseHtml()
|
||||
val doc = loaderContext.httpGet(page.url.withDomain(), headers).parseHtml()
|
||||
val root = doc.body()
|
||||
return root.selectFirst("a.pic_download")?.absUrl("href")
|
||||
?: throw ParseException("Page image not found")
|
||||
}
|
||||
|
||||
override suspend fun getTags(): Set<MangaTag> {
|
||||
val doc = loaderContext.httpGet("https://${getDomain()}/search/?type=high", PREDEFINED_HEADERS)
|
||||
val doc = loaderContext.httpGet("https://${getDomain()}/search/?type=high", headers)
|
||||
.parseHtml()
|
||||
val root = doc.body().getElementById("search_form")
|
||||
return root?.select("li.cate_list")?.mapNotNullToSet { li ->
|
||||
@@ -242,13 +248,4 @@ abstract class NineMangaRepository(
|
||||
MangaSource.NINEMANGA_FR,
|
||||
"fr.ninemanga.com",
|
||||
)
|
||||
|
||||
private companion object {
|
||||
|
||||
const val PAGE_SIZE = 26
|
||||
|
||||
val PREDEFINED_HEADERS = Headers.Builder()
|
||||
.add("Accept-Language", "en-US;q=0.7,en;q=0.3")
|
||||
.build()
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,10 @@ import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
private const val PAGE_SIZE = 30
|
||||
private const val STATUS_ONGOING = 1
|
||||
private const val STATUS_FINISHED = 0
|
||||
|
||||
class RemangaRepository(loaderContext: MangaLoaderContext) : RemoteMangaRepository(loaderContext),
|
||||
MangaRepositoryAuthProvider {
|
||||
|
||||
@@ -29,6 +33,8 @@ class RemangaRepository(loaderContext: MangaLoaderContext) : RemoteMangaReposito
|
||||
SortOrder.NEWEST
|
||||
)
|
||||
|
||||
private val regexLastUrlPath = Regex("/[^/]+/?$")
|
||||
|
||||
override suspend fun getList2(
|
||||
offset: Int,
|
||||
query: String?,
|
||||
@@ -86,7 +92,7 @@ class RemangaRepository(loaderContext: MangaLoaderContext) : RemoteMangaReposito
|
||||
override suspend fun getDetails(manga: Manga): Manga {
|
||||
copyCookies()
|
||||
val domain = getDomain()
|
||||
val slug = manga.url.find(LAST_URL_PATH_REGEX)
|
||||
val slug = manga.url.find(regexLastUrlPath)
|
||||
?: throw ParseException("Cannot obtain slug from ${manga.url}")
|
||||
val data = loaderContext.httpGet(
|
||||
url = "https://api.$domain/api/titles/$slug/"
|
||||
@@ -228,14 +234,4 @@ class RemangaRepository(loaderContext: MangaLoaderContext) : RemoteMangaReposito
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val PAGE_SIZE = 30
|
||||
|
||||
const val STATUS_ONGOING = 1
|
||||
const val STATUS_FINISHED = 0
|
||||
|
||||
val LAST_URL_PATH_REGEX = Regex("/[^/]+/?$")
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,10 @@ import org.koitharu.kotatsu.utils.ext.referer
|
||||
import org.koitharu.kotatsu.utils.ext.waitForNetwork
|
||||
import java.io.File
|
||||
|
||||
private const val MAX_DOWNLOAD_ATTEMPTS = 3
|
||||
private const val DOWNLOAD_ERROR_DELAY = 500L
|
||||
private const val TEMP_PAGE_FILE = "page.tmp"
|
||||
|
||||
class DownloadManager(
|
||||
private val context: Context,
|
||||
private val imageLoader: ImageLoader,
|
||||
@@ -228,11 +232,4 @@ class DownloadManager(
|
||||
override val cover: Drawable?,
|
||||
) : State
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
private const val MAX_DOWNLOAD_ATTEMPTS = 3
|
||||
private const val DOWNLOAD_ERROR_DELAY = 500L
|
||||
private const val TEMP_PAGE_FILE = "page.tmp"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.koitharu.kotatsu.download.ui.DownloadsActivity
|
||||
import org.koitharu.kotatsu.utils.PendingIntentCompat
|
||||
import org.koitharu.kotatsu.utils.ext.format
|
||||
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
|
||||
import com.google.android.material.R as materialR
|
||||
|
||||
class DownloadNotification(
|
||||
private val context: Context,
|
||||
@@ -26,7 +27,7 @@ class DownloadNotification(
|
||||
|
||||
private val builder = NotificationCompat.Builder(context, CHANNEL_ID)
|
||||
private val cancelAction = NotificationCompat.Action(
|
||||
R.drawable.ic_cross,
|
||||
materialR.drawable.material_ic_clear_black_24dp,
|
||||
context.getString(android.R.string.cancel),
|
||||
PendingIntent.getBroadcast(
|
||||
context,
|
||||
|
||||
@@ -8,6 +8,8 @@ import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.base.ui.dialog.TextInputDialog
|
||||
import org.koitharu.kotatsu.core.model.FavouriteCategory
|
||||
|
||||
private const val MAX_TITLE_LENGTH = 24
|
||||
|
||||
class CategoriesEditDelegate(
|
||||
private val context: Context,
|
||||
private val callback: CategoriesEditCallback
|
||||
@@ -69,9 +71,4 @@ class CategoriesEditDelegate(
|
||||
|
||||
fun onCreateCategory(name: String)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val MAX_TITLE_LENGTH = 24
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,9 @@ import org.koitharu.kotatsu.utils.ext.hideKeyboard
|
||||
import org.koitharu.kotatsu.utils.ext.measureHeight
|
||||
import org.koitharu.kotatsu.utils.ext.resolveDp
|
||||
|
||||
private const val TAG_PRIMARY = "primary"
|
||||
private const val TAG_SEARCH = "search"
|
||||
|
||||
class MainActivity : BaseActivity<ActivityMainBinding>(),
|
||||
NavigationView.OnNavigationItemSelectedListener, AppBarOwner,
|
||||
View.OnClickListener, View.OnFocusChangeListener, SearchSuggestionListener {
|
||||
@@ -372,10 +375,4 @@ class MainActivity : BaseActivity<ActivityMainBinding>(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val TAG_PRIMARY = "primary"
|
||||
const val TAG_SEARCH = "search"
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,8 @@ import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||
import org.koitharu.kotatsu.utils.SingleLiveEvent
|
||||
import org.koitharu.kotatsu.utils.ext.md5
|
||||
|
||||
private const val PASSWORD_COMPARE_DELAY = 1_000L
|
||||
|
||||
class ProtectViewModel(
|
||||
private val settings: AppSettings,
|
||||
private val protectHelper: AppProtectHelper,
|
||||
@@ -33,9 +35,4 @@ class ProtectViewModel(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val PASSWORD_COMPARE_DELAY = 1_000L
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,8 @@ import org.koitharu.kotatsu.reader.domain.PageLoader
|
||||
import org.koitharu.kotatsu.reader.ui.ReaderState
|
||||
import org.koitharu.kotatsu.reader.ui.ReaderViewModel
|
||||
|
||||
private const val KEY_STATE = "state"
|
||||
|
||||
abstract class BaseReader<B : ViewBinding> : BaseFragment<B>() {
|
||||
|
||||
protected val viewModel by sharedViewModel<ReaderViewModel>()
|
||||
@@ -57,9 +59,4 @@ abstract class BaseReader<B : ViewBinding> : BaseFragment<B>() {
|
||||
abstract fun getCurrentState(): ReaderState?
|
||||
|
||||
protected abstract fun onPagesChanged(pages: List<ReaderPage>, pendingState: ReaderState?)
|
||||
|
||||
private companion object {
|
||||
|
||||
const val KEY_STATE = "state"
|
||||
}
|
||||
}
|
||||
@@ -7,13 +7,19 @@ import android.util.AttributeSet
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
import org.koitharu.kotatsu.utils.ext.toIntUp
|
||||
|
||||
private const val SCROLL_UNKNOWN = -1
|
||||
|
||||
class WebtoonImageView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attr: AttributeSet? = null,
|
||||
) : SubsamplingScaleImageView(context, attr) {
|
||||
|
||||
private val ct = PointF()
|
||||
private val displayHeight = (context as Activity).window.decorView.height
|
||||
private val displayHeight = if (context is Activity) {
|
||||
context.window.decorView.height
|
||||
} else {
|
||||
context.resources.displayMetrics.heightPixels
|
||||
}
|
||||
|
||||
private var scrollPos = 0
|
||||
private var scrollRange = SCROLL_UNKNOWN
|
||||
@@ -95,9 +101,4 @@ class WebtoonImageView @JvmOverloads constructor(
|
||||
val totalHeight = (sHeight * minScale).toIntUp()
|
||||
scrollRange = (totalHeight - height).coerceAtLeast(0)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val SCROLL_UNKNOWN = -1
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,12 @@ import org.koitharu.kotatsu.core.model.MangaSource
|
||||
import org.koitharu.kotatsu.search.domain.MangaSearchRepository
|
||||
import org.koitharu.kotatsu.search.ui.suggestion.model.SearchSuggestionItem
|
||||
|
||||
private const val DEBOUNCE_TIMEOUT = 500L
|
||||
private const val SEARCH_THRESHOLD = 3
|
||||
private const val MAX_MANGA_ITEMS = 3
|
||||
private const val MAX_QUERY_ITEMS = 120
|
||||
private const val MAX_SUGGESTION_ITEMS = MAX_MANGA_ITEMS + MAX_QUERY_ITEMS + 1
|
||||
|
||||
class SearchSuggestionViewModel(
|
||||
private val repository: MangaSearchRepository,
|
||||
) : BaseViewModel() {
|
||||
@@ -83,13 +89,4 @@ class SearchSuggestionViewModel(
|
||||
suggestion.postValue(it)
|
||||
}.launchIn(viewModelScope + Dispatchers.Default)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val DEBOUNCE_TIMEOUT = 500L
|
||||
const val SEARCH_THRESHOLD = 3
|
||||
const val MAX_MANGA_ITEMS = 3
|
||||
const val MAX_QUERY_ITEMS = 120
|
||||
const val MAX_SUGGESTION_ITEMS = MAX_MANGA_ITEMS + MAX_QUERY_ITEMS + 1
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,8 @@ import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.base.ui.BaseActivity
|
||||
import org.koitharu.kotatsu.databinding.ActivitySetupProtectBinding
|
||||
|
||||
private const val MIN_PASSWORD_LENGTH = 4
|
||||
|
||||
class ProtectSetupActivity : BaseActivity<ActivitySetupProtectBinding>(), TextWatcher,
|
||||
View.OnClickListener, TextView.OnEditorActionListener {
|
||||
|
||||
@@ -91,9 +93,4 @@ class ProtectSetupActivity : BaseActivity<ActivitySetupProtectBinding>(), TextWa
|
||||
binding.buttonNext.setText(R.string.next)
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val MIN_PASSWORD_LENGTH = 4
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import org.koitharu.kotatsu.core.model.MangaSource
|
||||
import org.koitharu.kotatsu.core.parser.MangaRepositoryAuthProvider
|
||||
import org.koitharu.kotatsu.databinding.ActivityBrowserBinding
|
||||
import org.koitharu.kotatsu.utils.ext.mangaRepositoryOf
|
||||
import com.google.android.material.R as materialR
|
||||
|
||||
class SourceAuthActivity : BaseActivity<ActivityBrowserBinding>(), BrowserCallback {
|
||||
|
||||
@@ -43,7 +44,7 @@ class SourceAuthActivity : BaseActivity<ActivityBrowserBinding>(), BrowserCallba
|
||||
}
|
||||
supportActionBar?.run {
|
||||
setDisplayHomeAsUpEnabled(true)
|
||||
setHomeAsUpIndicator(R.drawable.ic_cross)
|
||||
setHomeAsUpIndicator(materialR.drawable.abc_ic_clear_material)
|
||||
}
|
||||
with(binding.webView.settings) {
|
||||
javaScriptEnabled = true
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.koitharu.kotatsu.databinding.ActivityCategoriesBinding
|
||||
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
|
||||
import org.koitharu.kotatsu.widget.shelf.adapter.CategorySelectAdapter
|
||||
import org.koitharu.kotatsu.widget.shelf.model.CategoryItem
|
||||
import com.google.android.material.R as materialR
|
||||
|
||||
class ShelfConfigActivity : BaseActivity<ActivityCategoriesBinding>(),
|
||||
OnListItemClickListener<CategoryItem> {
|
||||
@@ -35,7 +36,10 @@ class ShelfConfigActivity : BaseActivity<ActivityCategoriesBinding>(),
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(ActivityCategoriesBinding.inflate(layoutInflater))
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.run {
|
||||
setDisplayHomeAsUpEnabled(true)
|
||||
setHomeAsUpIndicator(materialR.drawable.abc_ic_clear_material)
|
||||
}
|
||||
adapter = CategorySelectAdapter(this)
|
||||
binding.recyclerView.addItemDecoration(
|
||||
MaterialDividerItemDecoration(this, RecyclerView.VERTICAL)
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="?attr/colorSecondary" android:alpha="0.12" android:state_checked="true" />
|
||||
<item android:color="@android:color/transparent" />
|
||||
</selector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="?attr/colorSecondary" android:state_checked="true" />
|
||||
<item android:color="?attr/colorControlNormal" />
|
||||
</selector>
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="?colorPrimary" android:state_selected="true" />
|
||||
<item android:alpha="0.6" android:color="?colorOnSurface" />
|
||||
</selector>
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners android:radius="5dp" />
|
||||
<stroke
|
||||
android:width="2dp"
|
||||
android:color="?android:colorAccent" />
|
||||
<padding
|
||||
android:bottom="2dp"
|
||||
android:left="2dp"
|
||||
android:right="2dp"
|
||||
android:top="2dp" />
|
||||
</shape>
|
||||
@@ -1,11 +0,0 @@
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?colorAccent"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="#000"
|
||||
android:pathData="M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
|
||||
</vector>
|
||||
@@ -1,10 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12 19,6.41z"/>
|
||||
</vector>
|
||||
@@ -1,11 +0,0 @@
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M19,17.59L17.59,19L7,8.41V15H5V5H15V7H8.41L19,17.59Z" />
|
||||
</vector>
|
||||
@@ -1,11 +0,0 @@
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z" />
|
||||
</vector>
|
||||
@@ -1,11 +0,0 @@
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z" />
|
||||
</vector>
|
||||
@@ -1,11 +0,0 @@
|
||||
<vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12.87,15.07l-2.54,-2.51 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53L17,6L17,4h-7L10,2L8,2v2L1,4v1.99h11.17C11.5,7.92 10.44,9.75 9,11.35 8.07,10.32 7.3,9.19 6.69,8h-2c0.73,1.63 1.73,3.17 2.98,4.56l-5.09,5.02L4,19l5,-5 3.11,3.11 0.76,-2.04zM18.5,10h-2L12,22h2l1.12,-3h4.75L21,22h2l-4.5,-12zM15.88,17l1.62,-4.33L19.12,17h-3.24z" />
|
||||
</vector>
|
||||
@@ -1,10 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/>
|
||||
</vector>
|
||||
@@ -1,10 +0,0 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12,14c1.66,0 3,-1.34 3,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM11,5c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1L11,5zM17,11c0,2.76 -2.24,5 -5,5s-5,-2.24 -5,-5L5,11c0,3.53 2.61,6.43 6,6.92L11,21h2v-3.08c3.39,-0.49 6,-3.39 6,-6.92h-2z"/>
|
||||
</vector>
|
||||
@@ -3,6 +3,8 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context=".core.ui.CrashActivity"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ScrollView
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
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/recyclerView_chapters"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="16dp"
|
||||
android:scrollbars="vertical"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
tools:listitem="@layout/item_chapter" />
|
||||
@@ -14,7 +14,7 @@
|
||||
android:paddingTop="6dp"
|
||||
android:paddingEnd="?listPreferredItemPaddingEnd"
|
||||
android:paddingBottom="6dp"
|
||||
android:text="Select languages which you want to read manga. You can change it later in settings."
|
||||
android:text="@string/onboard_text"
|
||||
android:textAppearance="?attr/textAppearanceBodyMedium" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="vertical"
|
||||
android:padding="20dp">
|
||||
|
||||
@@ -19,11 +19,12 @@
|
||||
app:drawableTopCompat="@drawable/ic_error_large"
|
||||
tools:text="@tools:sample/lorem[6]" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/button_retry"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
style="@style/Widget.Material3.Button.TonalButton"
|
||||
android:text="@string/try_again" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -43,9 +43,9 @@
|
||||
app:drawableTopCompat="@drawable/ic_error_large"
|
||||
tools:text="@tools:sample/lorem[6]" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/button_retry"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
style="@style/Widget.Material3.Button.TonalButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:padding="8dp"
|
||||
android:src="@drawable/ic_complete" />
|
||||
android:src="@drawable/abc_ic_commit_search_api_mtrl_alpha"
|
||||
app:tint="?colorControlNormal" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -16,7 +16,7 @@
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:navigationIcon="@drawable/ic_cross"
|
||||
app:navigationIcon="?actionModeCloseDrawable"
|
||||
app:title="@string/chapters" />
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:navigationIcon="@drawable/ic_cross"
|
||||
app:navigationIcon="?actionModeCloseDrawable"
|
||||
app:title="@string/filter" />
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:navigationIcon="@drawable/ic_cross" />
|
||||
app:navigationIcon="?actionModeCloseDrawable" />
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
|
||||
@@ -5,8 +5,7 @@
|
||||
|
||||
<item
|
||||
android:id="@+id/action_done"
|
||||
android:icon="@drawable/ic_done"
|
||||
android:orderInCategory="0"
|
||||
android:title="@string/done"
|
||||
app:showAsAction="ifRoom|withText" />
|
||||
app:showAsAction="always|withText" />
|
||||
</menu>
|
||||
@@ -23,8 +23,7 @@
|
||||
<string name="nothing_found">Нічога не знойдзена</string>
|
||||
<string name="history_is_empty">Гісторыя пустая</string>
|
||||
<string name="read">Чытаць</string>
|
||||
<string name="add_bookmark">Дадаць закладку</string>
|
||||
<string name="you_have_not_favourites_yet">Дадайце цікавую для вас мангу ў абранае, каб не страціць яе</string>
|
||||
<string name="you_have_not_favourites_yet">Дадайце цікавую для вас мангу ў абранае, каб не страціць яе</string>
|
||||
<string name="add_to_favourites">Дадаць у абраныя</string>
|
||||
<string name="add_new_category">Стварыць катэгорыю</string>
|
||||
<string name="add">Дадаць</string>
|
||||
@@ -44,10 +43,8 @@
|
||||
<string name="updated">Абноўленая</string>
|
||||
<string name="newest">Новая</string>
|
||||
<string name="by_rating">Па рэйтынгу</string>
|
||||
<string name="all">Усе</string>
|
||||
<string name="sort_order">Сартаванне</string>
|
||||
<string name="genre">Жанр</string>
|
||||
<string name="filter">Фільтр</string>
|
||||
<string name="sort_order">Сартаванне</string>
|
||||
<string name="filter">Фільтр</string>
|
||||
<string name="theme">Тэма</string>
|
||||
<string name="light">Светлая</string>
|
||||
<string name="dark">Цёмная</string>
|
||||
@@ -207,13 +204,11 @@
|
||||
<string name="hide_toolbar">Схаваць загаловак пры прагортцы</string>
|
||||
<string name="search_only_on_s">Пошук толькі па %s</string>
|
||||
<string name="text_clear_search_history_prompt">Вы сапраўды хочаце выдаліць усе апошнія пошукавыя запыты\?</string>
|
||||
<string name="description">Апісанне</string>
|
||||
<string name="read_more">Падрабязна</string>
|
||||
<string name="read_more">Падрабязна</string>
|
||||
<string name="tracker_warning">Некаторыя вытворцы могуць змяняць паводзіны сістэмы, што можа парушаць выкананне фонавых задач.</string>
|
||||
<string name="backup_saved">Рэзервовая копія паспяхова захавана</string>
|
||||
<string name="welcome">Вітаю</string>
|
||||
<string name="languages">Мовы</string>
|
||||
<string name="other">Іншыя</string>
|
||||
<string name="other">Іншыя</string>
|
||||
<string name="text_local_holder_secondary">Вы можаце захаваць мангу з анлайн-крыніц або імпартаваць з файла.</string>
|
||||
<string name="text_local_holder_primary">У вас яшчэ няма ніводнай захаванай мангі</string>
|
||||
<string name="text_history_holder_secondary">Вы можаце знайсці, што пачытаць, у бакавым меню.</string>
|
||||
@@ -232,8 +227,7 @@
|
||||
<string name="about_support_developer">Падтрымаць распрацоўшчыка</string>
|
||||
<string name="about_feedback_4pda">Тэма на 4PDA</string>
|
||||
<string name="about_feedback">Зваротная сувязь</string>
|
||||
<string name="about_author">Аўтар</string>
|
||||
<string name="about_app_translation_summary">Дапамагчы з перакладам праграмы</string>
|
||||
<string name="about_app_translation_summary">Дапамагчы з перакладам праграмы</string>
|
||||
<string name="about_app_translation">Пераклад</string>
|
||||
<string name="text_clear_cookies_prompt">Вы выйдзеце з усіх крыніц, у якіх вы аўтарызаваны</string>
|
||||
<string name="auth_not_supported_by">Аўтарызацыя на %s не падтрымліваецца</string>
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
<string name="dark">Dunkel</string>
|
||||
<string name="light">Hell</string>
|
||||
<string name="filter">Filter</string>
|
||||
<string name="genre">Genre</string>
|
||||
<string name="sort_order">Sortierreihenfolge</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="by_rating">Bewertung</string>
|
||||
<string name="sort_order">Sortierreihenfolge</string>
|
||||
<string name="by_rating">Bewertung</string>
|
||||
<string name="newest">Neuestes</string>
|
||||
<string name="popular">Beliebt</string>
|
||||
<string name="by_name">Name</string>
|
||||
@@ -27,8 +25,7 @@
|
||||
<string name="add_new_category">Neue Kategorie</string>
|
||||
<string name="add_to_favourites">Zu Favoriten hinzufügen</string>
|
||||
<string name="you_have_not_favourites_yet">Noch keine Favoriten</string>
|
||||
<string name="add_bookmark">Lesezeichen hinzufügen</string>
|
||||
<string name="read">Lesen</string>
|
||||
<string name="read">Lesen</string>
|
||||
<string name="history_is_empty">Noch kein Verlauf</string>
|
||||
<string name="nothing_found">Nichts gefunden</string>
|
||||
<string name="clear_history">Verlauf löschen</string>
|
||||
@@ -121,10 +118,8 @@
|
||||
<string name="read_more">Mehr erfahren</string>
|
||||
<string name="tracker_warning">Einige Hersteller können das Systemverhalten ändern, wodurch Hintergrundaufgaben unterbrochen werden können.</string>
|
||||
<string name="backup_saved">Sicherung erfolgreich gespeichert</string>
|
||||
<string name="description">Beschreibung</string>
|
||||
<string name="welcome">Willkommen</string>
|
||||
<string name="languages">Sprachen</string>
|
||||
<string name="remove_category">Kategorie entfernen</string>
|
||||
<string name="welcome">Willkommen</string>
|
||||
<string name="remove_category">Kategorie entfernen</string>
|
||||
<string name="rotate_screen">Bildschirm drehen</string>
|
||||
<string name="size_s">Größe: %s</string>
|
||||
<string name="new_version_s">Neue Version: %s</string>
|
||||
@@ -232,8 +227,7 @@
|
||||
<string name="about_support_developer">Den Entwickler unterstützen</string>
|
||||
<string name="about_feedback_4pda">Thema auf 4PDA</string>
|
||||
<string name="about_feedback">Rückmeldung</string>
|
||||
<string name="about_author">Autor</string>
|
||||
<string name="about_app_translation">Übersetzung</string>
|
||||
<string name="about_app_translation">Übersetzung</string>
|
||||
<string name="about_app_translation_summary">Diese Anwendung übersetzen</string>
|
||||
<string name="text_clear_cookies_prompt">Du wirst von allen Quellen abgemeldet, für die du berechtigt bist</string>
|
||||
<string name="genres">Genres</string>
|
||||
|
||||
@@ -23,8 +23,7 @@
|
||||
<string name="nothing_found">No se encontró nada</string>
|
||||
<string name="history_is_empty">Aún sin historial</string>
|
||||
<string name="read">Leer</string>
|
||||
<string name="add_bookmark">Añadir marcador</string>
|
||||
<string name="you_have_not_favourites_yet">Aún no hay favoritos</string>
|
||||
<string name="you_have_not_favourites_yet">Aún no hay favoritos</string>
|
||||
<string name="add_to_favourites">Añadir a favoritos</string>
|
||||
<string name="add_new_category">Nueva categoría</string>
|
||||
<string name="add">Añadir</string>
|
||||
@@ -44,10 +43,8 @@
|
||||
<string name="updated">Actualización</string>
|
||||
<string name="newest">Recientes</string>
|
||||
<string name="by_rating">Calificación</string>
|
||||
<string name="all">Todo</string>
|
||||
<string name="sort_order">Orden de clasificación</string>
|
||||
<string name="genre">Género</string>
|
||||
<string name="filter">Filtrar</string>
|
||||
<string name="sort_order">Orden de clasificación</string>
|
||||
<string name="filter">Filtrar</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="light">Claro</string>
|
||||
<string name="dark">Oscuro</string>
|
||||
@@ -219,16 +216,13 @@
|
||||
<string name="chapter_is_missing">Falta un capítulo</string>
|
||||
<string name="about_app_translation_summary">Traducir esta aplicación</string>
|
||||
<string name="about_feedback">Comentarios</string>
|
||||
<string name="about_author">Autor</string>
|
||||
<string name="about_app_translation">Traducción</string>
|
||||
<string name="about_app_translation">Traducción</string>
|
||||
<string name="text_downloads_holder">Actualmente no hay descargas activas</string>
|
||||
<string name="queued">En la cola</string>
|
||||
<string name="read_more">Leer más</string>
|
||||
<string name="backup_saved">Copia de seguridad guardada correctamente</string>
|
||||
<string name="description">Descripción</string>
|
||||
<string name="welcome">Bienvenido/a</string>
|
||||
<string name="languages">Idiomas</string>
|
||||
<string name="other">Otro</string>
|
||||
<string name="welcome">Bienvenido/a</string>
|
||||
<string name="other">Otro</string>
|
||||
<string name="genres">Géneros</string>
|
||||
<string name="text_search_holder_secondary">Intenta reformular la consulta.</string>
|
||||
<string name="text_clear_search_history_prompt">¿Realmente quiere eliminar todas las consultas de búsqueda recientes\?</string>
|
||||
|
||||
@@ -12,8 +12,7 @@
|
||||
<string name="about_support_developer">Tue kehittäjää</string>
|
||||
<string name="about_feedback_4pda">Aihe 4PDA: ssa</string>
|
||||
<string name="about_feedback">Palaute</string>
|
||||
<string name="about_author">Kirjailija</string>
|
||||
<string name="about_app_translation">Käännös</string>
|
||||
<string name="about_app_translation">Käännös</string>
|
||||
<string name="about_app_translation_summary">Käännä tämä sovellus</string>
|
||||
<string name="chapter_is_missing">Luku puuttuu</string>
|
||||
<string name="chapter_is_missing_text">Tämä luku puuttuu laitteestasi. Lataa tai lue se verkossa.</string>
|
||||
@@ -22,10 +21,8 @@
|
||||
<string name="read_more">Lue lisää</string>
|
||||
<string name="tracker_warning">Jotkin valmistajat voivat muuttaa järjestelmän käyttäytymistä, mikä voi keskeyttää taustatehtäviä.</string>
|
||||
<string name="backup_saved">Varmuuskopiointi tallennettu onnistuneesti</string>
|
||||
<string name="description">Kuvaus</string>
|
||||
<string name="welcome">Tervetuloa</string>
|
||||
<string name="languages">Kielet</string>
|
||||
<string name="other">Muut</string>
|
||||
<string name="welcome">Tervetuloa</string>
|
||||
<string name="other">Muut</string>
|
||||
<string name="text_clear_search_history_prompt">Haluatko todella poistaa kaikki viimeaikaiset hakukyselyt\?</string>
|
||||
<string name="search_only_on_s">Hae vain kohteesta %s</string>
|
||||
<string name="hide_toolbar">Piilota työkalupalkki selattaessa</string>
|
||||
@@ -187,10 +184,8 @@
|
||||
<string name="light">Vaalea</string>
|
||||
<string name="theme">Teema</string>
|
||||
<string name="filter">Suodatin</string>
|
||||
<string name="genre">Tyylilaji</string>
|
||||
<string name="sort_order">Lajittelujärjestys</string>
|
||||
<string name="all">Kaikki</string>
|
||||
<string name="by_rating">Luokituksen mukaan</string>
|
||||
<string name="sort_order">Lajittelujärjestys</string>
|
||||
<string name="by_rating">Luokituksen mukaan</string>
|
||||
<string name="newest">Uusimmat</string>
|
||||
<string name="updated">Päivitetty</string>
|
||||
<string name="popular">Suosittu</string>
|
||||
@@ -210,8 +205,7 @@
|
||||
<string name="add_new_category">Lisää uusi luokka</string>
|
||||
<string name="add_to_favourites">Lisää suosikkeihin</string>
|
||||
<string name="you_have_not_favourites_yet">Sinulla ei ole vielä suosikkeja</string>
|
||||
<string name="add_bookmark">Lisää kirjanmerkki</string>
|
||||
<string name="read">Lue</string>
|
||||
<string name="read">Lue</string>
|
||||
<string name="history_is_empty">Historia on tyhjä</string>
|
||||
<string name="nothing_found">Mitään ei löytynyt</string>
|
||||
<string name="clear_history">Tyhjennä historia</string>
|
||||
|
||||
@@ -4,10 +4,8 @@
|
||||
<string name="read_more">Lire la suite</string>
|
||||
<string name="tracker_warning">Certains appareils ont un comportement différent du système, ce qui peut interrompre les tâches d\'arrière-plan.</string>
|
||||
<string name="backup_saved">Sauvegarde enregistrée</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="welcome">Bienvenue</string>
|
||||
<string name="languages">Langues</string>
|
||||
<string name="other">Autre</string>
|
||||
<string name="welcome">Bienvenue</string>
|
||||
<string name="other">Autre</string>
|
||||
<string name="text_clear_search_history_prompt">Supprimer définitivement toutes les requêtes de recherche récentes \?</string>
|
||||
<string name="search_only_on_s">Rechercher uniquement sur %s</string>
|
||||
<string name="hide_toolbar">Masquer la barre d\'outils lors du défilement</string>
|
||||
@@ -173,10 +171,8 @@
|
||||
<string name="light">Clair</string>
|
||||
<string name="theme">Thème</string>
|
||||
<string name="filter">Filtre</string>
|
||||
<string name="genre">Genre</string>
|
||||
<string name="sort_order">Ordre de tri</string>
|
||||
<string name="all">Tous</string>
|
||||
<string name="by_rating">Évaluation</string>
|
||||
<string name="sort_order">Ordre de tri</string>
|
||||
<string name="by_rating">Évaluation</string>
|
||||
<string name="newest">Le plus récent</string>
|
||||
<string name="updated">Mis à jour</string>
|
||||
<string name="popular">Populaire</string>
|
||||
@@ -196,8 +192,7 @@
|
||||
<string name="add_new_category">Nouvelle catégorie</string>
|
||||
<string name="add_to_favourites">Ajouter aux favoris</string>
|
||||
<string name="you_have_not_favourites_yet">Aucun favori pour le moment</string>
|
||||
<string name="add_bookmark">Ajouter un marque-page</string>
|
||||
<string name="read">Lire</string>
|
||||
<string name="read">Lire</string>
|
||||
<string name="history_is_empty">Pas encore d\'historique</string>
|
||||
<string name="nothing_found">Rien n\'a été trouvé</string>
|
||||
<string name="clear_history">Effacer l\'historique</string>
|
||||
@@ -232,8 +227,7 @@
|
||||
<string name="about_gratitudes">Remerciements</string>
|
||||
<string name="about_feedback_4pda">Sujet sur 4PDA</string>
|
||||
<string name="about_feedback">Remarques</string>
|
||||
<string name="about_author">Auteur</string>
|
||||
<string name="about_app_translation">Traduction</string>
|
||||
<string name="about_app_translation">Traduction</string>
|
||||
<string name="about_app_translation_summary">Traduire cette application</string>
|
||||
<string name="genres">Genres</string>
|
||||
<string name="text_clear_cookies_prompt">Vous serez déconnecté de toutes les sources</string>
|
||||
|
||||
@@ -16,10 +16,8 @@
|
||||
<string name="light">Chiaro</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="filter">Filtro</string>
|
||||
<string name="genre">Genere</string>
|
||||
<string name="sort_order">Ordinamento</string>
|
||||
<string name="all">Tutti</string>
|
||||
<string name="by_rating">Per valutazione</string>
|
||||
<string name="sort_order">Ordinamento</string>
|
||||
<string name="by_rating">Per valutazione</string>
|
||||
<string name="newest">Più recente</string>
|
||||
<string name="updated">Aggiornato</string>
|
||||
<string name="popular">Popolare</string>
|
||||
@@ -39,8 +37,7 @@
|
||||
<string name="add_new_category">Aggiungi una nuova categoria</string>
|
||||
<string name="add_to_favourites">Aggiungi ai preferiti</string>
|
||||
<string name="you_have_not_favourites_yet">Non hai ancora preferiti</string>
|
||||
<string name="add_bookmark">Aggiungi un segnalibro</string>
|
||||
<string name="read">Leggi</string>
|
||||
<string name="read">Leggi</string>
|
||||
<string name="history_is_empty">La cronologia è vuota</string>
|
||||
<string name="nothing_found">Niente di trovato</string>
|
||||
<string name="clear_history">Cancella la cronologia</string>
|
||||
@@ -70,10 +67,8 @@
|
||||
<string name="open_menu">Apri il menù</string>
|
||||
<string name="close_menu">Chiudi il menù</string>
|
||||
<string name="read_more">Leggi di più</string>
|
||||
<string name="description">Descrizione</string>
|
||||
<string name="welcome">Benvenuto/a</string>
|
||||
<string name="languages">Lingue</string>
|
||||
<string name="other">Altro</string>
|
||||
<string name="welcome">Benvenuto/a</string>
|
||||
<string name="other">Altro</string>
|
||||
<string name="text_clear_search_history_prompt">Vuoi davvero rimuovere tutte le ricerche recenti\?</string>
|
||||
<string name="search_only_on_s">Cerca solo su %s</string>
|
||||
<string name="hide_toolbar">Nascondi la barra degli strumenti quando si scorre</string>
|
||||
@@ -232,8 +227,7 @@
|
||||
<string name="about_support_developer">Sostieni lo sviluppatore</string>
|
||||
<string name="about_feedback_4pda">Argomento su 4PDA</string>
|
||||
<string name="about_feedback">Commenti</string>
|
||||
<string name="about_author">Autore</string>
|
||||
<string name="about_app_translation">Traduzione</string>
|
||||
<string name="about_app_translation">Traduzione</string>
|
||||
<string name="about_app_translation_summary">Traduci questa applicazione</string>
|
||||
<string name="genres">Generi</string>
|
||||
<string name="text_clear_cookies_prompt">Sarai disconnesso/a da tutte le fonti in cui sei autorizzato/a</string>
|
||||
|
||||
@@ -37,10 +37,8 @@
|
||||
<string name="local_storage">ローカルストレージ</string>
|
||||
<string name="newest">最新</string>
|
||||
<string name="by_rating">評価</string>
|
||||
<string name="all">全て</string>
|
||||
<string name="sort_order">ソート順に並べ替え</string>
|
||||
<string name="genre">ジャンル</string>
|
||||
<string name="automatic">フォローシステム</string>
|
||||
<string name="sort_order">ソート順に並べ替え</string>
|
||||
<string name="automatic">フォローシステム</string>
|
||||
<string name="clear">クリア</string>
|
||||
<string name="text_clear_history_prompt">すべての履歴を永久にクリアしますか?</string>
|
||||
<string name="remove">削除</string>
|
||||
@@ -66,8 +64,7 @@
|
||||
<string name="pages">ページ</string>
|
||||
<string name="theme">テーマ</string>
|
||||
<string name="network_error">インターネットに接続出来ませんでした</string>
|
||||
<string name="add_bookmark">ブックマークに追加</string>
|
||||
<string name="enter_category_name">カテゴリー名を入力してください</string>
|
||||
<string name="enter_category_name">カテゴリー名を入力してください</string>
|
||||
<string name="updated">アップデート</string>
|
||||
<string name="cache">キャッシュ</string>
|
||||
<string name="text_file_not_supported">ZIPファイルまたはCBZファイルを選択してください。</string>
|
||||
@@ -207,8 +204,7 @@
|
||||
<string name="text_clear_search_history_prompt">最近の検索クエリを全て完全に削除しますか?</string>
|
||||
<string name="zoom_mode_fit_width">幅を合わせる</string>
|
||||
<string name="check_for_new_chapters">新しいチャプターを探しています</string>
|
||||
<string name="languages">言語</string>
|
||||
<string name="protect_application_subtitle">アプリを起動するためのパスワードを入力してください</string>
|
||||
<string name="protect_application_subtitle">アプリを起動するためのパスワードを入力してください</string>
|
||||
<string name="create_backup">データバックアップを作成</string>
|
||||
<string name="captcha_solve">解決しました</string>
|
||||
<string name="tap_to_try_again">タップして再試行してください</string>
|
||||
@@ -218,12 +214,10 @@
|
||||
<string name="about_app_translation">翻訳</string>
|
||||
<string name="data_restored_success">全てのデータが復元されました</string>
|
||||
<string name="data_restored">復元</string>
|
||||
<string name="about_author">著者</string>
|
||||
<string name="about_gratitudes">感謝の気持ち</string>
|
||||
<string name="about_gratitudes">感謝の気持ち</string>
|
||||
<string name="preparing_">準備中…</string>
|
||||
<string name="zoom_mode_keep_start">開始時に維持</string>
|
||||
<string name="description">説明</string>
|
||||
<string name="backup_restore">バックアップと復元</string>
|
||||
<string name="backup_restore">バックアップと復元</string>
|
||||
<string name="about_copyright_and_licenses">著作権とライセンス</string>
|
||||
<string name="reverse">リバース</string>
|
||||
<string name="reader_mode_hint">選択した構成はこの漫画のために記憶されます</string>
|
||||
|
||||
@@ -84,10 +84,8 @@
|
||||
<string name="remote_sources">Kilder annensteds hen</string>
|
||||
<string name="read_more">Les mer</string>
|
||||
<string name="backup_saved">Sikkerhetskopi lagret</string>
|
||||
<string name="description">Beskrivelse</string>
|
||||
<string name="welcome">Velkommen</string>
|
||||
<string name="languages">Språk</string>
|
||||
<string name="other">Annet</string>
|
||||
<string name="welcome">Velkommen</string>
|
||||
<string name="other">Annet</string>
|
||||
<string name="search_only_on_s">Kun søk på %s</string>
|
||||
<string name="confirm">Bekreft</string>
|
||||
<string name="next">Neste</string>
|
||||
@@ -177,10 +175,8 @@
|
||||
<string name="by_name">Navn</string>
|
||||
<string name="theme">Drakt</string>
|
||||
<string name="filter">Filter</string>
|
||||
<string name="genre">Sjanger</string>
|
||||
<string name="sort_order">Sorteringsrekkefølge</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="by_rating">Vurdering</string>
|
||||
<string name="sort_order">Sorteringsrekkefølge</string>
|
||||
<string name="by_rating">Vurdering</string>
|
||||
<string name="newest">Nyeste</string>
|
||||
<string name="updated">Oppdatert</string>
|
||||
<string name="popular">Popularitet</string>
|
||||
@@ -199,8 +195,7 @@
|
||||
<string name="add_new_category">Ny kategori</string>
|
||||
<string name="add_to_favourites">Favorittmerk dette</string>
|
||||
<string name="you_have_not_favourites_yet">Ingen favoritter enda</string>
|
||||
<string name="add_bookmark">Legg til bokmerke</string>
|
||||
<string name="history_is_empty">Ingen historikk enda</string>
|
||||
<string name="history_is_empty">Ingen historikk enda</string>
|
||||
<string name="clear_history">Tøm historikk</string>
|
||||
<string name="try_again">Prøv igjen</string>
|
||||
<string name="close">Lukk</string>
|
||||
@@ -228,8 +223,7 @@
|
||||
<string name="state_ongoing">Pågående</string>
|
||||
<string name="about_app_translation_summary">Oversett dette programmet</string>
|
||||
<string name="about_app_translation">Oversettelse</string>
|
||||
<string name="about_author">Utvikler</string>
|
||||
<string name="about_feedback">Tilbakemelding</string>
|
||||
<string name="about_feedback">Tilbakemelding</string>
|
||||
<string name="about_feedback_4pda">Emne på 4PDA</string>
|
||||
<string name="about_support_developer">Støtt utvikleren</string>
|
||||
<string name="about_support_developer_summary">Hvis du liker programmet kan du kronerulle det på Yoomoney (tidligere Yandex.Money)</string>
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<color name="splash_color_background">#252525</color>
|
||||
<color name="splash_color">#A4C8FF</color>
|
||||
|
||||
<color name="error">#FFB4A9</color>
|
||||
<color name="errorContainer">#930006</color>
|
||||
<color name="onError">#680003</color>
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
<string name="clear_history">Limpar histórico</string>
|
||||
<string name="nothing_found">Nada encontrado</string>
|
||||
<string name="history_is_empty">Sem histórico ainda</string>
|
||||
<string name="add_bookmark">Adicionar marca páginas</string>
|
||||
<string name="you_have_not_favourites_yet">Ainda não há favoritos</string>
|
||||
<string name="you_have_not_favourites_yet">Ainda não há favoritos</string>
|
||||
<string name="add_to_favourites">Favoritar isso</string>
|
||||
<string name="add">Adicionar</string>
|
||||
<string name="enter_category_name">Nomeie a categoria</string>
|
||||
@@ -34,10 +33,8 @@
|
||||
<string name="by_name">Nome</string>
|
||||
<string name="popular">Populares</string>
|
||||
<string name="by_rating">Avaliação</string>
|
||||
<string name="all">Todos</string>
|
||||
<string name="sort_order">Ordem de classificação</string>
|
||||
<string name="genre">Gênero</string>
|
||||
<string name="filter">Filtro</string>
|
||||
<string name="sort_order">Ordem de classificação</string>
|
||||
<string name="filter">Filtro</string>
|
||||
<string name="dark">Escuro</string>
|
||||
<string name="automatic">Siga o sistema</string>
|
||||
<string name="pages">Páginas</string>
|
||||
@@ -174,23 +171,20 @@
|
||||
<string name="protect_application_subtitle">Digite a senha que será necessária quando o aplicativo for iniciado</string>
|
||||
<string name="confirm">Confirme</string>
|
||||
<string name="password_length_hint">A senha deve ter 4 caracteres ou mais</string>
|
||||
<string name="description">Descrição</string>
|
||||
<string name="backup_saved">Backup salvo</string>
|
||||
<string name="backup_saved">Backup salvo</string>
|
||||
<string name="tracker_warning">Alguns dispositivos têm um comportamento de sistema diferente, o que pode interromper as tarefas em segundo plano.</string>
|
||||
<string name="read_more">Leia mais</string>
|
||||
<string name="hide_toolbar">Ocultar a barra de ferramentas ao rolar</string>
|
||||
<string name="search_only_on_s">Pesquise apenas em %s</string>
|
||||
<string name="other">Outros</string>
|
||||
<string name="languages">Línguas</string>
|
||||
<string name="welcome">Bem vindo</string>
|
||||
<string name="welcome">Bem vindo</string>
|
||||
<string name="available_sources">Fontes disponíveis</string>
|
||||
<string name="enabled_sources">Fontes usadas</string>
|
||||
<string name="queued">Enfileirado</string>
|
||||
<string name="text_downloads_holder">Nenhum download ativo</string>
|
||||
<string name="error_empty_name">Você deve inserir um nome</string>
|
||||
<string name="about_app_translation_summary">Traduzir esta aplicação</string>
|
||||
<string name="about_author">Autor</string>
|
||||
<string name="about_feedback">Comentar</string>
|
||||
<string name="about_feedback">Comentar</string>
|
||||
<string name="about_feedback_4pda">Tópico no 4PDA</string>
|
||||
<string name="about_support_developer">Apoiar o desenvolvedor</string>
|
||||
<string name="about_support_developer_summary">Se você gosta deste aplicativo, você pode enviar dinheiro através do Yoomoney (ex. Yandex.Money)</string>
|
||||
|
||||
@@ -23,8 +23,7 @@
|
||||
<string name="nothing_found">Ничего не найдено</string>
|
||||
<string name="history_is_empty">Истории еще нет</string>
|
||||
<string name="read">Читать</string>
|
||||
<string name="add_bookmark">Добавить закладку</string>
|
||||
<string name="you_have_not_favourites_yet">Избранного пока нет</string>
|
||||
<string name="you_have_not_favourites_yet">Избранного пока нет</string>
|
||||
<string name="add_to_favourites">В избранное</string>
|
||||
<string name="add_new_category">Новая категория</string>
|
||||
<string name="add">Добавить</string>
|
||||
@@ -44,10 +43,8 @@
|
||||
<string name="updated">Обновлённая</string>
|
||||
<string name="newest">Новая</string>
|
||||
<string name="by_rating">Рейтинг</string>
|
||||
<string name="all">Все</string>
|
||||
<string name="sort_order">Порядок сортировки</string>
|
||||
<string name="genre">Жанр</string>
|
||||
<string name="filter">Фильтр</string>
|
||||
<string name="sort_order">Порядок сортировки</string>
|
||||
<string name="filter">Фильтр</string>
|
||||
<string name="theme">Тема</string>
|
||||
<string name="light">Светлая</string>
|
||||
<string name="dark">Тёмная</string>
|
||||
@@ -212,9 +209,7 @@
|
||||
<string name="hide_toolbar">Прятать заголовок при прокрутке</string>
|
||||
<string name="search_only_on_s">Поиск только по %s</string>
|
||||
<string name="other">Другие</string>
|
||||
<string name="description">Описание</string>
|
||||
<string name="languages">Языки</string>
|
||||
<string name="welcome">Добро пожаловать</string>
|
||||
<string name="welcome">Добро пожаловать</string>
|
||||
<string name="text_clear_search_history_prompt">Удалить все последние поисковые запросы навсегда\?</string>
|
||||
<string name="backup_saved">Резервная копия сохранена</string>
|
||||
<string name="tracker_warning">Некоторые устройства имеют различное поведение системы, что может привести к нарушению фоновых задач.</string>
|
||||
@@ -225,8 +220,7 @@
|
||||
<string name="chapter_is_missing_text">Скачайте или прочитайте эту недостающую главу онлайн.</string>
|
||||
<string name="about_app_translation_summary">Помочь с переводом приложения</string>
|
||||
<string name="about_app_translation">Перевод</string>
|
||||
<string name="about_author">Автор</string>
|
||||
<string name="about_feedback_4pda">Тема на 4PDA</string>
|
||||
<string name="about_feedback_4pda">Тема на 4PDA</string>
|
||||
<string name="about_feedback">Обратная связь</string>
|
||||
<string name="about_support_developer">Поддержать разработчика</string>
|
||||
<string name="about_support_developer_summary">Если вам нравится это приложение, вы можете помочь финансово с помощью ЮMoney (бывш. Яндекс.Деньги)</string>
|
||||
|
||||
@@ -18,8 +18,7 @@
|
||||
<string name="nothing_found">Hiçbir şey bulunamadı</string>
|
||||
<string name="history_is_empty">Sen geçmişiniz yok</string>
|
||||
<string name="read">Oku</string>
|
||||
<string name="add_bookmark">Favorilere ekle</string>
|
||||
<string name="you_have_not_favourites_yet">Henüz favorileriniz yok</string>
|
||||
<string name="you_have_not_favourites_yet">Henüz favorileriniz yok</string>
|
||||
<string name="add_to_favourites">Favoriniz</string>
|
||||
<string name="add_new_category">Yeni kategori</string>
|
||||
<string name="add">Ekle</string>
|
||||
@@ -37,9 +36,7 @@
|
||||
<string name="updated">Güncellenme</string>
|
||||
<string name="newest">Yeniler</string>
|
||||
<string name="by_rating">Puanlama</string>
|
||||
<string name="all">Hepsi</string>
|
||||
<string name="genre">Tür</string>
|
||||
<string name="filter">Litre</string>
|
||||
<string name="filter">Litre</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="light">Açık</string>
|
||||
<string name="dark">Koyu</string>
|
||||
@@ -132,8 +129,7 @@
|
||||
<string name="clear_feed">Akışı temizle</string>
|
||||
<string name="chapter_is_missing_text">Bu eksik bölümü çevrim içi olarak indirin veya okuyun.</string>
|
||||
<string name="restore_backup">Yedekten geri yükle</string>
|
||||
<string name="about_author">Yazar</string>
|
||||
<string name="update">Güncelle</string>
|
||||
<string name="update">Güncelle</string>
|
||||
<string name="sign_in">Oturum aç</string>
|
||||
<string name="about_license">Lisans</string>
|
||||
<string name="state_finished">Bitti</string>
|
||||
@@ -183,8 +179,7 @@
|
||||
<string name="reverse">Ters</string>
|
||||
<string name="password_length_hint">Parola 4 veya daha fazla karakterden oluşmalıdır</string>
|
||||
<string name="welcome">Hoş geldiniz</string>
|
||||
<string name="description">Açıklama</string>
|
||||
<string name="queued">Sıraya alındı</string>
|
||||
<string name="queued">Sıraya alındı</string>
|
||||
<string name="text_downloads_holder">Etkin indirme yok</string>
|
||||
<string name="chapter_is_missing">Bölüm eksik</string>
|
||||
<string name="about_app_translation_summary">Bu uygulamayı çevirin</string>
|
||||
@@ -235,8 +230,7 @@
|
||||
<string name="reader_mode_hint">Seçilen yapılandırma bu manga için hatırlanacak</string>
|
||||
<string name="about_support_developer_summary">Bu uygulamayı beğendiyseniz Yoomoney (eski Yandex.Money) üzerinden para gönderebilirsiniz</string>
|
||||
<string name="text_clear_updates_feed_prompt">Tüm güncelleme geçmişi kalıcı olarak silinsin mi\?</string>
|
||||
<string name="new_chapters_checking">Yeni bölümler aranıyor…</string>
|
||||
<string name="_and_x_more">…ve %1$d daha fazlası</string>
|
||||
<string name="_and_x_more">…ve %1$d daha fazlası</string>
|
||||
<string name="protect_application_subtitle">Uygulamayı başlatmak için bir parola girin</string>
|
||||
<string name="text_clear_search_history_prompt">Tüm son arama sorguları kalıcı olarak kaldırılsın mı\?</string>
|
||||
<string name="about_feedback">Geri bildirim</string>
|
||||
@@ -249,8 +243,7 @@
|
||||
<string name="error_empty_name">Bir ad girmelisiniz</string>
|
||||
<string name="auth_not_supported_by">%s üzerinde oturum açma desteklenmiyor</string>
|
||||
<string name="show_notification_new_chapters">Okunan manga güncellemeleri hakkında bildirimde bulun</string>
|
||||
<string name="languages">Diller</string>
|
||||
<string name="read_more">Daha fazla oku</string>
|
||||
<string name="read_more">Daha fazla oku</string>
|
||||
<string name="tracker_warning">Bazı aygıtların arka plan görevlerini bozabilecek farklı sistem davranışları vardır.</string>
|
||||
<string name="screenshots_policy">Ekran görüntüsü politikası</string>
|
||||
<string name="screenshots_block_nsfw">Uygunsuzlarda engelle</string>
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<color name="splash_color_background">#FFFFFF</color>
|
||||
<color name="splash_color">#1976D2</color>
|
||||
|
||||
<color name="error">#BA1B1B</color>
|
||||
<color name="errorContainer">#FFDAD4</color>
|
||||
<color name="onError">#FFFFFF</color>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="empty" translatable="false" />
|
||||
<string-array name="values_theme" translatable="false">
|
||||
<item>-1</item>
|
||||
<item>1</item>
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<dimen name="margin_small">8dp</dimen>
|
||||
<!-- Navigation -->
|
||||
<dimen name="nav_header_logo_size">36dp</dimen>
|
||||
<dimen name="nav_item_horizontal_padding">24dp</dimen>
|
||||
|
||||
<dimen name="grid_spacing">8dp</dimen>
|
||||
<dimen name="list_spacing">8dp</dimen>
|
||||
@@ -16,15 +15,10 @@
|
||||
<dimen name="chapter_list_item_height">56dp</dimen>
|
||||
<dimen name="preferred_grid_width">120dp</dimen>
|
||||
<dimen name="header_height">48dp</dimen>
|
||||
<dimen name="elevation_large">16dp</dimen>
|
||||
<dimen name="list_footer_height_inner">36dp</dimen>
|
||||
<dimen name="list_footer_height_outer">48dp</dimen>
|
||||
<dimen name="screen_padding">16dp</dimen>
|
||||
<dimen name="feed_dividers_offset">72dp</dimen>
|
||||
<dimen name="manga_badge_offset_horizontal">4dp</dimen>
|
||||
<dimen name="manga_badge_offset_vertical">2dp</dimen>
|
||||
|
||||
<!--Text dimens-->
|
||||
<dimen name="text_size_h1">22sp</dimen>
|
||||
|
||||
</resources>
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<integer name="search_animation_duration">@android:integer/config_shortAnimTime</integer>
|
||||
<integer name="manga_badge_max_character_count">3</integer>
|
||||
</resources>
|
||||
@@ -24,8 +24,7 @@
|
||||
<string name="nothing_found">Nothing found</string>
|
||||
<string name="history_is_empty">No history yet</string>
|
||||
<string name="read">Read</string>
|
||||
<string name="add_bookmark">Add bookmark</string>
|
||||
<string name="you_have_not_favourites_yet">No favourites yet</string>
|
||||
<string name="you_have_not_favourites_yet">No favourites yet</string>
|
||||
<string name="add_to_favourites">Favourite this</string>
|
||||
<string name="add_new_category">New category</string>
|
||||
<string name="add">Add</string>
|
||||
@@ -45,10 +44,8 @@
|
||||
<string name="updated">Updated</string>
|
||||
<string name="newest">Newest</string>
|
||||
<string name="by_rating">Rating</string>
|
||||
<string name="all">All</string>
|
||||
<string name="sort_order">Sorting order</string>
|
||||
<string name="genre">Genre</string>
|
||||
<string name="filter">Filter</string>
|
||||
<string name="sort_order">Sorting order</string>
|
||||
<string name="filter">Filter</string>
|
||||
<string name="theme">Theme</string>
|
||||
<string name="light">Light</string>
|
||||
<string name="dark">Dark</string>
|
||||
@@ -214,10 +211,8 @@
|
||||
<string name="search_only_on_s">Search only on %s</string>
|
||||
<string name="text_clear_search_history_prompt">Remove all recent search queries permanently?</string>
|
||||
<string name="other">Other</string>
|
||||
<string name="languages">Languages</string>
|
||||
<string name="welcome">Welcome</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="backup_saved">Backup saved</string>
|
||||
<string name="welcome">Welcome</string>
|
||||
<string name="backup_saved">Backup saved</string>
|
||||
<string name="tracker_warning">Some devices have different system behavior, which may break background tasks.</string>
|
||||
<string name="read_more">Read more</string>
|
||||
<string name="queued">Queued</string>
|
||||
@@ -226,8 +221,7 @@
|
||||
<string name="chapter_is_missing">The chapter is missing</string>
|
||||
<string name="about_app_translation_summary">Translate this app</string>
|
||||
<string name="about_app_translation">Translation</string>
|
||||
<string name="about_author">Author</string>
|
||||
<string name="about_feedback">Feedback</string>
|
||||
<string name="about_feedback">Feedback</string>
|
||||
<string name="about_feedback_4pda">Topic on 4PDA</string>
|
||||
<string name="about_support_developer">Support the developer</string>
|
||||
<string name="about_support_developer_summary">If you like this app, you can send money through Yoomoney (ex. Yandex.Money)</string>
|
||||
@@ -266,4 +260,5 @@
|
||||
<string name="filter_load_error">Unable to load genres list</string>
|
||||
<string name="reset_filter">Reset filter</string>
|
||||
<string name="find_genre">Find genre</string>
|
||||
<string name="onboard_text">Select languages which you want to read manga. You can change it later in settings.</string>
|
||||
</resources>
|
||||
@@ -29,8 +29,6 @@
|
||||
<item name="tabRippleColor">@color/ripple_toolbar</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Kotatsu.NavigationView" parent="@style/Widget.Material3.NavigationView" />
|
||||
|
||||
<style name="Widget.Kotatsu.SearchView" parent="@style/Widget.AppCompat.SearchView">
|
||||
<item name="iconifiedByDefault">false</item>
|
||||
<item name="searchIcon">@null</item>
|
||||
@@ -62,28 +60,10 @@
|
||||
<item name="iconPadding">16dp</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Kotatsu.ActionMode" parent="Widget.Material3.ActionMode">
|
||||
<item name="titleTextStyle">?attr/textAppearanceHeadline6</item>
|
||||
<item name="subtitleTextStyle">?attr/textAppearanceSubtitle1</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Kotatsu.Switch" parent="Widget.Material3.CompoundButton.Switch">
|
||||
<item name="materialThemeOverlay">@style/ThemeOverlay.Kotatsu.Switch</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Kotatsu.Button.InlineButton" parent="Widget.Material3.Button.TextButton">
|
||||
<item name="android:minHeight">0dp</item>
|
||||
<item name="android:minWidth">0dp</item>
|
||||
<item name="android:paddingTop">0dp</item>
|
||||
<item name="android:paddingBottom">0dp</item>
|
||||
<item name="android:insetTop">0dp</item>
|
||||
<item name="android:insetBottom">0dp</item>
|
||||
|
||||
<item name="android:background">?android:attr/colorBackground</item>
|
||||
<item name="backgroundTint">@null</item>
|
||||
<item name="rippleColor">@null</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.Kotatsu.RecyclerView" parent="">
|
||||
<item name="fastScrollHorizontalThumbDrawable">@drawable/list_thumb</item>
|
||||
<item name="fastScrollVerticalThumbDrawable">@drawable/list_thumb</item>
|
||||
@@ -102,35 +82,12 @@
|
||||
<item name="android:textColor">?attr/colorOnBackground</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Kotatsu.ToolbarTitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
|
||||
<item name="android:textSize">20sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Kotatsu.PersistentToolbarTitle" parent="@style/TextAppearance.AppCompat">
|
||||
<item name="android:textSize">16sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Kotatsu.Tab" parent="@style/TextAppearance.Design.Tab">
|
||||
<item name="textAllCaps">false</item>
|
||||
<item name="android:textAllCaps">false</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Kotatsu.Button" parent="TextAppearance.Material3.TitleSmall"/>
|
||||
|
||||
<style name="TextAppearance.Kotatsu.ListPrimary" parent="TextAppearance.MaterialComponents.Body1">
|
||||
<item name="android:letterSpacing">0</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Kotatsu.Body2" parent="TextAppearance.MaterialComponents.Body2" />
|
||||
|
||||
<style name="TextAppearance.Kotatsu.H1" parent="@style/TextAppearance.Material3.HeadlineLarge">
|
||||
<item name="android:textSize">@dimen/text_size_h1</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Kotatsu.FloatingTitle" parent="TextAppearance.Material3.TitleLarge">
|
||||
<item name="android:textSize">16sp</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Kotatsu.Preference.Secondary" parent="TextAppearance.Material3.BodySmall" />
|
||||
|
||||
<style name="TextAppearance.Kotatsu.SectionHeader" parent="TextAppearance.Material3.LabelLarge">
|
||||
|
||||
Reference in New Issue
Block a user