From 176e984b56d66d1e47bd367d7dde03e4a024152c Mon Sep 17 00:00:00 2001
From: Soitora <simon.mattila@protonmail.com>
Date: Mon, 24 May 2021 17:16:32 +0200
Subject: [PATCH] Add "Midnight Dusk" and "Hot Pink" themes (#5161)

* Organize and clarify themes file

Increases clarification with better commenting, should make it easier to add or modify current themes.

* Make AMOLED its own theme category

* Tweak ripples for AMOLED

* Add "Midnight Dusk" theme

Ports it from jobobby04/TachiyomiSY.

Co-Authored-By: CrepeTF <70870719+CrepeTF@users.noreply.github.com>

* Add "Hot Pink" theme

Ports it from jobobby04/TachiyomiSY.

Co-Authored-By: OncePunchedMan <64155117+OncePunchedMan@users.noreply.github.com>

* Make AMOLED a base theme

* Final tweaks

Rename "Toolbar.Light" to "Custom.PopupTheme"
Changes placing of backgroundDusk

Removes HotPink and MidnightDusk custom Toolbars, I believe they are unnecessary.

* Rename a Midnight Dusk color

* Make AMOLED independent from Dark as a theme

Co-authored-by: CrepeTF <70870719+CrepeTF@users.noreply.github.com>
Co-authored-by: OncePunchedMan <64155117+OncePunchedMan@users.noreply.github.com>
---
 .../data/preference/PreferenceValues.kt       |   2 +
 .../ui/base/activity/BaseThemedActivity.kt    |   4 +-
 .../ui/setting/SettingsGeneralController.kt   |   8 +-
 app/src/main/res/values/colors.xml            |  38 +++
 app/src/main/res/values/strings.xml           |   2 +
 app/src/main/res/values/styles.xml            |  18 +-
 app/src/main/res/values/themes.xml            | 226 +++++++++++++++---
 7 files changed, 256 insertions(+), 42 deletions(-)

diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceValues.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceValues.kt
index 13cda3269..bdd11acc5 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceValues.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceValues.kt
@@ -24,7 +24,9 @@ object PreferenceValues {
     enum class DarkThemeVariant {
         default,
         blue,
+        midnightdusk,
         amoled,
+        hotpink,
     }
 
     /* ktlint-enable experimental:enum-entry-name-case */
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseThemedActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseThemedActivity.kt
index 11ddee568..90283f20b 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseThemedActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseThemedActivity.kt
@@ -25,7 +25,9 @@ abstract class BaseThemedActivity : AppCompatActivity() {
             when (preferences.themeDark().get()) {
                 DarkThemeVariant.default -> R.style.Theme_Tachiyomi_Dark
                 DarkThemeVariant.blue -> R.style.Theme_Tachiyomi_Dark_Blue
-                DarkThemeVariant.amoled -> R.style.Theme_Tachiyomi_Dark_Amoled
+                DarkThemeVariant.midnightdusk -> R.style.Theme_Tachiyomi_Dark_MidnightDusk
+                DarkThemeVariant.amoled -> R.style.Theme_Tachiyomi_Amoled
+                DarkThemeVariant.hotpink -> R.style.Theme_Tachiyomi_Amoled_HotPink
             }
         } else {
             when (preferences.themeLight().get()) {
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt
index 5c53a1e35..4c871d072 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt
@@ -141,12 +141,16 @@ class SettingsGeneralController : SettingsController() {
                 entriesRes = arrayOf(
                     R.string.theme_dark_default,
                     R.string.theme_dark_blue,
-                    R.string.theme_dark_amoled
+                    R.string.theme_dark_midnightdusk,
+                    R.string.theme_dark_amoled,
+                    R.string.theme_dark_amoled_hotpink
                 )
                 entryValues = arrayOf(
                     Values.DarkThemeVariant.default.name,
                     Values.DarkThemeVariant.blue.name,
-                    Values.DarkThemeVariant.amoled.name
+                    Values.DarkThemeVariant.midnightdusk.name,
+                    Values.DarkThemeVariant.amoled.name,
+                    Values.DarkThemeVariant.hotpink.name
                 )
                 defaultValue = Values.DarkThemeVariant.default.name
                 summary = "%s"
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 4c43322e9..90b4a280f 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -8,8 +8,11 @@
     <!-- Dark Application Colors -->
     <color name="colorDarkPrimary">#242529</color>
     <color name="colorDarkPrimaryDark">#202125</color>
+
+    <!-- AMOLED Application Colors -->
     <color name="colorAmoledPrimary">@color/md_black_1000</color>
 
+    <!-- Splash Color -->
     <color name="splashBackgroundColor">@color/colorPrimary</color>
 
     <!-- Light Theme -->
@@ -38,6 +41,38 @@
     <color name="dialogDark">@color/colorDarkPrimary</color>
     <color name="selectorColorDark">@color/md_blue_A200_50</color>
 
+    <!-- Midnight Dusk Theme -->
+    <color name="colorAccentDusk">#F02475</color>
+    <color name="textColorPrimaryDusk">@color/md_white_1000</color>
+    <color name="textColorSecondaryDusk">@color/md_white_1000_70</color>
+    <color name="textColorHintDusk">@color/md_white_1000_50</color>
+    <color name="dividerDusk">#12ffffff</color>
+    <color name="rippleSecondaryColorDusk">#0FF02475</color>
+    <color name="backgroundDusk">#16151D</color>
+    <color name="dialogDusk">#201F27</color>
+    <color name="selectorColorDusk">#80F02475</color>
+
+    <!-- AMOLED Theme -->
+    <color name="colorAccentAmoled">#3399FF</color>
+    <color name="textColorPrimaryAmoled">@color/md_white_1000</color>
+    <color name="textColorSecondaryAmoled">@color/md_white_1000_70</color>
+    <color name="textColorHintAmoled">@color/md_white_1000_50</color>
+    <color name="dividerAmoled">@android:color/transparent</color>
+    <color name="rippleColorAmoled">@color/md_white_1000_8</color>
+    <color name="rippleSecondaryColorAmoled">#0A3399FF</color>
+    <color name="rippleToolbarColorAmoled">@color/rippleColorAmoled</color>
+    <color name="backgroundAmoled">@color/colorAmoledPrimary</color>
+    <color name="dialogAmoled">@color/colorAmoledPrimary</color>
+    <color name="selectorColorAmoled">@color/md_blue_A200_50</color>
+
+    <!-- Hot Pink Theme -->
+    <color name="colorAccentPink">#FF3399</color>
+    <color name="textColorPrimaryPink">@color/md_white_1000</color>
+    <color name="textColorSecondaryPink">@color/md_white_1000_70</color>
+    <color name="textColorHintPink">@color/md_white_1000_50</color>
+    <color name="rippleSecondaryColorPink">#0AFF3399</color>
+    <color name="selectorColorPink">#80FF69B4</color>
+
     <!-- Reader Theme -->
     <color name="readerColorDarkPrimary">@color/colorDarkPrimary</color>
     <color name="pageNumberBackgroundLight">@color/md_grey_50_75</color>
@@ -45,12 +80,14 @@
 
     <color name="filterColorLight">#FFC107</color>
     <color name="filterColorDark">#FFEB3B</color>
+    <color name="filterColorAmoled">#FFEB3B</color>
 
     <!-- Text Colors -->
     <color name="md_black_1000_87">#DE000000</color>
     <color name="md_black_1000_54">#8A000000</color>
     <color name="md_black_1000_38">#61000000</color>
     <color name="md_black_1000_12">#1F000000</color>
+    <color name="md_black_1000_8">#14000000</color>
     <color name="md_black_1000_6">#0F000000</color>
 
     <color name="md_white_1000">#FFFFFFFF</color>
@@ -59,6 +96,7 @@
     <color name="md_white_1000_50">#80FFFFFF</color>
     <color name="md_white_1000_20">#33FFFFFF</color>
     <color name="md_white_1000_12">#1FFFFFFF</color>
+    <color name="md_white_1000_8">#14FFFFFF</color>
     <color name="md_white_1000_6">#0FFFFFFF</color>
 
     <!-- Material Design Colors -->
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 45c1b1cbe..af36ed751 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -159,7 +159,9 @@
     <string name="pref_theme_dark">Dark theme</string>
     <string name="theme_dark_default">Default</string>
     <string name="theme_dark_blue">Dark blue</string>
+    <string name="theme_dark_midnightdusk">Midnight dusk</string>
     <string name="theme_dark_amoled">AMOLED black</string>
+    <string name="theme_dark_amoled_hotpink">Hot pink</string>
     <string name="pref_start_screen">Start screen</string>
     <string name="pref_language">Language</string>
     <string name="system_default">Default</string>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 2f7d92a3e..f09c42891 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -6,11 +6,7 @@
     <!--========-->
     <style name="Theme.Toolbar" parent="@style/ThemeOverlay.MaterialComponents.ActionBar" />
 
-    <style name="Theme.Toolbar.Light" parent="Theme.Toolbar.Custom.Dark">
-        <item name="popupTheme">@style/ThemeOverlay.MaterialComponents.Light</item>
-    </style>
-
-    <style name="Theme.Toolbar.Custom" parent="@style/ThemeOverlay.MaterialComponents.ActionBar">
+    <style name="Theme.Toolbar.Custom.Light" parent="@style/ThemeOverlay.MaterialComponents.ActionBar">
         <item name="android:colorControlHighlight">?attr/rippleToolbarColor</item>
     </style>
 
@@ -18,6 +14,14 @@
         <item name="android:colorControlHighlight">?attr/rippleToolbarColor</item>
     </style>
 
+    <style name="Theme.Toolbar.Custom.Amoled" parent="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar">
+        <item name="android:colorControlHighlight">?attr/rippleToolbarColor</item>
+    </style>
+
+    <style name="Theme.Toolbar.Custom.PopupTheme" parent="Theme.Toolbar.Custom.Dark">
+        <item name="popupTheme">@style/ThemeOverlay.MaterialComponents.Light</item>
+    </style>
+
     <style name="Theme.Toolbar.Navigation" parent="Widget.AppCompat.Toolbar.Button.Navigation">
         <item name="tint">?attr/colorOnPrimary</item>
     </style>
@@ -68,6 +72,10 @@
         <item name="colorAccent">@color/colorAccentDark</item>
     </style>
 
+    <style name="Theme.AlertDialog.Amoled" parent="Theme.AlertDialog">
+        <item name="colorAccent">@color/colorAccentAmoled</item>
+    </style>
+
 
     <!--===========-->
     <!--BottomSheet-->
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 859335eef..890bff4cf 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -4,16 +4,16 @@
     <!--============-->
     <!-- Base Theme -->
     <!--============-->
-    <style name="Theme"/>
 
-    <!--==============-->
-    <!-- Light Themes -->
-    <!--=======-======-->
+    <!--== Theme ==-->
+    <style name="Theme" />
+
+    <!--== Theme base ==-->
     <style name="Theme.Base" parent="Theme.MaterialComponents.Light.NoActionBar">
         <!-- AppBar -->
         <item name="windowActionBar">false</item>
         <item name="windowNoTitle">true</item>
-
+        <!-- Disallow 'Force dark theme' -->
         <item name="android:forceDarkAllowed" tools:targetApi="Q">false</item>
 
         <!-- Theme colors -->
@@ -60,7 +60,7 @@
         <item name="actionModeStyle">@style/Theme.ActionMode</item>
         <item name="actionModeCloseButtonStyle">@style/Theme.ActionMode.CloseButton</item>
         <item name="actionModeCloseDrawable">@drawable/ic_close_24dp</item>
-        <item name="actionBarTheme">@style/Theme.Toolbar.Custom</item>
+        <item name="actionBarTheme">@style/Theme.Toolbar.Custom.Light</item>
         <item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents</item>
         <item name="toolbarNavigationButtonStyle">@style/Theme.Toolbar.Navigation</item>
         <item name="preferenceTheme">@style/PreferenceThemeCustom</item>
@@ -93,24 +93,41 @@
         <item name="colorFilterActive">@color/filterColorLight</item>
     </style>
 
-    <!--===========-->
-    <!-- Main Theme-->
-    <!--===========-->
+    <!--==============-->
+    <!-- Light Themes -->
+    <!--==============-->
+
+    <!--== Light base ==-->
     <style name="Base.Theme.Tachiyomi.Light" parent="Theme.Base">
+        <!-- Base background/text colors -->
         <item name="android:statusBarColor">?attr/colorPrimary</item>
         <item name="android:windowLightStatusBar">true</item>
+        <item name="background">@color/dialogLight</item>
     </style>
+
+    <!--== Light theme ==-->
     <style name="Theme.Tachiyomi.Light" parent="Base.Theme.Tachiyomi.Light" />
 
+    <!--== Light Blue theme ==-->
     <style name="Theme.Tachiyomi.Light.Blue">
+        <!-- Theme colors -->
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorOnPrimary">@color/textColorPrimaryDark</item>
         <item name="colorAccentOnPrimary">@color/textColorPrimaryDark</item>
         <item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
         <item name="colorFilterActive">@color/filterColorDark</item>
+
+        <!-- Base background/text colors -->
+        <item name="background">@color/colorPrimary</item>
+
+        <!-- Ripples -->
         <item name="rippleSecondaryColor">@color/md_white_1000_6</item>
         <item name="rippleToolbarColor">@color/md_white_1000_12</item>
-        <item name="actionBarTheme">@style/Theme.Toolbar.Light</item>
+
+        <!-- Themes -->
+        <item name="actionBarTheme">@style/Theme.Toolbar.Custom.PopupTheme</item>
+
+        <!-- Status/Navigation bar -->
         <item name="android:windowLightStatusBar" tools:targetApi="m">false</item>
         <item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">false</item>
     </style>
@@ -118,6 +135,8 @@
     <!--=============-->
     <!-- Dark Themes -->
     <!--=============-->
+
+    <!--== Dark base ==-->
     <style name="Theme.Base.Dark" parent="Theme.MaterialComponents.NoActionBar">
         <!-- Theme colors -->
         <item name="colorPrimary">@color/colorDarkPrimary</item>
@@ -144,6 +163,7 @@
         <item name="android:textColorSecondaryInverse">@color/textColorSecondaryLight</item>
         <item name="android:textColorHintInverse">@color/textColorHintLight</item>
         <item name="android:colorEdgeEffect">?attr/colorAccent</item>
+        <item name="background">@color/colorDarkPrimaryDark</item>
 
         <item name="android:divider">@color/dividerDark</item>
         <item name="android:listDivider">@drawable/line_divider</item>
@@ -196,81 +216,219 @@
         <item name="colorFilterActive">@color/filterColorDark</item>
     </style>
 
+    <!--== Dark theme ==-->
     <style name="Theme.Tachiyomi.Dark" parent="Theme.Base.Dark" />
 
+    <!--== Dark Blue theme ==-->
     <style name="Theme.Tachiyomi.Dark.Blue">
+        <!-- Theme colors -->
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorAccentOnPrimary">@color/textColorPrimaryDark</item>
         <item name="colorPrimaryVariant">@color/colorPrimary</item>
+
+        <!-- Base background/text colors -->
+        <item name="background">@color/colorPrimary</item>
+
+        <!-- Ripples -->
         <item name="rippleSecondaryColor">@color/md_black_1000_6</item>
         <item name="rippleToolbarColor">@color/md_black_1000_12</item>
     </style>
 
-    <style name="Theme.Tachiyomi.Dark.Amoled">
-        <item name="colorPrimary">@color/colorAmoledPrimary</item>
-        <item name="colorPrimaryVariant">@color/colorAmoledPrimary</item>
-        <item name="colorSurface">@color/colorAmoledPrimary</item>
+    <!--== Midnight Dusk theme ==-->
+    <style name="Theme.Tachiyomi.Dark.MidnightDusk" parent="Theme.Base.Dark">
+        <!-- Theme colors -->
+        <item name="colorPrimary">@color/dialogDusk</item>
+        <item name="colorOnPrimary">@color/textColorPrimaryDusk</item>
+        <item name="colorAccentOnPrimary">@color/colorAccentDusk</item>
+        <item name="colorPrimaryVariant">@color/dialogDusk</item>
+        <item name="colorSecondary">@color/colorAccentDusk</item>
+        <item name="colorOnSecondary">@color/textColorPrimaryDusk</item>
+        <item name="colorSurface">@color/dialogDusk</item>
+        <item name="colorOnSurface">@color/textColorPrimaryDusk</item>
+        <item name="colorOnBackground">@color/textColorPrimaryDusk</item>
+        <item name="colorAccent">@color/colorAccentDusk</item>
 
-        <item name="android:colorBackground">@color/colorAmoledPrimary</item>
+        <!-- Base background/text colors -->
+        <item name="android:colorBackground">@color/backgroundDusk</item>
+        <item name="background">@color/backgroundDusk</item>
 
-        <!-- Some ROMs make black navbars white (e.g. OxygenOS) -->
-        <item name="android:navigationBarColor">#000001</item>
+        <!-- Ripples -->
+        <item name="rippleSecondaryColor">@color/rippleSecondaryColorDusk</item>
 
-        <!-- Custom Attributes-->
+        <!-- Custom Attributes -->
         <item name="colorLibrarySelection">@color/selectorColorDark</item>
         <item name="colorLibrarySelectionActive">@color/selectorColorDark</item>
     </style>
 
-    <!--==============-->
-    <!-- Reader Theme -->
-    <!--==============-->
-    <style name="Theme.Base.Reader.Dark" parent="Theme.Base.Dark">
-        <item name="colorPrimary">@color/readerColorDarkPrimary</item>
-        <item name="colorOnPrimary">@color/textColorPrimaryDark</item>
-        <item name="colorPrimaryVariant">@color/readerColorDarkPrimary</item>
-        <item name="colorSurface">@color/md_black_1000</item>
+    <!--===============-->
+    <!-- AMOLED Themes -->
+    <!--===============-->
 
-        <item name="android:colorBackground">@color/md_black_1000</item>
-        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
-        <item name="android:navigationBarColor">?attr/colorPrimaryVariant</item>
+    <!--== AMOLED base ==-->
+    <style name="Theme.Base.Amoled" parent="Theme.MaterialComponents.NoActionBar">
+        <!-- Theme colors -->
+        <item name="colorPrimary">@color/colorAmoledPrimary</item>
+        <item name="colorOnPrimary">@color/textColorPrimaryAmoled</item>
+        <item name="colorAccentOnPrimary">@color/colorAccentAmoled</item>
+        <item name="colorPrimaryVariant">@color/colorAmoledPrimary</item>
+        <item name="colorSecondary">@color/colorAccentAmoled</item>
+        <item name="colorOnSecondary">@color/textColorPrimaryAmoled</item>
+        <item name="colorSurface">@color/dialogAmoled</item>
+        <item name="colorOnSurface">@color/textColorPrimaryAmoled</item>
+        <item name="colorOnBackground">@color/textColorPrimaryAmoled</item>
+        <item name="colorAccent">@color/colorAccentAmoled</item>
 
-        <item name="actionBarTheme">@style/Theme.Toolbar.Custom.Dark</item>
+        <!-- Handles RTL text -->
+        <item name="android:textAlignment">gravity</item>
+        <item name="android:textDirection">locale</item>
+
+        <!-- Base background/text colors -->
+        <item name="android:colorBackground">@color/colorAmoledPrimary</item>
+        <item name="android:textColorPrimary">@color/textColorPrimaryAmoled</item>
+        <item name="android:textColorSecondary">@color/textColorSecondaryAmoled</item>
+        <item name="android:textColorHint">@color/textColorHintAmoled</item>
+        <item name="android:textColorPrimaryInverse">@color/textColorPrimaryLight</item>
+        <item name="android:textColorSecondaryInverse">@color/textColorSecondaryLight</item>
+        <item name="android:textColorHintInverse">@color/textColorHintLight</item>
+        <item name="android:colorEdgeEffect">?attr/colorAccent</item>
+        <item name="background">@color/colorAmoledPrimary</item>
+
+        <item name="android:divider">@color/dividerAmoled</item>
+        <item name="android:listDivider">@drawable/line_divider</item>
+
+        <!-- Ripples -->
+        <item name="rippleColor">@color/rippleColorAmoled</item>
+        <item name="rippleSecondaryColor">@color/rippleSecondaryColorAmoled</item>
+        <item name="rippleToolbarColor">@color/rippleToolbarColorAmoled</item>
+
+        <!-- Themes -->
+        <item name="android:statusBarColor">?attr/colorPrimary</item>
+        <item name="android:navigationBarDividerColor" tools:targetApi="o_mr1">@null</item>
+        <item name="android:enforceNavigationBarContrast" tools:targetApi="Q">false</item>
+        <item name="windowActionModeOverlay">true</item>
+        <item name="elevationOverlayEnabled">false</item>
+        <item name="actionModeStyle">@style/Theme.ActionMode</item>
+        <item name="actionModeCloseButtonStyle">@style/Theme.ActionMode.CloseButton</item>
+        <item name="actionModeCloseDrawable">@drawable/ic_close_24dp</item>
+        <item name="actionBarTheme">@style/Theme.Toolbar.Custom.Amoled</item>
         <item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents</item>
-        <item name="switchStyle">@style/Theme.Widget.BasicSwitch</item>
+        <item name="toolbarNavigationButtonStyle">@style/Theme.Toolbar.Navigation</item>
+        <item name="preferenceTheme">@style/PreferenceThemeCustom</item>
+        <item name="dialogTheme">@style/Theme.AlertDialog.Amoled</item>
+        <item name="materialAlertDialogTheme">@style/Theme.AlertDialog.Amoled</item>
         <item name="bottomSheetDialogTheme">@style/Theme.BottomSheet</item>
+        <item name="chipStyle">@style/Theme.Widget.Chip</item>
+        <item name="buttonStyle">@style/Theme.Widget.Button</item>
+        <item name="snackbarStyle">@style/Theme.Widget.Snackbar</item>
+        <item name="snackbarButtonStyle">@style/Theme.Widget.Button</item>
+        <item name="snackbarTextViewStyle">@style/Theme.Widget.Snackbar.TextView</item>
+        <item name="textAppearanceButton">@style/TextAppearance.Widget.Button</item>
+        <item name="textInputStyle">@style/Theme.Widget.TextInputLayout.OutlinedBox</item>
+        <item name="android:itemTextAppearance">@style/TextAppearance.Widget.Menu</item>
+        <item name="swipeRefreshLayoutProgressSpinnerBackgroundColor">?attr/colorAccent</item>
+        <item name="circularProgressIndicatorStyle">@style/Theme.Widget.CircularProgressIndicator</item>
+        <item name="linearProgressIndicatorStyle">@style/Theme.Widget.LinearProgressIndicator</item>
+
+        <!-- Material Dialogs -->
+        <item name="md_background_color">?attr/colorSurface</item>
+        <item name="md_color_title">?attr/colorOnSurface</item>
+        <item name="md_color_content">?attr/colorOnSurface</item>
+        <item name="md_color_button_text">?attr/colorAccent</item>
+        <item name="md_button_casing">literal</item>
+        <item name="md_corner_radius">@dimen/dialog_radius</item>
+
+        <!-- Custom Attributes-->
+        <item name="colorLibrarySelection">@color/selectorColorAmoled</item>
+        <item name="colorLibrarySelectionActive">@color/selectorColorAmoled</item>
+        <item name="colorFilterActive">@color/filterColorAmoled</item>
+
+        <!-- Some ROMs make black navbars white (e.g. OxygenOS) -->
+        <item name="android:navigationBarColor">#000001</item>
     </style>
 
+    <!--== AMOLED theme ==-->
+    <style name="Theme.Tachiyomi.Amoled" parent="Theme.Base.Amoled" />
+
+    <!--== Hot Pink theme ==-->
+    <style name="Theme.Tachiyomi.Amoled.HotPink">
+        <!-- Theme colors -->
+        <item name="colorOnPrimary">@color/textColorPrimaryPink</item>
+        <item name="colorAccentOnPrimary">@color/colorAccentPink</item>
+        <item name="colorSecondary">@color/colorAccentPink</item>
+        <item name="colorOnSecondary">@color/textColorPrimaryPink</item>
+        <item name="colorOnSurface">@color/textColorPrimaryPink</item>
+        <item name="colorOnBackground">@color/textColorPrimaryPink</item>
+        <item name="colorAccent">@color/colorAccentPink</item>
+
+        <!-- Ripples -->
+        <item name="rippleSecondaryColor">@color/rippleSecondaryColorPink</item>
+    </style>
+
+    <!--===============-->
+    <!-- Reader Themes -->
+    <!--===============-->
+
+    <!--== Light Reader base ==-->
     <style name="Theme.Base.Reader.Light" parent="Theme.Base">
+        <!-- Theme colors -->
         <item name="colorPrimary">@color/readerColorDarkPrimary</item>
         <item name="colorOnPrimary">@color/textColorPrimaryDark</item>
         <item name="colorPrimaryVariant">@color/readerColorDarkPrimary</item>
         <item name="colorSurface">@color/md_white_1000</item>
 
+        <!-- Base background/text colors -->
         <item name="android:colorBackground">@color/md_white_1000</item>
         <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
         <item name="android:navigationBarColor">?attr/colorPrimaryVariant</item>
 
+        <!-- Themes -->
         <item name="actionBarTheme">@style/Theme.Toolbar.Custom.Dark</item>
         <item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents</item>
         <item name="switchStyle">@style/Theme.Widget.BasicSwitch</item>
         <item name="bottomSheetDialogTheme">@style/Theme.BottomSheet</item>
     </style>
 
+    <!--== Light Reader ==-->
+    <style name="Theme.Reader.Light" parent="Theme.Base.Reader.Light" />
+
+    <!--== Dark Reader base ==-->
+    <style name="Theme.Base.Reader.Dark" parent="Theme.Base.Dark">
+        <!-- Theme colors -->
+        <item name="colorPrimary">@color/readerColorDarkPrimary</item>
+        <item name="colorOnPrimary">@color/textColorPrimaryDark</item>
+        <item name="colorPrimaryVariant">@color/readerColorDarkPrimary</item>
+        <item name="colorSurface">@color/md_black_1000</item>
+
+        <!-- Base background/text colors -->
+        <item name="android:colorBackground">@color/md_black_1000</item>
+        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
+        <item name="android:navigationBarColor">?attr/colorPrimaryVariant</item>
+
+        <!-- Themes -->
+        <item name="actionBarTheme">@style/Theme.Toolbar.Custom.Dark</item>
+        <item name="actionBarPopupTheme">@style/ThemeOverlay.MaterialComponents</item>
+        <item name="switchStyle">@style/Theme.Widget.BasicSwitch</item>
+        <item name="bottomSheetDialogTheme">@style/Theme.BottomSheet</item>
+    </style>
+
+    <!--== Dark Reader ==-->
     <style name="Theme.Reader.Dark" parent="Theme.Base.Reader.Dark" />
 
+    <!--== Dark Grey Reader ==-->
     <style name="Theme.Reader.Dark.Grey" parent="Theme.Base.Reader.Dark">
         <item name="android:colorBackground">@color/backgroundDark</item>
     </style>
 
-    <style name="Theme.Reader.Light" parent="Theme.Base.Reader.Light" />
-
-
     <!--===============-->
     <!-- Launch Screen -->
     <!--===============-->
+
+    <!--== Splash theme ==-->
     <style name="Theme.Splash" parent="Theme.Tachiyomi.Light.Blue">
+        <!-- Theme colors -->
         <item name="colorBackgroundSplash">@color/colorPrimary</item>
 
+        <!-- Base background/text colors -->
         <item name="android:windowBackground">@drawable/splash_background</item>
         <item name="android:statusBarColor">?attr/colorBackgroundSplash</item>
         <item name="android:navigationBarColor">?attr/colorBackgroundSplash</item>