HapeLee 1 год назад
Родитель
Сommit
f8a39f1a24

+ 3 - 0
app/src/main/java/io/legato/kazusa/base/BaseActivity.kt

@@ -141,6 +141,9 @@ abstract class BaseActivity<VB : ViewBinding>(
             "1" -> setTheme(R.style.Theme_Base_GR)
             "2" -> setTheme(R.style.Theme_Base_Lemon)
             "3" -> setTheme(R.style.Theme_Base_WH)
+            "4" -> setTheme(R.style.Theme_Base_Koharu)
+            "5" -> setTheme(R.style.Theme_Base_Yuuka)
+            "6" -> setTheme(R.style.Theme_Base_Phoebe)
         }
     }
 

+ 3 - 0
app/src/main/java/io/legato/kazusa/lib/prefs/ThemeCardPreference.kt

@@ -92,6 +92,9 @@ class ThemeCardPreference(context: Context, attrs: AttributeSet) : Preference(co
         "1" to R.style.Theme_Base_GR,
         "2" to R.style.Theme_Base_Lemon,
         "3" to R.style.Theme_Base_WH,
+        "4" to R.style.Theme_Base_Koharu,
+        "5" to R.style.Theme_Base_Yuuka,
+        "6" to R.style.Theme_Base_Phoebe
         )
 
     private fun getThemeColors(value: String): List<Int> {

+ 45 - 3
app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt

@@ -1,6 +1,7 @@
 package io.legato.kazusa.ui.book.read.config
 
 import android.content.DialogInterface
+import android.graphics.Color
 import android.os.Bundle
 import android.view.View
 import android.view.ViewGroup
@@ -16,17 +17,17 @@ import io.legato.kazusa.databinding.ItemReadStyleBinding
 import io.legato.kazusa.help.config.AppConfig
 import io.legato.kazusa.help.config.ReadBookConfig
 import io.legato.kazusa.lib.dialogs.selector
-//import io.legado.app.lib.theme.accentColor
-//import io.legado.app.lib.theme.bottomBackground
-//import io.legado.app.lib.theme.getPrimaryTextColor
 import io.legato.kazusa.model.ReadBook
 import io.legato.kazusa.ui.book.read.ReadBookActivity
 import io.legato.kazusa.ui.font.FontSelectDialog
+import io.legato.kazusa.ui.widget.DetailSeekBar
 import io.legato.kazusa.utils.ChineseUtils
 import io.legato.kazusa.utils.postEvent
 import io.legato.kazusa.utils.showDialogFragment
 import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
 import splitties.views.onLongClick
+import androidx.core.graphics.drawable.toDrawable
+import androidx.transition.TransitionManager
 
 class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style),
     FontSelectDialog.CallBack {
@@ -35,6 +36,9 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
     private val callBack get() = activity as? ReadBookActivity
     private lateinit var styleAdapter: StyleAdapter
 
+    private lateinit var allSliders: List<DetailSeekBar>
+
+
     override fun onStart() {
         super.onStart()
 //        dialog?.window?.run {
@@ -154,6 +158,23 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
             upView()
             postEvent(EventBus.UP_CONFIG, arrayListOf(1, 2, 5))
         }
+
+        allSliders = listOf(
+            dsbTextSize,
+            dsbTextLetterSpacing,
+            dsbLineSize,
+            dsbParagraphSpacing
+        )
+
+        allSliders.forEach { seekBar ->
+            seekBar.onStartTracking = {
+                setOnlyActiveSeekBarVisible(seekBar, true)
+            }
+            seekBar.onStopTracking = {
+                setOnlyActiveSeekBarVisible(seekBar, false)
+            }
+        }
+
         dsbTextSize.onChanged = {
             ReadBookConfig.textSize = it + 5
             postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
@@ -172,6 +193,27 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
         }
     }
 
+    private fun setOnlyActiveSeekBarVisible(activeSeekBar: DetailSeekBar, visible: Boolean) {
+        if (visible == true) {
+            TransitionManager.beginDelayedTransition(binding.setBar)
+            TransitionManager.beginDelayedTransition(binding.setBottomBar)
+            binding.setBar.visibility = View.GONE
+            binding.setBottomBar.visibility = View.GONE
+        }else{
+            TransitionManager.beginDelayedTransition(binding.setBar)
+            TransitionManager.beginDelayedTransition(binding.setBottomBar)
+            binding.setBar.visibility = View.VISIBLE
+            binding.setBottomBar.visibility = View.VISIBLE
+        }
+        allSliders.forEach { seekBar ->
+            if (seekBar != activeSeekBar) {
+                seekBar.visibility = if (visible) View.GONE else View.VISIBLE
+            }
+        }
+    }
+
+
+
     private fun changeBgTextConfig(index: Int) {
         val oldIndex = ReadBookConfig.styleSelect
         if (index != oldIndex) {

+ 8 - 9
app/src/main/java/io/legato/kazusa/ui/widget/DetailSeekBar.kt

@@ -24,7 +24,9 @@ class DetailSeekBar @JvmOverloads constructor(
     private val isBottomBackground: Boolean
 
     var valueFormat: ((progress: Int) -> String)? = null
+    var onStartTracking: (() -> Unit)? = null
     var onChanged: ((progress: Int) -> Unit)? = null
+    var onStopTracking: (() -> Unit)? = null
 
     var progress: Int
         get() = binding.slider.value.toInt()
@@ -50,14 +52,6 @@ class DetailSeekBar @JvmOverloads constructor(
         }
         binding.slider.valueTo = typedArray.getInteger(R.styleable.DetailSeekBar_max, 0).toFloat()
         typedArray.recycle()
-        if (isBottomBackground && !isInEditMode) {
-//            val isLight = ColorUtils.isColorLight(context.bottomBackground)
-//            val textColor = context.getPrimaryTextColor(isLight)
-//            binding.tvSeekTitle.setTextColor(textColor)
-//            binding.ivSeekPlus.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
-//            binding.ivSeekReduce.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
-//            binding.tvSeekValue.setTextColor(textColor)
-        }
         binding.ivSeekPlus.setOnClickListener {
             val newValue = (binding.slider.value + 1).coerceAtMost(binding.slider.valueTo)
             binding.slider.value = newValue
@@ -72,14 +66,19 @@ class DetailSeekBar @JvmOverloads constructor(
 
         binding.slider.addOnChangeListener { _, value, fromUser ->
             upValue(value.toInt())
+
+            if (fromUser) {
+                onChanged?.invoke(value.toInt())
+            }
         }
 
         binding.slider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
             override fun onStartTrackingTouch(slider: Slider) {
-                // 可以添加开始拖动时的逻辑
+                onStartTracking?.invoke()
             }
 
             override fun onStopTrackingTouch(slider: Slider) {
+                onStopTracking?.invoke()
                 onChanged?.invoke(slider.value.toInt())
             }
         })

+ 8 - 15
app/src/main/java/io/legato/kazusa/ui/widget/text/AccentBgTextView.kt

@@ -9,19 +9,20 @@ import io.legato.kazusa.lib.theme.Selector
 import io.legato.kazusa.utils.ColorUtils
 import io.legato.kazusa.utils.dpToPx
 import androidx.core.content.withStyledAttributes
+import io.legato.kazusa.utils.themeColor
 
 class AccentBgTextView @JvmOverloads constructor(
     context: Context,
     attrs: AttributeSet? = null
 ) : MaterialTextView(context, attrs) {
 
-    private var radiusPx = 0
+    private var radiusPx = 32
 
     init {
-        context.withStyledAttributes(attrs, R.styleable.AccentBgTextView) {
-            val radiusDp = getDimensionPixelOffset(R.styleable.AccentBgTextView_radius, 0)
-            radiusPx = radiusDp
-        }
+//        context.withStyledAttributes(attrs, R.styleable.AccentBgTextView) {
+//            val radiusDp = getDimensionPixelOffset(R.styleable.AccentBgTextView_radius, 0)
+//            radiusPx = radiusDp
+//        }
         updateBackground()
     }
 
@@ -31,16 +32,8 @@ class AccentBgTextView @JvmOverloads constructor(
     }
 
     private fun updateBackground() {
-        val backgroundColor = MaterialColors.getColor(
-            this,
-            com.google.android.material.R.attr.colorPrimaryContainer,
-            //context.getColorCompat(R.color.fallback_bg)
-        )
-        val textColor = MaterialColors.getColor(
-            this,
-            com.google.android.material.R.attr.colorOnPrimaryContainer,
-            //context.getColorCompat(R.color.fallback_text)
-        )
+        val backgroundColor = context.themeColor(com.google.android.material.R.attr.colorPrimaryContainer)
+        val textColor = context.themeColor(com.google.android.material.R.attr.colorOnPrimaryContainer)
 
         background = Selector.shapeBuild()
             .setCornerRadius(radiusPx)

+ 4 - 0
app/src/main/res/drawable/font_bold.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="?attr/colorControlNormal">
+    <path android:fillColor="@android:color/white" android:pathData="M272,760L272,200L493,200Q558,200 613,240Q668,280 668,351Q668,402 645,429.5Q622,457 602,469L602,469Q627,480 657.5,510Q688,540 688,600Q688,689 623,724.5Q558,760 501,760L272,760ZM393,648L497,648Q545,648 555.5,623.5Q566,599 566,588Q566,577 555.5,552.5Q545,528 494,528L393,528L393,648ZM393,420L486,420Q519,420 534,403Q549,386 549,365Q549,341 532,326Q515,311 488,311L393,311L393,420Z"/>
+</vector>

+ 4 - 0
app/src/main/res/drawable/font_style.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="?attr/colorControlNormal">
+    <path android:fillColor="@android:color/white" android:pathData="M280,800L280,280L80,280L80,160L600,160L600,280L400,280L400,800L280,800ZM640,800L640,480L520,480L520,360L880,360L880,480L760,480L760,800L640,800Z"/>
+</vector>

+ 4 - 0
app/src/main/res/drawable/ic_padding.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="?attr/colorControlNormal">
+    <path android:fillColor="@android:color/white" android:pathData="M120,800L120,160L200,160L200,800L120,800ZM760,800L760,160L840,160L840,800L760,800ZM294,680L444,280L516,280L666,680L596,680L562,578L400,578L364,680L294,680ZM420,520L540,520L482,354L482,354L420,520Z"/>
+</vector>

+ 4 - 0
app/src/main/res/drawable/ic_segment.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="?attr/colorControlNormal" android:autoMirrored="true">
+    <path android:fillColor="@android:color/white" android:pathData="M360,720L360,640L840,640L840,720L360,720ZM360,520L360,440L840,440L840,520L360,520ZM120,320L120,240L840,240L840,320L120,320Z"/>
+</vector>

+ 204 - 170
app/src/main/res/layout/dialog_read_book_style.xml

@@ -33,66 +33,94 @@
     </LinearLayout>
 
     <LinearLayout
+        android:id="@+id/set_bar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:gravity="center_vertical"
-        android:orientation="horizontal"
-        android:layout_marginHorizontal="16dp" >
-
-        <io.legato.kazusa.ui.book.read.config.TextFontWeightConverter
-            android:id="@+id/text_font_weight_converter"
-            style="@style/Widget.Material3.Button.TonalButton"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/font_weight_text" />
-
-        <com.google.android.material.button.MaterialButton
-            android:id="@+id/tv_text_font"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            style="@style/Widget.Material3.Button.TonalButton"
-            android:text="@string/text_font" />
-
-        <com.google.android.material.button.MaterialButton
-            android:id="@+id/tv_text_indent"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            style="@style/Widget.Material3.Button.TonalButton"
-            android:text="@string/text_indent" />
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="8dp"
-        android:gravity="center_vertical"
-        android:orientation="horizontal"
-        android:layout_marginHorizontal="16dp" >
-
-        <io.legato.kazusa.ui.book.read.config.ChineseConverter
-            android:id="@+id/chinese_converter"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            style="@style/Widget.Material3.Button.TonalButton" />
-
-        <com.google.android.material.button.MaterialButton
-            android:id="@+id/tv_padding"
-            android:layout_width="wrap_content"
+        android:orientation="vertical">
+        <LinearLayout
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_weight="1"
-            style="@style/Widget.Material3.Button.TonalButton"
-            android:text="@string/padding" />
-
-        <com.google.android.material.button.MaterialButton
-            android:id="@+id/tv_tip"
-            android:layout_width="wrap_content"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            android:layout_marginHorizontal="12dp" >
+
+            <io.legato.kazusa.ui.book.read.config.TextFontWeightConverter
+                android:id="@+id/text_font_weight_converter"
+                style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
+                android:layout_width="72dp"
+                android:layout_height="72dp"
+                app:icon="@drawable/font_bold"
+                app:iconGravity="textTop"
+                android:text="@string/font_weight_text" />
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="1"/>
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/tv_text_font"
+                android:layout_width="72dp"
+                android:layout_height="72dp"
+                style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
+                app:icon="@drawable/font_style"
+                app:iconGravity="textTop"
+                android:text="@string/text_font" />
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="1"/>
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/tv_text_indent"
+                android:layout_width="72dp"
+                android:layout_height="72dp"
+                style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
+                app:icon="@drawable/ic_segment"
+                app:iconGravity="textTop"
+                android:text="@string/text_indent" />
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="1"/>
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/tv_padding"
+                android:layout_width="72dp"
+                android:layout_height="72dp"
+                style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
+                app:icon="@drawable/ic_padding"
+                app:iconGravity="textTop"
+                android:text="@string/padding" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_weight="1"
-            style="@style/Widget.Material3.Button.TonalButton"
-            android:text="@string/information" />
-
+            android:layout_marginTop="8dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            android:layout_marginHorizontal="12dp" >
+
+            <io.legato.kazusa.ui.book.read.config.ChineseConverter
+                android:id="@+id/chinese_converter"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                style="@style/Widget.Material3.Button.IconButton.Outlined" />
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/tv_tip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                style="@style/Widget.Material3.Button.IconButton.Outlined"
+                android:text="@string/information" />
+
+        </LinearLayout>
     </LinearLayout>
 
     <io.legato.kazusa.ui.widget.DetailSeekBar
@@ -140,129 +168,135 @@
         android:layout_marginVertical="8dp"
         android:background="@color/btn_bg_press" />
 
-    <TextView
-        android:id="@+id/tv_page_anim"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginBottom="4dp"
-        android:text="@string/page_anim"
-        android:textSize="12sp" />
-
-    <HorizontalScrollView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:scrollbars="none">
-
-    <com.google.android.material.chip.ChipGroup
-        android:id="@+id/rg_page_anim"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:paddingHorizontal="16dp"
-        app:singleLine="true"
-        app:singleSelection="true"
-        app:selectionRequired="true">
-
-        <com.google.android.material.chip.Chip
-            android:id="@+id/rb_anim0"
-            style="@style/Widget.Material3.Chip.Filter"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/page_anim_cover"
-             />
-
-        <!-- 滑动动画 Chip -->
-        <com.google.android.material.chip.Chip
-            android:id="@+id/rb_anim1"
-            style="@style/Widget.Material3.Chip.Filter"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_margin="4dp"
-            android:text="@string/page_anim_slide"
-            app:chipStrokeWidth="1dp" />
-
-        <!-- 仿真翻页 Chip -->
-        <com.google.android.material.chip.Chip
-            android:id="@+id/rb_simulation_anim"
-            style="@style/Widget.Material3.Chip.Filter"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_margin="4dp"
-            android:text="@string/page_anim_simulation"
-            app:chipStrokeWidth="1dp" />
-
-        <!-- 滚动动画 Chip -->
-        <com.google.android.material.chip.Chip
-            android:id="@+id/rb_scroll_anim"
-            style="@style/Widget.Material3.Chip.Filter"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_margin="4dp"
-            android:text="@string/page_anim_scroll"
-            app:chipStrokeWidth="1dp" />
-
-        <!-- 无动画 Chip -->
-        <com.google.android.material.chip.Chip
-            android:id="@+id/rb_no_anim"
-            style="@style/Widget.Material3.Chip.Filter"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_margin="4dp"
-            android:text="@string/page_anim_none"
-            app:chipStrokeWidth="1dp" />
-
-    </com.google.android.material.chip.ChipGroup>
-    </HorizontalScrollView>
-
-    <View
-        android:id="@+id/vw_bg_fg1"
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginVertical="8dp"
-        android:background="@color/btn_bg_press" />
-
     <LinearLayout
+        android:id="@+id/set_bottom_bar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:gravity="center_vertical"
-        android:orientation="horizontal">
-
+        android:orientation="vertical">
         <TextView
-            android:id="@+id/tv_bg_ts"
-            android:layout_width="0dp"
+            android:id="@+id/tv_page_anim"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginStart="16dp"
-            android:layout_weight="1"
-            android:alpha="0.75"
-            android:text="@string/text_bg_style"
+            android:layout_marginHorizontal="16dp"
+            android:layout_marginBottom="4dp"
+            android:text="@string/page_anim"
             android:textSize="12sp" />
 
-        <TextView
-            android:id="@+id/tv_share_layout"
-            android:layout_width="wrap_content"
+        <HorizontalScrollView
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:text="@string/share_layout" />
-
-        <com.google.android.material.checkbox.MaterialCheckBox
-            android:id="@+id/cb_share_layout"
-            android:layout_width="20dp"
-            android:layout_height="20dp"
-            android:layout_marginStart="6dp"
-            android:layout_marginEnd="16dp" />
+            android:scrollbars="none">
+
+            <com.google.android.material.chip.ChipGroup
+                android:id="@+id/rg_page_anim"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingHorizontal="16dp"
+                app:singleLine="true"
+                app:singleSelection="true"
+                app:selectionRequired="true">
+
+                <com.google.android.material.chip.Chip
+                    android:id="@+id/rb_anim0"
+                    style="@style/Widget.Material3.Chip.Filter"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/page_anim_cover"
+                    />
+
+                <!-- 滑动动画 Chip -->
+                <com.google.android.material.chip.Chip
+                    android:id="@+id/rb_anim1"
+                    style="@style/Widget.Material3.Chip.Filter"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_margin="4dp"
+                    android:text="@string/page_anim_slide"
+                    app:chipStrokeWidth="1dp" />
+
+                <!-- 仿真翻页 Chip -->
+                <com.google.android.material.chip.Chip
+                    android:id="@+id/rb_simulation_anim"
+                    style="@style/Widget.Material3.Chip.Filter"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_margin="4dp"
+                    android:text="@string/page_anim_simulation"
+                    app:chipStrokeWidth="1dp" />
+
+                <!-- 滚动动画 Chip -->
+                <com.google.android.material.chip.Chip
+                    android:id="@+id/rb_scroll_anim"
+                    style="@style/Widget.Material3.Chip.Filter"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_margin="4dp"
+                    android:text="@string/page_anim_scroll"
+                    app:chipStrokeWidth="1dp" />
+
+                <!-- 无动画 Chip -->
+                <com.google.android.material.chip.Chip
+                    android:id="@+id/rb_no_anim"
+                    style="@style/Widget.Material3.Chip.Filter"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_margin="4dp"
+                    android:text="@string/page_anim_none"
+                    app:chipStrokeWidth="1dp" />
+
+            </com.google.android.material.chip.ChipGroup>
+        </HorizontalScrollView>
 
+        <View
+            android:id="@+id/vw_bg_fg1"
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:layout_marginHorizontal="16dp"
+            android:layout_marginVertical="8dp"
+            android:background="@color/btn_bg_press" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <TextView
+                android:id="@+id/tv_bg_ts"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="16dp"
+                android:layout_weight="1"
+                android:alpha="0.75"
+                android:text="@string/text_bg_style"
+                android:textSize="12sp" />
+
+            <TextView
+                android:id="@+id/tv_share_layout"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/share_layout" />
+
+            <com.google.android.material.checkbox.MaterialCheckBox
+                android:id="@+id/cb_share_layout"
+                android:layout_width="20dp"
+                android:layout_height="20dp"
+                android:layout_marginStart="6dp"
+                android:layout_marginEnd="16dp" />
+
+        </LinearLayout>
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rv_style"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="8dp"
+            android:layout_marginBottom="16dp"
+            android:clipToPadding="false"
+            android:orientation="horizontal"
+            android:paddingHorizontal="12dp"
+            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+            tool:listitem="@layout/item_read_style" />
     </LinearLayout>
 
-    <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/rv_style"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="8dp"
-        android:layout_marginBottom="16dp"
-        android:clipToPadding="false"
-        android:orientation="horizontal"
-        android:paddingHorizontal="12dp"
-        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
-        tool:listitem="@layout/item_read_style" />
-
 </LinearLayout>

+ 4 - 4
app/src/main/res/layout/item_import_book.xml

@@ -61,9 +61,9 @@
                 android:id="@+id/tv_tag"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginRight="15dp"
-                android:paddingStart="5dp"
-                android:paddingEnd="5dp"
+                android:layout_marginEnd="16dp"
+                android:paddingStart="8dp"
+                android:paddingEnd="8dp"
                 android:text="TXT"
                 android:maxLines="1"
                 android:maxWidth="50dp"
@@ -74,7 +74,7 @@
                 android:id="@+id/tv_size"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginRight="15dp"
+                android:layout_marginEnd="16dp"
                 tools:ignore="RtlHardcoded"
                 tools:text="324kb" />
 

+ 66 - 41
app/src/main/res/layout/view_detail_seek_bar.xml

@@ -3,49 +3,74 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="horizontal"
-    android:gravity="center">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_marginVertical="4dp"
+    android:orientation="vertical">
 
-    <TextView
-        android:id="@+id/tv_seek_title"
-        android:layout_width="60dp"
+    <LinearLayout
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:singleLine="true"
-        android:text="seek"
-        tools:ignore="HardcodedText" />
-
-    <androidx.appcompat.widget.AppCompatImageView
-        android:id="@+id/iv_seek_reduce"
-        android:layout_width="24dp"
-        android:layout_height="24dp"
-        android:contentDescription="@string/reduce"
-        android:src="@drawable/ic_reduce"
-        android:background="?android:attr/selectableItemBackgroundBorderless" />
-
-    <io.legato.kazusa.lib.theme.view.ThemeSlider
-        android:id="@+id/slider"
-        android:layout_width="0dp"
-        android:layout_height="25dp"
-        android:layout_gravity="center_vertical"
-        android:layout_weight="4"
-        android:stepSize="1"/>
-
-    <androidx.appcompat.widget.AppCompatImageView
-        android:id="@+id/iv_seek_plus"
-        android:layout_width="24dp"
-        android:layout_height="24dp"
-        android:contentDescription="@string/plus"
-        android:src="@drawable/ic_add"
-        android:background="?android:attr/selectableItemBackgroundBorderless"
-        />
-
-    <TextView
-        android:id="@+id/tv_seek_value"
-        android:layout_width="60dp"
+        android:orientation="horizontal"
+        android:gravity="center_vertical"
+        android:padding="4dp">
+
+        <TextView
+            android:id="@+id/tv_seek_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:text="seek"
+            tools:ignore="HardcodedText" />
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="1"/>
+
+        <com.google.android.material.card.MaterialCardView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:cardBackgroundColor="@android:color/transparent">
+            <TextView
+                android:id="@+id/tv_seek_value"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingHorizontal="8dp"
+                android:paddingVertical="4dp"
+                android:singleLine="true"
+                android:text="0" />
+        </com.google.android.material.card.MaterialCardView>
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:gravity="end"
-        android:singleLine="true"
-        android:text="0"
-        />
+        android:orientation="horizontal"
+        android:gravity="center">
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/iv_seek_reduce"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
+            android:contentDescription="@string/reduce"
+            app:icon="@drawable/ic_reduce" />
+
+        <com.google.android.material.slider.Slider
+            android:id="@+id/slider"
+            android:layout_width="0dp"
+            android:layout_height="25dp"
+            android:layout_gravity="center_vertical"
+            android:layout_weight="4"
+            android:stepSize="1"/>
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/iv_seek_plus"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
+            android:contentDescription="@string/plus"
+            app:icon="@drawable/ic_add" />
+    </LinearLayout>
 
 </LinearLayout>

+ 144 - 0
app/src/main/res/values-night/colors.xml

@@ -145,6 +145,150 @@
     <color name="lemon_theme_surfaceContainerHigh">#2D2A21</color>
     <color name="lemon_theme_surfaceContainerHighest">#38352B</color>
 
+    <color name="koharu_theme_primary">#FFB3B4</color>
+    <color name="koharu_theme_onPrimary">#561D22</color>
+    <color name="koharu_theme_primaryContainer">#733337</color>
+    <color name="koharu_theme_onPrimaryContainer">#FFDADA</color>
+    <color name="koharu_theme_secondary">#E6BDBD</color>
+    <color name="koharu_theme_onSecondary">#44292A</color>
+    <color name="koharu_theme_secondaryContainer">#5D3F40</color>
+    <color name="koharu_theme_onSecondaryContainer">#FFDADA</color>
+    <color name="koharu_theme_tertiary">#E6C18D</color>
+    <color name="koharu_theme_onTertiary">#422C05</color>
+    <color name="koharu_theme_tertiaryContainer">#5B421A</color>
+    <color name="koharu_theme_onTertiaryContainer">#FFDDB0</color>
+    <color name="koharu_theme_error">#FFB4AB</color>
+    <color name="koharu_theme_onError">#690005</color>
+    <color name="koharu_theme_errorContainer">#93000A</color>
+    <color name="koharu_theme_onErrorContainer">#FFDAD6</color>
+    <color name="koharu_theme_background">#1A1111</color>
+    <color name="koharu_theme_onBackground">#F0DEDE</color>
+    <color name="koharu_theme_surface">#1A1111</color>
+    <color name="koharu_theme_onSurface">#F0DEDE</color>
+    <color name="koharu_theme_surfaceVariant">#524343</color>
+    <color name="koharu_theme_onSurfaceVariant">#D7C1C1</color>
+    <color name="koharu_theme_outline">#9F8C8C</color>
+    <color name="koharu_theme_outlineVariant">#524343</color>
+    <color name="koharu_theme_scrim">#000000</color>
+    <color name="koharu_theme_inverseSurface">#F0DEDE</color>
+    <color name="koharu_theme_inverseOnSurface">#382E2E</color>
+    <color name="koharu_theme_inversePrimary">#8F4A4D</color>
+    <color name="koharu_theme_primaryFixed">#FFDADA</color>
+    <color name="koharu_theme_onPrimaryFixed">#3B080E</color>
+    <color name="koharu_theme_primaryFixedDim">#FFB3B4</color>
+    <color name="koharu_theme_onPrimaryFixedVariant">#733337</color>
+    <color name="koharu_theme_secondaryFixed">#FFDADA</color>
+    <color name="koharu_theme_onSecondaryFixed">#2C1516</color>
+    <color name="koharu_theme_secondaryFixedDim">#E6BDBD</color>
+    <color name="koharu_theme_onSecondaryFixedVariant">#5D3F40</color>
+    <color name="koharu_theme_tertiaryFixed">#FFDDB0</color>
+    <color name="koharu_theme_onTertiaryFixed">#291800</color>
+    <color name="koharu_theme_tertiaryFixedDim">#E6C18D</color>
+    <color name="koharu_theme_onTertiaryFixedVariant">#5B421A</color>
+    <color name="koharu_theme_surfaceDim">#1A1111</color>
+    <color name="koharu_theme_surfaceBright">#413737</color>
+    <color name="koharu_theme_surfaceContainerLowest">#140C0C</color>
+    <color name="koharu_theme_surfaceContainerLow">#221919</color>
+    <color name="koharu_theme_surfaceContainer">#271D1D</color>
+    <color name="koharu_theme_surfaceContainerHigh">#322828</color>
+    <color name="koharu_theme_surfaceContainerHighest">#3D3232</color>
+
+    <color name="yuuka_theme_primary">#BFC2FF</color>
+    <color name="yuuka_theme_onPrimary">#272B60</color>
+    <color name="yuuka_theme_primaryContainer">#3E4278</color>
+    <color name="yuuka_theme_onPrimaryContainer">#E0E0FF</color>
+    <color name="yuuka_theme_secondary">#C5C4DD</color>
+    <color name="yuuka_theme_onSecondary">#2E2F42</color>
+    <color name="yuuka_theme_secondaryContainer">#444559</color>
+    <color name="yuuka_theme_onSecondaryContainer">#E1E0F9</color>
+    <color name="yuuka_theme_tertiary">#E8B9D5</color>
+    <color name="yuuka_theme_onTertiary">#46263B</color>
+    <color name="yuuka_theme_tertiaryContainer">#5E3C52</color>
+    <color name="yuuka_theme_onTertiaryContainer">#FFD8EE</color>
+    <color name="yuuka_theme_error">#FFB4AB</color>
+    <color name="yuuka_theme_onError">#690005</color>
+    <color name="yuuka_theme_errorContainer">#93000A</color>
+    <color name="yuuka_theme_onErrorContainer">#FFDAD6</color>
+    <color name="yuuka_theme_background">#131318</color>
+    <color name="yuuka_theme_onBackground">#E4E1E9</color>
+    <color name="yuuka_theme_surface">#131318</color>
+    <color name="yuuka_theme_onSurface">#E4E1E9</color>
+    <color name="yuuka_theme_surfaceVariant">#46464F</color>
+    <color name="yuuka_theme_onSurfaceVariant">#C7C5D0</color>
+    <color name="yuuka_theme_outline">#918F9A</color>
+    <color name="yuuka_theme_outlineVariant">#46464F</color>
+    <color name="yuuka_theme_scrim">#000000</color>
+    <color name="yuuka_theme_inverseSurface">#E4E1E9</color>
+    <color name="yuuka_theme_inverseOnSurface">#303036</color>
+    <color name="yuuka_theme_inversePrimary">#565992</color>
+    <color name="yuuka_theme_primaryFixed">#E0E0FF</color>
+    <color name="yuuka_theme_onPrimaryFixed">#11144B</color>
+    <color name="yuuka_theme_primaryFixedDim">#BFC2FF</color>
+    <color name="yuuka_theme_onPrimaryFixedVariant">#3E4278</color>
+    <color name="yuuka_theme_secondaryFixed">#E1E0F9</color>
+    <color name="yuuka_theme_onSecondaryFixed">#191A2C</color>
+    <color name="yuuka_theme_secondaryFixedDim">#C5C4DD</color>
+    <color name="yuuka_theme_onSecondaryFixedVariant">#444559</color>
+    <color name="yuuka_theme_tertiaryFixed">#FFD8EE</color>
+    <color name="yuuka_theme_onTertiaryFixed">#2E1126</color>
+    <color name="yuuka_theme_tertiaryFixedDim">#E8B9D5</color>
+    <color name="yuuka_theme_onTertiaryFixedVariant">#5E3C52</color>
+    <color name="yuuka_theme_surfaceDim">#131318</color>
+    <color name="yuuka_theme_surfaceBright">#39393F</color>
+    <color name="yuuka_theme_surfaceContainerLowest">#0E0E13</color>
+    <color name="yuuka_theme_surfaceContainerLow">#1B1B21</color>
+    <color name="yuuka_theme_surfaceContainer">#1F1F25</color>
+    <color name="yuuka_theme_surfaceContainerHigh">#2A292F</color>
+    <color name="yuuka_theme_surfaceContainerHighest">#34343A</color>
+
+    <color name="phoebe_theme_primary">#D9C76F</color>
+    <color name="phoebe_theme_onPrimary">#383000</color>
+    <color name="phoebe_theme_primaryContainer">#524700</color>
+    <color name="phoebe_theme_onPrimaryContainer">#F6E388</color>
+    <color name="phoebe_theme_secondary">#B1C5FF</color>
+    <color name="phoebe_theme_onSecondary">#162E60</color>
+    <color name="phoebe_theme_secondaryContainer">#2F4578</color>
+    <color name="phoebe_theme_onSecondaryContainer">#D9E2FF</color>
+    <color name="phoebe_theme_tertiary">#86D1EA</color>
+    <color name="phoebe_theme_onTertiary">#003642</color>
+    <color name="phoebe_theme_tertiaryContainer">#004E5F</color>
+    <color name="phoebe_theme_onTertiaryContainer">#B3EBFF</color>
+    <color name="phoebe_theme_error">#FFB4AB</color>
+    <color name="phoebe_theme_onError">#690005</color>
+    <color name="phoebe_theme_errorContainer">#93000A</color>
+    <color name="phoebe_theme_onErrorContainer">#FFDAD6</color>
+    <color name="phoebe_theme_background">#15130C</color>
+    <color name="phoebe_theme_onBackground">#E8E2D4</color>
+    <color name="phoebe_theme_surface">#15130C</color>
+    <color name="phoebe_theme_onSurface">#E8E2D4</color>
+    <color name="phoebe_theme_surfaceVariant">#4A4739</color>
+    <color name="phoebe_theme_onSurfaceVariant">#CCC6B4</color>
+    <color name="phoebe_theme_outline">#969180</color>
+    <color name="phoebe_theme_outlineVariant">#4A4739</color>
+    <color name="phoebe_theme_scrim">#000000</color>
+    <color name="phoebe_theme_inverseSurface">#E8E2D4</color>
+    <color name="phoebe_theme_inverseOnSurface">#333027</color>
+    <color name="phoebe_theme_inversePrimary">#6B5E10</color>
+    <color name="phoebe_theme_primaryFixed">#F6E388</color>
+    <color name="phoebe_theme_onPrimaryFixed">#211B00</color>
+    <color name="phoebe_theme_primaryFixedDim">#D9C76F</color>
+    <color name="phoebe_theme_onPrimaryFixedVariant">#524700</color>
+    <color name="phoebe_theme_secondaryFixed">#D9E2FF</color>
+    <color name="phoebe_theme_onSecondaryFixed">#001946</color>
+    <color name="phoebe_theme_secondaryFixedDim">#B1C5FF</color>
+    <color name="phoebe_theme_onSecondaryFixedVariant">#2F4578</color>
+    <color name="phoebe_theme_tertiaryFixed">#B3EBFF</color>
+    <color name="phoebe_theme_onTertiaryFixed">#001F27</color>
+    <color name="phoebe_theme_tertiaryFixedDim">#86D1EA</color>
+    <color name="phoebe_theme_onTertiaryFixedVariant">#004E5F</color>
+    <color name="phoebe_theme_surfaceDim">#15130C</color>
+    <color name="phoebe_theme_surfaceBright">#3C3930</color>
+    <color name="phoebe_theme_surfaceContainerLowest">#100E07</color>
+    <color name="phoebe_theme_surfaceContainerLow">#1E1C13</color>
+    <color name="phoebe_theme_surfaceContainer">#222017</color>
+    <color name="phoebe_theme_surfaceContainerHigh">#2C2A21</color>
+    <color name="phoebe_theme_surfaceContainerHighest">#37352B</color>
+
     <color name="disabled">@color/md_dark_disabled</color>
 
     <color name="background_prefs">#10303030</color>

+ 3 - 0
app/src/main/res/values/array_values.xml

@@ -30,6 +30,9 @@
         <item>1</item>
         <item>2</item>
         <item>3</item>
+        <item>4</item>
+        <item>5</item>
+        <item>6</item>
     </string-array>
 
     <string-array name="screen_direction_value">

+ 3 - 0
app/src/main/res/values/arrays.xml

@@ -58,6 +58,9 @@
 		<item>草野</item>
 		<item>柠檬</item>
 		<item>黑白</item>
+		<item>Koharu</item>
+		<item>Yuuka</item>
+		<item>Phoebe</item>
 	</string-array>
 
 

+ 147 - 0
app/src/main/res/values/colors.xml

@@ -148,6 +148,153 @@
     <color name="lemon_theme_surfaceContainerHigh">#EEE8DA</color>
     <color name="lemon_theme_surfaceContainerHighest">#E8E2D4</color>
 
+    <!--    禁止色色 -->
+    <color name="koharu_theme_primary">#8F4A4D</color>
+    <color name="koharu_theme_onPrimary">#FFFFFF</color>
+    <color name="koharu_theme_primaryContainer">#FFDADA</color>
+    <color name="koharu_theme_onPrimaryContainer">#733337</color>
+    <color name="koharu_theme_secondary">#765657</color>
+    <color name="koharu_theme_onSecondary">#FFFFFF</color>
+    <color name="koharu_theme_secondaryContainer">#FFDADA</color>
+    <color name="koharu_theme_onSecondaryContainer">#5D3F40</color>
+    <color name="koharu_theme_tertiary">#755A2F</color>
+    <color name="koharu_theme_onTertiary">#FFFFFF</color>
+    <color name="koharu_theme_tertiaryContainer">#FFDDB0</color>
+    <color name="koharu_theme_onTertiaryContainer">#5B421A</color>
+    <color name="koharu_theme_error">#BA1A1A</color>
+    <color name="koharu_theme_onError">#FFFFFF</color>
+    <color name="koharu_theme_errorContainer">#FFDAD6</color>
+    <color name="koharu_theme_onErrorContainer">#93000A</color>
+    <color name="koharu_theme_background">#FFF8F7</color>
+    <color name="koharu_theme_onBackground">#221919</color>
+    <color name="koharu_theme_surface">#FFF8F7</color>
+    <color name="koharu_theme_onSurface">#221919</color>
+    <color name="koharu_theme_surfaceVariant">#F4DDDD</color>
+    <color name="koharu_theme_onSurfaceVariant">#524343</color>
+    <color name="koharu_theme_outline">#857373</color>
+    <color name="koharu_theme_outlineVariant">#D7C1C1</color>
+    <color name="koharu_theme_scrim">#000000</color>
+    <color name="koharu_theme_inverseSurface">#382E2E</color>
+    <color name="koharu_theme_inverseOnSurface">#FFEDEC</color>
+    <color name="koharu_theme_inversePrimary">#FFB3B4</color>
+    <color name="koharu_theme_primaryFixed">#FFDADA</color>
+    <color name="koharu_theme_onPrimaryFixed">#3B080E</color>
+    <color name="koharu_theme_primaryFixedDim">#FFB3B4</color>
+    <color name="koharu_theme_onPrimaryFixedVariant">#733337</color>
+    <color name="koharu_theme_secondaryFixed">#FFDADA</color>
+    <color name="koharu_theme_onSecondaryFixed">#2C1516</color>
+    <color name="koharu_theme_secondaryFixedDim">#E6BDBD</color>
+    <color name="koharu_theme_onSecondaryFixedVariant">#5D3F40</color>
+    <color name="koharu_theme_tertiaryFixed">#FFDDB0</color>
+    <color name="koharu_theme_onTertiaryFixed">#291800</color>
+    <color name="koharu_theme_tertiaryFixedDim">#E6C18D</color>
+    <color name="koharu_theme_onTertiaryFixedVariant">#5B421A</color>
+    <color name="koharu_theme_surfaceDim">#E8D6D6</color>
+    <color name="koharu_theme_surfaceBright">#FFF8F7</color>
+    <color name="koharu_theme_surfaceContainerLowest">#FFFFFF</color>
+    <color name="koharu_theme_surfaceContainerLow">#FFF0F0</color>
+    <color name="koharu_theme_surfaceContainer">#FCEAE9</color>
+    <color name="koharu_theme_surfaceContainerHigh">#F6E4E4</color>
+    <color name="koharu_theme_surfaceContainerHighest">#F0DEDE</color>
+
+
+    <color name="yuuka_theme_primary">#565992</color>
+    <color name="yuuka_theme_onPrimary">#FFFFFF</color>
+    <color name="yuuka_theme_primaryContainer">#E0E0FF</color>
+    <color name="yuuka_theme_onPrimaryContainer">#3E4278</color>
+    <color name="yuuka_theme_secondary">#5C5D72</color>
+    <color name="yuuka_theme_onSecondary">#FFFFFF</color>
+    <color name="yuuka_theme_secondaryContainer">#E1E0F9</color>
+    <color name="yuuka_theme_onSecondaryContainer">#444559</color>
+    <color name="yuuka_theme_tertiary">#78536B</color>
+    <color name="yuuka_theme_onTertiary">#FFFFFF</color>
+    <color name="yuuka_theme_tertiaryContainer">#FFD8EE</color>
+    <color name="yuuka_theme_onTertiaryContainer">#5E3C52</color>
+    <color name="yuuka_theme_error">#BA1A1A</color>
+    <color name="yuuka_theme_onError">#FFFFFF</color>
+    <color name="yuuka_theme_errorContainer">#FFDAD6</color>
+    <color name="yuuka_theme_onErrorContainer">#93000A</color>
+    <color name="yuuka_theme_background">#FBF8FF</color>
+    <color name="yuuka_theme_onBackground">#1B1B21</color>
+    <color name="yuuka_theme_surface">#FBF8FF</color>
+    <color name="yuuka_theme_onSurface">#1B1B21</color>
+    <color name="yuuka_theme_surfaceVariant">#E4E1EC</color>
+    <color name="yuuka_theme_onSurfaceVariant">#46464F</color>
+    <color name="yuuka_theme_outline">#777680</color>
+    <color name="yuuka_theme_outlineVariant">#C7C5D0</color>
+    <color name="yuuka_theme_scrim">#000000</color>
+    <color name="yuuka_theme_inverseSurface">#303036</color>
+    <color name="yuuka_theme_inverseOnSurface">#F2EFF7</color>
+    <color name="yuuka_theme_inversePrimary">#BFC2FF</color>
+    <color name="yuuka_theme_primaryFixed">#E0E0FF</color>
+    <color name="yuuka_theme_onPrimaryFixed">#11144B</color>
+    <color name="yuuka_theme_primaryFixedDim">#BFC2FF</color>
+    <color name="yuuka_theme_onPrimaryFixedVariant">#3E4278</color>
+    <color name="yuuka_theme_secondaryFixed">#E1E0F9</color>
+    <color name="yuuka_theme_onSecondaryFixed">#191A2C</color>
+    <color name="yuuka_theme_secondaryFixedDim">#C5C4DD</color>
+    <color name="yuuka_theme_onSecondaryFixedVariant">#444559</color>
+    <color name="yuuka_theme_tertiaryFixed">#FFD8EE</color>
+    <color name="yuuka_theme_onTertiaryFixed">#2E1126</color>
+    <color name="yuuka_theme_tertiaryFixedDim">#E8B9D5</color>
+    <color name="yuuka_theme_onTertiaryFixedVariant">#5E3C52</color>
+    <color name="yuuka_theme_surfaceDim">#DBD9E0</color>
+    <color name="yuuka_theme_surfaceBright">#FBF8FF</color>
+    <color name="yuuka_theme_surfaceContainerLowest">#FFFFFF</color>
+    <color name="yuuka_theme_surfaceContainerLow">#F5F2FA</color>
+    <color name="yuuka_theme_surfaceContainer">#F0ECF4</color>
+    <color name="yuuka_theme_surfaceContainerHigh">#EAE7EF</color>
+    <color name="yuuka_theme_surfaceContainerHighest">#E4E1E9</color>
+
+
+    <color name="phoebe_theme_primary">#6B5E10</color>
+    <color name="phoebe_theme_onPrimary">#FFFFFF</color>
+    <color name="phoebe_theme_primaryContainer">#F6E388</color>
+    <color name="phoebe_theme_onPrimaryContainer">#524700</color>
+    <color name="phoebe_theme_secondary">#475D92</color>
+    <color name="phoebe_theme_onSecondary">#FFFFFF</color>
+    <color name="phoebe_theme_secondaryContainer">#D9E2FF</color>
+    <color name="phoebe_theme_onSecondaryContainer">#2F4578</color>
+    <color name="phoebe_theme_tertiary">#01677D</color>
+    <color name="phoebe_theme_onTertiary">#FFFFFF</color>
+    <color name="phoebe_theme_tertiaryContainer">#B3EBFF</color>
+    <color name="phoebe_theme_onTertiaryContainer">#004E5F</color>
+    <color name="phoebe_theme_error">#BA1A1A</color>
+    <color name="phoebe_theme_onError">#FFFFFF</color>
+    <color name="phoebe_theme_errorContainer">#FFDAD6</color>
+    <color name="phoebe_theme_onErrorContainer">#93000A</color>
+    <color name="phoebe_theme_background">#FFF9EC</color>
+    <color name="phoebe_theme_onBackground">#1E1C13</color>
+    <color name="phoebe_theme_surface">#FFF9EC</color>
+    <color name="phoebe_theme_onSurface">#1E1C13</color>
+    <color name="phoebe_theme_surfaceVariant">#E9E2D0</color>
+    <color name="phoebe_theme_onSurfaceVariant">#4A4739</color>
+    <color name="phoebe_theme_outline">#7C7768</color>
+    <color name="phoebe_theme_outlineVariant">#CCC6B4</color>
+    <color name="phoebe_theme_scrim">#000000</color>
+    <color name="phoebe_theme_inverseSurface">#333027</color>
+    <color name="phoebe_theme_inverseOnSurface">#F6F0E2</color>
+    <color name="phoebe_theme_inversePrimary">#D9C76F</color>
+    <color name="phoebe_theme_primaryFixed">#F6E388</color>
+    <color name="phoebe_theme_onPrimaryFixed">#211B00</color>
+    <color name="phoebe_theme_primaryFixedDim">#D9C76F</color>
+    <color name="phoebe_theme_onPrimaryFixedVariant">#524700</color>
+    <color name="phoebe_theme_secondaryFixed">#D9E2FF</color>
+    <color name="phoebe_theme_onSecondaryFixed">#001946</color>
+    <color name="phoebe_theme_secondaryFixedDim">#B1C5FF</color>
+    <color name="phoebe_theme_onSecondaryFixedVariant">#2F4578</color>
+    <color name="phoebe_theme_tertiaryFixed">#B3EBFF</color>
+    <color name="phoebe_theme_onTertiaryFixed">#001F27</color>
+    <color name="phoebe_theme_tertiaryFixedDim">#86D1EA</color>
+    <color name="phoebe_theme_onTertiaryFixedVariant">#004E5F</color>
+    <color name="phoebe_theme_surfaceDim">#DFDACC</color>
+    <color name="phoebe_theme_surfaceBright">#FFF9EC</color>
+    <color name="phoebe_theme_surfaceContainerLowest">#FFFFFF</color>
+    <color name="phoebe_theme_surfaceContainerLow">#F9F3E5</color>
+    <color name="phoebe_theme_surfaceContainer">#F4EDDF</color>
+    <color name="phoebe_theme_surfaceContainerHigh">#EEE8DA</color>
+    <color name="phoebe_theme_surfaceContainerHighest">#E8E2D4</color>
+
     <color name="disabled">@color/md_light_disabled</color>
 
     <color name="divider">#66666666</color>

+ 150 - 0
app/src/main/res/values/themes.xml

@@ -185,4 +185,154 @@
         <item name="colorSurfaceContainerHighest">@color/lemon_theme_surfaceContainerHighest</item>
     </style>
 
+    <style name="Theme.Base.Koharu" parent="Base.AppTheme">
+        <item name="colorPrimary">@color/koharu_theme_primary</item>
+        <item name="colorOnPrimary">@color/koharu_theme_onPrimary</item>
+        <item name="colorPrimaryContainer">@color/koharu_theme_primaryContainer</item>
+        <item name="colorOnPrimaryContainer">@color/koharu_theme_onPrimaryContainer</item>
+        <item name="colorSecondary">@color/koharu_theme_secondary</item>
+        <item name="colorOnSecondary">@color/koharu_theme_onSecondary</item>
+        <item name="colorSecondaryContainer">@color/koharu_theme_secondaryContainer</item>
+        <item name="colorOnSecondaryContainer">@color/koharu_theme_onSecondaryContainer</item>
+        <item name="colorTertiary">@color/koharu_theme_tertiary</item>
+        <item name="colorOnTertiary">@color/koharu_theme_onTertiary</item>
+        <item name="colorTertiaryContainer">@color/koharu_theme_tertiaryContainer</item>
+        <item name="colorOnTertiaryContainer">@color/koharu_theme_onTertiaryContainer</item>
+        <item name="colorError">@color/koharu_theme_error</item>
+        <item name="colorOnError">@color/koharu_theme_onError</item>
+        <item name="colorErrorContainer">@color/koharu_theme_errorContainer</item>
+        <item name="colorOnErrorContainer">@color/koharu_theme_onErrorContainer</item>
+        <item name="android:colorBackground">@color/koharu_theme_background</item>
+        <item name="android:textColor">@color/koharu_theme_onSurface</item>
+        <item name="colorOnBackground">@color/koharu_theme_onBackground</item>
+        <item name="colorSurface">@color/koharu_theme_surface</item>
+        <item name="colorOnSurface">@color/koharu_theme_onSurface</item>
+        <item name="colorSurfaceVariant">@color/koharu_theme_surfaceVariant</item>
+        <item name="colorOnSurfaceVariant">@color/koharu_theme_onSurfaceVariant</item>
+        <item name="colorOutline">@color/koharu_theme_outline</item>
+        <item name="colorOutlineVariant">@color/koharu_theme_outlineVariant</item>
+        <item name="colorSurfaceInverse">@color/koharu_theme_inverseSurface</item>
+        <item name="colorOnSurfaceInverse">@color/koharu_theme_inverseOnSurface</item>
+        <item name="colorPrimaryInverse">@color/koharu_theme_inversePrimary</item>
+        <item name="colorPrimaryFixed">@color/koharu_theme_primaryFixed</item>
+        <item name="colorOnPrimaryFixed">@color/koharu_theme_onPrimaryFixed</item>
+        <item name="colorPrimaryFixedDim">@color/koharu_theme_primaryFixedDim</item>
+        <item name="colorOnPrimaryFixedVariant">@color/koharu_theme_onPrimaryFixedVariant</item>
+        <item name="colorSecondaryFixed">@color/koharu_theme_secondaryFixed</item>
+        <item name="colorOnSecondaryFixed">@color/koharu_theme_onSecondaryFixed</item>
+        <item name="colorSecondaryFixedDim">@color/koharu_theme_secondaryFixedDim</item>
+        <item name="colorOnSecondaryFixedVariant">@color/koharu_theme_onSecondaryFixedVariant</item>
+        <item name="colorTertiaryFixed">@color/koharu_theme_tertiaryFixed</item>
+        <item name="colorOnTertiaryFixed">@color/koharu_theme_onTertiaryFixed</item>
+        <item name="colorTertiaryFixedDim">@color/koharu_theme_tertiaryFixedDim</item>
+        <item name="colorOnTertiaryFixedVariant">@color/koharu_theme_onTertiaryFixedVariant</item>
+        <item name="colorSurfaceDim">@color/koharu_theme_surfaceDim</item>
+        <item name="colorSurfaceBright">@color/koharu_theme_surfaceBright</item>
+        <item name="colorSurfaceContainerLowest">@color/koharu_theme_surfaceContainerLowest</item>
+        <item name="colorSurfaceContainerLow">@color/koharu_theme_surfaceContainerLow</item>
+        <item name="colorSurfaceContainer">@color/koharu_theme_surfaceContainer</item>
+        <item name="colorSurfaceContainerHigh">@color/koharu_theme_surfaceContainerHigh</item>
+        <item name="colorSurfaceContainerHighest">@color/koharu_theme_surfaceContainerHighest</item>
+    </style>
+
+    <style name="Theme.Base.Yuuka" parent="Base.AppTheme">
+        <item name="colorPrimary">@color/yuuka_theme_primary</item>
+        <item name="colorOnPrimary">@color/yuuka_theme_onPrimary</item>
+        <item name="colorPrimaryContainer">@color/yuuka_theme_primaryContainer</item>
+        <item name="colorOnPrimaryContainer">@color/yuuka_theme_onPrimaryContainer</item>
+        <item name="colorSecondary">@color/yuuka_theme_secondary</item>
+        <item name="colorOnSecondary">@color/yuuka_theme_onSecondary</item>
+        <item name="colorSecondaryContainer">@color/yuuka_theme_secondaryContainer</item>
+        <item name="colorOnSecondaryContainer">@color/yuuka_theme_onSecondaryContainer</item>
+        <item name="colorTertiary">@color/yuuka_theme_tertiary</item>
+        <item name="colorOnTertiary">@color/yuuka_theme_onTertiary</item>
+        <item name="colorTertiaryContainer">@color/yuuka_theme_tertiaryContainer</item>
+        <item name="colorOnTertiaryContainer">@color/yuuka_theme_onTertiaryContainer</item>
+        <item name="colorError">@color/yuuka_theme_error</item>
+        <item name="colorOnError">@color/yuuka_theme_onError</item>
+        <item name="colorErrorContainer">@color/yuuka_theme_errorContainer</item>
+        <item name="colorOnErrorContainer">@color/yuuka_theme_onErrorContainer</item>
+        <item name="android:colorBackground">@color/yuuka_theme_background</item>
+        <item name="android:textColor">@color/yuuka_theme_onSurface</item>
+        <item name="colorOnBackground">@color/yuuka_theme_onBackground</item>
+        <item name="colorSurface">@color/yuuka_theme_surface</item>
+        <item name="colorOnSurface">@color/yuuka_theme_onSurface</item>
+        <item name="colorSurfaceVariant">@color/yuuka_theme_surfaceVariant</item>
+        <item name="colorOnSurfaceVariant">@color/yuuka_theme_onSurfaceVariant</item>
+        <item name="colorOutline">@color/yuuka_theme_outline</item>
+        <item name="colorOutlineVariant">@color/yuuka_theme_outlineVariant</item>
+        <item name="colorSurfaceInverse">@color/yuuka_theme_inverseSurface</item>
+        <item name="colorOnSurfaceInverse">@color/yuuka_theme_inverseOnSurface</item>
+        <item name="colorPrimaryInverse">@color/yuuka_theme_inversePrimary</item>
+        <item name="colorPrimaryFixed">@color/yuuka_theme_primaryFixed</item>
+        <item name="colorOnPrimaryFixed">@color/yuuka_theme_onPrimaryFixed</item>
+        <item name="colorPrimaryFixedDim">@color/yuuka_theme_primaryFixedDim</item>
+        <item name="colorOnPrimaryFixedVariant">@color/yuuka_theme_onPrimaryFixedVariant</item>
+        <item name="colorSecondaryFixed">@color/yuuka_theme_secondaryFixed</item>
+        <item name="colorOnSecondaryFixed">@color/yuuka_theme_onSecondaryFixed</item>
+        <item name="colorSecondaryFixedDim">@color/yuuka_theme_secondaryFixedDim</item>
+        <item name="colorOnSecondaryFixedVariant">@color/yuuka_theme_onSecondaryFixedVariant</item>
+        <item name="colorTertiaryFixed">@color/yuuka_theme_tertiaryFixed</item>
+        <item name="colorOnTertiaryFixed">@color/yuuka_theme_onTertiaryFixed</item>
+        <item name="colorTertiaryFixedDim">@color/yuuka_theme_tertiaryFixedDim</item>
+        <item name="colorOnTertiaryFixedVariant">@color/yuuka_theme_onTertiaryFixedVariant</item>
+        <item name="colorSurfaceDim">@color/yuuka_theme_surfaceDim</item>
+        <item name="colorSurfaceBright">@color/yuuka_theme_surfaceBright</item>
+        <item name="colorSurfaceContainerLowest">@color/yuuka_theme_surfaceContainerLowest</item>
+        <item name="colorSurfaceContainerLow">@color/yuuka_theme_surfaceContainerLow</item>
+        <item name="colorSurfaceContainer">@color/yuuka_theme_surfaceContainer</item>
+        <item name="colorSurfaceContainerHigh">@color/yuuka_theme_surfaceContainerHigh</item>
+        <item name="colorSurfaceContainerHighest">@color/yuuka_theme_surfaceContainerHighest</item>
+    </style>
+
+    <style name="Theme.Base.Phoebe" parent="Base.AppTheme">
+        <item name="colorPrimary">@color/phoebe_theme_primary</item>
+        <item name="colorOnPrimary">@color/phoebe_theme_onPrimary</item>
+        <item name="colorPrimaryContainer">@color/phoebe_theme_primaryContainer</item>
+        <item name="colorOnPrimaryContainer">@color/phoebe_theme_onPrimaryContainer</item>
+        <item name="colorSecondary">@color/phoebe_theme_secondary</item>
+        <item name="colorOnSecondary">@color/phoebe_theme_onSecondary</item>
+        <item name="colorSecondaryContainer">@color/phoebe_theme_secondaryContainer</item>
+        <item name="colorOnSecondaryContainer">@color/phoebe_theme_onSecondaryContainer</item>
+        <item name="colorTertiary">@color/phoebe_theme_tertiary</item>
+        <item name="colorOnTertiary">@color/phoebe_theme_onTertiary</item>
+        <item name="colorTertiaryContainer">@color/phoebe_theme_tertiaryContainer</item>
+        <item name="colorOnTertiaryContainer">@color/phoebe_theme_onTertiaryContainer</item>
+        <item name="colorError">@color/phoebe_theme_error</item>
+        <item name="colorOnError">@color/phoebe_theme_onError</item>
+        <item name="colorErrorContainer">@color/phoebe_theme_errorContainer</item>
+        <item name="colorOnErrorContainer">@color/phoebe_theme_onErrorContainer</item>
+        <item name="android:colorBackground">@color/phoebe_theme_background</item>
+        <item name="android:textColor">@color/phoebe_theme_onSurface</item>
+        <item name="colorOnBackground">@color/phoebe_theme_onBackground</item>
+        <item name="colorSurface">@color/phoebe_theme_surface</item>
+        <item name="colorOnSurface">@color/phoebe_theme_onSurface</item>
+        <item name="colorSurfaceVariant">@color/phoebe_theme_surfaceVariant</item>
+        <item name="colorOnSurfaceVariant">@color/phoebe_theme_onSurfaceVariant</item>
+        <item name="colorOutline">@color/phoebe_theme_outline</item>
+        <item name="colorOutlineVariant">@color/phoebe_theme_outlineVariant</item>
+        <item name="colorSurfaceInverse">@color/phoebe_theme_inverseSurface</item>
+        <item name="colorOnSurfaceInverse">@color/phoebe_theme_inverseOnSurface</item>
+        <item name="colorPrimaryInverse">@color/phoebe_theme_inversePrimary</item>
+        <item name="colorPrimaryFixed">@color/phoebe_theme_primaryFixed</item>
+        <item name="colorOnPrimaryFixed">@color/phoebe_theme_onPrimaryFixed</item>
+        <item name="colorPrimaryFixedDim">@color/phoebe_theme_primaryFixedDim</item>
+        <item name="colorOnPrimaryFixedVariant">@color/phoebe_theme_onPrimaryFixedVariant</item>
+        <item name="colorSecondaryFixed">@color/phoebe_theme_secondaryFixed</item>
+        <item name="colorOnSecondaryFixed">@color/phoebe_theme_onSecondaryFixed</item>
+        <item name="colorSecondaryFixedDim">@color/phoebe_theme_secondaryFixedDim</item>
+        <item name="colorOnSecondaryFixedVariant">@color/phoebe_theme_onSecondaryFixedVariant</item>
+        <item name="colorTertiaryFixed">@color/phoebe_theme_tertiaryFixed</item>
+        <item name="colorOnTertiaryFixed">@color/phoebe_theme_onTertiaryFixed</item>
+        <item name="colorTertiaryFixedDim">@color/phoebe_theme_tertiaryFixedDim</item>
+        <item name="colorOnTertiaryFixedVariant">@color/phoebe_theme_onTertiaryFixedVariant</item>
+        <item name="colorSurfaceDim">@color/phoebe_theme_surfaceDim</item>
+        <item name="colorSurfaceBright">@color/phoebe_theme_surfaceBright</item>
+        <item name="colorSurfaceContainerLowest">@color/phoebe_theme_surfaceContainerLowest</item>
+        <item name="colorSurfaceContainerLow">@color/phoebe_theme_surfaceContainerLow</item>
+        <item name="colorSurfaceContainer">@color/phoebe_theme_surfaceContainer</item>
+        <item name="colorSurfaceContainerHigh">@color/phoebe_theme_surfaceContainerHigh</item>
+        <item name="colorSurfaceContainerHighest">@color/phoebe_theme_surfaceContainerHighest</item>
+    </style>
+
 </resources>