This commit is contained in:
gedoor 2021-10-03 16:23:44 +08:00
parent 65abc0c666
commit cffce34d1d
4 changed files with 65 additions and 76 deletions

View File

@ -160,11 +160,13 @@ abstract class BaseActivity<VB : ViewBinding>(
if (fullScreen && !isInMultiWindow) {
ATH.fullScreen(this)
}
ATH.setStatusBarColorAuto(this, fullScreen)
val isTransparentStatusBar = AppConfig.isTransparentStatusBar
val statusBarColor = ThemeStore.statusBarColor(this, isTransparentStatusBar)
setStatusBarColorAuto(statusBarColor, isTransparentStatusBar, fullScreen)
if (toolBarTheme == Theme.Dark) {
ATH.setLightStatusBar(this, false)
setLightStatusBar(false)
} else if (toolBarTheme == Theme.Light) {
ATH.setLightStatusBar(this, true)
setLightStatusBar(true)
}
upNavigationBarColor()
}

View File

@ -4,11 +4,9 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.app.ActivityManager
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Build
import android.view.View
import android.view.WindowInsetsController
import android.view.WindowManager
import android.widget.EdgeEffect
import android.widget.ScrollView
@ -16,11 +14,9 @@ import androidx.annotation.ColorInt
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.bottomnavigation.BottomNavigationView
import io.legado.app.R
import io.legado.app.help.AppConfig
import io.legado.app.utils.ColorUtils
import io.legado.app.utils.dp
import io.legado.app.utils.getCompatColor
import splitties.init.appCtx
/**
@ -55,68 +51,6 @@ object ATH {
)
}
fun setStatusBarColorAuto(activity: Activity, fullScreen: Boolean) {
val isTransparentStatusBar = AppConfig.isTransparentStatusBar
val statusBarColor = ThemeStore.statusBarColor(activity, isTransparentStatusBar)
setStatusBarColor(activity, statusBarColor, isTransparentStatusBar, fullScreen)
}
fun setStatusBarColor(
activity: Activity,
color: Int,
isTransparentStatusBar: Boolean,
fullScreen: Boolean
) {
if (fullScreen) {
if (isTransparentStatusBar) {
activity.window.statusBarColor = Color.TRANSPARENT
} else {
activity.window.statusBarColor = activity.getCompatColor(R.color.status_bar_bag)
}
} else {
activity.window.statusBarColor = color
}
setLightStatusBarAuto(activity, color)
}
fun setLightStatusBarAuto(activity: Activity, bgColor: Int) {
setLightStatusBar(activity, ColorUtils.isColorLight(bgColor))
}
fun setLightStatusBar(activity: Activity, enabled: Boolean) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
activity.window.insetsController?.let {
if (enabled) {
it.setSystemBarsAppearance(
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
} else {
it.setSystemBarsAppearance(
0,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
}
}
}
setLightStatusBarO(activity, enabled)
}
@Suppress("DEPRECATION")
private fun setLightStatusBarO(activity: Activity, enabled: Boolean) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val decorView = activity.window.decorView
val systemUiVisibility = decorView.systemUiVisibility
if (enabled) {
decorView.systemUiVisibility =
systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
} else {
decorView.systemUiVisibility =
systemUiVisibility and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
}
}
}
fun setTaskDescriptionColorAuto(activity: Activity) {
setTaskDescriptionColor(activity, ThemeStore.primaryColor(activity))
}

View File

@ -21,7 +21,6 @@ import io.legado.app.help.LocalConfig
import io.legado.app.help.ReadBookConfig
import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.dialogs.selector
import io.legado.app.lib.theme.ATH
import io.legado.app.lib.theme.ThemeStore
import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.bottomBackground
@ -105,12 +104,10 @@ abstract class ReadBookBaseActivity :
}
upSystemUiVisibilityO(isInMultiWindow, toolBarHide)
if (toolBarHide) {
ATH.setLightStatusBar(this, ReadBookConfig.durConfig.curStatusIconDark())
setLightStatusBar(ReadBookConfig.durConfig.curStatusIconDark())
} else {
ATH.setLightStatusBarAuto(
this,
ThemeStore.statusBarColor(this, AppConfig.isTransparentStatusBar)
)
val statusBarColor = ThemeStore.statusBarColor(this, AppConfig.isTransparentStatusBar)
setLightStatusBar(ColorUtils.isColorLight(statusBarColor))
}
}

View File

@ -1,6 +1,7 @@
package io.legado.app.utils
import android.app.Activity
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.util.DisplayMetrics
@ -9,6 +10,7 @@ import android.widget.FrameLayout
import androidx.annotation.ColorInt
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.DialogFragment
import io.legado.app.R
inline fun <reified T : DialogFragment> AppCompatActivity.showDialogFragment(
arguments: Bundle.() -> Unit = {}
@ -40,7 +42,60 @@ val Activity.windowSize: DisplayMetrics
return displayMetrics
}
@Suppress("DEPRECATION")
/**
* 设置状态栏颜色
*/
fun Activity.setStatusBarColorAuto(
@ColorInt color: Int,
isTransparent: Boolean,
fullScreen: Boolean
) {
val isLightBar = ColorUtils.isColorLight(color)
if (fullScreen) {
if (isTransparent) {
window.statusBarColor = Color.TRANSPARENT
} else {
window.statusBarColor = getCompatColor(R.color.status_bar_bag)
}
} else {
window.statusBarColor = color
}
setLightStatusBar(isLightBar)
}
fun Activity.setLightStatusBar(isLightBar: Boolean) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.insetsController?.let {
if (isLightBar) {
it.setSystemBarsAppearance(
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
} else {
it.setSystemBarsAppearance(
0,
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
)
}
}
}
@Suppress("DEPRECATION")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val decorView = window.decorView
val systemUiVisibility = decorView.systemUiVisibility
if (isLightBar) {
decorView.systemUiVisibility =
systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
} else {
decorView.systemUiVisibility =
systemUiVisibility and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
}
}
}
/**
* 设置导航栏颜色
*/
fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) {
val isLightBor = ColorUtils.isColorLight(color)
window.navigationBarColor = color
@ -59,6 +114,7 @@ fun Activity.setNavigationBarColorAuto(@ColorInt color: Int) {
}
}
}
@Suppress("DEPRECATION")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val decorView = window.decorView
var systemUiVisibility = decorView.systemUiVisibility