Merge branch 'devel' into feature/shikimori

This commit is contained in:
Koitharu
2022-06-26 10:13:57 +03:00
38 changed files with 503 additions and 109 deletions

View File

@@ -77,7 +77,7 @@ afterEvaluate {
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
implementation('com.github.nv95:kotatsu-parsers:8a3b6df91d') {
implementation('com.github.nv95:kotatsu-parsers:c92f89f307') {
exclude group: 'org.json', module: 'json'
}
@@ -86,10 +86,10 @@ dependencies {
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.activity:activity-ktx:1.5.0-rc01'
implementation 'androidx.fragment:fragment-ktx:1.5.0-rc01'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0-rc01'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0-rc01'
implementation 'androidx.lifecycle:lifecycle-service:2.5.0-rc01'
implementation 'androidx.lifecycle:lifecycle-process:2.5.0-rc01'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0-rc02'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0-rc02'
implementation 'androidx.lifecycle:lifecycle-service:2.5.0-rc02'
implementation 'androidx.lifecycle:lifecycle-process:2.5.0-rc02'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
@@ -99,7 +99,7 @@ dependencies {
implementation 'androidx.biometric:biometric-ktx:1.2.0-alpha04'
implementation 'com.google.android.material:material:1.7.0-alpha02'
//noinspection LifecycleAnnotationProcessorWithJava8
kapt 'androidx.lifecycle:lifecycle-compiler:2.5.0-rc01'
kapt 'androidx.lifecycle:lifecycle-compiler:2.5.0-rc02'
implementation 'androidx.room:room-runtime:2.4.2'
implementation 'androidx.room:room-ktx:2.4.2'

View File

@@ -41,7 +41,7 @@ class AppSettings(context: Context) {
get() = Collections.unmodifiableSet(remoteSources)
var listMode: ListMode
get() = prefs.getEnumValue(KEY_LIST_MODE, ListMode.DETAILED_LIST)
get() = prefs.getEnumValue(KEY_LIST_MODE, ListMode.GRID)
set(value) = prefs.edit { putEnumValue(KEY_LIST_MODE, value) }
var defaultSection: AppSection

View File

@@ -3,8 +3,6 @@ package org.koitharu.kotatsu.favourites.ui.categories.edit
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
@@ -24,7 +22,8 @@ import org.koitharu.kotatsu.favourites.ui.categories.CategoriesActivity
import org.koitharu.kotatsu.parsers.model.SortOrder
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
class FavouritesCategoryEditActivity : BaseActivity<ActivityCategoryEditBinding>(), AdapterView.OnItemClickListener {
class FavouritesCategoryEditActivity : BaseActivity<ActivityCategoryEditBinding>(), AdapterView.OnItemClickListener,
View.OnClickListener {
private val viewModel by viewModel<FavouritesCategoryEditViewModel> {
parametersOf(intent.getLongExtra(EXTRA_ID, NO_ID))
@@ -39,6 +38,7 @@ class FavouritesCategoryEditActivity : BaseActivity<ActivityCategoryEditBinding>
setHomeAsUpIndicator(com.google.android.material.R.drawable.abc_ic_clear_material)
}
initSortSpinner()
binding.buttonDone.setOnClickListener(this)
viewModel.onSaved.observe(this) { finishAfterTransition() }
viewModel.category.observe(this, ::onCategoryChanged)
@@ -62,22 +62,14 @@ class FavouritesCategoryEditActivity : BaseActivity<ActivityCategoryEditBinding>
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.opt_config, menu)
menu.findItem(R.id.action_done)?.setTitle(R.string.save)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
R.id.action_done -> {
viewModel.save(
override fun onClick(v: View) {
when (v.id) {
R.id.button_done -> viewModel.save(
title = binding.editName.text?.toString().orEmpty(),
sortOrder = getSelectedSortOrder(),
isTrackerEnabled = binding.switchTracker.isChecked,
)
true
}
else -> super.onOptionsItemSelected(item)
}
override fun onWindowInsetsChanged(insets: Insets) {

View File

@@ -2,11 +2,9 @@ package org.koitharu.kotatsu.favourites.ui.categories.select
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.FragmentManager
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koin.core.parameter.parametersOf
@@ -28,7 +26,7 @@ class FavouriteCategoriesBottomSheet :
BaseBottomSheet<DialogFavoriteCategoriesBinding>(),
OnListItemClickListener<MangaCategoryItem>,
CategoriesEditDelegate.CategoriesEditCallback,
Toolbar.OnMenuItemClickListener, View.OnClickListener {
View.OnClickListener {
private val viewModel by viewModel<MangaCategoriesViewModel> {
parametersOf(requireNotNull(arguments?.getParcelableArrayList<ParcelableManga>(KEY_MANGA_LIST)).map { it.manga })
@@ -45,7 +43,7 @@ class FavouriteCategoriesBottomSheet :
super.onViewCreated(view, savedInstanceState)
adapter = MangaCategoriesAdapter(this)
binding.recyclerViewCategories.adapter = adapter
binding.toolbar.setOnMenuItemClickListener(this)
binding.buttonDone.setOnClickListener(this)
binding.itemCreate.setOnClickListener(this)
viewModel.content.observe(viewLifecycleOwner, this::onContentChanged)
@@ -57,19 +55,10 @@ class FavouriteCategoriesBottomSheet :
super.onDestroyView()
}
override fun onMenuItemClick(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_done -> {
dismiss()
true
}
else -> false
}
}
override fun onClick(v: View) {
when (v.id) {
R.id.item_create -> startActivity(FavouritesCategoryEditActivity.newIntent(requireContext()))
R.id.button_done -> dismiss()
}
}

View File

@@ -106,7 +106,13 @@ class SourcesSettingsFragment :
searchView.queryHint = searchMenuItem.title
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean = false
override fun onMenuItemSelected(menuItem: MenuItem): Boolean = when (menuItem.itemId) {
R.id.action_disable_all -> {
viewModel.disableAll()
true
}
else -> false
}
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
(activity as? AppBarOwner)?.appBar?.setExpanded(false, true)

View File

@@ -7,6 +7,7 @@ import org.koitharu.kotatsu.base.ui.BaseViewModel
import org.koitharu.kotatsu.core.model.getLocaleTitle
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.mapToSet
import org.koitharu.kotatsu.parsers.util.toTitleCase
import org.koitharu.kotatsu.settings.sources.model.SourceConfigItem
import org.koitharu.kotatsu.utils.ext.map
@@ -58,6 +59,13 @@ class SourcesSettingsViewModel(
buildList()
}
fun disableAll() {
settings.hiddenSources = settings.getMangaSources(includeHidden = true).mapToSet {
it.name
}
buildList()
}
fun expandOrCollapse(headerId: String?) {
if (headerId in expandedGroups) {
expandedGroups.remove(headerId)

View File

@@ -4,11 +4,10 @@ import android.app.Activity
import android.appwidget.AppWidgetManager
import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.core.graphics.Insets
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView
@@ -26,7 +25,7 @@ import org.koitharu.kotatsu.widget.shelf.model.CategoryItem
import com.google.android.material.R as materialR
class ShelfConfigActivity : BaseActivity<ActivityCategoriesBinding>(),
OnListItemClickListener<CategoryItem> {
OnListItemClickListener<CategoryItem>, View.OnClickListener {
private val viewModel by viewModel<ShelfConfigViewModel>()
@@ -45,6 +44,8 @@ class ShelfConfigActivity : BaseActivity<ActivityCategoriesBinding>(),
MaterialDividerItemDecoration(this, RecyclerView.VERTICAL)
)
binding.recyclerView.adapter = adapter
binding.buttonDone.isVisible = true
binding.buttonDone.setOnClickListener(this)
binding.fabAdd.hide()
val appWidgetId = intent?.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
@@ -61,23 +62,18 @@ class ShelfConfigActivity : BaseActivity<ActivityCategoriesBinding>(),
viewModel.onError.observe(this, this::onError)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.opt_config, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
R.id.action_done -> {
config.categoryId = viewModel.checkedId
updateWidget()
setResult(
Activity.RESULT_OK,
Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, config.widgetId)
)
finish()
true
override fun onClick(v: View) {
when (v.id) {
R.id.button_done -> {
config.categoryId = viewModel.checkedId
updateWidget()
setResult(
Activity.RESULT_OK,
Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, config.widgetId)
)
finish()
}
}
else -> super.onOptionsItemSelected(item)
}
override fun onItemClick(item: CategoryItem, view: View) {

View File

@@ -0,0 +1,7 @@
<?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>

View File

@@ -0,0 +1,7 @@
<?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>

View File

@@ -1,7 +1,7 @@
<?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" />
<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>

View File

@@ -1,7 +1,7 @@
<?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" />
<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>

View File

@@ -1,7 +1,11 @@
<rotate
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/abc_ic_arrow_drop_right_black_24dp"
android:fromDegrees="-90"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="-90" />
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M7,14l5,-5 5,5z" />
</vector>

View File

@@ -1,7 +1,11 @@
<rotate
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/abc_ic_arrow_drop_right_black_24dp"
android:fromDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="90" />
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M7,10l5,5 5,-5z" />
</vector>

View File

@@ -7,7 +7,7 @@
android:right="4dp"
android:top="4dp">
<shape android:shape="oval">
<solid android:color="#000000" />
<solid android:color="@color/selector_switch_thumb" />
<size
android:width="20dp"
android:height="20dp" />

View File

@@ -3,7 +3,7 @@
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#000000" />
<solid android:color="@color/selector_switch_track" />
<corners android:radius="56dp" />
<size
android:width="64dp"

View File

@@ -8,9 +8,9 @@
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
@@ -23,7 +23,19 @@
android:id="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin" />
app:layout_collapseMode="pin">
<Button
android:id="@+id/button_done"
style="@style/Widget.Material3.Button.UnelevatedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginHorizontal="@dimen/toolbar_button_margin"
android:text="@string/done"
android:visibility="gone" />
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.CollapsingToolbarLayout>

View File

@@ -10,7 +10,18 @@
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
android:layout_height="?attr/actionBarSize">
<Button
android:id="@+id/button_done"
style="@style/Widget.Material3.Button.UnelevatedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginHorizontal="@dimen/toolbar_button_margin"
android:text="@string/save" />
</com.google.android.material.appbar.MaterialToolbar>
<ScrollView
android:id="@+id/scrollView"

View File

@@ -12,8 +12,18 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:menu="@menu/opt_config"
app:title="@string/add_to_favourites" />
app:title="@string/add_to_favourites">
<Button
android:id="@+id/button_done"
style="@style/Widget.Material3.Button.UnelevatedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginHorizontal="@dimen/toolbar_button_margin"
android:text="@string/done" />
</com.google.android.material.appbar.MaterialToolbar>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView_categories"

View File

@@ -1,11 +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:id="@+id/action_done"
android:orderInCategory="0"
android:title="@string/done"
app:showAsAction="always|withText" />
</menu>

View File

@@ -10,4 +10,9 @@
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />
<item
android:id="@+id/action_disable_all"
android:title="@string/disable_all"
app:showAsAction="never" />
</menu>

View File

@@ -298,4 +298,5 @@
<string name="disable_battery_optimization_summary">Hilft bei der Überprüfung von Hintergrundaktualisierungen</string>
<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>
</resources>

View File

@@ -270,7 +270,7 @@
<string name="text_delete_local_manga_batch">¿Eliminar elementos seleccionados del dispositivo de forma permanente\?</string>
<string name="hide">Ocultar</string>
<string name="download_slowdown">Ralentización de la descarga</string>
<string name="new_sources_text">Nuevas fuentes de manga disponibles</string>
<string name="new_sources_text">Nuevas fuentes de manga son disponibles</string>
<string name="parallel_downloads">Descargas en paralelo</string>
<string name="download_slowdown_summary">Ayuda a evitar el bloqueo de tu dirección IP</string>
<string name="local_manga_processing">Procesamiento de manga guardado</string>
@@ -294,4 +294,8 @@
<string name="name">Nombre</string>
<string name="edit">Editar</string>
<string name="edit_category">Editar categoría</string>
<string name="disable_all">Desactivar todo</string>
<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>
</resources>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals name="hours_ago">
<item quantity="one">%1$d tunti sitten</item>
<item quantity="other">%1$d tuntia sitten</item>
</plurals>
<plurals name="chapters">
<item quantity="one">%1$d luku</item>
<item quantity="other">%1$d lukua</item>
</plurals>
<plurals name="minutes_ago">
<item quantity="one">%1$d minuutti sitten</item>
<item quantity="other">%1$d minuuttia sitten</item>
</plurals>
<plurals name="items">
<item quantity="one">%1$d kohde</item>
<item quantity="other">%1$d kohdetta</item>
</plurals>
<plurals name="new_chapters">
<item quantity="one">%1$d uusi luku</item>
<item quantity="other">%1$d uutta lukua</item>
</plurals>
<plurals name="days_ago">
<item quantity="one">%1$d päivä sitten</item>
<item quantity="other">%1$d päivää sitten</item>
</plurals>
</resources>

View File

@@ -297,4 +297,6 @@
<string name="disable_battery_optimization">Poista akun optimoinnin käytöstä</string>
<string name="disable_battery_optimization_summary">Auttaa taustapäivitystarkastuksissa</string>
<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>
</resources>

View File

@@ -298,4 +298,5 @@
<string name="disable_battery_optimization_summary">Aide à la vérification des mises à jour des antécédents</string>
<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>
</resources>

View File

@@ -298,4 +298,5 @@
<string name="disable_battery_optimization_summary">Contribuisce ai controlli di aggiornamento in sfondo</string>
<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>
</resources>

View File

@@ -274,7 +274,7 @@
<string name="parallel_downloads">並列ダウンロード</string>
<string name="chapters_will_removed_background">チャプターはバックグラウンドで削除されます。時間がかかる場合があります</string>
<string name="hide">隠す</string>
<string name="new_sources_text">新しいマンガソースが利用可能になりました</string>
<string name="new_sources_text">新しいマンガソースが利用可能です</string>
<string name="check_new_chapters_title">新着チャプターの確認とお知らせ</string>
<string name="show_notification_new_chapters_on">読んでいるマンガの更新情報をお知らせします</string>
<string name="notifications_enable">通知を有効にする</string>
@@ -298,4 +298,5 @@
<string name="disable_battery_optimization_summary">バックグラウンドの更新チェックを支援</string>
<string name="crash_text">何か問題が発生しました。開発者にバグレポートを提出し、解決にご協力ください。</string>
<string name="send">送信</string>
<string name="disable_all">すべて無効にする</string>
</resources>

View File

@@ -219,7 +219,7 @@
<string name="about_app_translation">Oversettelse</string>
<string name="about_feedback">Tilbakemelding</string>
<string name="about_feedback_4pda">Emne på 4PDA</string>
<string name="auth_complete">Identitetsbekreftet</string>
<string name="auth_complete">Identitetsbekreftet</string>
<string name="auth_not_supported_by">Innlogging på %s støttes ikke</string>
<string name="text_clear_cookies_prompt">Du vil bli utlogget fra alle kilder</string>
<string name="genres">Sjangere</string>
@@ -260,4 +260,21 @@
<string name="percent_string_pattern">%1$s%%</string>
<string name="various_languages">Forskjellige språk</string>
<string name="chapters_empty">Ingen kapitler i denne mangaen</string>
<string name="content">Innhold</string>
<string name="appearance">Utseende</string>
<string name="name">Navn</string>
<string name="edit">Rediger</string>
<string name="edit_category">Rediger kategori</string>
<string name="dns_over_https">DNS over HTTPS</string>
<string name="default_mode">Forvalgt modus</string>
<string name="removal_completed">Fjerning fullført</string>
<string name="empty_favourite_categories">Ingen favorittkategorier</string>
<string name="bookmark_add">Legg til bokmerke</string>
<string name="bookmarks">Bokmerker</string>
<string name="bookmark_removed">Bokmerke fjernet</string>
<string name="bookmark_added">Bokmerke lagt til</string>
<string name="undo">Angre</string>
<string name="removed_from_history">Fjernet fra historikk</string>
<string name="bookmark_remove">Fjern bokmerke</string>
<string name="send">Send</string>
</resources>

View File

@@ -299,4 +299,5 @@
<string name="disable_battery_optimization_summary">Arka planda güncelleme denetimlerine yardımcı olur</string>
<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>
</resources>

View File

@@ -106,7 +106,7 @@
<string name="manga_shelf">Полиця</string>
<string name="recent_manga">Недавні</string>
<string name="pages_animation">Анімація перегортання</string>
<string name="manga_save_location">Папка для завантажень</string>
<string name="manga_save_location">Тека для завантажень</string>
<string name="other_storage">Інше сховище</string>
<string name="done">Готово</string>
<string name="all_favourites">Усі улюблені</string>
@@ -296,4 +296,6 @@
<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>
</resources>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Widget.Kotatsu.Switch" parent="Widget.Material3.CompoundButton.Switch">
<item name="android:thumb">@drawable/switch_thumb</item>
<item name="thumbTint">@color/selector_switch_thumb</item>
<item name="track">@drawable/switch_track</item>
<item name="trackTint">@color/selector_switch_track</item>
<item name="materialThemeOverlay">@style/ThemeOverlay.Kotatsu.Switch</item>
</style>
</resources>

View File

@@ -3,9 +3,296 @@
<string name="settings">设置</string>
<string name="local_storage">本地存储</string>
<string name="favourites">喜欢</string>
<string name="history">浏览历史</string>
<string name="history">历史</string>
<string name="error_occurred">发生了一个错误</string>
<string name="network_error">未能连接到互联网</string>
<string name="chapters">章节</string>
<string name="list">列表</string>
<string name="data_restored_with_errors">数据被恢复了,但有错误</string>
<string name="processing_">正在处理…</string>
<string name="newest">最新</string>
<string name="by_rating">评分</string>
<string name="cookies_cleared">已删除所有 cookie</string>
<string name="data_restored_success">所有数据都被恢复了</string>
<string name="silent">无声</string>
<string name="report_github">在GitHub上创建问题</string>
<string name="preparing_">准备…</string>
<string name="file_not_found">未找到文件</string>
<string name="yesterday">昨日</string>
<string name="backup_information">你可以创建你的历史和收藏的备份并恢复它</string>
<string name="just_now">现在</string>
<string name="long_ago">很久以前</string>
<string name="group"></string>
<string name="tap_to_try_again">轻点以重试</string>
<string name="reader_mode_hint">所选择的配置将因这部漫画而被记住</string>
<string name="captcha_required">需要验证码</string>
<string name="captcha_solve">解决</string>
<string name="today">今天</string>
<string name="clear_cookies">清除cookies</string>
<string name="chapters_checking_progress">检查新的章节: %1$d/%2$d</string>
<string name="error_empty_name">你必须输入一个名称</string>
<string name="new_sources_text">有了新的漫画来源</string>
<string name="suggestions_summary">根据你的喜好推荐漫画</string>
<string name="suggestions_info">所有的数据都在这个设备上进行本地分析. 您的个人数据不会被转移到任何服务机构</string>
<string name="never">从不</string>
<string name="show_notification_new_chapters_on">你会收到你正在阅读的漫画的更新通知</string>
<string name="nsfw">18+</string>
<string name="various_languages">各种语言</string>
<string name="search_chapters">查找章节</string>
<string name="suggestions_excluded_genres">排除流派</string>
<string name="suggestions_updating">建议更新</string>
<string name="check_new_chapters_title">检查新的章节并通知有关情况</string>
<string name="close_menu">关闭菜单</string>
<string name="open_menu">打开菜单</string>
<string name="details">详细内容</string>
<string name="detailed_list">详细列表</string>
<string name="grid">网格</string>
<string name="list_mode">列表模式</string>
<string name="remote_sources">远程资源</string>
<string name="loading_">加载中…</string>
<string name="computing_">计算中…</string>
<string name="chapter_d_of_d">%1$d/%2$d章节</string>
<string name="close">关闭</string>
<string name="try_again">再试一次</string>
<string name="clear_history">清除历史</string>
<string name="nothing_found">没有发现</string>
<string name="history_is_empty">尚无历史</string>
<string name="read">阅读</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>
<string name="enter_category_name">输入类别名称</string>
<string name="save">保存</string>
<string name="share">分享</string>
<string name="create_shortcut">创建快捷方式…</string>
<string name="share_s">分享%s</string>
<string name="search">搜索</string>
<string name="search_manga">搜索漫画</string>
<string name="manga_downloading_">正在下载…</string>
<string name="download_complete">已下载</string>
<string name="downloads">下载</string>
<string name="by_name">名称</string>
<string name="popular">热门</string>
<string name="updated">更新</string>
<string name="sort_order">排序顺序</string>
<string name="filter">过滤器</string>
<string name="theme">主题</string>
<string name="dark">黑暗</string>
<string name="light">浅色</string>
<string name="automatic">跟随系统</string>
<string name="pages">页数</string>
<string name="clear">清除</string>
<string name="text_clear_history_prompt">永久清除所有阅读历史\?</string>
<string name="remove">删除</string>
<string name="_s_removed_from_history">\"%s\"从历史中删除</string>
<string name="_s_deleted_from_local_storage">\"%s\"从本地存储中删除</string>
<string name="wait_for_loading_finish">等待加载完成…</string>
<string name="save_page">保存页面</string>
<string name="page_saved">保存</string>
<string name="share_image">分享图片</string>
<string name="_import">输入</string>
<string name="delete">删除</string>
<string name="operation_not_supported">不支持此操作</string>
<string name="text_file_not_supported">选择 ZIP 或 CBZ 文件.</string>
<string name="no_description">无描述</string>
<string name="history_and_cache">历史和缓存</string>
<string name="clear_pages_cache">清除页面缓存</string>
<string name="cache">缓存</string>
<string name="text_file_sizes">B|kB|MB|GB|TB</string>
<string name="standard">标准</string>
<string name="webtoon">Webtoon</string>
<string name="read_mode">阅读模式</string>
<string name="grid_size">网格大小</string>
<string name="search_on_s">在%s上搜索</string>
<string name="delete_manga">删除漫画</string>
<string name="text_delete_local_manga">从设备中永久删除\"%s\"\?</string>
<string name="reader_settings">阅读器设置</string>
<string name="switch_pages">切换页面</string>
<string name="volume_buttons">音量按钮</string>
<string name="_continue">继续</string>
<string name="warning">警告</string>
<string name="network_consumption_warning">这可能会传输大量的数据</string>
<string name="dont_ask_again">不要再问了</string>
<string name="cancelling_">取消中…</string>
<string name="taps_on_edges">边缘点击</string>
<string name="error">错误</string>
<string name="clear_thumbs_cache">清除缩略图缓存</string>
<string name="clear_search_history">清除搜索历史</string>
<string name="search_history_cleared">清除</string>
<string name="gestures_only">仅限手势</string>
<string name="internal_storage">内部存储</string>
<string name="external_storage">外部存储</string>
<string name="domain">范围</string>
<string name="application_update">检查应用程序新版本</string>
<string name="app_update_available">新版本应用程序已经推出</string>
<string name="show_notification_app_update">有新版本可用时显示通知</string>
<string name="open_in_browser">在网络浏览器中打开</string>
<string name="large_manga_save_confirm">这部漫画有%s.全部保存\?</string>
<string name="save_manga">保存</string>
<string name="notifications">通知</string>
<string name="new_chapters">新章节</string>
<string name="download">下载</string>
<string name="read_from_start">从头开始阅读</string>
<string name="restart">重新启动</string>
<string name="notifications_settings">通知设置</string>
<string name="notification_sound">通知声音</string>
<string name="light_indicator">LED指示器</string>
<string name="vibration">振动</string>
<string name="favourites_categories">收藏夹类别</string>
<string name="categories_">类别…</string>
<string name="rename">重命名</string>
<string name="category_delete_confirm">将\"%s\"类别从你的收藏夹中删除?
\n里面的所有漫画都会丢失。</string>
<string name="remove_category">删除</string>
<string name="text_empty_holder_primary">这里有点空…</string>
<string name="text_categories_holder">您可以使用类别来组织您的收藏夹。按«+»创建一个类别</string>
<string name="text_search_holder_secondary">尝试重新表述查询。</string>
<string name="text_history_holder_primary">你所读的内容将在这里显示</string>
<string name="text_history_holder_secondary">在侧面菜单中找到要读的内容.</string>
<string name="text_local_holder_primary">先保存内容</string>
<string name="text_local_holder_secondary">从在线来源保存或导入文件.</string>
<string name="manga_shelf">架子</string>
<string name="recent_manga">最近</string>
<string name="pages_animation">页面动画</string>
<string name="manga_save_location">下载文件夹</string>
<string name="not_available">不详</string>
<string name="cannot_find_available_storage">没有可用的存储空间</string>
<string name="other_storage">其他存储</string>
<string name="done">完成</string>
<string name="all_favourites">所有收藏夹</string>
<string name="favourites_category_empty">空类别</string>
<string name="read_later">稍后阅读</string>
<string name="updates">更新</string>
<string name="text_feed_holder">你正在阅读的新章节显示在这里</string>
<string name="search_results">搜索结果</string>
<string name="related">相关</string>
<string name="new_version_s">新版本: %s</string>
<string name="waiting_for_network">等待网络…</string>
<string name="clear_updates_feed">清除更新源</string>
<string name="updates_feed_cleared">已清除</string>
<string name="rotate_screen">旋转屏幕</string>
<string name="update">更新</string>
<string name="feed_will_update_soon">源更新即将开始</string>
<string name="track_sources">查找更新</string>
<string name="dont_check">不要检查</string>
<string name="enter_password">输入密码</string>
<string name="wrong_password">密码错误</string>
<string name="protect_application">保护应用程序</string>
<string name="protect_application_summary">在启动Kotatsu时要求输入密码</string>
<string name="repeat_password">重复密码</string>
<string name="passwords_mismatch">密码不匹配</string>
<string name="about">关于</string>
<string name="app_version">版本%s</string>
<string name="check_for_updates">检查更新</string>
<string name="checking_for_updates">检查更新…</string>
<string name="update_check_failed">无法查找更新</string>
<string name="no_update_available">没有更新</string>
<string name="right_to_left">从右到左 (←)</string>
<string name="create_category">新类别</string>
<string name="scale_mode">缩放模式</string>
<string name="zoom_mode_fit_center">适应中心</string>
<string name="zoom_mode_fit_height">适应高度</string>
<string name="zoom_mode_fit_width">适应宽度</string>
<string name="zoom_mode_keep_start">从头开始</string>
<string name="black_dark_theme">黑色</string>
<string name="black_dark_theme_summary">在AMOLED屏幕上使用更少电池</string>
<string name="backup_restore">备份和还原</string>
<string name="create_backup">创建数据备份</string>
<string name="restore_backup">从备份中恢复</string>
<string name="data_restored">恢复</string>
<string name="clear_feed">清除文件</string>
<string name="text_clear_updates_feed_prompt">永久地清除所有的更新历史?</string>
<string name="check_for_new_chapters">检查新的章节</string>
<string name="reverse">撤销</string>
<string name="sign_in">登录</string>
<string name="auth_required">登录后可查看此内容</string>
<string name="default_s">默认值: %s</string>
<string name="_and_x_more">...和%1$d更多</string>
<string name="next">下一页</string>
<string name="protect_application_subtitle">输入密码以启动应用程序</string>
<string name="confirm">确认</string>
<string name="password_length_hint">密码必须是4个字符或以上</string>
<string name="search_only_on_s">仅在%s上搜索</string>
<string name="text_clear_search_history_prompt">永久地删除所有最近的搜索查询?</string>
<string name="other">其他</string>
<string name="welcome">欢迎</string>
<string name="backup_saved">保存备份</string>
<string name="tracker_warning">一些设备有不同的系统行为, 这可能会破坏后台任务.</string>
<string name="read_more">阅读更多</string>
<string name="queued">排队</string>
<string name="text_downloads_holder">没有有效的下载</string>
<string name="chapter_is_missing_text">下载或在线阅读这缺失的章节.</string>
<string name="chapter_is_missing">该章缺失</string>
<string name="about_app_translation_summary">翻译此应用程序</string>
<string name="about_app_translation">翻译</string>
<string name="about_feedback">反馈信息</string>
<string name="about_feedback_4pda">关于4PDA主题</string>
<string name="auth_complete">授权</string>
<string name="auth_not_supported_by">不支持在%s上登录</string>
<string name="text_clear_cookies_prompt">你将被从所有来源中注销</string>
<string name="genres">类型</string>
<string name="state_ongoing">连载中</string>
<string name="state_finished">已完结</string>
<string name="date_format">日期格式</string>
<string name="system_default">默认</string>
<string name="exclude_nsfw_from_history">将NSFW漫画排除在历史之外</string>
<string name="show_pages_numbers">页数</string>
<string name="enabled_sources">使用图源</string>
<string name="available_sources">现有图源</string>
<string name="dynamic_theme">动态主题</string>
<string name="dynamic_theme_summary">应用根据你的墙纸的颜色方案创建的主题</string>
<string name="importing_progress">导入漫画: %1$d of %2$d</string>
<string name="screenshots_policy">屏幕截图</string>
<string name="screenshots_allow">允许</string>
<string name="screenshots_block_nsfw">禁止18+</string>
<string name="screenshots_block_all">始终阻止</string>
<string name="suggestions">建议</string>
<string name="suggestions_enable">启用建议</string>
<string name="text_suggestion_holder">开始阅读漫画,你会得到个性化的建议</string>
<string name="exclude_nsfw_from_suggestions">请勿推荐18+漫画</string>
<string name="enabled">启用</string>
<string name="disabled">禁用</string>
<string name="filter_load_error">无法加载流派列表</string>
<string name="reset_filter">重置过滤器</string>
<string name="find_genre">查找流派</string>
<string name="onboard_text">选择你想看的漫画的语言. 你可以在以后的设置中改变它.</string>
<string name="only_using_wifi">只在Wi-Fi上使用</string>
<string name="always">总是</string>
<string name="preload_pages">预加载页面</string>
<string name="logged_in_as">以%s身份登录</string>
<string name="chapters_empty">这部漫画中没有章节</string>
<string name="appearance">外观</string>
<string name="content">内容</string>
<string name="suggestions_excluded_genres_summary">指定您不希望在建议中看到的类型</string>
<string name="text_delete_local_manga_batch">从设备中永久删除所选项目\?</string>
<string name="removal_completed">删除已完成</string>
<string name="parallel_downloads">并行下载</string>
<string name="download_slowdown">下载速度减慢</string>
<string name="batch_manga_save_confirm">你确定你要下载所有选定的漫画及其所有章节吗\? 这个动作会消耗大量的流量和存储空间</string>
<string name="download_slowdown_summary">有助于避免阻断你的IP地址</string>
<string name="local_manga_processing">保存的漫画处理</string>
<string name="chapters_will_removed_background">章节将在后台被删除. 这可能需要一些时间</string>
<string name="hide">隐藏</string>
<string name="show_notification_new_chapters_off">你将不会收到通知但新的章节将在列表中突出显示</string>
<string name="notifications_enable">启用通知</string>
<string name="name">命名</string>
<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 over 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>
</resources>

View File

@@ -23,8 +23,7 @@
<dimen name="screen_padding">16dp</dimen>
<dimen name="selection_stroke_width">2dp</dimen>
<dimen name="list_selector_corner">12dp</dimen>
<dimen name="action_bar_icon_size">24dp</dimen>
<dimen name="action_bar_item_size">32dp</dimen>
<dimen name="toolbar_button_margin">10dp</dimen>
<dimen name="search_suggestions_manga_height">124dp</dimen>
<dimen name="search_suggestions_manga_spacing">4dp</dimen>

View File

@@ -309,4 +309,5 @@
<string name="status_completed">Completed</string>
<string name="status_on_hold">On hold</string>
<string name="status_dropped">Dropped</string>
<string name="disable_all">Disable all</string>
</resources>

View File

@@ -88,9 +88,8 @@
<style name="Widget.Kotatsu.Switch" parent="Widget.Material3.CompoundButton.Switch">
<item name="android:thumb">@drawable/switch_thumb</item>
<item name="thumbTint">@color/selector_switch_thumb</item>
<item name="track">@drawable/switch_track</item>
<item name="trackTint">@color/selector_switch_track</item>
<item name="useMaterialThemeColors">false</item>
<item name="materialThemeOverlay">@style/ThemeOverlay.Kotatsu.Switch</item>
</style>
@@ -133,7 +132,7 @@
<item name="android:textColor">?attr/colorOnBackground</item>
</style>
<style name="TextAppearance.Kotatsu.Button" parent="TextAppearance.Material3.TitleSmall"/>
<style name="TextAppearance.Kotatsu.Button" parent="TextAppearance.Material3.TitleSmall" />
<style name="TextAppearance.Kotatsu.Preference.Secondary" parent="TextAppearance.Material3.BodySmall" />