pull/32/head
GKF 6 years ago
parent 6bb230acb6
commit c35b7be932
  1. 6
      app/build.gradle
  2. 1
      app/src/main/AndroidManifest.xml
  3. 11
      app/src/main/java/io/legado/app/lib/theme/prefs/ATEPreferenceCategory.kt
  4. 15
      app/src/main/java/io/legado/app/lib/theme/prefs/ATESwitchPreference.kt
  5. 36
      app/src/main/java/io/legado/app/ui/config/ConfigActivity.kt
  6. 15
      app/src/main/java/io/legado/app/ui/config/ConfigFragment.kt
  7. 14
      app/src/main/java/io/legado/app/ui/config/ConfigViewModel.kt
  8. 15
      app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt
  9. 2
      app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfFragment.kt
  10. 2
      app/src/main/java/io/legado/app/ui/main/booksource/BookSourceFragment.kt
  11. 2
      app/src/main/java/io/legado/app/ui/main/findbook/FindBookFragment.kt
  12. 37
      app/src/main/java/io/legado/app/ui/main/myconfig/MyConfigFragment.kt
  13. 30
      app/src/main/java/io/legado/app/utils/MenuExtensions.kt
  14. 21
      app/src/main/res/layout/activity_config.xml
  15. 1
      app/src/main/res/layout/activity_search.xml
  16. 16
      app/src/main/res/layout/fragment_my_config.xml
  17. 6
      app/src/main/res/xml/pref_config.xml
  18. 85
      app/src/main/res/xml/pref_config_theme.xml

@ -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'
}

@ -41,6 +41,7 @@
<activity android:name=".help.permission.PermissionActivity"
android:theme="@style/Activity.Permission"/>
<activity android:name=".ui.config.ConfigActivity"/>
</application>
</manifest>

@ -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,11 +26,14 @@ class ATEPreferenceCategory : PreferenceCategory {
constructor(context: Context) : super(context)
override fun onBindView(view: View) {
super.onBindView(view)
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文本的颜色
}
}
}
}

@ -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,9 +28,10 @@ class ATESwitchPreference : SwitchPreference {
constructor(context: Context) : super(context)
override fun onBindView(view: View) {
super.onBindView(view)
override fun onBindViewHolder(holder: PreferenceViewHolder?) {
super.onBindViewHolder(holder)
holder?.let {
val view = it.itemView
if (view is ViewGroup) {
val queue = LinkedList<ViewGroup>()
queue.add(view)
@ -46,7 +47,7 @@ class ATESwitchPreference : SwitchPreference {
}
}
}
}
}
}

@ -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<ConfigViewModel>() {
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()
}
}
}
}

@ -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)
}
}

@ -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
}

@ -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)
}
}

@ -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)
}

@ -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)
}

@ -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)
}

@ -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 {

@ -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
}

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<io.legado.app.ui.widget.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:title="设置"/>
<LinearLayout
android:id="@+id/configFrameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
</LinearLayout>

@ -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="搜索"/>

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -12,5 +13,18 @@
app:layout_constraintTop_toTopOf="parent"
app:title="我的"/>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/title_bar">
<TextView
android:id="@+id/tv_theme_config"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:text="@string/theme_setting"/>
</androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
>
</PreferenceScreen>

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<io.legado.app.lib.theme.prefs.ATESwitchPreference
android:defaultValue="false"
android:key="immersionStatusBar"
android:summary="@string/status_bar_immersion"
android:title="@string/immersion_status_bar"/>
<io.legado.app.lib.theme.prefs.ATESwitchPreference
android:defaultValue="false"
android:key="navigationBarColorChange"
android:summary="@string/navigation_bar_color_change_s"
android:title="@string/navigation_bar_color_change"/>
<io.legado.app.lib.theme.prefs.ATESwitchPreference
android:defaultValue="true"
android:key="behaviorMain"
android:summary="@string/behavior_main_s"
android:title="@string/behavior_main_t"/>
<io.legado.app.lib.theme.prefs.ATESwitchPreference
android:defaultValue="false"
android:key="E-InkMode"
android:summary="@string/e_ink_mode_detail"
android:title="@string/e_ink_mode"/>
<Preference
android:key="defaultTheme"
android:summary="@string/restore_default_theme"
android:title="@string/default_theme"/>
<io.legado.app.lib.theme.prefs.ATEPreferenceCategory android:title="白天">
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
android:defaultValue="@color/md_grey_100"
android:key="colorPrimary"
android:summary="白天,主色调"
android:title="主色调"
app:cpv_dialogType="preset"/>
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
android:defaultValue="@color/md_pink_600"
android:key="colorAccent"
android:summary="白天,强调色"
android:title="强调色"
app:cpv_dialogType="preset"/>
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
android:defaultValue="@color/md_grey_100"
android:key="colorBackground"
android:summary="白天,背景色"
android:title="背景色"
app:cpv_dialogType="preset"/>
</io.legado.app.lib.theme.prefs.ATEPreferenceCategory>
<io.legado.app.lib.theme.prefs.ATEPreferenceCategory android:title="夜间">
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
android:defaultValue="@color/md_grey_800"
android:key="colorPrimaryNight"
android:summary="夜间,主色调"
android:title="主色调"
app:cpv_dialogType="preset"/>
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
android:defaultValue="@color/md_pink_800"
android:key="colorAccentNight"
android:summary="夜间,强调色"
android:title="强调色"
app:cpv_dialogType="preset"/>
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
android:defaultValue="@color/md_grey_800"
android:key="colorBackgroundNight"
android:summary="夜间,背景色"
android:title="背景色"
app:cpv_dialogType="preset"/>
</io.legado.app.lib.theme.prefs.ATEPreferenceCategory>
</PreferenceScreen>
Loading…
Cancel
Save