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 * 创建通知ID
*/ */

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

@ -73,4 +73,12 @@ fun Fragment.getSecondaryDisabledTextColor(dark: Boolean): Int {
return if (dark) { return if (dark) {
ContextCompat.getColor(requireContext(), R.color.secondary_text_disabled_material_light) ContextCompat.getColor(requireContext(), R.color.secondary_text_disabled_material_light)
} else ContextCompat.getColor(requireContext(), R.color.secondary_text_disabled_material_dark) } 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 package io.legado.app.ui.main.myconfig
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseFragment 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 io.legado.app.ui.search.SearchActivity
import kotlinx.android.synthetic.main.fragment_my_config.*
import kotlinx.android.synthetic.main.view_titlebar.* import kotlinx.android.synthetic.main.view_titlebar.*
import org.jetbrains.anko.startActivity import org.jetbrains.anko.startActivity
@ -18,10 +14,7 @@ class MyConfigFragment : BaseFragment(R.layout.fragment_my_config) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
setSupportToolbar(toolbar) setSupportToolbar(toolbar)
childFragmentManager.beginTransaction().add(R.id.pre_fragment, PreferenceFragment()).commit()
tv_theme_config.setOnClickListener {
requireContext().startActivity<ConfigActivity>(Pair("configType", ConfigViewModel.TYPE_THEME_CONFIG))
}
} }
override fun onCompatCreateOptionsMenu(menu: Menu) { 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 androidx.core.graphics.drawable.DrawableCompat
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import io.legado.app.R 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.ThemeStore
import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.lib.theme.isDarkTheme
import io.legado.app.utils.getStatusBarHeight import io.legado.app.utils.getStatusBarHeight
import org.jetbrains.anko.bottomPadding import org.jetbrains.anko.bottomPadding
import org.jetbrains.anko.topPadding import org.jetbrains.anko.topPadding
@ -99,6 +102,10 @@ class TitleBar(context: Context, attrs: AttributeSet?) : AppBarLayout(context, a
a.recycle() a.recycle()
val primaryTextColor = context.getPrimaryTextColor(context.isDarkTheme())
DrawableUtils.setTint(toolbar.overflowIcon, primaryTextColor)
toolbar.setTitleTextColor(primaryTextColor)
if (attachToActivity) { if (attachToActivity) {
attachToActivity(context) attachToActivity(context)
} }

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

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

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