Compare commits

...

5 Commits

Author SHA1 Message Date
a624bffea3 Upgrade minSdk to 23 2025-09-07 10:56:40 +03:00
8f38b4fe30 Replace DummyParser with TestMangaRepository 2025-09-07 10:31:13 +03:00
71a2de5358 Update dependencies 2025-09-06 10:41:53 +03:00
5478f8fb59 Fix crash in ListSelectionController 2025-09-06 10:41:49 +03:00
ViAnh
5155c9a33d Reduce gaps between webtoon pages 2025-09-06 10:12:37 +03:00
47 changed files with 599 additions and 664 deletions

View File

@@ -8,7 +8,7 @@
**[Kotatsu](https://github.com/KotatsuApp/Kotatsu) is a free and open-source manga reader for Android with built-in online content sources.**
![Downloads count](https://img.shields.io/github/downloads/KotatsuApp/Kotatsu/total?color=1976d2) ![Latest Stable version](https://img.shields.io/github/v/release/KotatsuApp/Kotatsu?color=2596be&label=latest) ![Android 5.0](https://img.shields.io/badge/android-5.0+-brightgreen) [![Sources count](https://img.shields.io/badge/dynamic/yaml?url=https%3A%2F%2Fraw.githubusercontent.com%2FKotatsuApp%2Fkotatsu-parsers%2Frefs%2Fheads%2Fmaster%2F.github%2Fsummary.yaml&query=total&label=manga%20sources&color=%23E9321C)](https://github.com/KotatsuApp/kotatsu-parsers) [![weblate](https://hosted.weblate.org/widgets/kotatsu/-/strings/svg-badge.svg)](https://hosted.weblate.org/engage/kotatsu/) [![Discord](https://img.shields.io/discord/898363402467045416?color=5865f2&label=discord)](https://discord.gg/NNJ5RgVBC5) [![Telegram](https://img.shields.io/badge/chat-telegram-60ACFF?)](https://t.me/kotatsuapp) [![License](https://img.shields.io/github/license/KotatsuApp/Kotatsu)](https://github.com/KotatsuApp/Kotatsu/blob/devel/LICENSE)
![Downloads count](https://img.shields.io/github/downloads/KotatsuApp/Kotatsu/total?color=1976d2) ![Latest Stable version](https://img.shields.io/github/v/release/KotatsuApp/Kotatsu?color=2596be&label=latest) ![Android 6.0](https://img.shields.io/badge/android-6.0+-brightgreen) [![Sources count](https://img.shields.io/badge/dynamic/yaml?url=https%3A%2F%2Fraw.githubusercontent.com%2FKotatsuApp%2Fkotatsu-parsers%2Frefs%2Fheads%2Fmaster%2F.github%2Fsummary.yaml&query=total&label=manga%20sources&color=%23E9321C)](https://github.com/KotatsuApp/kotatsu-parsers) [![weblate](https://hosted.weblate.org/widgets/kotatsu/-/strings/svg-badge.svg)](https://hosted.weblate.org/engage/kotatsu/) [![Discord](https://img.shields.io/discord/898363402467045416?color=5865f2&label=discord)](https://discord.gg/NNJ5RgVBC5) [![Telegram](https://img.shields.io/badge/chat-telegram-60ACFF?)](https://t.me/kotatsuapp) [![License](https://img.shields.io/github/license/KotatsuApp/Kotatsu)](https://github.com/KotatsuApp/Kotatsu/blob/devel/LICENSE)
### Download

View File

@@ -19,7 +19,7 @@ android {
defaultConfig {
applicationId 'org.koitharu.kotatsu'
minSdk = 21
minSdk = 23
targetSdk = 36
versionCode = 1028
versionName = '9.1.4'

View File

@@ -0,0 +1,57 @@
package org.koitharu.kotatsu.core.parser
import org.koitharu.kotatsu.core.cache.MemoryContentCache
import org.koitharu.kotatsu.core.model.TestMangaSource
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaListFilter
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.SortOrder
import java.util.EnumSet
/*
This class is for parser development and testing purposes
You can open it in the app via Settings -> Debug
*/
class TestMangaRepository(
@Suppress("unused") private val loaderContext: MangaLoaderContext,
cache: MemoryContentCache
) : CachingMangaRepository(cache) {
override val source = TestMangaSource
override val sortOrders: Set<SortOrder> = EnumSet.allOf(SortOrder::class.java)
override var defaultSortOrder: SortOrder
get() = sortOrders.first()
set(value) = Unit
override val filterCapabilities = MangaListFilterCapabilities()
override suspend fun getFilterOptions() = MangaListFilterOptions()
override suspend fun getList(
offset: Int,
order: SortOrder?,
filter: MangaListFilter?
): List<Manga> = TODO("Get manga list by filter")
override suspend fun getDetailsImpl(
manga: Manga
): Manga = TODO("Fetch manga details")
override suspend fun getPagesImpl(
chapter: MangaChapter
): List<MangaPage> = TODO("Get pages for specific chapter")
override suspend fun getPageUrl(
page: MangaPage
): String = TODO("Return direct url of page image or page.url if it is already a direct url")
override suspend fun getRelatedMangaImpl(
seed: Manga
): List<Manga> = TODO("Get list of related manga. This method is optional and parser library has a default implementation")
}

View File

@@ -5,6 +5,8 @@ import androidx.preference.Preference
import leakcanary.LeakCanary
import org.koitharu.kotatsu.KotatsuApp
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.model.TestMangaSource
import org.koitharu.kotatsu.core.nav.router
import org.koitharu.kotatsu.core.ui.BasePreferenceFragment
import org.koitharu.kotatsu.settings.utils.SplitSwitchPreference
import org.koitharu.workinspector.WorkInspector
@@ -35,6 +37,11 @@ class DebugSettingsFragment : BasePreferenceFragment(R.string.debug), Preference
true
}
KEY_TEST_PARSER -> {
router.openList(TestMangaSource, null, null)
true
}
else -> super.onPreferenceTreeClick(preference)
}
@@ -60,5 +67,6 @@ class DebugSettingsFragment : BasePreferenceFragment(R.string.debug), Preference
const val KEY_LEAK_CANARY = "leak_canary"
const val KEY_WORK_INSPECTOR = "work_inspector"
const val KEY_TEST_PARSER = "test_parser"
}
}

View File

@@ -1,17 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<org.koitharu.kotatsu.settings.utils.SplitSwitchPreference
android:id="@+id/action_leakcanary"
android:key="leak_canary"
android:persistent="false"
android:title="LeakCanary" />
<Preference
android:id="@+id/action_works"
android:key="work_inspector"
android:persistent="false"
android:title="@string/wi_lib_name" />
<Preference
android:key="test_parser"
android:persistent="false"
android:title="@string/test_parser"
app:allowDividerAbove="true" />
</androidx.preference.PreferenceScreen>

View File

@@ -28,11 +28,15 @@ data object UnknownMangaSource : MangaSource {
override val name = "UNKNOWN"
}
data object TestMangaSource : MangaSource {
override val name = "TEST"
}
fun MangaSource(name: String?): MangaSource {
when (name ?: return UnknownMangaSource) {
UnknownMangaSource.name -> return UnknownMangaSource
LocalMangaSource.name -> return LocalMangaSource
TestMangaSource.name -> return TestMangaSource
}
if (name.startsWith("content:")) {
val parts = name.substringAfter(':').splitTwoParts('/') ?: return UnknownMangaSource
@@ -92,6 +96,7 @@ fun MangaSource.getSummary(context: Context): String? = when (val source = unwra
fun MangaSource.getTitle(context: Context): String = when (val source = unwrap()) {
is MangaParserSource -> source.title
LocalMangaSource -> context.getString(R.string.local_storage)
TestMangaSource -> context.getString(R.string.test_parser)
is ExternalMangaSource -> source.resolveName(context)
else -> context.getString(R.string.unknown)
}

View File

@@ -5,7 +5,6 @@ import androidx.annotation.WorkerThread
import androidx.core.util.Predicate
import okhttp3.Cookie
import okhttp3.HttpUrl
import org.koitharu.kotatsu.parsers.util.newBuilder
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine

View File

@@ -1,46 +0,0 @@
package org.koitharu.kotatsu.core.parser
import org.koitharu.kotatsu.core.exceptions.UnsupportedSourceException
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.core.AbstractMangaParser
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaListFilter
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.model.SortOrder
import java.util.EnumSet
/**
* This parser is just for parser development, it should not be used in releases
*/
class DummyParser(context: MangaLoaderContext) : AbstractMangaParser(context, MangaParserSource.DUMMY) {
override val configKeyDomain: ConfigKey.Domain
get() = ConfigKey.Domain("localhost")
override val availableSortOrders: Set<SortOrder>
get() = EnumSet.allOf(SortOrder::class.java)
override val filterCapabilities: MangaListFilterCapabilities
get() = MangaListFilterCapabilities()
override suspend fun getDetails(manga: Manga): Manga = stub(manga)
override suspend fun getFilterOptions(): MangaListFilterOptions = stub(null)
override suspend fun getList(
offset: Int,
order: SortOrder,
filter: MangaListFilter
): List<Manga> = stub(null)
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> = stub(null)
private fun stub(manga: Manga?): Nothing {
throw UnsupportedSourceException("Usage of Dummy parser", manga)
}
}

View File

@@ -11,7 +11,7 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.model.SortOrder
import java.util.EnumSet
class EmptyMangaRepository(override val source: MangaSource) : MangaRepository {
open class EmptyMangaRepository(override val source: MangaSource) : MangaRepository {
override val sortOrders: Set<SortOrder>
get() = EnumSet.allOf(SortOrder::class.java)

View File

@@ -1,12 +0,0 @@
package org.koitharu.kotatsu.core.parser
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource
fun MangaParser(source: MangaParserSource, loaderContext: MangaLoaderContext): MangaParser {
return when (source) {
MangaParserSource.DUMMY -> DummyParser(loaderContext)
else -> loaderContext.newParserInstance(source)
}
}

View File

@@ -7,6 +7,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import org.koitharu.kotatsu.core.cache.MemoryContentCache
import org.koitharu.kotatsu.core.model.LocalMangaSource
import org.koitharu.kotatsu.core.model.MangaSourceInfo
import org.koitharu.kotatsu.core.model.TestMangaSource
import org.koitharu.kotatsu.core.model.UnknownMangaSource
import org.koitharu.kotatsu.core.parser.external.ExternalMangaRepository
import org.koitharu.kotatsu.core.parser.external.ExternalMangaSource
@@ -85,11 +86,16 @@ interface MangaRepository {
private fun createRepository(source: MangaSource): MangaRepository? = when (source) {
is MangaParserSource -> ParserMangaRepository(
parser = MangaParser(source, loaderContext),
parser = loaderContext.newParserInstance(source),
cache = contentCache,
mirrorSwitcher = mirrorSwitcher,
)
TestMangaSource -> TestMangaRepository(
loaderContext = loaderContext,
cache = contentCache,
)
is ExternalMangaSource -> if (source.isAvailable(context)) {
ExternalMangaRepository(
contentResolver = context.contentResolver,

View File

@@ -186,6 +186,7 @@ class ListSelectionController(
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
if (event == Lifecycle.Event.ON_CREATE) {
source.lifecycle.removeObserver(this)
val registry = registryOwner.savedStateRegistry
registry.registerSavedStateProvider(PROVIDER_NAME, this@ListSelectionController)
val state = registry.consumeRestoredStateForKey(PROVIDER_NAME)

View File

@@ -22,7 +22,7 @@ open class StackLayout @JvmOverloads constructor(
val h = b - t - paddingTop - paddingBottom
visibleChildren.clear()
children.filterNotTo(visibleChildren) { it.isGone }
if (w <= 0 || h <= 0 || visibleChildren.isEmpty) {
if (w <= 0 || h <= 0 || visibleChildren.isEmpty()) {
return
}
val xStep = w / (visibleChildren.size + 1)

View File

@@ -53,11 +53,7 @@ class MangaSourcesRepository @Inject constructor(
get() = db.getSourcesDao()
val allMangaSources: Set<MangaParserSource> = Collections.unmodifiableSet(
EnumSet.allOf(MangaParserSource::class.java).apply {
if (!BuildConfig.DEBUG) {
remove(MangaParserSource.DUMMY)
}
},
EnumSet.allOf(MangaParserSource::class.java)
)
suspend fun getEnabledSources(): List<MangaSource> {

View File

@@ -86,9 +86,9 @@ class WebtoonImageView @JvmOverloads constructor(
desiredWidth = sWidth
desiredHeight = sHeight
} else if (resizeHeight) {
desiredHeight = (sHeight.toDouble() / sWidth.toDouble() * desiredWidth).roundToInt()
desiredHeight = (sHeight.toDouble() / sWidth.toDouble() * desiredWidth).toInt()
} else if (resizeWidth) {
desiredWidth = (sWidth.toDouble() / sHeight.toDouble() * desiredHeight).roundToInt()
desiredWidth = (sWidth.toDouble() / sHeight.toDouble() * desiredHeight).toInt()
}
}
desiredWidth = desiredWidth.coerceAtLeast(suggestedMinimumWidth)

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.4" android:color="?android:colorBackground" />
</selector>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.6" android:color="?colorSurfaceBright" />
</selector>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorSurfaceContainerHigh" />
</selector>

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.3" android:color="?colorPrimary" android:state_checked="true"/>
<item android:color="@android:color/transparent"/>
</selector>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.27" android:color="?attr/colorOnSurface" />
</selector>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.4" android:color="@color/kotatsu_background" />
<item android:alpha="0.4" android:color="?android:colorBackground" />
</selector>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- https://stackoverflow.com/questions/54685474/theme-attributes-in-color-selector-for-api-22 -->
<item android:alpha="0.6" android:color="@color/kotatsu_surfaceBright" />
<item android:alpha="0.6" android:color="?colorSurfaceBright" />
</selector>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/kotatsu_surfaceContainerHigh" />
<item android:color="?attr/colorSurfaceContainerHigh" />
</selector>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- https://stackoverflow.com/questions/54685474/theme-attributes-in-color-selector-for-api-22 -->
<item android:alpha="0.3" android:color="@color/kotatsu_primary" android:state_checked="true"/>
<item android:alpha="0.3" android:color="?colorPrimary" android:state_checked="true"/>
<item android:color="@android:color/transparent"/>
</selector>
</selector>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- https://stackoverflow.com/questions/54685474/theme-attributes-in-color-selector-for-api-22 -->
<item android:alpha="0.27" android:color="@color/kotatsu_onSurface" />
<item android:alpha="0.27" android:color="?attr/colorOnSurface" />
</selector>

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="?attr/colorSurface" />
<corners android:radius="@dimen/m3_alert_dialog_corner_size" />
</shape>
</item>
<item>
<shape>
<solid android:color="@color/m3_popupmenu_overlay_color" />
<corners android:radius="@dimen/m3_alert_dialog_corner_size" />
</shape>
</item>
</layer-list>

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="?attr/colorSurfaceContainerHigh" />
<corners android:radius="4dp" />
</shape>
</item>
<item>
<shape>
<solid android:color="@color/m3_popupmenu_overlay_color" />
<corners android:radius="4dp" />
</shape>
</item>
</layer-list>

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Fills the entire area with the divider's color first... -->
<item>
<shape
android:shape="rectangle">
<solid android:color="?attr/colorSurfaceVariant"/>
</shape>
</item>
<!-- ..., then draws a rectangle with the container color to cover the area not for the divider. -->
<item
android:bottom="1dp">
<shape
android:shape="rectangle">
<solid android:color="?android:attr/colorBackground"/>
</shape>
</item>
</layer-list>

View File

@@ -2,13 +2,13 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@color/kotatsu_surface" />
<solid android:color="?attr/colorSurface" />
<corners android:radius="@dimen/m3_alert_dialog_corner_size" />
</shape>
</item>
<item>
<shape>
<solid android:color="@color/kotatsu_surface" />
<solid android:color="@color/m3_popupmenu_overlay_color" />
<corners android:radius="@dimen/m3_alert_dialog_corner_size" />
</shape>
</item>

View File

@@ -2,13 +2,13 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@color/kotatsu_surfaceContainerHighest" />
<solid android:color="?attr/colorSurfaceContainerHigh" />
<corners android:radius="4dp" />
</shape>
</item>
<item>
<shape>
<solid android:color="@color/kotatsu_surfaceContainerHighest" />
<solid android:color="@color/m3_popupmenu_overlay_color" />
<corners android:radius="4dp" />
</shape>
</item>

View File

@@ -4,7 +4,7 @@
<item>
<shape
android:shape="rectangle">
<solid android:color="@color/kotatsu_surfaceVariant"/>
<solid android:color="?attr/colorSurfaceVariant"/>
</shape>
</item>
<!-- ..., then draws a rectangle with the container color to cover the area not for the divider. -->
@@ -12,7 +12,7 @@
android:bottom="1dp">
<shape
android:shape="rectangle">
<solid android:color="@color/kotatsu_background"/>
<solid android:color="?android:attr/colorBackground"/>
</shape>
</item>
</layer-list>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_color_themes_available">true</bool>
</resources>

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Base.V23.Kotatsu" parent="Base.Theme.Kotatsu">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@color/dim</item>
</style>
<style name="Theme.Kotatsu" parent="Base.V23.Kotatsu" />
</resources>

View File

@@ -1,445 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Totoro -->
<style name="ThemeOverlay.Kotatsu.Totoro">
<item name="colorPrimary">@color/totoro_primary</item>
<item name="colorOnPrimary">@color/totoro_onPrimary</item>
<item name="colorPrimaryContainer">@color/totoro_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/totoro_onPrimaryContainer</item>
<item name="colorSecondary">@color/totoro_secondary</item>
<item name="colorOnSecondary">@color/totoro_onSecondary</item>
<item name="colorSecondaryContainer">@color/totoro_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/totoro_onSecondaryContainer</item>
<item name="colorTertiary">@color/totoro_tertiary</item>
<item name="colorOnTertiary">@color/totoro_onTertiary</item>
<item name="colorTertiaryContainer">@color/totoro_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/totoro_onTertiaryContainer</item>
<item name="colorError">@color/totoro_error</item>
<item name="colorOnError">@color/totoro_onError</item>
<item name="colorErrorContainer">@color/totoro_errorContainer</item>
<item name="colorOnErrorContainer">@color/totoro_onErrorContainer</item>
<item name="android:colorBackground">@color/totoro_background</item>
<item name="colorOnBackground">@color/totoro_onBackground</item>
<item name="colorSurface">@color/totoro_surface</item>
<item name="colorOnSurface">@color/totoro_onSurface</item>
<item name="colorSurfaceVariant">@color/totoro_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/totoro_onSurfaceVariant</item>
<item name="colorOutline">@color/totoro_outline</item>
<item name="colorOutlineVariant">@color/totoro_outlineVariant</item>
<item name="colorSurfaceInverse">@color/totoro_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/totoro_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/totoro_inversePrimary</item>
<item name="colorPrimaryFixed">@color/totoro_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/totoro_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/totoro_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/totoro_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/totoro_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/totoro_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/totoro_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/totoro_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/totoro_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/totoro_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/totoro_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/totoro_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/totoro_surfaceDim</item>
<item name="colorSurfaceBright">@color/totoro_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/totoro_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/totoro_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/totoro_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/totoro_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/totoro_surfaceContainerHighest</item>
</style>
<!-- Asuka -->
<style name="ThemeOverlay.Kotatsu.Asuka">
<item name="colorPrimary">@color/asuka_primary</item>
<item name="colorOnPrimary">@color/asuka_onPrimary</item>
<item name="colorPrimaryContainer">@color/asuka_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/asuka_onPrimaryContainer</item>
<item name="colorSecondary">@color/asuka_secondary</item>
<item name="colorOnSecondary">@color/asuka_onSecondary</item>
<item name="colorSecondaryContainer">@color/asuka_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/asuka_onSecondaryContainer</item>
<item name="colorTertiary">@color/asuka_tertiary</item>
<item name="colorOnTertiary">@color/asuka_onTertiary</item>
<item name="colorTertiaryContainer">@color/asuka_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/asuka_onTertiaryContainer</item>
<item name="colorError">@color/asuka_error</item>
<item name="colorOnError">@color/asuka_onError</item>
<item name="colorErrorContainer">@color/asuka_errorContainer</item>
<item name="colorOnErrorContainer">@color/asuka_onErrorContainer</item>
<item name="android:colorBackground">@color/asuka_background</item>
<item name="colorOnBackground">@color/asuka_onBackground</item>
<item name="colorSurface">@color/asuka_surface</item>
<item name="colorOnSurface">@color/asuka_onSurface</item>
<item name="colorSurfaceVariant">@color/asuka_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/asuka_onSurfaceVariant</item>
<item name="colorOutline">@color/asuka_outline</item>
<item name="colorOutlineVariant">@color/asuka_outlineVariant</item>
<item name="colorSurfaceInverse">@color/asuka_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/asuka_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/asuka_inversePrimary</item>
<item name="colorPrimaryFixed">@color/asuka_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/asuka_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/asuka_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/asuka_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/asuka_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/asuka_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/asuka_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/asuka_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/asuka_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/asuka_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/asuka_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/asuka_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/asuka_surfaceDim</item>
<item name="colorSurfaceBright">@color/asuka_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/asuka_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/asuka_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/asuka_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/asuka_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/asuka_surfaceContainerHighest</item>
</style>
<!-- Itsuka -->
<style name="ThemeOverlay.Kotatsu.Itsuka">
<item name="colorPrimary">@color/itsuka_primary</item>
<item name="colorOnPrimary">@color/itsuka_onPrimary</item>
<item name="colorPrimaryContainer">@color/itsuka_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/itsuka_onPrimaryContainer</item>
<item name="colorSecondary">@color/itsuka_secondary</item>
<item name="colorOnSecondary">@color/itsuka_onSecondary</item>
<item name="colorSecondaryContainer">@color/itsuka_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/itsuka_onSecondaryContainer</item>
<item name="colorTertiary">@color/itsuka_tertiary</item>
<item name="colorOnTertiary">@color/itsuka_onTertiary</item>
<item name="colorTertiaryContainer">@color/itsuka_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/itsuka_onTertiaryContainer</item>
<item name="colorError">@color/itsuka_error</item>
<item name="colorOnError">@color/itsuka_onError</item>
<item name="colorErrorContainer">@color/itsuka_errorContainer</item>
<item name="colorOnErrorContainer">@color/itsuka_onErrorContainer</item>
<item name="android:colorBackground">@color/itsuka_background</item>
<item name="colorOnBackground">@color/itsuka_onBackground</item>
<item name="colorSurface">@color/itsuka_surface</item>
<item name="colorOnSurface">@color/itsuka_onSurface</item>
<item name="colorSurfaceVariant">@color/itsuka_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/itsuka_onSurfaceVariant</item>
<item name="colorOutline">@color/itsuka_outline</item>
<item name="colorOutlineVariant">@color/itsuka_outlineVariant</item>
<item name="colorSurfaceInverse">@color/itsuka_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/itsuka_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/itsuka_inversePrimary</item>
<item name="colorPrimaryFixed">@color/itsuka_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/itsuka_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/itsuka_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/itsuka_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/itsuka_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/itsuka_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/itsuka_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/itsuka_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/itsuka_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/itsuka_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/itsuka_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/itsuka_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/itsuka_surfaceDim</item>
<item name="colorSurfaceBright">@color/itsuka_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/itsuka_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/itsuka_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/itsuka_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/itsuka_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/itsuka_surfaceContainerHighest</item>
</style>
<!-- Kanade -->
<style name="ThemeOverlay.Kotatsu.Kanade">
<item name="colorPrimary">@color/kanade_primary</item>
<item name="colorOnPrimary">@color/kanade_onPrimary</item>
<item name="colorPrimaryContainer">@color/kanade_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/kanade_onPrimaryContainer</item>
<item name="colorSecondary">@color/kanade_secondary</item>
<item name="colorOnSecondary">@color/kanade_onSecondary</item>
<item name="colorSecondaryContainer">@color/kanade_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/kanade_onSecondaryContainer</item>
<item name="colorTertiary">@color/kanade_tertiary</item>
<item name="colorOnTertiary">@color/kanade_onTertiary</item>
<item name="colorTertiaryContainer">@color/kanade_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/kanade_onTertiaryContainer</item>
<item name="colorError">@color/kanade_error</item>
<item name="colorOnError">@color/kanade_onError</item>
<item name="colorErrorContainer">@color/kanade_errorContainer</item>
<item name="colorOnErrorContainer">@color/kanade_onErrorContainer</item>
<item name="android:colorBackground">@color/kanade_background</item>
<item name="colorOnBackground">@color/kanade_onBackground</item>
<item name="colorSurface">@color/kanade_surface</item>
<item name="colorOnSurface">@color/kanade_onSurface</item>
<item name="colorSurfaceVariant">@color/kanade_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/kanade_onSurfaceVariant</item>
<item name="colorOutline">@color/kanade_outline</item>
<item name="colorOutlineVariant">@color/kanade_outlineVariant</item>
<item name="colorSurfaceInverse">@color/kanade_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/kanade_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/kanade_inversePrimary</item>
<item name="colorPrimaryFixed">@color/kanade_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/kanade_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/kanade_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/kanade_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/kanade_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/kanade_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/kanade_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/kanade_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/kanade_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/kanade_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/kanade_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/kanade_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/kanade_surfaceDim</item>
<item name="colorSurfaceBright">@color/kanade_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/kanade_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/kanade_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/kanade_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/kanade_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/kanade_surfaceContainerHighest</item>
</style>
<!-- Mamimi -->
<style name="ThemeOverlay.Kotatsu.Mamimi">
<item name="colorPrimary">@color/mamimi_primary</item>
<item name="colorOnPrimary">@color/mamimi_onPrimary</item>
<item name="colorPrimaryContainer">@color/mamimi_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/mamimi_onPrimaryContainer</item>
<item name="colorSecondary">@color/mamimi_secondary</item>
<item name="colorOnSecondary">@color/mamimi_onSecondary</item>
<item name="colorSecondaryContainer">@color/mamimi_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/mamimi_onSecondaryContainer</item>
<item name="colorTertiary">@color/mamimi_tertiary</item>
<item name="colorOnTertiary">@color/mamimi_onTertiary</item>
<item name="colorTertiaryContainer">@color/mamimi_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/mamimi_onTertiaryContainer</item>
<item name="colorError">@color/mamimi_error</item>
<item name="colorOnError">@color/mamimi_onError</item>
<item name="colorErrorContainer">@color/mamimi_errorContainer</item>
<item name="colorOnErrorContainer">@color/mamimi_onErrorContainer</item>
<item name="android:colorBackground">@color/mamimi_background</item>
<item name="colorOnBackground">@color/mamimi_onBackground</item>
<item name="colorSurface">@color/mamimi_surface</item>
<item name="colorOnSurface">@color/mamimi_onSurface</item>
<item name="colorSurfaceVariant">@color/mamimi_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/mamimi_onSurfaceVariant</item>
<item name="colorOutline">@color/mamimi_outline</item>
<item name="colorOutlineVariant">@color/mamimi_outlineVariant</item>
<item name="colorSurfaceInverse">@color/mamimi_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/mamimi_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/mamimi_inversePrimary</item>
<item name="colorPrimaryFixed">@color/mamimi_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/mamimi_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/mamimi_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/mamimi_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/mamimi_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/mamimi_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/mamimi_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/mamimi_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/mamimi_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/mamimi_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/mamimi_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/mamimi_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/mamimi_surfaceDim</item>
<item name="colorSurfaceBright">@color/mamimi_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/mamimi_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/mamimi_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/mamimi_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/mamimi_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/mamimi_surfaceContainerHighest</item>
</style>
<!-- Miku -->
<style name="ThemeOverlay.Kotatsu.Miku">
<item name="colorPrimary">@color/miku_primary</item>
<item name="colorOnPrimary">@color/miku_onPrimary</item>
<item name="colorPrimaryContainer">@color/miku_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/miku_onPrimaryContainer</item>
<item name="colorSecondary">@color/miku_secondary</item>
<item name="colorOnSecondary">@color/miku_onSecondary</item>
<item name="colorSecondaryContainer">@color/miku_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/miku_onSecondaryContainer</item>
<item name="colorTertiary">@color/miku_tertiary</item>
<item name="colorOnTertiary">@color/miku_onTertiary</item>
<item name="colorTertiaryContainer">@color/miku_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/miku_onTertiaryContainer</item>
<item name="colorError">@color/miku_error</item>
<item name="colorOnError">@color/miku_onError</item>
<item name="colorErrorContainer">@color/miku_errorContainer</item>
<item name="colorOnErrorContainer">@color/miku_onErrorContainer</item>
<item name="android:colorBackground">@color/miku_background</item>
<item name="colorOnBackground">@color/miku_onBackground</item>
<item name="colorSurface">@color/miku_surface</item>
<item name="colorOnSurface">@color/miku_onSurface</item>
<item name="colorSurfaceVariant">@color/miku_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/miku_onSurfaceVariant</item>
<item name="colorOutline">@color/miku_outline</item>
<item name="colorOutlineVariant">@color/miku_outlineVariant</item>
<item name="colorSurfaceInverse">@color/miku_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/miku_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/miku_inversePrimary</item>
<item name="colorPrimaryFixed">@color/miku_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/miku_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/miku_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/miku_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/miku_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/miku_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/miku_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/miku_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/miku_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/miku_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/miku_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/miku_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/miku_surfaceDim</item>
<item name="colorSurfaceBright">@color/miku_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/miku_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/miku_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/miku_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/miku_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/miku_surfaceContainerHighest</item>
</style>
<!-- Mion -->
<style name="ThemeOverlay.Kotatsu.Mion">
<item name="colorPrimary">@color/mion_primary</item>
<item name="colorOnPrimary">@color/mion_onPrimary</item>
<item name="colorPrimaryContainer">@color/mion_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/mion_onPrimaryContainer</item>
<item name="colorSecondary">@color/mion_secondary</item>
<item name="colorOnSecondary">@color/mion_onSecondary</item>
<item name="colorSecondaryContainer">@color/mion_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/mion_onSecondaryContainer</item>
<item name="colorTertiary">@color/mion_tertiary</item>
<item name="colorOnTertiary">@color/mion_onTertiary</item>
<item name="colorTertiaryContainer">@color/mion_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/mion_onTertiaryContainer</item>
<item name="colorError">@color/mion_error</item>
<item name="colorOnError">@color/mion_onError</item>
<item name="colorErrorContainer">@color/mion_errorContainer</item>
<item name="colorOnErrorContainer">@color/mion_onErrorContainer</item>
<item name="android:colorBackground">@color/mion_background</item>
<item name="colorOnBackground">@color/mion_onBackground</item>
<item name="colorSurface">@color/mion_surface</item>
<item name="colorOnSurface">@color/mion_onSurface</item>
<item name="colorSurfaceVariant">@color/mion_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/mion_onSurfaceVariant</item>
<item name="colorOutline">@color/mion_outline</item>
<item name="colorOutlineVariant">@color/mion_outlineVariant</item>
<item name="colorSurfaceInverse">@color/mion_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/mion_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/mion_inversePrimary</item>
<item name="colorPrimaryFixed">@color/mion_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/mion_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/mion_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/mion_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/mion_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/mion_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/mion_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/mion_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/mion_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/mion_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/mion_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/mion_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/mion_surfaceDim</item>
<item name="colorSurfaceBright">@color/mion_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/mion_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/mion_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/mion_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/mion_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/mion_surfaceContainerHighest</item>
</style>
<!-- Rikka -->
<style name="ThemeOverlay.Kotatsu.Rikka">
<item name="colorPrimary">@color/rikka_primary</item>
<item name="colorOnPrimary">@color/rikka_onPrimary</item>
<item name="colorPrimaryContainer">@color/rikka_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/rikka_onPrimaryContainer</item>
<item name="colorSecondary">@color/rikka_secondary</item>
<item name="colorOnSecondary">@color/rikka_onSecondary</item>
<item name="colorSecondaryContainer">@color/rikka_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/rikka_onSecondaryContainer</item>
<item name="colorTertiary">@color/rikka_tertiary</item>
<item name="colorOnTertiary">@color/rikka_onTertiary</item>
<item name="colorTertiaryContainer">@color/rikka_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/rikka_onTertiaryContainer</item>
<item name="colorError">@color/rikka_error</item>
<item name="colorOnError">@color/rikka_onError</item>
<item name="colorErrorContainer">@color/rikka_errorContainer</item>
<item name="colorOnErrorContainer">@color/rikka_onErrorContainer</item>
<item name="android:colorBackground">@color/rikka_background</item>
<item name="colorOnBackground">@color/rikka_onBackground</item>
<item name="colorSurface">@color/rikka_surface</item>
<item name="colorOnSurface">@color/rikka_onSurface</item>
<item name="colorSurfaceVariant">@color/rikka_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/rikka_onSurfaceVariant</item>
<item name="colorOutline">@color/rikka_outline</item>
<item name="colorOutlineVariant">@color/rikka_outlineVariant</item>
<item name="colorSurfaceInverse">@color/rikka_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/rikka_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/rikka_inversePrimary</item>
<item name="colorPrimaryFixed">@color/rikka_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/rikka_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/rikka_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/rikka_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/rikka_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/rikka_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/rikka_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/rikka_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/rikka_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/rikka_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/rikka_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/rikka_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/rikka_surfaceDim</item>
<item name="colorSurfaceBright">@color/rikka_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/rikka_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/rikka_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/rikka_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/rikka_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/rikka_surfaceContainerHighest</item>
</style>
<!-- Sakura -->
<style name="ThemeOverlay.Kotatsu.Sakura">
<item name="colorPrimary">@color/sakura_primary</item>
<item name="colorOnPrimary">@color/sakura_onPrimary</item>
<item name="colorPrimaryContainer">@color/sakura_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/sakura_onPrimaryContainer</item>
<item name="colorSecondary">@color/sakura_secondary</item>
<item name="colorOnSecondary">@color/sakura_onSecondary</item>
<item name="colorSecondaryContainer">@color/sakura_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/sakura_onSecondaryContainer</item>
<item name="colorTertiary">@color/sakura_tertiary</item>
<item name="colorOnTertiary">@color/sakura_onTertiary</item>
<item name="colorTertiaryContainer">@color/sakura_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/sakura_onTertiaryContainer</item>
<item name="colorError">@color/sakura_error</item>
<item name="colorOnError">@color/sakura_onError</item>
<item name="colorErrorContainer">@color/sakura_errorContainer</item>
<item name="colorOnErrorContainer">@color/sakura_onErrorContainer</item>
<item name="android:colorBackground">@color/sakura_background</item>
<item name="colorOnBackground">@color/sakura_onBackground</item>
<item name="colorSurface">@color/sakura_surface</item>
<item name="colorOnSurface">@color/sakura_onSurface</item>
<item name="colorSurfaceVariant">@color/sakura_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/sakura_onSurfaceVariant</item>
<item name="colorOutline">@color/sakura_outline</item>
<item name="colorOutlineVariant">@color/sakura_outlineVariant</item>
<item name="colorSurfaceInverse">@color/sakura_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/sakura_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/sakura_inversePrimary</item>
<item name="colorPrimaryFixed">@color/sakura_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/sakura_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/sakura_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/sakura_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/sakura_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/sakura_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/sakura_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/sakura_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/sakura_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/sakura_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/sakura_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/sakura_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/sakura_surfaceDim</item>
<item name="colorSurfaceBright">@color/sakura_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/sakura_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/sakura_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/sakura_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/sakura_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/sakura_surfaceContainerHighest</item>
</style>
</resources>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Base.V27.Kotatsu" parent="Base.V23.Kotatsu">
<style name="Base.V27.Kotatsu" parent="Base.Theme.Kotatsu">
<item name="android:windowLightNavigationBar">@bool/light_navigation_bar</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
</style>

View File

@@ -4,7 +4,6 @@
<bool name="light_status_bar">true</bool>
<bool name="light_navigation_bar">false</bool>
<bool name="com_samsung_android_icon_container_has_icon_container">true</bool>
<bool name="is_color_themes_available">false</bool>
<bool name="is_sync_enabled">true</bool>
<bool name="is_predictive_back_enabled">true</bool>
</resources>

View File

@@ -879,4 +879,5 @@
<string name="no_chapters_in_manga">This manga does not contain any chapters</string>
<string name="chapters_load_failed">Failed to load chapter list</string>
<string name="telegram_integration">Telegram integration</string>
<string name="test_parser">Test manga source</string>
</resources>

View File

@@ -46,8 +46,8 @@
<!-- Base attributes -->
<item name="android:windowLightStatusBar" tools:targetApi="M">@bool/light_status_bar</item>
<item name="android:statusBarColor">@color/dim</item>
<item name="android:navigationBarColor">@color/surface_amoled</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@color/dim</item>
<item name="android:navigationBarDividerColor" tools:targetApi="o_mr1">@null</item>
<item name="android:enforceNavigationBarContrast" tools:targetApi="Q">false</item>
<item name="android:enforceStatusBarContrast" tools:targetApi="Q">false</item>

View File

@@ -1,21 +1,445 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Totoro -->
<style name="ThemeOverlay.Kotatsu.Totoro">
<item name="colorPrimary">@color/totoro_primary</item>
<item name="colorOnPrimary">@color/totoro_onPrimary</item>
<item name="colorPrimaryContainer">@color/totoro_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/totoro_onPrimaryContainer</item>
<item name="colorSecondary">@color/totoro_secondary</item>
<item name="colorOnSecondary">@color/totoro_onSecondary</item>
<item name="colorSecondaryContainer">@color/totoro_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/totoro_onSecondaryContainer</item>
<item name="colorTertiary">@color/totoro_tertiary</item>
<item name="colorOnTertiary">@color/totoro_onTertiary</item>
<item name="colorTertiaryContainer">@color/totoro_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/totoro_onTertiaryContainer</item>
<item name="colorError">@color/totoro_error</item>
<item name="colorOnError">@color/totoro_onError</item>
<item name="colorErrorContainer">@color/totoro_errorContainer</item>
<item name="colorOnErrorContainer">@color/totoro_onErrorContainer</item>
<item name="android:colorBackground">@color/totoro_background</item>
<item name="colorOnBackground">@color/totoro_onBackground</item>
<item name="colorSurface">@color/totoro_surface</item>
<item name="colorOnSurface">@color/totoro_onSurface</item>
<item name="colorSurfaceVariant">@color/totoro_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/totoro_onSurfaceVariant</item>
<item name="colorOutline">@color/totoro_outline</item>
<item name="colorOutlineVariant">@color/totoro_outlineVariant</item>
<item name="colorSurfaceInverse">@color/totoro_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/totoro_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/totoro_inversePrimary</item>
<item name="colorPrimaryFixed">@color/totoro_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/totoro_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/totoro_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/totoro_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/totoro_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/totoro_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/totoro_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/totoro_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/totoro_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/totoro_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/totoro_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/totoro_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/totoro_surfaceDim</item>
<item name="colorSurfaceBright">@color/totoro_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/totoro_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/totoro_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/totoro_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/totoro_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/totoro_surfaceContainerHighest</item>
</style>
<!-- Asuka -->
<style name="ThemeOverlay.Kotatsu.Asuka">
<item name="colorPrimary">@color/asuka_primary</item>
<item name="colorOnPrimary">@color/asuka_onPrimary</item>
<item name="colorPrimaryContainer">@color/asuka_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/asuka_onPrimaryContainer</item>
<item name="colorSecondary">@color/asuka_secondary</item>
<item name="colorOnSecondary">@color/asuka_onSecondary</item>
<item name="colorSecondaryContainer">@color/asuka_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/asuka_onSecondaryContainer</item>
<item name="colorTertiary">@color/asuka_tertiary</item>
<item name="colorOnTertiary">@color/asuka_onTertiary</item>
<item name="colorTertiaryContainer">@color/asuka_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/asuka_onTertiaryContainer</item>
<item name="colorError">@color/asuka_error</item>
<item name="colorOnError">@color/asuka_onError</item>
<item name="colorErrorContainer">@color/asuka_errorContainer</item>
<item name="colorOnErrorContainer">@color/asuka_onErrorContainer</item>
<item name="android:colorBackground">@color/asuka_background</item>
<item name="colorOnBackground">@color/asuka_onBackground</item>
<item name="colorSurface">@color/asuka_surface</item>
<item name="colorOnSurface">@color/asuka_onSurface</item>
<item name="colorSurfaceVariant">@color/asuka_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/asuka_onSurfaceVariant</item>
<item name="colorOutline">@color/asuka_outline</item>
<item name="colorOutlineVariant">@color/asuka_outlineVariant</item>
<item name="colorSurfaceInverse">@color/asuka_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/asuka_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/asuka_inversePrimary</item>
<item name="colorPrimaryFixed">@color/asuka_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/asuka_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/asuka_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/asuka_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/asuka_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/asuka_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/asuka_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/asuka_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/asuka_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/asuka_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/asuka_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/asuka_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/asuka_surfaceDim</item>
<item name="colorSurfaceBright">@color/asuka_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/asuka_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/asuka_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/asuka_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/asuka_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/asuka_surfaceContainerHighest</item>
</style>
<style name="ThemeOverlay.Kotatsu.Totoro" />
<style name="ThemeOverlay.Kotatsu.Asuka" />
<style name="ThemeOverlay.Kotatsu.Itsuka" />
<style name="ThemeOverlay.Kotatsu.Kanade" />
<style name="ThemeOverlay.Kotatsu.Mamimi" />
<style name="ThemeOverlay.Kotatsu.Miku" />
<style name="ThemeOverlay.Kotatsu.Mion" />
<style name="ThemeOverlay.Kotatsu.Rikka" />
<style name="ThemeOverlay.Kotatsu.Sakura" />
<!-- Itsuka -->
<style name="ThemeOverlay.Kotatsu.Itsuka">
<item name="colorPrimary">@color/itsuka_primary</item>
<item name="colorOnPrimary">@color/itsuka_onPrimary</item>
<item name="colorPrimaryContainer">@color/itsuka_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/itsuka_onPrimaryContainer</item>
<item name="colorSecondary">@color/itsuka_secondary</item>
<item name="colorOnSecondary">@color/itsuka_onSecondary</item>
<item name="colorSecondaryContainer">@color/itsuka_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/itsuka_onSecondaryContainer</item>
<item name="colorTertiary">@color/itsuka_tertiary</item>
<item name="colorOnTertiary">@color/itsuka_onTertiary</item>
<item name="colorTertiaryContainer">@color/itsuka_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/itsuka_onTertiaryContainer</item>
<item name="colorError">@color/itsuka_error</item>
<item name="colorOnError">@color/itsuka_onError</item>
<item name="colorErrorContainer">@color/itsuka_errorContainer</item>
<item name="colorOnErrorContainer">@color/itsuka_onErrorContainer</item>
<item name="android:colorBackground">@color/itsuka_background</item>
<item name="colorOnBackground">@color/itsuka_onBackground</item>
<item name="colorSurface">@color/itsuka_surface</item>
<item name="colorOnSurface">@color/itsuka_onSurface</item>
<item name="colorSurfaceVariant">@color/itsuka_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/itsuka_onSurfaceVariant</item>
<item name="colorOutline">@color/itsuka_outline</item>
<item name="colorOutlineVariant">@color/itsuka_outlineVariant</item>
<item name="colorSurfaceInverse">@color/itsuka_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/itsuka_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/itsuka_inversePrimary</item>
<item name="colorPrimaryFixed">@color/itsuka_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/itsuka_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/itsuka_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/itsuka_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/itsuka_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/itsuka_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/itsuka_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/itsuka_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/itsuka_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/itsuka_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/itsuka_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/itsuka_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/itsuka_surfaceDim</item>
<item name="colorSurfaceBright">@color/itsuka_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/itsuka_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/itsuka_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/itsuka_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/itsuka_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/itsuka_surfaceContainerHighest</item>
</style>
<!-- Kanade -->
<style name="ThemeOverlay.Kotatsu.Kanade">
<item name="colorPrimary">@color/kanade_primary</item>
<item name="colorOnPrimary">@color/kanade_onPrimary</item>
<item name="colorPrimaryContainer">@color/kanade_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/kanade_onPrimaryContainer</item>
<item name="colorSecondary">@color/kanade_secondary</item>
<item name="colorOnSecondary">@color/kanade_onSecondary</item>
<item name="colorSecondaryContainer">@color/kanade_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/kanade_onSecondaryContainer</item>
<item name="colorTertiary">@color/kanade_tertiary</item>
<item name="colorOnTertiary">@color/kanade_onTertiary</item>
<item name="colorTertiaryContainer">@color/kanade_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/kanade_onTertiaryContainer</item>
<item name="colorError">@color/kanade_error</item>
<item name="colorOnError">@color/kanade_onError</item>
<item name="colorErrorContainer">@color/kanade_errorContainer</item>
<item name="colorOnErrorContainer">@color/kanade_onErrorContainer</item>
<item name="android:colorBackground">@color/kanade_background</item>
<item name="colorOnBackground">@color/kanade_onBackground</item>
<item name="colorSurface">@color/kanade_surface</item>
<item name="colorOnSurface">@color/kanade_onSurface</item>
<item name="colorSurfaceVariant">@color/kanade_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/kanade_onSurfaceVariant</item>
<item name="colorOutline">@color/kanade_outline</item>
<item name="colorOutlineVariant">@color/kanade_outlineVariant</item>
<item name="colorSurfaceInverse">@color/kanade_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/kanade_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/kanade_inversePrimary</item>
<item name="colorPrimaryFixed">@color/kanade_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/kanade_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/kanade_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/kanade_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/kanade_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/kanade_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/kanade_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/kanade_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/kanade_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/kanade_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/kanade_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/kanade_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/kanade_surfaceDim</item>
<item name="colorSurfaceBright">@color/kanade_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/kanade_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/kanade_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/kanade_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/kanade_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/kanade_surfaceContainerHighest</item>
</style>
<!-- Mamimi -->
<style name="ThemeOverlay.Kotatsu.Mamimi">
<item name="colorPrimary">@color/mamimi_primary</item>
<item name="colorOnPrimary">@color/mamimi_onPrimary</item>
<item name="colorPrimaryContainer">@color/mamimi_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/mamimi_onPrimaryContainer</item>
<item name="colorSecondary">@color/mamimi_secondary</item>
<item name="colorOnSecondary">@color/mamimi_onSecondary</item>
<item name="colorSecondaryContainer">@color/mamimi_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/mamimi_onSecondaryContainer</item>
<item name="colorTertiary">@color/mamimi_tertiary</item>
<item name="colorOnTertiary">@color/mamimi_onTertiary</item>
<item name="colorTertiaryContainer">@color/mamimi_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/mamimi_onTertiaryContainer</item>
<item name="colorError">@color/mamimi_error</item>
<item name="colorOnError">@color/mamimi_onError</item>
<item name="colorErrorContainer">@color/mamimi_errorContainer</item>
<item name="colorOnErrorContainer">@color/mamimi_onErrorContainer</item>
<item name="android:colorBackground">@color/mamimi_background</item>
<item name="colorOnBackground">@color/mamimi_onBackground</item>
<item name="colorSurface">@color/mamimi_surface</item>
<item name="colorOnSurface">@color/mamimi_onSurface</item>
<item name="colorSurfaceVariant">@color/mamimi_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/mamimi_onSurfaceVariant</item>
<item name="colorOutline">@color/mamimi_outline</item>
<item name="colorOutlineVariant">@color/mamimi_outlineVariant</item>
<item name="colorSurfaceInverse">@color/mamimi_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/mamimi_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/mamimi_inversePrimary</item>
<item name="colorPrimaryFixed">@color/mamimi_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/mamimi_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/mamimi_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/mamimi_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/mamimi_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/mamimi_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/mamimi_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/mamimi_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/mamimi_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/mamimi_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/mamimi_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/mamimi_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/mamimi_surfaceDim</item>
<item name="colorSurfaceBright">@color/mamimi_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/mamimi_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/mamimi_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/mamimi_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/mamimi_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/mamimi_surfaceContainerHighest</item>
</style>
<!-- Miku -->
<style name="ThemeOverlay.Kotatsu.Miku">
<item name="colorPrimary">@color/miku_primary</item>
<item name="colorOnPrimary">@color/miku_onPrimary</item>
<item name="colorPrimaryContainer">@color/miku_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/miku_onPrimaryContainer</item>
<item name="colorSecondary">@color/miku_secondary</item>
<item name="colorOnSecondary">@color/miku_onSecondary</item>
<item name="colorSecondaryContainer">@color/miku_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/miku_onSecondaryContainer</item>
<item name="colorTertiary">@color/miku_tertiary</item>
<item name="colorOnTertiary">@color/miku_onTertiary</item>
<item name="colorTertiaryContainer">@color/miku_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/miku_onTertiaryContainer</item>
<item name="colorError">@color/miku_error</item>
<item name="colorOnError">@color/miku_onError</item>
<item name="colorErrorContainer">@color/miku_errorContainer</item>
<item name="colorOnErrorContainer">@color/miku_onErrorContainer</item>
<item name="android:colorBackground">@color/miku_background</item>
<item name="colorOnBackground">@color/miku_onBackground</item>
<item name="colorSurface">@color/miku_surface</item>
<item name="colorOnSurface">@color/miku_onSurface</item>
<item name="colorSurfaceVariant">@color/miku_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/miku_onSurfaceVariant</item>
<item name="colorOutline">@color/miku_outline</item>
<item name="colorOutlineVariant">@color/miku_outlineVariant</item>
<item name="colorSurfaceInverse">@color/miku_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/miku_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/miku_inversePrimary</item>
<item name="colorPrimaryFixed">@color/miku_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/miku_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/miku_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/miku_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/miku_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/miku_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/miku_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/miku_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/miku_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/miku_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/miku_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/miku_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/miku_surfaceDim</item>
<item name="colorSurfaceBright">@color/miku_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/miku_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/miku_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/miku_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/miku_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/miku_surfaceContainerHighest</item>
</style>
<!-- Mion -->
<style name="ThemeOverlay.Kotatsu.Mion">
<item name="colorPrimary">@color/mion_primary</item>
<item name="colorOnPrimary">@color/mion_onPrimary</item>
<item name="colorPrimaryContainer">@color/mion_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/mion_onPrimaryContainer</item>
<item name="colorSecondary">@color/mion_secondary</item>
<item name="colorOnSecondary">@color/mion_onSecondary</item>
<item name="colorSecondaryContainer">@color/mion_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/mion_onSecondaryContainer</item>
<item name="colorTertiary">@color/mion_tertiary</item>
<item name="colorOnTertiary">@color/mion_onTertiary</item>
<item name="colorTertiaryContainer">@color/mion_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/mion_onTertiaryContainer</item>
<item name="colorError">@color/mion_error</item>
<item name="colorOnError">@color/mion_onError</item>
<item name="colorErrorContainer">@color/mion_errorContainer</item>
<item name="colorOnErrorContainer">@color/mion_onErrorContainer</item>
<item name="android:colorBackground">@color/mion_background</item>
<item name="colorOnBackground">@color/mion_onBackground</item>
<item name="colorSurface">@color/mion_surface</item>
<item name="colorOnSurface">@color/mion_onSurface</item>
<item name="colorSurfaceVariant">@color/mion_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/mion_onSurfaceVariant</item>
<item name="colorOutline">@color/mion_outline</item>
<item name="colorOutlineVariant">@color/mion_outlineVariant</item>
<item name="colorSurfaceInverse">@color/mion_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/mion_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/mion_inversePrimary</item>
<item name="colorPrimaryFixed">@color/mion_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/mion_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/mion_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/mion_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/mion_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/mion_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/mion_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/mion_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/mion_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/mion_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/mion_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/mion_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/mion_surfaceDim</item>
<item name="colorSurfaceBright">@color/mion_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/mion_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/mion_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/mion_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/mion_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/mion_surfaceContainerHighest</item>
</style>
<!-- Rikka -->
<style name="ThemeOverlay.Kotatsu.Rikka">
<item name="colorPrimary">@color/rikka_primary</item>
<item name="colorOnPrimary">@color/rikka_onPrimary</item>
<item name="colorPrimaryContainer">@color/rikka_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/rikka_onPrimaryContainer</item>
<item name="colorSecondary">@color/rikka_secondary</item>
<item name="colorOnSecondary">@color/rikka_onSecondary</item>
<item name="colorSecondaryContainer">@color/rikka_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/rikka_onSecondaryContainer</item>
<item name="colorTertiary">@color/rikka_tertiary</item>
<item name="colorOnTertiary">@color/rikka_onTertiary</item>
<item name="colorTertiaryContainer">@color/rikka_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/rikka_onTertiaryContainer</item>
<item name="colorError">@color/rikka_error</item>
<item name="colorOnError">@color/rikka_onError</item>
<item name="colorErrorContainer">@color/rikka_errorContainer</item>
<item name="colorOnErrorContainer">@color/rikka_onErrorContainer</item>
<item name="android:colorBackground">@color/rikka_background</item>
<item name="colorOnBackground">@color/rikka_onBackground</item>
<item name="colorSurface">@color/rikka_surface</item>
<item name="colorOnSurface">@color/rikka_onSurface</item>
<item name="colorSurfaceVariant">@color/rikka_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/rikka_onSurfaceVariant</item>
<item name="colorOutline">@color/rikka_outline</item>
<item name="colorOutlineVariant">@color/rikka_outlineVariant</item>
<item name="colorSurfaceInverse">@color/rikka_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/rikka_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/rikka_inversePrimary</item>
<item name="colorPrimaryFixed">@color/rikka_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/rikka_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/rikka_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/rikka_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/rikka_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/rikka_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/rikka_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/rikka_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/rikka_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/rikka_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/rikka_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/rikka_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/rikka_surfaceDim</item>
<item name="colorSurfaceBright">@color/rikka_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/rikka_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/rikka_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/rikka_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/rikka_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/rikka_surfaceContainerHighest</item>
</style>
<!-- Sakura -->
<style name="ThemeOverlay.Kotatsu.Sakura">
<item name="colorPrimary">@color/sakura_primary</item>
<item name="colorOnPrimary">@color/sakura_onPrimary</item>
<item name="colorPrimaryContainer">@color/sakura_primaryContainer</item>
<item name="colorOnPrimaryContainer">@color/sakura_onPrimaryContainer</item>
<item name="colorSecondary">@color/sakura_secondary</item>
<item name="colorOnSecondary">@color/sakura_onSecondary</item>
<item name="colorSecondaryContainer">@color/sakura_secondaryContainer</item>
<item name="colorOnSecondaryContainer">@color/sakura_onSecondaryContainer</item>
<item name="colorTertiary">@color/sakura_tertiary</item>
<item name="colorOnTertiary">@color/sakura_onTertiary</item>
<item name="colorTertiaryContainer">@color/sakura_tertiaryContainer</item>
<item name="colorOnTertiaryContainer">@color/sakura_onTertiaryContainer</item>
<item name="colorError">@color/sakura_error</item>
<item name="colorOnError">@color/sakura_onError</item>
<item name="colorErrorContainer">@color/sakura_errorContainer</item>
<item name="colorOnErrorContainer">@color/sakura_onErrorContainer</item>
<item name="android:colorBackground">@color/sakura_background</item>
<item name="colorOnBackground">@color/sakura_onBackground</item>
<item name="colorSurface">@color/sakura_surface</item>
<item name="colorOnSurface">@color/sakura_onSurface</item>
<item name="colorSurfaceVariant">@color/sakura_surfaceVariant</item>
<item name="colorOnSurfaceVariant">@color/sakura_onSurfaceVariant</item>
<item name="colorOutline">@color/sakura_outline</item>
<item name="colorOutlineVariant">@color/sakura_outlineVariant</item>
<item name="colorSurfaceInverse">@color/sakura_inverseSurface</item>
<item name="colorOnSurfaceInverse">@color/sakura_inverseOnSurface</item>
<item name="colorPrimaryInverse">@color/sakura_inversePrimary</item>
<item name="colorPrimaryFixed">@color/sakura_primaryFixed</item>
<item name="colorOnPrimaryFixed">@color/sakura_onPrimaryFixed</item>
<item name="colorPrimaryFixedDim">@color/sakura_primaryFixedDim</item>
<item name="colorOnPrimaryFixedVariant">@color/sakura_onPrimaryFixedVariant</item>
<item name="colorSecondaryFixed">@color/sakura_secondaryFixed</item>
<item name="colorOnSecondaryFixed">@color/sakura_onSecondaryFixed</item>
<item name="colorSecondaryFixedDim">@color/sakura_secondaryFixedDim</item>
<item name="colorOnSecondaryFixedVariant">@color/sakura_onSecondaryFixedVariant</item>
<item name="colorTertiaryFixed">@color/sakura_tertiaryFixed</item>
<item name="colorOnTertiaryFixed">@color/sakura_onTertiaryFixed</item>
<item name="colorTertiaryFixedDim">@color/sakura_tertiaryFixedDim</item>
<item name="colorOnTertiaryFixedVariant">@color/sakura_onTertiaryFixedVariant</item>
<item name="colorSurfaceDim">@color/sakura_surfaceDim</item>
<item name="colorSurfaceBright">@color/sakura_surfaceBright</item>
<item name="colorSurfaceContainerLowest">@color/sakura_surfaceContainerLowest</item>
<item name="colorSurfaceContainerLow">@color/sakura_surfaceContainerLow</item>
<item name="colorSurfaceContainer">@color/sakura_surfaceContainer</item>
<item name="colorSurfaceContainerHigh">@color/sakura_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/sakura_surfaceContainerHighest</item>
</style>
</resources>

View File

@@ -6,8 +6,7 @@
<org.koitharu.kotatsu.settings.utils.ThemeChooserPreference
android:key="color_theme"
android:title="@string/color_theme"
app:isPreferenceVisible="@bool/is_color_themes_available" />
android:title="@string/color_theme" />
<ListPreference
android:defaultValue="-1"

View File

@@ -0,0 +1,11 @@
package org.koitharu.kotatsu.core.parser
import org.koitharu.kotatsu.core.cache.MemoryContentCache
import org.koitharu.kotatsu.core.model.TestMangaSource
import org.koitharu.kotatsu.parsers.MangaLoaderContext
@Suppress("unused")
class TestMangaRepository(
private val loaderContext: MangaLoaderContext,
cache: MemoryContentCache
) : EmptyMangaRepository(TestMangaSource)

View File

@@ -0,0 +1,11 @@
package org.koitharu.kotatsu.core.parser
import org.koitharu.kotatsu.core.cache.MemoryContentCache
import org.koitharu.kotatsu.core.model.TestMangaSource
import org.koitharu.kotatsu.parsers.MangaLoaderContext
@Suppress("unused")
class TestMangaRepository(
private val loaderContext: MangaLoaderContext,
cache: MemoryContentCache
) : EmptyMangaRepository(TestMangaSource)

View File

@@ -3,6 +3,7 @@ package org.koitharu.kotatsu.reader.domain
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.koitharu.kotatsu.core.model.TestMangaSource
import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
import kotlin.random.Random
@@ -73,6 +74,6 @@ class ChapterPagesTest {
preview = null,
chapterId = chapterId,
index = Random.nextInt(),
source = MangaParserSource.DUMMY,
source = TestMangaSource,
)
}

View File

@@ -5,48 +5,49 @@ adapterdelegates = "4.3.2"
appcompat = "1.7.1"
avifDecoder = "1.1.1.14d8e3c4"
biometric = "1.4.0-alpha04"
coil = "3.2.0"
coil = "3.3.0"
collections = "1.5.0"
# https://github.com/google/conscrypt/issues/1268
#noinspection NewerVersionAvailable,GradleDependency - 2.5.3 cause crashes
conscrypt = "2.5.2"
constraintlayout = "2.2.1"
coreKtx = "1.16.0"
coreKtx = "1.17.0"
coroutines = "1.10.2"
dagger = "2.56.2"
decoroutinator = "2.5.5"
dagger = "2.57.1"
decoroutinator = "2.5.7"
desugar = "2.1.5"
diskLruCache = "1.5"
documentfile = "1.1.0"
fragment = "1.8.8"
gradle = "8.11.1"
fragment = "1.8.9"
gradle = "8.13.0"
guava = "33.4.8-android"
hilt = "1.2.0"
json = "20250517"
junit = "4.13.2"
junitKtx = "1.2.1"
kotlin = "2.1.21"
junitKtx = "1.3.0"
kotlin = "2.2.10"
kizzyRpc = "ad8f2e32eb"
ksp = "2.1.21-2.0.1"
ksp = "2.2.10-2.0.2"
leakcanary = "3.0-alpha-8"
lifecycle = "2.9.1"
lifecycle = "2.9.3"
markwon = "4.6.2"
material = "1.14.0-alpha03"
material = "1.14.0-alpha04"
moshi = "1.15.2"
okhttp = "4.12.0"
okio = "3.12.0"
parsers = "8a147dbdd3"
okhttp = "5.1.0"
okio = "3.16.0"
parsers = "fe5534b006"
preference = "1.2.1"
recyclerview = "1.4.0"
room = "2.7.2"
serialization = "1.8.1"
serialization = "1.9.0"
ssiv = "376930523c"
swiperefreshlayout = "1.1.0"
testRules = "1.6.1"
testRunner = "1.6.2"
testRules = "1.7.0"
testRunner = "1.7.0"
transition = "1.6.0"
viewpager2 = "1.1.0"
webkit = "1.13.0"
workRuntime = "2.10.2"
webkit = "1.14.0"
workRuntime = "2.10.3"
workinspector = "1.2"
[libraries]

View File

@@ -1,7 +1,7 @@
#Wed Apr 03 08:23:55 EEST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists