From c35b7be932a1a813fb399c494869891717e356e5 Mon Sep 17 00:00:00 2001 From: GKF Date: Wed, 5 Jun 2019 10:55:24 +0800 Subject: [PATCH] up --- app/build.gradle | 6 +- app/src/main/AndroidManifest.xml | 1 + .../lib/theme/prefs/ATEPreferenceCategory.kt | 15 ++-- .../lib/theme/prefs/ATESwitchPreference.kt | 37 ++++---- .../io/legado/app/ui/config/ConfigActivity.kt | 36 ++++++++ .../io/legado/app/ui/config/ConfigFragment.kt | 15 ++++ .../legado/app/ui/config/ConfigViewModel.kt | 14 +++ .../app/ui/config/ThemeConfigFragment.kt | 15 ++++ .../ui/main/bookshelf/BookshelfFragment.kt | 2 + .../ui/main/booksource/BookSourceFragment.kt | 2 + .../app/ui/main/findbook/FindBookFragment.kt | 2 + .../app/ui/main/myconfig/MyConfigFragment.kt | 37 +++----- .../io/legado/app/utils/MenuExtensions.kt | 30 +++++++ app/src/main/res/layout/activity_config.xml | 21 +++++ app/src/main/res/layout/activity_search.xml | 1 - .../main/res/layout/fragment_my_config.xml | 22 ++++- app/src/main/res/xml/pref_config.xml | 6 ++ app/src/main/res/xml/pref_config_theme.xml | 85 +++++++++++++++++++ 18 files changed, 291 insertions(+), 56 deletions(-) create mode 100644 app/src/main/java/io/legado/app/ui/config/ConfigActivity.kt create mode 100644 app/src/main/java/io/legado/app/ui/config/ConfigFragment.kt create mode 100644 app/src/main/java/io/legado/app/ui/config/ConfigViewModel.kt create mode 100644 app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt create mode 100644 app/src/main/res/layout/activity_config.xml create mode 100644 app/src/main/res/xml/pref_config.xml create mode 100644 app/src/main/res/xml/pref_config_theme.xml 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