diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseFullscreenActivity.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseFullscreenActivity.kt index 4d453b186..64317e4a7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseFullscreenActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseFullscreenActivity.kt @@ -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 : BaseActivity(), View.OnSystemUiVisibilityChangeListener { @@ -25,6 +35,7 @@ abstract class BaseFullscreenActivity : BaseActivity(), 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 : BaseActivity(), } 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 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/CoverImageView.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/CoverImageView.kt index 6f0c9e4e2..3a52eb237 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/CoverImageView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/CoverImageView.kt @@ -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 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FadingSnackbar.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FadingSnackbar.kt index 8f41c695d..9c85787a7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FadingSnackbar.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/widgets/FadingSnackbar.kt @@ -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 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/browser/BrowserActivity.kt b/app/src/main/java/org/koitharu/kotatsu/browser/BrowserActivity.kt index 885e99b70..fc9bd599c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/browser/BrowserActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/browser/BrowserActivity.kt @@ -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(), BrowserCallback { @@ -23,7 +24,7 @@ class BrowserActivity : BaseActivity(), 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 diff --git a/app/src/main/java/org/koitharu/kotatsu/browser/cloudflare/CloudFlareClient.kt b/app/src/main/java/org/koitharu/kotatsu/browser/cloudflare/CloudFlareClient.kt index fe514b6d8..56eef7520 100644 --- a/app/src/main/java/org/koitharu/kotatsu/browser/cloudflare/CloudFlareClient.kt +++ b/app/src/main/java/org/koitharu/kotatsu/browser/cloudflare/CloudFlareClient.kt @@ -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" - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/backup/BackupRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/backup/BackupRepository.kt index eb6cb8579..3d2f668a6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/backup/BackupRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/backup/BackupRepository.kt @@ -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 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/network/CloudFlareInterceptor.kt b/app/src/main/java/org/koitharu/kotatsu/core/network/CloudFlareInterceptor.kt index 7ee4107d6..d9c8281d7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/network/CloudFlareInterceptor.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/network/CloudFlareInterceptor.kt @@ -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" - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/network/CurlLoggingInterceptor.kt b/app/src/main/java/org/koitharu/kotatsu/core/network/CurlLoggingInterceptor.kt index b3fa833cd..e5bf2deca 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/network/CurlLoggingInterceptor.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/network/CurlLoggingInterceptor.kt @@ -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" - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt index c1f49d804..0aeb751e1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/GroupleRepository.kt @@ -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 = 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 { - 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 { - 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): 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() - } - } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaTownRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaTownRepository.kt index 973bb77bb..30109513c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaTownRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangaTownRepository.kt @@ -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 } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt index 6aa94cb98..70c51b4cf 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/MangareadRepository.kt @@ -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() } diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/NineMangaRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/NineMangaRepository.kt index 351467882..3b94821c5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/NineMangaRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/NineMangaRepository.kt @@ -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 = 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 { - 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 { - 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() - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/RemangaRepository.kt b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/RemangaRepository.kt index d3925d62a..2ac28c8ac 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/parser/site/RemangaRepository.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/parser/site/RemangaRepository.kt @@ -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("/[^/]+/?$") - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/download/domain/DownloadManager.kt b/app/src/main/java/org/koitharu/kotatsu/download/domain/DownloadManager.kt index 1303c0791..b4de213d5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/download/domain/DownloadManager.kt +++ b/app/src/main/java/org/koitharu/kotatsu/download/domain/DownloadManager.kt @@ -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" - } } diff --git a/app/src/main/java/org/koitharu/kotatsu/download/ui/service/DownloadNotification.kt b/app/src/main/java/org/koitharu/kotatsu/download/ui/service/DownloadNotification.kt index 0d38a3326..46054d901 100644 --- a/app/src/main/java/org/koitharu/kotatsu/download/ui/service/DownloadNotification.kt +++ b/app/src/main/java/org/koitharu/kotatsu/download/ui/service/DownloadNotification.kt @@ -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, diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/CategoriesEditDelegate.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/CategoriesEditDelegate.kt index bae47cc45..603a70ee3 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/CategoriesEditDelegate.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/CategoriesEditDelegate.kt @@ -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 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt index 329591adc..3a3cea458 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -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(), NavigationView.OnNavigationItemSelectedListener, AppBarOwner, View.OnClickListener, View.OnFocusChangeListener, SearchSuggestionListener { @@ -372,10 +375,4 @@ class MainActivity : BaseActivity(), } } } - - private companion object { - - const val TAG_PRIMARY = "primary" - const val TAG_SEARCH = "search" - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/protect/ProtectViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/protect/ProtectViewModel.kt index ca1c9cbd1..8574599c1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/ui/protect/ProtectViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/protect/ProtectViewModel.kt @@ -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 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReader.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReader.kt index 236603f69..4035d9854 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReader.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/BaseReader.kt @@ -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 : BaseFragment() { protected val viewModel by sharedViewModel() @@ -57,9 +59,4 @@ abstract class BaseReader : BaseFragment() { abstract fun getCurrentState(): ReaderState? protected abstract fun onPagesChanged(pages: List, pendingState: ReaderState?) - - private companion object { - - const val KEY_STATE = "state" - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonImageView.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonImageView.kt index a762e05ef..25e808e3b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonImageView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/webtoon/WebtoonImageView.kt @@ -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 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchSuggestionViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchSuggestionViewModel.kt index d05382e72..4317d5bdb 100644 --- a/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchSuggestionViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchSuggestionViewModel.kt @@ -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 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/protect/ProtectSetupActivity.kt b/app/src/main/java/org/koitharu/kotatsu/settings/protect/ProtectSetupActivity.kt index 7ca1f3642..a0145362a 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/protect/ProtectSetupActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/protect/ProtectSetupActivity.kt @@ -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(), TextWatcher, View.OnClickListener, TextView.OnEditorActionListener { @@ -91,9 +93,4 @@ class ProtectSetupActivity : BaseActivity(), TextWa binding.buttonNext.setText(R.string.next) } } - - private companion object { - - const val MIN_PASSWORD_LENGTH = 4 - } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/sources/auth/SourceAuthActivity.kt b/app/src/main/java/org/koitharu/kotatsu/settings/sources/auth/SourceAuthActivity.kt index 896c92780..b5f24a9c0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/sources/auth/SourceAuthActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/sources/auth/SourceAuthActivity.kt @@ -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(), BrowserCallback { @@ -43,7 +44,7 @@ class SourceAuthActivity : BaseActivity(), BrowserCallba } supportActionBar?.run { setDisplayHomeAsUpEnabled(true) - setHomeAsUpIndicator(R.drawable.ic_cross) + setHomeAsUpIndicator(materialR.drawable.abc_ic_clear_material) } with(binding.webView.settings) { javaScriptEnabled = true diff --git a/app/src/main/java/org/koitharu/kotatsu/widget/shelf/ShelfConfigActivity.kt b/app/src/main/java/org/koitharu/kotatsu/widget/shelf/ShelfConfigActivity.kt index 5caba4fef..b7eea4171 100644 --- a/app/src/main/java/org/koitharu/kotatsu/widget/shelf/ShelfConfigActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/widget/shelf/ShelfConfigActivity.kt @@ -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(), OnListItemClickListener { @@ -35,7 +36,10 @@ class ShelfConfigActivity : BaseActivity(), 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) diff --git a/app/src/main/res/color/navigation_item_background_tint.xml b/app/src/main/res/color/navigation_item_background_tint.xml deleted file mode 100644 index 06c5673d1..000000000 --- a/app/src/main/res/color/navigation_item_background_tint.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/color/navigation_item_color_tint.xml b/app/src/main/res/color/navigation_item_color_tint.xml deleted file mode 100644 index bffbeeb10..000000000 --- a/app/src/main/res/color/navigation_item_color_tint.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/color/tab_text.xml b/app/src/main/res/color/tab_text.xml deleted file mode 100644 index 61fef0f02..000000000 --- a/app/src/main/res/color/tab_text.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_badge_outline_accent.xml b/app/src/main/res/drawable/bg_badge_outline_accent.xml deleted file mode 100644 index d9f9aa2cf..000000000 --- a/app/src/main/res/drawable/bg_badge_outline_accent.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml deleted file mode 100644 index bd2325cf0..000000000 --- a/app/src/main/res/drawable/ic_check.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_clear.xml b/app/src/main/res/drawable/ic_clear.xml deleted file mode 100644 index 938bb9922..000000000 --- a/app/src/main/res/drawable/ic_clear.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_complete.xml b/app/src/main/res/drawable/ic_complete.xml deleted file mode 100644 index 3735578eb..000000000 --- a/app/src/main/res/drawable/ic_complete.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cross.xml b/app/src/main/res/drawable/ic_cross.xml deleted file mode 100644 index e95e6a295..000000000 --- a/app/src/main/res/drawable/ic_cross.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_done.xml b/app/src/main/res/drawable/ic_done.xml deleted file mode 100644 index b4f50b70c..000000000 --- a/app/src/main/res/drawable/ic_done.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_locale.xml b/app/src/main/res/drawable/ic_locale.xml deleted file mode 100644 index 1bc2d39de..000000000 --- a/app/src/main/res/drawable/ic_locale.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_menu.xml b/app/src/main/res/drawable/ic_menu.xml deleted file mode 100644 index 4350ba96a..000000000 --- a/app/src/main/res/drawable/ic_menu.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_mic_none.xml b/app/src/main/res/drawable/ic_mic_none.xml deleted file mode 100644 index 2810bc9a2..000000000 --- a/app/src/main/res/drawable/ic_mic_none.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/layout/activity_crash.xml b/app/src/main/res/layout/activity_crash.xml index 88b720560..ba9c13511 100644 --- a/app/src/main/res/layout/activity_crash.xml +++ b/app/src/main/res/layout/activity_crash.xml @@ -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"> - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_onboard.xml b/app/src/main/res/layout/dialog_onboard.xml index 65003ca23..03346c04d 100644 --- a/app/src/main/res/layout/dialog_onboard.xml +++ b/app/src/main/res/layout/dialog_onboard.xml @@ -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" /> diff --git a/app/src/main/res/layout/item_error_state.xml b/app/src/main/res/layout/item_error_state.xml index 7edc3212a..4204ff54f 100644 --- a/app/src/main/res/layout/item_error_state.xml +++ b/app/src/main/res/layout/item_error_state.xml @@ -19,11 +19,12 @@ app:drawableTopCompat="@drawable/ic_error_large" tools:text="@tools:sample/lorem[6]" /> - \ No newline at end of file diff --git a/app/src/main/res/layout/item_page_webtoon.xml b/app/src/main/res/layout/item_page_webtoon.xml index c66df5034..486182d26 100644 --- a/app/src/main/res/layout/item_page_webtoon.xml +++ b/app/src/main/res/layout/item_page_webtoon.xml @@ -43,9 +43,9 @@ app:drawableTopCompat="@drawable/ic_error_large" tools:text="@tools:sample/lorem[6]" /> - + android:src="@drawable/abc_ic_commit_search_api_mtrl_alpha" + app:tint="?colorControlNormal" /> \ No newline at end of file diff --git a/app/src/main/res/layout/sheet_chapters.xml b/app/src/main/res/layout/sheet_chapters.xml index 102aaded5..4e17b4c76 100644 --- a/app/src/main/res/layout/sheet_chapters.xml +++ b/app/src/main/res/layout/sheet_chapters.xml @@ -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" /> diff --git a/app/src/main/res/layout/sheet_filter.xml b/app/src/main/res/layout/sheet_filter.xml index b7343028b..5d5ddd0b8 100644 --- a/app/src/main/res/layout/sheet_filter.xml +++ b/app/src/main/res/layout/sheet_filter.xml @@ -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" /> diff --git a/app/src/main/res/layout/sheet_pages.xml b/app/src/main/res/layout/sheet_pages.xml index 1d9ae8044..ec1711660 100644 --- a/app/src/main/res/layout/sheet_pages.xml +++ b/app/src/main/res/layout/sheet_pages.xml @@ -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" /> diff --git a/app/src/main/res/menu/opt_config.xml b/app/src/main/res/menu/opt_config.xml index 425f8e7dc..816f95d79 100644 --- a/app/src/main/res/menu/opt_config.xml +++ b/app/src/main/res/menu/opt_config.xml @@ -5,8 +5,7 @@ + app:showAsAction="always|withText" /> \ No newline at end of file diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 2155f5363..7aba53101 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -23,8 +23,7 @@ Нічога не знойдзена Гісторыя пустая Чытаць - Дадаць закладку - Дадайце цікавую для вас мангу ў абранае, каб не страціць яе + Дадайце цікавую для вас мангу ў абранае, каб не страціць яе Дадаць у абраныя Стварыць катэгорыю Дадаць @@ -44,10 +43,8 @@ Абноўленая Новая Па рэйтынгу - Усе - Сартаванне - Жанр - Фільтр + Сартаванне + Фільтр Тэма Светлая Цёмная @@ -207,13 +204,11 @@ Схаваць загаловак пры прагортцы Пошук толькі па %s Вы сапраўды хочаце выдаліць усе апошнія пошукавыя запыты\? - Апісанне - Падрабязна + Падрабязна Некаторыя вытворцы могуць змяняць паводзіны сістэмы, што можа парушаць выкананне фонавых задач. Рэзервовая копія паспяхова захавана Вітаю - Мовы - Іншыя + Іншыя Вы можаце захаваць мангу з анлайн-крыніц або імпартаваць з файла. У вас яшчэ няма ніводнай захаванай мангі Вы можаце знайсці, што пачытаць, у бакавым меню. @@ -232,8 +227,7 @@ Падтрымаць распрацоўшчыка Тэма на 4PDA Зваротная сувязь - Аўтар - Дапамагчы з перакладам праграмы + Дапамагчы з перакладам праграмы Пераклад Вы выйдзеце з усіх крыніц, у якіх вы аўтарызаваны Аўтарызацыя на %s не падтрымліваецца diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 036e2db27..05ca79250 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -8,10 +8,8 @@ Dunkel Hell Filter - Genre - Sortierreihenfolge - Alle - Bewertung + Sortierreihenfolge + Bewertung Neuestes Beliebt Name @@ -27,8 +25,7 @@ Neue Kategorie Zu Favoriten hinzufügen Noch keine Favoriten - Lesezeichen hinzufügen - Lesen + Lesen Noch kein Verlauf Nichts gefunden Verlauf löschen @@ -121,10 +118,8 @@ Mehr erfahren Einige Hersteller können das Systemverhalten ändern, wodurch Hintergrundaufgaben unterbrochen werden können. Sicherung erfolgreich gespeichert - Beschreibung - Willkommen - Sprachen - Kategorie entfernen + Willkommen + Kategorie entfernen Bildschirm drehen Größe: %s Neue Version: %s @@ -232,8 +227,7 @@ Den Entwickler unterstützen Thema auf 4PDA Rückmeldung - Autor - Übersetzung + Übersetzung Diese Anwendung übersetzen Du wirst von allen Quellen abgemeldet, für die du berechtigt bist Genres diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a4c00187e..d0ac364f3 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -23,8 +23,7 @@ No se encontró nada Aún sin historial Leer - Añadir marcador - Aún no hay favoritos + Aún no hay favoritos Añadir a favoritos Nueva categoría Añadir @@ -44,10 +43,8 @@ Actualización Recientes Calificación - Todo - Orden de clasificación - Género - Filtrar + Orden de clasificación + Filtrar Tema Claro Oscuro @@ -219,16 +216,13 @@ Falta un capítulo Traducir esta aplicación Comentarios - Autor - Traducción + Traducción Actualmente no hay descargas activas En la cola Leer más Copia de seguridad guardada correctamente - Descripción - Bienvenido/a - Idiomas - Otro + Bienvenido/a + Otro Géneros Intenta reformular la consulta. ¿Realmente quiere eliminar todas las consultas de búsqueda recientes\? diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 960898a61..416bcf668 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -12,8 +12,7 @@ Tue kehittäjää Aihe 4PDA: ssa Palaute - Kirjailija - Käännös + Käännös Käännä tämä sovellus Luku puuttuu Tämä luku puuttuu laitteestasi. Lataa tai lue se verkossa. @@ -22,10 +21,8 @@ Lue lisää Jotkin valmistajat voivat muuttaa järjestelmän käyttäytymistä, mikä voi keskeyttää taustatehtäviä. Varmuuskopiointi tallennettu onnistuneesti - Kuvaus - Tervetuloa - Kielet - Muut + Tervetuloa + Muut Haluatko todella poistaa kaikki viimeaikaiset hakukyselyt\? Hae vain kohteesta %s Piilota työkalupalkki selattaessa @@ -187,10 +184,8 @@ Vaalea Teema Suodatin - Tyylilaji - Lajittelujärjestys - Kaikki - Luokituksen mukaan + Lajittelujärjestys + Luokituksen mukaan Uusimmat Päivitetty Suosittu @@ -210,8 +205,7 @@ Lisää uusi luokka Lisää suosikkeihin Sinulla ei ole vielä suosikkeja - Lisää kirjanmerkki - Lue + Lue Historia on tyhjä Mitään ei löytynyt Tyhjennä historia diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 3824772ec..45e07648d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -4,10 +4,8 @@ Lire la suite Certains appareils ont un comportement différent du système, ce qui peut interrompre les tâches d\'arrière-plan. Sauvegarde enregistrée - Description - Bienvenue - Langues - Autre + Bienvenue + Autre Supprimer définitivement toutes les requêtes de recherche récentes \? Rechercher uniquement sur %s Masquer la barre d\'outils lors du défilement @@ -173,10 +171,8 @@ Clair Thème Filtre - Genre - Ordre de tri - Tous - Évaluation + Ordre de tri + Évaluation Le plus récent Mis à jour Populaire @@ -196,8 +192,7 @@ Nouvelle catégorie Ajouter aux favoris Aucun favori pour le moment - Ajouter un marque-page - Lire + Lire Pas encore d\'historique Rien n\'a été trouvé Effacer l\'historique @@ -232,8 +227,7 @@ Remerciements Sujet sur 4PDA Remarques - Auteur - Traduction + Traduction Traduire cette application Genres Vous serez déconnecté de toutes les sources diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 71e33d82d..3c08bd7fa 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -16,10 +16,8 @@ Chiaro Tema Filtro - Genere - Ordinamento - Tutti - Per valutazione + Ordinamento + Per valutazione Più recente Aggiornato Popolare @@ -39,8 +37,7 @@ Aggiungi una nuova categoria Aggiungi ai preferiti Non hai ancora preferiti - Aggiungi un segnalibro - Leggi + Leggi La cronologia è vuota Niente di trovato Cancella la cronologia @@ -70,10 +67,8 @@ Apri il menù Chiudi il menù Leggi di più - Descrizione - Benvenuto/a - Lingue - Altro + Benvenuto/a + Altro Vuoi davvero rimuovere tutte le ricerche recenti\? Cerca solo su %s Nascondi la barra degli strumenti quando si scorre @@ -232,8 +227,7 @@ Sostieni lo sviluppatore Argomento su 4PDA Commenti - Autore - Traduzione + Traduzione Traduci questa applicazione Generi Sarai disconnesso/a da tutte le fonti in cui sei autorizzato/a diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 2f196fc8f..d3e82d208 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -37,10 +37,8 @@ ローカルストレージ 最新 評価 - 全て - ソート順に並べ替え - ジャンル - フォローシステム + ソート順に並べ替え + フォローシステム クリア すべての履歴を永久にクリアしますか? 削除 @@ -66,8 +64,7 @@ ページ テーマ インターネットに接続出来ませんでした - ブックマークに追加 - カテゴリー名を入力してください + カテゴリー名を入力してください アップデート キャッシュ ZIPファイルまたはCBZファイルを選択してください。 @@ -207,8 +204,7 @@ 最近の検索クエリを全て完全に削除しますか? 幅を合わせる 新しいチャプターを探しています - 言語 - アプリを起動するためのパスワードを入力してください + アプリを起動するためのパスワードを入力してください データバックアップを作成 解決しました タップして再試行してください @@ -218,12 +214,10 @@ 翻訳 全てのデータが復元されました 復元 - 著者 - 感謝の気持ち + 感謝の気持ち 準備中… 開始時に維持 - 説明 - バックアップと復元 + バックアップと復元 著作権とライセンス リバース 選択した構成はこの漫画のために記憶されます diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 2078c044f..a98f796bb 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -84,10 +84,8 @@ Kilder annensteds hen Les mer Sikkerhetskopi lagret - Beskrivelse - Velkommen - Språk - Annet + Velkommen + Annet Kun søk på %s Bekreft Neste @@ -177,10 +175,8 @@ Navn Drakt Filter - Sjanger - Sorteringsrekkefølge - Alle - Vurdering + Sorteringsrekkefølge + Vurdering Nyeste Oppdatert Popularitet @@ -199,8 +195,7 @@ Ny kategori Favorittmerk dette Ingen favoritter enda - Legg til bokmerke - Ingen historikk enda + Ingen historikk enda Tøm historikk Prøv igjen Lukk @@ -228,8 +223,7 @@ Pågående Oversett dette programmet Oversettelse - Utvikler - Tilbakemelding + Tilbakemelding Emne på 4PDA Støtt utvikleren Hvis du liker programmet kan du kronerulle det på Yoomoney (tidligere Yandex.Money) diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index da4b44148..bd8aa3487 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -1,9 +1,6 @@ - #252525 - #A4C8FF - #FFB4A9 #930006 #680003 diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 5732181c8..98d905a31 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -17,8 +17,7 @@ Limpar histórico Nada encontrado Sem histórico ainda - Adicionar marca páginas - Ainda não há favoritos + Ainda não há favoritos Favoritar isso Adicionar Nomeie a categoria @@ -34,10 +33,8 @@ Nome Populares Avaliação - Todos - Ordem de classificação - Gênero - Filtro + Ordem de classificação + Filtro Escuro Siga o sistema Páginas @@ -174,23 +171,20 @@ Digite a senha que será necessária quando o aplicativo for iniciado Confirme A senha deve ter 4 caracteres ou mais - Descrição - Backup salvo + Backup salvo Alguns dispositivos têm um comportamento de sistema diferente, o que pode interromper as tarefas em segundo plano. Leia mais Ocultar a barra de ferramentas ao rolar Pesquise apenas em %s Outros - Línguas - Bem vindo + Bem vindo Fontes disponíveis Fontes usadas Enfileirado Nenhum download ativo Você deve inserir um nome Traduzir esta aplicação - Autor - Comentar + Comentar Tópico no 4PDA Apoiar o desenvolvedor Se você gosta deste aplicativo, você pode enviar dinheiro através do Yoomoney (ex. Yandex.Money) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 5b75987f2..64f1bbf4f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -23,8 +23,7 @@ Ничего не найдено Истории еще нет Читать - Добавить закладку - Избранного пока нет + Избранного пока нет В избранное Новая категория Добавить @@ -44,10 +43,8 @@ Обновлённая Новая Рейтинг - Все - Порядок сортировки - Жанр - Фильтр + Порядок сортировки + Фильтр Тема Светлая Тёмная @@ -212,9 +209,7 @@ Прятать заголовок при прокрутке Поиск только по %s Другие - Описание - Языки - Добро пожаловать + Добро пожаловать Удалить все последние поисковые запросы навсегда\? Резервная копия сохранена Некоторые устройства имеют различное поведение системы, что может привести к нарушению фоновых задач. @@ -225,8 +220,7 @@ Скачайте или прочитайте эту недостающую главу онлайн. Помочь с переводом приложения Перевод - Автор - Тема на 4PDA + Тема на 4PDA Обратная связь Поддержать разработчика Если вам нравится это приложение, вы можете помочь финансово с помощью ЮMoney (бывш. Яндекс.Деньги) diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e4ac34869..648e0b312 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -18,8 +18,7 @@ Hiçbir şey bulunamadı Sen geçmişiniz yok Oku - Favorilere ekle - Henüz favorileriniz yok + Henüz favorileriniz yok Favoriniz Yeni kategori Ekle @@ -37,9 +36,7 @@ Güncellenme Yeniler Puanlama - Hepsi - Tür - Litre + Litre Tema Açık Koyu @@ -132,8 +129,7 @@ Akışı temizle Bu eksik bölümü çevrim içi olarak indirin veya okuyun. Yedekten geri yükle - Yazar - Güncelle + Güncelle Oturum aç Lisans Bitti @@ -183,8 +179,7 @@ Ters Parola 4 veya daha fazla karakterden oluşmalıdır Hoş geldiniz - Açıklama - Sıraya alındı + Sıraya alındı Etkin indirme yok Bölüm eksik Bu uygulamayı çevirin @@ -235,8 +230,7 @@ Seçilen yapılandırma bu manga için hatırlanacak Bu uygulamayı beğendiyseniz Yoomoney (eski Yandex.Money) üzerinden para gönderebilirsiniz Tüm güncelleme geçmişi kalıcı olarak silinsin mi\? - Yeni bölümler aranıyor… - …ve %1$d daha fazlası + …ve %1$d daha fazlası Uygulamayı başlatmak için bir parola girin Tüm son arama sorguları kalıcı olarak kaldırılsın mı\? Geri bildirim @@ -249,8 +243,7 @@ Bir ad girmelisiniz %s üzerinde oturum açma desteklenmiyor Okunan manga güncellemeleri hakkında bildirimde bulun - Diller - Daha fazla oku + Daha fazla oku Bazı aygıtların arka plan görevlerini bozabilecek farklı sistem davranışları vardır. Ekran görüntüsü politikası Uygunsuzlarda engelle diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 0ff097af8..9b0b3375f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,9 +1,6 @@ - #FFFFFF - #1976D2 - #BA1B1B #FFDAD4 #FFFFFF diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml index 7e400c72e..2670a1bc5 100644 --- a/app/src/main/res/values/constants.xml +++ b/app/src/main/res/values/constants.xml @@ -1,6 +1,5 @@ - -1 1 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 60eff7be4..734613783 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -6,7 +6,6 @@ 8dp 36dp - 24dp 8dp 8dp @@ -16,15 +15,10 @@ 56dp 120dp 48dp - 16dp 36dp 48dp 16dp - 72dp - 4dp - 2dp - 22sp \ No newline at end of file diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index 794917074..6bcbce89d 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -1,6 +1,5 @@ - @android:integer/config_shortAnimTime 3 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0971d4c4a..ffc1c4f6a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -24,8 +24,7 @@ Nothing found No history yet Read - Add bookmark - No favourites yet + No favourites yet Favourite this New category Add @@ -45,10 +44,8 @@ Updated Newest Rating - All - Sorting order - Genre - Filter + Sorting order + Filter Theme Light Dark @@ -214,10 +211,8 @@ Search only on %s Remove all recent search queries permanently? Other - Languages - Welcome - Description - Backup saved + Welcome + Backup saved Some devices have different system behavior, which may break background tasks. Read more Queued @@ -226,8 +221,7 @@ The chapter is missing Translate this app Translation - Author - Feedback + Feedback Topic on 4PDA Support the developer If you like this app, you can send money through Yoomoney (ex. Yandex.Money) @@ -266,4 +260,5 @@ Unable to load genres list Reset filter Find genre + Select languages which you want to read manga. You can change it later in settings. \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2cdf110c3..f65fca080 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -29,8 +29,6 @@ @color/ripple_toolbar - - - - - - - - - - - - - -