Quellcode durchsuchen

Added dark theme switcher in main menu

Vadik Sirekanyan vor 7 Jahren
Ursprung
Commit
e0dce00415

+ 9 - 0
app/src/main/java/me/vadik/knigopis/Configuration.kt

@@ -4,12 +4,15 @@ import android.content.Context
 
 private const val PREFS_NAME = "knigopis-dev"
 private const val DEV_MODE_KEY = "dev-mode"
+private const val DARK_THEME_KEY = "dark-theme"
 private const val SORT_MODE_KEY = "sort-mode"
 
 interface Configuration {
 
     var isDevMode: Boolean
 
+    var isDarkTheme: Boolean
+
     var sortingMode: Int
 
 }
@@ -24,6 +27,12 @@ class ConfigurationImpl(context: Context) : Configuration {
             prefs.edit().putBoolean(DEV_MODE_KEY, enabled).apply()
         }
 
+    override var isDarkTheme: Boolean
+        get() = prefs.getBoolean(DARK_THEME_KEY, false)
+        set(enabled) {
+            prefs.edit().putBoolean(DARK_THEME_KEY, enabled).apply()
+        }
+
     override var sortingMode: Int
         get() = prefs.getInt(SORT_MODE_KEY, 0)
         set(mode) {

+ 11 - 2
app/src/main/java/me/vadik/knigopis/MainActivity.kt

@@ -86,8 +86,8 @@ class MainActivity : AppCompatActivity(), Router {
     private lateinit var currentTab: CurrentTab
 
     override fun onCreate(savedInstanceState: Bundle?) {
-        if (config.isDevMode) {
-            setTheme(R.style.DevTheme)
+        if (config.isDarkTheme) {
+            setTheme(R.style.DarkAppTheme)
         }
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
@@ -284,11 +284,20 @@ class MainActivity : AppCompatActivity(), Router {
                     AlertDialog.Builder(this).setView(dialogView).show()
                     true
                 }
+                R.id.option_dark_theme -> {
+                    item.isChecked = !item.isChecked
+                    config.isDarkTheme = item.isChecked
+                    recreate()
+                    true
+                }
                 else -> false
             }
         }
         loginOption = toolbar.menu.findItem(R.id.option_login)
         profileOption = toolbar.menu.findItem(R.id.option_profile)
+        val darkThemeOption = toolbar.menu.findItem(R.id.option_dark_theme)
+        darkThemeOption.isChecked = config.isDarkTheme
+        darkThemeOption.isVisible = BuildConfig.DEBUG // todo: remove before release
         toolbar.setOnClickListener {
             if (currentTab == HOME_TAB) {
                 config.sortingMode = if (config.sortingMode == 0) 1 else 0

+ 6 - 0
app/src/main/res/menu/options.xml

@@ -19,4 +19,10 @@
         android:title="@string/main.option.about"
         app:showAsAction="never" />
 
+    <item
+        android:id="@+id/option_dark_theme"
+        android:checkable="true"
+        android:title="@string/main.option.dark"
+        app:showAsAction="never" />
+
 </menu>

+ 1 - 0
app/src/main/res/values-ru/strings.xml

@@ -21,6 +21,7 @@
     <string name="main.option.login">Войти</string>
     <string name="main.option.profile">Мой профиль</string>
     <string name="main.option.about">О приложении</string>
+    <string name="main.option.dark">Тёмная тема</string>
 
     <!-- about -->
     <string name="about.text.idea">API:\nhttp://knigopis.com</string>

+ 11 - 1
app/src/main/res/values/colors.xml

@@ -2,7 +2,6 @@
 <resources>
     <color name="colorPrimary">#673AB7</color>
     <color name="colorPrimaryDark">#512DA8</color>
-    <color name="colorPrimaryDark_97">#F7512DA8</color>
     <color name="colorPrimaryLight">#9575CD</color>
     <color name="colorPrimaryLightest">#B39DDB</color>
     <color name="colorPrimary100">#D1C4E9</color>
@@ -24,4 +23,15 @@
     <color name="image_placeholder_color_dark">@color/colorPrimaryLight</color>
     <color name="ic_launcher_background">#512DA8</color>
     <color name="recycler_divider_color">@color/black_12</color>
+
+    <!-- light theme -->
+    <color name="light.text_color_primary">@color/black_87</color>
+    <color name="light.text_color_secondary">@color/black_60</color>
+    <color name="light.text_color_tertiary">@color/black_38</color>
+
+    <!-- dark theme -->
+    <color name="dark.text_color_primary">@color/white_87</color>
+    <color name="dark.text_color_secondary">@color/white_60</color>
+    <color name="dark.text_color_tertiary">@color/white_38</color>
+
 </resources>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -20,6 +20,7 @@
     <string name="main.option.login">Login</string>
     <string name="main.option.profile">Profile</string>
     <string name="main.option.about">About</string>
+    <string name="main.option.dark">Dark theme</string>
 
     <!-- about -->
     <string name="about.text.idea">API:\nhttp://knigopis.com</string>

+ 6 - 11
app/src/main/res/values/styles.xml

@@ -7,9 +7,9 @@
         <item name="android:windowBackground">@color/colorPrimary</item>
         <item name="android:listDivider">@drawable/recycler_view_divider</item>
         <item name="image_placeholder_color">@color/image_placeholder_color_light</item>
-        <item name="android:textColorPrimary">@color/black_87</item>
-        <item name="android:textColorSecondary">@color/black_60</item>
-        <item name="android:textColorTertiary">@color/black_38</item>
+        <item name="android:textColorPrimary">@color/light.text_color_primary</item>
+        <item name="android:textColorSecondary">@color/light.text_color_secondary</item>
+        <item name="android:textColorTertiary">@color/light.text_color_tertiary</item>
     </style>
 
     <style name="DarkAppTheme" parent="Theme.AppCompat.NoActionBar">
@@ -19,14 +19,9 @@
         <item name="android:windowBackground">@color/colorPrimary</item>
         <item name="android:listDivider">@drawable/recycler_view_divider</item>
         <item name="image_placeholder_color">@color/image_placeholder_color_dark</item>
-        <item name="android:textColorPrimary">@color/white_87</item>
-        <item name="android:textColorSecondary">@color/white_60</item>
-        <item name="android:textColorTertiary">@color/white_38</item>
-    </style>
-
-    <style name="DevTheme" parent="AppTheme">
-        <!--<item name="colorPrimary">#9C27B0</item>-->
-        <!--<item name="colorPrimaryDark">#7B1FA2</item>-->
+        <item name="android:textColorPrimary">@color/dark.text_color_primary</item>
+        <item name="android:textColorSecondary">@color/dark.text_color_secondary</item>
+        <item name="android:textColorTertiary">@color/dark.text_color_tertiary</item>
     </style>
 
     <style name="AppBarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />