Merge remote-tracking branch 'origin/devel' into devel
This commit is contained in:
@@ -10,7 +10,7 @@ Kotatsu is a free and open source manga reader for Android.
|
||||
alt="Get it on F-Droid"
|
||||
height="80">](https://f-droid.org/packages/org.koitharu.kotatsu)
|
||||
|
||||
Download APK from Github Releases:
|
||||
Download APK from GitHub Releases:
|
||||
|
||||
- [Latest release](https://github.com/KotatsuApp/Kotatsu/releases/latest)
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@ android {
|
||||
applicationId 'org.koitharu.kotatsu'
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 32
|
||||
versionCode 410
|
||||
versionName '3.3.1'
|
||||
versionCode 411
|
||||
versionName '3.3.2'
|
||||
generatedDensities = []
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
|
||||
@@ -6,14 +6,12 @@ import androidx.annotation.CallSuper
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.core.graphics.Insets
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.koitharu.kotatsu.base.ui.util.RecyclerViewOwner
|
||||
import org.koitharu.kotatsu.base.ui.util.WindowInsetsDelegate
|
||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||
import org.koitharu.kotatsu.settings.SettingsActivity
|
||||
import org.koitharu.kotatsu.settings.SettingsHeadersFragment
|
||||
|
||||
abstract class BasePreferenceFragment(@StringRes private val titleId: Int) :
|
||||
|
||||
@@ -15,11 +15,11 @@ class BackupZipOutput(val file: File) : Closeable {
|
||||
|
||||
private val output = ZipOutput(file, Deflater.BEST_COMPRESSION)
|
||||
|
||||
suspend fun put(entry: BackupEntry) {
|
||||
suspend fun put(entry: BackupEntry) = runInterruptible(Dispatchers.IO) {
|
||||
output.put(entry.name, entry.data.toString(2))
|
||||
}
|
||||
|
||||
suspend fun finish() {
|
||||
suspend fun finish() = runInterruptible(Dispatchers.IO) {
|
||||
output.finish()
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package org.koitharu.kotatsu.core.exceptions
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import okio.IOException
|
||||
import org.koitharu.kotatsu.R
|
||||
|
||||
class CloudFlareProtectedException(
|
||||
val url: String
|
||||
|
||||
@@ -321,9 +321,6 @@ class AppSettings(context: Context) {
|
||||
const val KEY_APP_UPDATE = "app_update"
|
||||
const val KEY_APP_UPDATE_AUTO = "app_update_auto"
|
||||
const val KEY_APP_TRANSLATION = "about_app_translation"
|
||||
const val KEY_FEEDBACK_4PDA = "about_feedback_4pda"
|
||||
const val KEY_FEEDBACK_DISCORD = "about_feedback_discord"
|
||||
const val KEY_FEEDBACK_GITHUB = "about_feedback_github"
|
||||
|
||||
private const val NETWORK_NEVER = 0
|
||||
private const val NETWORK_ALWAYS = 1
|
||||
|
||||
@@ -9,7 +9,6 @@ import androidx.collection.ArraySet
|
||||
import androidx.core.graphics.Insets
|
||||
import androidx.core.view.isNotEmpty
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
|
||||
@@ -16,6 +16,7 @@ abstract class BasePageHolder<B : ViewBinding>(
|
||||
exceptionResolver: ExceptionResolver
|
||||
) : RecyclerView.ViewHolder(binding.root), PageHolderDelegate.Callback {
|
||||
|
||||
@Suppress("LeakingThis")
|
||||
protected val delegate = PageHolderDelegate(loader, settings, this, exceptionResolver)
|
||||
protected val bindingInfo = LayoutPageInfoBinding.bind(binding.root)
|
||||
|
||||
|
||||
@@ -11,10 +11,11 @@ import org.koitharu.kotatsu.utils.ext.resetTransformations
|
||||
import kotlin.coroutines.resume
|
||||
import kotlin.coroutines.suspendCoroutine
|
||||
|
||||
@Suppress("LeakingThis")
|
||||
abstract class BaseReaderAdapter<H : BasePageHolder<*>>(
|
||||
private val loader: PageLoader,
|
||||
private val settings: AppSettings,
|
||||
private val exceptionResolver: ExceptionResolver
|
||||
private val exceptionResolver: ExceptionResolver,
|
||||
) : RecyclerView.Adapter<H>() {
|
||||
|
||||
private val differ = AsyncListDiffer(this, DiffCallback())
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.koitharu.kotatsu.search.ui
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.graphics.Insets
|
||||
|
||||
@@ -22,7 +22,6 @@ import org.koitharu.kotatsu.base.ui.util.RecyclerViewOwner
|
||||
import org.koitharu.kotatsu.databinding.ActivitySettingsBinding
|
||||
import org.koitharu.kotatsu.main.ui.AppBarOwner
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.tracker.domain.Tracker
|
||||
import org.koitharu.kotatsu.utils.ext.isScrolledToTop
|
||||
|
||||
class SettingsActivity :
|
||||
|
||||
@@ -29,6 +29,6 @@ class RingtonePickContract(private val title: String?) : ActivityResultContract<
|
||||
}
|
||||
|
||||
override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
|
||||
return intent?.getParcelableExtra<Uri>(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
|
||||
return intent?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
|
||||
}
|
||||
}
|
||||
@@ -32,14 +32,14 @@ class SuggestionRepository(
|
||||
suspend fun replace(suggestions: Iterable<MangaSuggestion>) {
|
||||
db.withTransaction {
|
||||
db.suggestionDao.deleteAll()
|
||||
suggestions.forEach { x ->
|
||||
val tags = x.manga.tags.toEntities()
|
||||
suggestions.forEach { (manga, relevance) ->
|
||||
val tags = manga.tags.toEntities()
|
||||
db.tagsDao.upsert(tags)
|
||||
db.mangaDao.upsert(x.manga.toEntity(), tags)
|
||||
db.mangaDao.upsert(manga.toEntity(), tags)
|
||||
db.suggestionDao.upsert(
|
||||
SuggestionEntity(
|
||||
mangaId = x.manga.id,
|
||||
relevance = x.relevance,
|
||||
mangaId = manga.id,
|
||||
relevance = relevance,
|
||||
createdAt = System.currentTimeMillis(),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -35,7 +35,7 @@ class ScreenOrientationHelper(private val activity: Activity) {
|
||||
isLandscape = !isLandscape
|
||||
}
|
||||
|
||||
fun observeAutoOrientation() = callbackFlow<Boolean> {
|
||||
fun observeAutoOrientation() = callbackFlow {
|
||||
val observer = object : ContentObserver(Handler(activity.mainLooper)) {
|
||||
override fun onChange(selfChange: Boolean) {
|
||||
trySendBlocking(isAutoRotationEnabled)
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
package org.koitharu.kotatsu.utils.ext
|
||||
|
||||
import android.view.View
|
||||
import androidx.core.graphics.Insets
|
||||
|
||||
fun Insets.getStart(view: View): Int {
|
||||
return if (view.layoutDirection == View.LAYOUT_DIRECTION_RTL) {
|
||||
right
|
||||
} else {
|
||||
left
|
||||
}
|
||||
}
|
||||
|
||||
fun Insets.getEnd(view: View): Int {
|
||||
return if (view.layoutDirection == View.LAYOUT_DIRECTION_RTL) {
|
||||
left
|
||||
} else {
|
||||
right
|
||||
}
|
||||
}
|
||||
@@ -4,11 +4,10 @@ import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.liveData
|
||||
import kotlinx.coroutines.Deferred
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import org.koitharu.kotatsu.utils.BufferedObserver
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
|
||||
fun <T> LiveData<T?>.observeNotNull(owner: LifecycleOwner, observer: Observer<T>) {
|
||||
this.observe(owner) {
|
||||
|
||||
@@ -5,8 +5,6 @@ import android.graphics.Rect
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.widget.TooltipCompat
|
||||
import androidx.core.view.children
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.widget.RemoteViewsService
|
||||
import coil.ImageLoader
|
||||
import coil.executeBlocking
|
||||
import coil.request.ImageRequest
|
||||
import coil.size.Scale
|
||||
import coil.size.Size
|
||||
import coil.transform.RoundedCornersTransformation
|
||||
import kotlinx.coroutines.runBlocking
|
||||
@@ -54,6 +55,7 @@ class RecentListFactory(
|
||||
ImageRequest.Builder(context)
|
||||
.data(item.coverUrl)
|
||||
.size(coverSize)
|
||||
.scale(Scale.FILL)
|
||||
.transformations(transformation)
|
||||
.build()
|
||||
).requireBitmap()
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.widget.RemoteViewsService
|
||||
import coil.ImageLoader
|
||||
import coil.executeBlocking
|
||||
import coil.request.ImageRequest
|
||||
import coil.size.Scale
|
||||
import coil.size.Size
|
||||
import coil.transform.RoundedCornersTransformation
|
||||
import kotlinx.coroutines.runBlocking
|
||||
@@ -65,6 +66,7 @@ class ShelfListFactory(
|
||||
ImageRequest.Builder(context)
|
||||
.data(item.coverUrl)
|
||||
.size(coverSize)
|
||||
.scale(Scale.FILL)
|
||||
.transformations(transformation)
|
||||
.build()
|
||||
).requireBitmap()
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="?colorPrimaryContainer" android:state_checked="true" android:state_enabled="true" />
|
||||
<item android:alpha="@dimen/material_emphasis_disabled" android:color="?colorPrimaryContainer" android:state_checked="true" android:state_enabled="false" />
|
||||
<item android:color="?colorSurfaceVariant" android:state_checked="false" android:state_enabled="true" />
|
||||
<item android:alpha="@dimen/material_emphasis_disabled" android:color="?colorSurfaceVariant" android:state_checked="false" android:state_enabled="false" />
|
||||
</selector>
|
||||
@@ -1,7 +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_checked="true" android:state_enabled="true" />
|
||||
<item android:alpha="@dimen/material_emphasis_disabled" android:color="?colorPrimary" android:state_checked="true" android:state_enabled="false" />
|
||||
<item android:color="?colorOnSurfaceVariant" android:state_checked="false" android:state_enabled="true" />
|
||||
<item android:alpha="@dimen/material_emphasis_disabled" android:color="?colorOnSurfaceVariant" android:state_checked="false" android:state_enabled="false" />
|
||||
</selector>
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/kotatsu_primaryContainer" android:state_checked="true" android:state_enabled="true" />
|
||||
<item android:alpha="@dimen/material_emphasis_disabled" android:color="@color/kotatsu_primaryContainer" android:state_checked="true" android:state_enabled="false" />
|
||||
<item android:color="@color/kotatsu_surfaceVariant" android:state_checked="false" android:state_enabled="true" />
|
||||
<item android:alpha="@dimen/material_emphasis_disabled" android:color="@color/kotatsu_surfaceVariant" android:state_checked="false" android:state_enabled="false" />
|
||||
</selector>
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/blue_primary" android:state_checked="true" android:state_enabled="true" />
|
||||
<item android:alpha="@dimen/material_emphasis_disabled" android:color="@color/blue_primary" android:state_checked="true" android:state_enabled="false" />
|
||||
<item android:color="@color/kotatsu_onSurfaceVariant" android:state_checked="false" android:state_enabled="true" />
|
||||
<item android:alpha="@dimen/material_emphasis_disabled" android:color="@color/kotatsu_onSurfaceVariant" android:state_checked="false" android:state_enabled="false" />
|
||||
</selector>
|
||||
@@ -1,7 +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="32dp" />
|
||||
<solid android:color="?attr/colorTertiary" />
|
||||
</shape>
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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="#000"
|
||||
android:pathData="M2 16h8v-2H2m16 0v-4h-2v4h-4v2h4v4h2v-4h4v-2m-8-8H2v2h12m0 2H2v2h12v-2z" />
|
||||
</vector>
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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="#000"
|
||||
android:pathData="M14,19H18V5H14M6,19H10V5H6V19Z" />
|
||||
</vector>
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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="#000"
|
||||
android:pathData="M8,5.14V19.14L19,12.14L8,5.14Z" />
|
||||
</vector>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:bottom="4dp"
|
||||
android:left="4dp"
|
||||
android:right="4dp"
|
||||
android:top="4dp">
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/selector_switch_thumb" />
|
||||
<size
|
||||
android:width="20dp"
|
||||
android:height="20dp" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/selector_switch_track" />
|
||||
<corners android:radius="56dp" />
|
||||
<size
|
||||
android:width="64dp"
|
||||
android:height="28dp" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -1,31 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout
|
||||
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:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="14dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingEnd="14dp">
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/inputLayout"
|
||||
app:boxBackgroundMode="filled"
|
||||
app:boxBackgroundColor="@android:color/transparent"
|
||||
app:hintEnabled="false"
|
||||
app:expandedHintEnabled="true"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/inputEdit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:imeOptions="actionDone"
|
||||
android:singleLine="true"
|
||||
tools:hint="@tools:sample/lorem[2]" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<CheckedTextView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/checkedTextView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?android:listPreferredItemHeightSmall"
|
||||
android:background="?android:selectableItemBackground"
|
||||
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
|
||||
android:gravity="start|center_vertical"
|
||||
android:paddingStart="?android:listPreferredItemPaddingStart"
|
||||
android:paddingEnd="?android:listPreferredItemPaddingEnd"
|
||||
android:textAppearance="?attr/textAppearanceBodyLarge"
|
||||
tools:checked="true"
|
||||
tools:text="@tools:sample/lorem[4]" />
|
||||
@@ -2,7 +2,10 @@
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:background="?android:attr/colorBackground"
|
||||
android:padding="4dp"
|
||||
android:theme="@style/Theme.Kotatsu.AppWidgetContainer">
|
||||
|
||||
<StackView
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_share"
|
||||
android:icon="@android:drawable/ic_menu_share"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/share"
|
||||
tools:ignore="AppCompatResource" />
|
||||
</menu>
|
||||
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:icon="@drawable/ic_pause"
|
||||
android:id="@+id/action_pause"
|
||||
android:title="Pause"
|
||||
app:showAsAction="ifRoom|withText" />
|
||||
|
||||
<item
|
||||
android:icon="@drawable/ic_resume"
|
||||
android:id="@+id/action_resume"
|
||||
android:title="Resume"
|
||||
app:showAsAction="ifRoom|withText" />
|
||||
|
||||
</menu>
|
||||
@@ -299,4 +299,7 @@
|
||||
<string name="send">Senden</string>
|
||||
<string name="crash_text">Etwas ist schief gelaufen. Bitte senden Sie einen Fehlerbericht an die Entwickler, damit wir das Problem beheben können.</string>
|
||||
<string name="disable_all">Alle deaktivieren</string>
|
||||
<string name="use_fingerprint">Fingerabdruck verwenden, falls vorhanden</string>
|
||||
<string name="appwidget_shelf_description">Manga aus Ihren Favoriten</string>
|
||||
<string name="appwidget_recent_description">Ihr kürzlich gelesener Manga</string>
|
||||
</resources>
|
||||
@@ -298,4 +298,7 @@
|
||||
<string name="disable_battery_optimization">Desactivar la optimización de la batería</string>
|
||||
<string name="send">Enviar</string>
|
||||
<string name="crash_text">Algo ha ido mal. Por favor, envía un informe de errores a los desarrolladores para ayudarnos a solucionarlo.</string>
|
||||
<string name="use_fingerprint">Utilizar la huella dactilar si está disponible</string>
|
||||
<string name="appwidget_shelf_description">Mangas de tus favoritos</string>
|
||||
<string name="appwidget_recent_description">Sus mangas recientemente leídos</string>
|
||||
</resources>
|
||||
@@ -299,4 +299,7 @@
|
||||
<string name="crash_text">Jokin meni pieleen. Lähetä vikailmoitus kehittäjille, jotta voimme korjata sen.</string>
|
||||
<string name="disable_all">Poista kaikki käytöstä</string>
|
||||
<string name="send">Lähetä</string>
|
||||
<string name="use_fingerprint">Käytä sormenjälkeä, jos käytettävissä</string>
|
||||
<string name="appwidget_shelf_description">Manga suosikeistasi</string>
|
||||
<string name="appwidget_recent_description">Äskettäin lukemasi manga</string>
|
||||
</resources>
|
||||
@@ -299,4 +299,7 @@
|
||||
<string name="crash_text">Un problème est survenu. Veuillez soumettre un rapport de bogue aux développeurs pour nous aider à le corriger.</string>
|
||||
<string name="send">Envoyer</string>
|
||||
<string name="disable_all">Tout désactiver</string>
|
||||
<string name="use_fingerprint">Utiliser l\'empreinte digitale si elle est disponible</string>
|
||||
<string name="appwidget_recent_description">Vos mangas récemment lus</string>
|
||||
<string name="appwidget_shelf_description">Les mangas de vos favoris</string>
|
||||
</resources>
|
||||
@@ -299,4 +299,7 @@
|
||||
<string name="crash_text">Qualcosa è andato storto. Si prega di inviare una segnalazione di bug agli sviluppatori per aiutarci a risolvere il problema.</string>
|
||||
<string name="send">Invia</string>
|
||||
<string name="disable_all">Disabilita tutto</string>
|
||||
<string name="use_fingerprint">Usa le impronte digitali se disponibili</string>
|
||||
<string name="appwidget_shelf_description">Manga dai preferiti</string>
|
||||
<string name="appwidget_recent_description">I manga letti di recente</string>
|
||||
</resources>
|
||||
@@ -299,4 +299,7 @@
|
||||
<string name="crash_text">何か問題が発生しました。開発者にバグレポートを提出し、解決にご協力ください。</string>
|
||||
<string name="send">送信</string>
|
||||
<string name="disable_all">すべて無効にする</string>
|
||||
<string name="appwidget_recent_description">最近読んだ漫画</string>
|
||||
<string name="use_fingerprint">指紋がある場合は、指紋を使用する</string>
|
||||
<string name="appwidget_shelf_description">お気に入りの漫画</string>
|
||||
</resources>
|
||||
@@ -282,4 +282,23 @@
|
||||
<string name="edit">Изменить</string>
|
||||
<string name="edit_category">Изменить категорию</string>
|
||||
<string name="empty_favourite_categories">Нет категорий избранного</string>
|
||||
<string name="bookmark_add">Добавить закладку</string>
|
||||
<string name="bookmark_remove">Удалить закладку</string>
|
||||
<string name="bookmarks">Закладки</string>
|
||||
<string name="bookmark_removed">Закладка удалена</string>
|
||||
<string name="bookmark_added">Закладка добавлена</string>
|
||||
<string name="undo">Отменить</string>
|
||||
<string name="removed_from_history">Удалено из истории</string>
|
||||
<string name="dns_over_https">DNS через HTTPS</string>
|
||||
<string name="default_mode">Режим по умолчанию</string>
|
||||
<string name="detect_reader_mode">Автоопределение режима чтения</string>
|
||||
<string name="detect_reader_mode_summary">Автоматически определяет, является ли манга веб-комиксом</string>
|
||||
<string name="disable_battery_optimization">Отключить оптимизацию батареи</string>
|
||||
<string name="disable_battery_optimization_summary">Помогает с фоновой проверкой обновлений</string>
|
||||
<string name="crash_text">Что-то пошло не так. Пожалуйста, отправьте отчёт разработчикам, чтобы помочь всё исправить</string>
|
||||
<string name="send">Отправить</string>
|
||||
<string name="disable_all">Отключить все</string>
|
||||
<string name="use_fingerprint">Использовать отпечаток пальца, если доступно</string>
|
||||
<string name="appwidget_shelf_description">Манга из Вашего избранного</string>
|
||||
<string name="appwidget_recent_description">Манга, которую Вы недавно читали</string>
|
||||
</resources>
|
||||
@@ -194,7 +194,6 @@
|
||||
<string name="search_results">Arama sonuçları</string>
|
||||
<string name="waiting_for_network">Ağ bekleniyor…</string>
|
||||
<string name="repeat_password">Parolayı tekrarla</string>
|
||||
<string name="prefer_rtl_reader">Sağdan sola (←) okuyucuyu tercih et</string>
|
||||
<string name="dont_check">Denetleme</string>
|
||||
<string name="wrong_password">Yanlış parola</string>
|
||||
<string name="report_github">GitHub\'da sorun oluştur</string>
|
||||
@@ -300,4 +299,7 @@
|
||||
<string name="crash_text">Bir şeyler yanlış gitti. Düzeltmemize yardımcı olması için lütfen geliştiricilere bir hata bildirimi gönderin.</string>
|
||||
<string name="send">Gönder</string>
|
||||
<string name="disable_all">Tümünü devre dışı bırak</string>
|
||||
<string name="use_fingerprint">Varsa parmak izi kullan</string>
|
||||
<string name="appwidget_shelf_description">Favorilerinizden mangalar</string>
|
||||
<string name="appwidget_recent_description">Son okuduğunuz mangalar</string>
|
||||
</resources>
|
||||
@@ -288,14 +288,18 @@
|
||||
<string name="bookmarks">Закладки</string>
|
||||
<string name="bookmark_removed">Закладка видалена</string>
|
||||
<string name="bookmark_added">Додано закладку</string>
|
||||
<string name="undo">Скасувати</string>
|
||||
<string name="undo">Відмінити</string>
|
||||
<string name="removed_from_history">Видалено з історії</string>
|
||||
<string name="dns_over_https">DNS через HTTPS</string>
|
||||
<string name="default_mode">Типовий режим</string>
|
||||
<string name="default_mode">Режим за замовчуванням</string>
|
||||
<string name="detect_reader_mode_summary">Автоматично визначати, чи є манга вебтуном</string>
|
||||
<string name="detect_reader_mode">Автовизначення режиму читання</string>
|
||||
<string name="disable_battery_optimization">Вимкнути оптимізацію акумулятора</string>
|
||||
<string name="disable_battery_optimization_summary">Допомагає з перевірками фонових оновлень</string>
|
||||
<string name="crash_text">Щось пішло не так. Будь ласка, надішліть звіт про помилку розробникам, щоб допомогти нам її виправити.</string>
|
||||
<string name="send">Надіслати</string>
|
||||
<string name="disable_all">Вимкнути все</string>
|
||||
<string name="use_fingerprint">Використовувати відбиток пальця, якщо доступно</string>
|
||||
<string name="appwidget_shelf_description">Манга з Вашого улюбленого</string>
|
||||
<string name="appwidget_recent_description">Манга, яку Ви нещодавно читали</string>
|
||||
</resources>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<resources>
|
||||
<bool name="is_tablet">false</bool>
|
||||
<bool name="light_status_bar">true</bool>
|
||||
<bool name="light_navigation_bar">false</bool>
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
</style>
|
||||
|
||||
<style name="Theme.Kotatsu.AppWidgetContainer" parent="@style/Theme.MaterialComponents.Light">
|
||||
<item name="android:colorBackground">@color/kotatsu_background</item>
|
||||
<item name="android:colorBackground">@android:color/transparent</item>
|
||||
<item name="android:panelColorBackground">@color/kotatsu_primaryContainer</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config xmlns:tools="http://schemas.android.com/tools">
|
||||
<network-security-config
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Need to allow cleartext traffic for some sources -->
|
||||
<base-config
|
||||
cleartextTrafficPermitted="true"
|
||||
@@ -8,7 +9,7 @@
|
||||
<!-- Trust preinstalled CAs -->
|
||||
<certificates src="system" />
|
||||
|
||||
<!-- Additionally trust user added CAs -->
|
||||
<!-- Additionally, trust user added CAs -->
|
||||
<certificates
|
||||
src="user"
|
||||
tools:ignore="AcceptsUserCertificates" />
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:description="@string/appwidget_recent_description"
|
||||
android:initialLayout="@layout/widget_recent"
|
||||
android:minWidth="110dp"
|
||||
android:minHeight="110dp"
|
||||
android:minResizeWidth="40dp"
|
||||
android:minWidth="120dp"
|
||||
android:minHeight="40dp"
|
||||
android:minResizeWidth="120dp"
|
||||
android:minResizeHeight="40dp"
|
||||
android:previewImage="@drawable/ic_appwidget_recent"
|
||||
android:resizeMode="horizontal|vertical"
|
||||
android:targetCellWidth="2"
|
||||
android:targetCellHeight="2"
|
||||
android:updatePeriodMillis="0"
|
||||
android:widgetCategory="home_screen" />
|
||||
android:widgetCategory="home_screen"
|
||||
tools:ignore="UnusedAttribute" />
|
||||
|
||||
@@ -5,12 +5,14 @@
|
||||
android:configure="org.koitharu.kotatsu.widget.shelf.ShelfConfigActivity"
|
||||
android:description="@string/appwidget_shelf_description"
|
||||
android:initialLayout="@layout/widget_shelf"
|
||||
android:minWidth="110dp"
|
||||
android:minHeight="110dp"
|
||||
android:minResizeWidth="40dp"
|
||||
android:minWidth="160dp"
|
||||
android:minHeight="120dp"
|
||||
android:minResizeWidth="120dp"
|
||||
android:minResizeHeight="40dp"
|
||||
android:previewImage="@drawable/ic_appwidget_shelf"
|
||||
android:resizeMode="horizontal|vertical"
|
||||
android:targetCellWidth="3"
|
||||
android:targetCellHeight="2"
|
||||
android:updatePeriodMillis="0"
|
||||
android:widgetCategory="home_screen"
|
||||
android:widgetFeatures="reconfigurable"
|
||||
|
||||
@@ -5,7 +5,7 @@ Kotatsu - приложения для чтения манги с открыты
|
||||
- Поиск манги по имени и жанрам
|
||||
- История чтения
|
||||
- Избранное с пользовательскими категориями
|
||||
- Возможность сохранять мангу и читать её оффлайн. Поддержка сторонних комиксов в формате CBZ
|
||||
- Возможность сохранять мангу и читать её офлайн. Поддержка сторонних комиксов в формате CBZ
|
||||
- Интерфейс также оптимизирован для планшетов
|
||||
- Поддержка манхвы (Webtoon)
|
||||
- Уведомления о новых главах и лента обновлений
|
||||
|
||||
Reference in New Issue
Block a user