pull/32/head
Invinciblelee 6 years ago
commit e3b9686fc5
  1. 5
      app/src/main/java/io/legado/app/App.kt
  2. 1
      app/src/main/java/io/legado/app/base/BaseActivity.kt
  3. 8
      app/src/main/java/io/legado/app/lib/theme/MaterialValueHelper.kt
  4. 9
      app/src/main/java/io/legado/app/ui/main/myconfig/MyConfigFragment.kt
  5. 55
      app/src/main/java/io/legado/app/ui/main/myconfig/PreferenceFragment.kt
  6. 7
      app/src/main/java/io/legado/app/ui/widget/TitleBar.kt
  7. 7
      app/src/main/java/io/legado/app/utils/MenuExtensions.kt
  8. 24
      app/src/main/res/layout/fragment_my_config.xml
  9. 6
      app/src/main/res/values-night/colors.xml
  10. 25
      app/src/main/res/xml/pref_main.xml

@ -77,6 +77,11 @@ class App : Application() {
}
}
fun applyDayNight(){
initNightTheme()
upThemeStore()
}
/**
* 创建通知ID
*/

@ -60,6 +60,7 @@ abstract class BaseActivity<VM : ViewModel> : AppCompatActivity() {
}
protected fun initTheme() {
window.decorView.setBackgroundColor(ThemeStore.backgroundColor(this))
if (ColorUtils.isColorLight(ThemeStore.primaryColor(this))) {
setTheme(R.style.AppTheme_Light)
} else {

@ -73,4 +73,12 @@ fun Fragment.getSecondaryDisabledTextColor(dark: Boolean): Int {
return if (dark) {
ContextCompat.getColor(requireContext(), R.color.secondary_text_disabled_material_light)
} else ContextCompat.getColor(requireContext(), R.color.secondary_text_disabled_material_dark)
}
fun Context.isDarkTheme(): Boolean {
return ColorUtils.isColorLight(ThemeStore.primaryColor(this))
}
fun Fragment.isDarkTheme(): Boolean {
return requireContext().isDarkTheme()
}

@ -1,16 +1,12 @@
package io.legado.app.ui.main.myconfig
import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.view.View
import io.legado.app.R
import io.legado.app.base.BaseFragment
import io.legado.app.ui.config.ConfigActivity
import io.legado.app.ui.config.ConfigViewModel
import io.legado.app.ui.search.SearchActivity
import kotlinx.android.synthetic.main.fragment_my_config.*
import kotlinx.android.synthetic.main.view_titlebar.*
import org.jetbrains.anko.startActivity
@ -18,10 +14,7 @@ class MyConfigFragment : BaseFragment(R.layout.fragment_my_config) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
setSupportToolbar(toolbar)
tv_theme_config.setOnClickListener {
requireContext().startActivity<ConfigActivity>(Pair("configType", ConfigViewModel.TYPE_THEME_CONFIG))
}
childFragmentManager.beginTransaction().add(R.id.pre_fragment, PreferenceFragment()).commit()
}
override fun onCompatCreateOptionsMenu(menu: Menu) {

@ -0,0 +1,55 @@
package io.legado.app.ui.main.myconfig
import android.content.SharedPreferences
import android.os.Bundle
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import io.legado.app.App
import io.legado.app.R
import io.legado.app.ui.config.ConfigActivity
import io.legado.app.ui.config.ConfigViewModel
import org.jetbrains.anko.startActivity
class PreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.pref_main)
}
override fun onResume() {
super.onResume()
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
}
override fun onPause() {
preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
super.onPause()
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
when (key) {
"isNightTheme" -> {
App.INSTANCE.applyDayNight()
}
}
}
override fun onPreferenceTreeClick(preference: Preference?): Boolean {
preference?.let {
when (preference.key) {
"setting" -> {
}
"theme_setting" -> {
requireContext().startActivity<ConfigActivity>(
Pair(
"configType",
ConfigViewModel.TYPE_THEME_CONFIG
)
)
}
}
}
return super.onPreferenceTreeClick(preference)
}
}

@ -14,7 +14,10 @@ import androidx.appcompat.widget.Toolbar
import androidx.core.graphics.drawable.DrawableCompat
import com.google.android.material.appbar.AppBarLayout
import io.legado.app.R
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.lib.theme.isDarkTheme
import io.legado.app.utils.getStatusBarHeight
import org.jetbrains.anko.bottomPadding
import org.jetbrains.anko.topPadding
@ -99,6 +102,10 @@ class TitleBar(context: Context, attrs: AttributeSet?) : AppBarLayout(context, a
a.recycle()
val primaryTextColor = context.getPrimaryTextColor(context.isDarkTheme())
DrawableUtils.setTint(toolbar.overflowIcon, primaryTextColor)
toolbar.setTitleTextColor(primaryTextColor)
if (attachToActivity) {
attachToActivity(context)
}

@ -6,16 +6,13 @@ import androidx.appcompat.view.menu.MenuBuilder
import androidx.appcompat.view.menu.MenuItemImpl
import androidx.core.view.forEach
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.lib.theme.*
fun Menu.setIconColor(context: Context): Menu = this.let { menu ->
if (menu is MenuBuilder) {
menu.setOptionalIconsVisible(true)
}
val primaryTextColor = context.getPrimaryTextColor(ColorUtils.isColorLight(ThemeStore.primaryColor(context)))
val primaryTextColor = context.getPrimaryTextColor(context.isDarkTheme())
val defaultTextColor = context.getCompatColor(R.color.tv_text_default)
menu.forEach { item ->
(item as MenuItemImpl).let { impl ->

@ -1,30 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
<LinearLayout
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">
android:layout_height="match_parent"
android:orientation="vertical">
<io.legado.app.ui.widget.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:attachToActivity="false"
app:layout_constraintTop_toTopOf="parent"
app:title="我的"/>
<androidx.core.widget.NestedScrollView
<LinearLayout
android:id="@+id/pre_fragment"
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>
android:layout_height="match_parent"
android:orientation="vertical"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>

@ -6,9 +6,9 @@
<color name="night_mask">#69000000</color>
<color name="colorPrimary">@color/md_grey_800</color>
<color name="colorPrimaryDark">@color/md_grey_900</color>
<color name="colorAccent">@color/md_grey_100</color>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<color name="transparent30">#30ffffff</color>

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.preference.Preference
android:key="setting"
android:title="设置"
android:summary="与功能相关的一些设置"
app:iconSpaceReserved="false"/>
<androidx.preference.Preference
android:key="theme_setting"
android:title="主题设置"
android:summary="与界面/颜色相关的一些设置"
app:iconSpaceReserved="false"/>
<io.legado.app.lib.theme.prefs.ATESwitchPreference
android:defaultValue="false"
android:key="isNightTheme"
android:summary="开启/关闭暗色主题"
android:title="暗色主题"
app:iconSpaceReserved="false"/>
</androidx.preference.PreferenceScreen>
Loading…
Cancel
Save