diff --git a/app/build.gradle b/app/build.gradle
index 66c464856..3a76edf08 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -79,8 +79,9 @@ dependencies {
//androidX
implementation 'androidx.core:core-ktx:1.2.0-alpha01'
implementation 'androidx.appcompat:appcompat:1.1.0-alpha05'
+ implementation 'androidx.preference:preference:1.1.0-alpha05'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta1'
- implementation 'com.google.android.material:material:1.1.0-alpha06'
+ implementation 'com.google.android.material:material:1.1.0-alpha07'
//lifecycle
def lifecycle_version = '2.0.0'
@@ -119,4 +120,7 @@ dependencies {
//Glide
implementation 'com.github.bumptech.glide:glide:4.9.0'
+
+ //颜色选择
+ implementation 'com.jaredrummler:colorpicker:1.1.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cdaf66439..4663ae81d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -41,6 +41,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt b/app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt
index 2029744ed..c2d39f3a7 100644
--- a/app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt
+++ b/app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt
@@ -2,11 +2,11 @@ package io.legado.app.lib.theme.prefs
import android.content.Context
import android.os.Build
-import android.preference.PreferenceCategory
import android.util.AttributeSet
-import android.view.View
import android.widget.TextView
import androidx.annotation.RequiresApi
+import androidx.preference.PreferenceCategory
+import androidx.preference.PreferenceViewHolder
import io.legado.app.lib.theme.ThemeStore
@@ -26,10 +26,13 @@ class ATEPreferenceCategory : PreferenceCategory {
constructor(context: Context) : super(context)
- override fun onBindView(view: View) {
- super.onBindView(view)
- if (view is TextView) {
- view.setTextColor(ThemeStore.accentColor(view.getContext()))//设置title文本的颜色
+ override fun onBindViewHolder(holder: PreferenceViewHolder?) {
+ super.onBindViewHolder(holder)
+ holder?.let {
+ val view = it.itemView
+ if (view is TextView) {
+ view.setTextColor(ThemeStore.accentColor(view.getContext()))//设置title文本的颜色
+ }
}
}
diff --git a/app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt b/app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt
index 8d3ca5f56..7c4b54ec8 100644
--- a/app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt
+++ b/app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt
@@ -2,17 +2,17 @@ package io.legado.app.lib.theme.prefs
import android.content.Context
import android.os.Build
-import android.preference.SwitchPreference
import android.util.AttributeSet
-import android.view.View
import android.view.ViewGroup
import android.widget.Switch
import androidx.annotation.RequiresApi
+import androidx.preference.PreferenceViewHolder
+import androidx.preference.SwitchPreferenceCompat
import io.legado.app.lib.theme.ATH
import io.legado.app.lib.theme.ThemeStore
import java.util.*
-class ATESwitchPreference : SwitchPreference {
+class ATESwitchPreference : SwitchPreferenceCompat {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(
@@ -28,25 +28,26 @@ class ATESwitchPreference : SwitchPreference {
constructor(context: Context) : super(context)
- override fun onBindView(view: View) {
- super.onBindView(view)
-
- if (view is ViewGroup) {
- val queue = LinkedList()
- queue.add(view)
- while (!queue.isEmpty()) {
- val current = queue.removeFirst()
- for (i in 0 until current.childCount) {
- if (current.getChildAt(i) is Switch) {
- ATH.setTint(current.getChildAt(i), ThemeStore.accentColor(view.getContext()))
- return
- } else if (current.getChildAt(i) is ViewGroup) {
- queue.addLast(current.getChildAt(i) as ViewGroup)
+ override fun onBindViewHolder(holder: PreferenceViewHolder?) {
+ super.onBindViewHolder(holder)
+ holder?.let {
+ val view = it.itemView
+ if (view is ViewGroup) {
+ val queue = LinkedList()
+ queue.add(view)
+ while (!queue.isEmpty()) {
+ val current = queue.removeFirst()
+ for (i in 0 until current.childCount) {
+ if (current.getChildAt(i) is Switch) {
+ ATH.setTint(current.getChildAt(i), ThemeStore.accentColor(view.getContext()))
+ return
+ } else if (current.getChildAt(i) is ViewGroup) {
+ queue.addLast(current.getChildAt(i) as ViewGroup)
+ }
}
}
}
}
-
}
}
diff --git a/app/src/main/java/io/legado/app/ui/config/ConfigActivity.kt b/app/src/main/java/io/legado/app/ui/config/ConfigActivity.kt
new file mode 100644
index 000000000..d4fc7734e
--- /dev/null
+++ b/app/src/main/java/io/legado/app/ui/config/ConfigActivity.kt
@@ -0,0 +1,36 @@
+package io.legado.app.ui.config
+
+import android.os.Bundle
+import io.legado.app.R
+import io.legado.app.base.BaseActivity
+import io.legado.app.utils.getViewModel
+import kotlinx.android.synthetic.main.activity_config.*
+import kotlinx.android.synthetic.main.view_titlebar.*
+
+class ConfigActivity : BaseActivity() {
+ override val viewModel: ConfigViewModel
+ get() = getViewModel(ConfigViewModel::class.java)
+ override val layoutID: Int
+ get() = R.layout.activity_config
+
+ override fun onViewModelCreated(viewModel: ConfigViewModel, savedInstanceState: Bundle?) {
+ intent.getIntExtra("configType", -1).let {
+ if (it != -1) viewModel.configType = it
+ }
+ this.setSupportActionBar(toolbar)
+
+ when (viewModel.configType) {
+ ConfigViewModel.TYPE_CONFIG -> {
+ title_bar.title = "设置"
+ supportFragmentManager.beginTransaction().replace(R.id.configFrameLayout, ConfigFragment()).commit()
+ }
+ ConfigViewModel.TYPE_THEME_CONFIG -> {
+ title_bar.title = "主题设置"
+ supportFragmentManager.beginTransaction().replace(R.id.configFrameLayout, ThemeConfigFragment())
+ .commit()
+ }
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/ui/config/ConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/ConfigFragment.kt
new file mode 100644
index 000000000..42cecb541
--- /dev/null
+++ b/app/src/main/java/io/legado/app/ui/config/ConfigFragment.kt
@@ -0,0 +1,15 @@
+package io.legado.app.ui.config
+
+import android.os.Bundle
+import androidx.preference.PreferenceFragmentCompat
+import io.legado.app.R
+
+
+class ConfigFragment : PreferenceFragmentCompat() {
+
+ override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+ addPreferencesFromResource(R.xml.pref_config)
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/ui/config/ConfigViewModel.kt b/app/src/main/java/io/legado/app/ui/config/ConfigViewModel.kt
new file mode 100644
index 000000000..b9a085099
--- /dev/null
+++ b/app/src/main/java/io/legado/app/ui/config/ConfigViewModel.kt
@@ -0,0 +1,14 @@
+package io.legado.app.ui.config
+
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+
+class ConfigViewModel(application: Application) : AndroidViewModel(application) {
+ companion object {
+ val TYPE_CONFIG = 0
+ val TYPE_THEME_CONFIG = 1
+ }
+
+ var configType: Int = TYPE_CONFIG
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt
new file mode 100644
index 000000000..92e11f0a3
--- /dev/null
+++ b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt
@@ -0,0 +1,15 @@
+package io.legado.app.ui.config
+
+import android.os.Bundle
+import androidx.preference.PreferenceFragmentCompat
+import io.legado.app.R
+
+
+class ThemeConfigFragment : PreferenceFragmentCompat() {
+
+ override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+ addPreferencesFromResource(R.xml.pref_config_theme)
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
index 7d3d21755..1fe8278d5 100644
--- a/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
@@ -7,6 +7,7 @@ import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import io.legado.app.R
+import io.legado.app.utils.initIconColor
import kotlinx.android.synthetic.main.view_titlebar.*
class BookshelfFragment : Fragment(R.layout.fragment_bookshelf), Toolbar.OnMenuItemClickListener {
@@ -15,6 +16,7 @@ class BookshelfFragment : Fragment(R.layout.fragment_bookshelf), Toolbar.OnMenuI
super.onViewCreated(view, savedInstanceState)
Log.e("TAG", "BookshelfFragment")
toolbar.inflateMenu(R.menu.bookshelf)
+ toolbar.menu.initIconColor
toolbar.setOnMenuItemClickListener(this)
}
diff --git a/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt b/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt
index 7e00b19c9..d3855decb 100644
--- a/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt
@@ -7,6 +7,7 @@ import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import io.legado.app.R
+import io.legado.app.utils.initIconColor
import kotlinx.android.synthetic.main.view_titlebar.*
class BookSourceFragment : Fragment(R.layout.fragment_book_source), Toolbar.OnMenuItemClickListener {
@@ -15,6 +16,7 @@ class BookSourceFragment : Fragment(R.layout.fragment_book_source), Toolbar.OnMe
super.onViewCreated(view, savedInstanceState)
Log.e("TAG", "BookSourceFragment")
toolbar.inflateMenu(R.menu.book_source)
+ toolbar.menu.initIconColor
toolbar.setOnMenuItemClickListener(this)
}
diff --git a/app/src/main/java/io/legado/app/ui/main/findbook/FindBookFragment.kt b/app/src/main/java/io/legado/app/ui/main/findbook/FindBookFragment.kt
index 3650f62f9..067da047f 100644
--- a/app/src/main/java/io/legado/app/ui/main/findbook/FindBookFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/main/findbook/FindBookFragment.kt
@@ -7,6 +7,7 @@ import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import io.legado.app.R
+import io.legado.app.utils.initIconColor
import kotlinx.android.synthetic.main.view_titlebar.*
class FindBookFragment : Fragment(R.layout.fragment_find_book), Toolbar.OnMenuItemClickListener {
@@ -15,6 +16,7 @@ class FindBookFragment : Fragment(R.layout.fragment_find_book), Toolbar.OnMenuIt
super.onViewCreated(view, savedInstanceState)
Log.e("TAG", "FindBookFragment")
toolbar.inflateMenu(R.menu.find_book)
+ toolbar.menu.initIconColor
toolbar.setOnMenuItemClickListener(this)
}
diff --git a/app/src/main/java/io/legado/app/ui/main/myconfig/MyConfigFragment.kt b/app/src/main/java/io/legado/app/ui/main/myconfig/MyConfigFragment.kt
index 2d431297d..620ee12f8 100644
--- a/app/src/main/java/io/legado/app/ui/main/myconfig/MyConfigFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/main/myconfig/MyConfigFragment.kt
@@ -1,20 +1,17 @@
package io.legado.app.ui.main.myconfig
+import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import android.view.View
-import androidx.appcompat.view.menu.MenuBuilder
-import androidx.appcompat.view.menu.MenuItemImpl
import androidx.appcompat.widget.Toolbar
-import androidx.core.view.forEach
import androidx.fragment.app.Fragment
import io.legado.app.R
-import io.legado.app.lib.theme.ColorUtils
-import io.legado.app.lib.theme.DrawableUtils
-import io.legado.app.lib.theme.ThemeStore
-import io.legado.app.lib.theme.getPrimaryTextColor
-import io.legado.app.utils.getCompatColor
+import io.legado.app.ui.config.ConfigActivity
+import io.legado.app.ui.config.ConfigViewModel
+import io.legado.app.utils.initIconColor
+import kotlinx.android.synthetic.main.fragment_my_config.*
import kotlinx.android.synthetic.main.view_titlebar.*
class MyConfigFragment : Fragment(R.layout.fragment_my_config), Toolbar.OnMenuItemClickListener {
@@ -23,25 +20,13 @@ class MyConfigFragment : Fragment(R.layout.fragment_my_config), Toolbar.OnMenuIt
super.onViewCreated(view, savedInstanceState)
Log.e("TAG", "MyConfigFragment")
toolbar.inflateMenu(R.menu.my_config)
- toolbar.menu?.let {
- if (it is MenuBuilder) {
- it.setOptionalIconsVisible(true)
- }
- context?.let { context ->
- val primaryTextColor = getPrimaryTextColor(ColorUtils.isColorLight(ThemeStore.primaryColor(context)))
- val defaultTextColor = getCompatColor(R.color.tv_text_default)
- it.forEach { item ->
- (item as MenuItemImpl).let { impl ->
- //overflow:展开的item
- DrawableUtils.setTint(
- impl.icon,
- if (impl.requiresOverflow()) defaultTextColor else primaryTextColor
- )
- }
- }
- }
- }
+ toolbar.menu.initIconColor
toolbar.setOnMenuItemClickListener(this)
+ tv_theme_config.setOnClickListener(View.OnClickListener {
+ val intent = Intent(context, ConfigActivity::class.java)
+ intent.putExtra("configType", ConfigViewModel.TYPE_THEME_CONFIG)
+ startActivity(intent)
+ })
}
override fun onMenuItemClick(item: MenuItem?): Boolean {
diff --git a/app/src/main/java/io/legado/app/utils/MenuExtensions.kt b/app/src/main/java/io/legado/app/utils/MenuExtensions.kt
index 656da42d1..f7b1e99d9 100644
--- a/app/src/main/java/io/legado/app/utils/MenuExtensions.kt
+++ b/app/src/main/java/io/legado/app/utils/MenuExtensions.kt
@@ -1,2 +1,32 @@
package io.legado.app.utils
+import android.view.Menu
+import androidx.appcompat.view.menu.MenuBuilder
+import androidx.appcompat.view.menu.MenuItemImpl
+import androidx.core.view.forEach
+import io.legado.app.App
+import io.legado.app.R
+import io.legado.app.lib.theme.ColorUtils
+import io.legado.app.lib.theme.DrawableUtils
+import io.legado.app.lib.theme.ThemeStore
+import io.legado.app.lib.theme.getPrimaryTextColor
+
+val Menu.initIconColor: Menu
+ get() = this.let { menu ->
+ if (menu is MenuBuilder) {
+ menu.setOptionalIconsVisible(true)
+ }
+ val primaryTextColor =
+ App.INSTANCE.getPrimaryTextColor(ColorUtils.isColorLight(ThemeStore.primaryColor(App.INSTANCE)))
+ val defaultTextColor = App.INSTANCE.getCompatColor(R.color.tv_text_default)
+ menu.forEach { item ->
+ (item as MenuItemImpl).let { impl ->
+ //overflow:展开的item
+ DrawableUtils.setTint(
+ impl.icon,
+ if (impl.requiresOverflow()) defaultTextColor else primaryTextColor
+ )
+ }
+ }
+ return menu
+ }
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_config.xml b/app/src/main/res/layout/activity_config.xml
new file mode 100644
index 000000000..70d5ad0f7
--- /dev/null
+++ b/app/src/main/res/layout/activity_config.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml
index c09d5b9e7..33b3b9ddb 100644
--- a/app/src/main/res/layout/activity_search.xml
+++ b/app/src/main/res/layout/activity_search.xml
@@ -10,7 +10,6 @@
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:fitsSystemWindows="true"
app:layout_constraintTop_toTopOf="parent"
app:title="搜索"/>
diff --git a/app/src/main/res/layout/fragment_my_config.xml b/app/src/main/res/layout/fragment_my_config.xml
index 9fe7b70f7..5f568b619 100644
--- a/app/src/main/res/layout/fragment_my_config.xml
+++ b/app/src/main/res/layout/fragment_my_config.xml
@@ -1,8 +1,9 @@
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/pref_config.xml b/app/src/main/res/xml/pref_config.xml
new file mode 100644
index 000000000..89679212b
--- /dev/null
+++ b/app/src/main/res/xml/pref_config.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/pref_config_theme.xml b/app/src/main/res/xml/pref_config_theme.xml
new file mode 100644
index 000000000..15b3af587
--- /dev/null
+++ b/app/src/main/res/xml/pref_config_theme.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file