diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index be31f9309..12541fc42 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -77,6 +77,11 @@ class App : Application() { } } + fun applyDayNight(){ + initNightTheme() + upThemeStore() + } + /** * 创建通知ID */ diff --git a/app/src/main/java/io/legado/app/base/BaseActivity.kt b/app/src/main/java/io/legado/app/base/BaseActivity.kt index d5cee5ee3..78915a534 100644 --- a/app/src/main/java/io/legado/app/base/BaseActivity.kt +++ b/app/src/main/java/io/legado/app/base/BaseActivity.kt @@ -60,6 +60,7 @@ abstract class BaseActivity : AppCompatActivity() { } protected fun initTheme() { + window.decorView.setBackgroundColor(ThemeStore.backgroundColor(this)) if (ColorUtils.isColorLight(ThemeStore.primaryColor(this))) { setTheme(R.style.AppTheme_Light) } else { diff --git a/app/src/main/java/io/legado/app/lib/theme/MaterialValueHelper.kt b/app/src/main/java/io/legado/app/lib/theme/MaterialValueHelper.kt index 42dd3c5a8..c8c97a23f 100644 --- a/app/src/main/java/io/legado/app/lib/theme/MaterialValueHelper.kt +++ b/app/src/main/java/io/legado/app/lib/theme/MaterialValueHelper.kt @@ -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() } \ No newline at end of file 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 5fa49bdb4..1b524c255 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,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(Pair("configType", ConfigViewModel.TYPE_THEME_CONFIG)) - } + childFragmentManager.beginTransaction().add(R.id.pre_fragment, PreferenceFragment()).commit() } override fun onCompatCreateOptionsMenu(menu: Menu) { diff --git a/app/src/main/java/io/legado/app/ui/main/myconfig/PreferenceFragment.kt b/app/src/main/java/io/legado/app/ui/main/myconfig/PreferenceFragment.kt new file mode 100644 index 000000000..c6ec73393 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/main/myconfig/PreferenceFragment.kt @@ -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( + Pair( + "configType", + ConfigViewModel.TYPE_THEME_CONFIG + ) + ) + } + } + } + return super.onPreferenceTreeClick(preference) + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt b/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt index b3af419e3..310e8ba29 100644 --- a/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt +++ b/app/src/main/java/io/legado/app/ui/widget/TitleBar.kt @@ -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) } 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 cb5f85d20..787f083dd 100644 --- a/app/src/main/java/io/legado/app/utils/MenuExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/MenuExtensions.kt @@ -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 -> diff --git a/app/src/main/res/layout/fragment_my_config.xml b/app/src/main/res/layout/fragment_my_config.xml index 5f568b619..2a2d1f8d5 100644 --- a/app/src/main/res/layout/fragment_my_config.xml +++ b/app/src/main/res/layout/fragment_my_config.xml @@ -1,30 +1,22 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - - - - - + android:layout_height="match_parent" + android:orientation="vertical"/> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index d53b8cac2..71fd9b2ec 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -6,9 +6,9 @@ #69000000 - @color/md_grey_800 - @color/md_grey_900 - @color/md_grey_100 + #008577 + #00574B + #D81B60 #30ffffff diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml new file mode 100644 index 000000000..ba6f6ac78 --- /dev/null +++ b/app/src/main/res/xml/pref_main.xml @@ -0,0 +1,25 @@ + + + + + + + + + + \ No newline at end of file