Skip to content

Commit

Permalink
perf: 补充前景色的推断处理
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaocydx committed Sep 6, 2024
1 parent b41a02e commit c49adb4
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ class SystemBarConstructorFragment : BaseFragment(), SystemBar {
statusBarEdgeToEdge = EdgeToEdge.Enabled
navigationBarColor = 0xFFC4B9BA.toInt()
isAppearanceLightStatusBar = true
isAppearanceLightNavigationBar = true
}
}

Expand All @@ -82,7 +81,6 @@ class SystemBarModifyFragment : BaseFragment(), SystemBar {
statusBarEdgeToEdge = EdgeToEdge.Enabled
navigationBarColor = 0xFFC4B9BA.toInt()
isAppearanceLightStatusBar = true
isAppearanceLightNavigationBar = true
}
}
tvCenter.text = "实现SystemBar,动态修改配置\n\n" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ class SystemBarDialog(context: Context) : AppCompatDialog(context, SystemBar.Dia
statusBarEdgeToEdge = EdgeToEdge.Enabled
navigationBarEdgeToEdge = EdgeToEdge.Gesture
navigationBarColor = 0xFFC4B9BA.toInt()
isAppearanceLightNavigationBar = true
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class SystemBarDialogFragment : DialogFragment(), SystemBar {
statusBarEdgeToEdge = EdgeToEdge.Enabled
navigationBarEdgeToEdge = EdgeToEdge.Gesture
navigationBarColor = 0xFFC4B9BA.toInt()
isAppearanceLightNavigationBar = true
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ class SystemBarFragmentA : BaseFragment(), SystemBar {
systemBarController {
statusBarColor = 0xFFBABBC4.toInt()
navigationBarColor = 0xFFBABBC4.toInt()
isAppearanceLightStatusBar = true
isAppearanceLightNavigationBar = true
}
}

Expand All @@ -80,8 +78,6 @@ class SystemBarFragmentB : BaseFragment(), SystemBar {
systemBarController {
statusBarColor = 0xFF496291.toInt()
navigationBarColor = 0xFF496291.toInt()
isAppearanceLightStatusBar = false
isAppearanceLightNavigationBar = false
}
}

Expand All @@ -103,8 +99,6 @@ class SystemBarFragmentC : BaseFragment(), SystemBar {
systemBarController {
statusBarColor = 0xFFD0CE85.toInt()
navigationBarColor = 0xFFD0CE85.toInt()
isAppearanceLightStatusBar = true
isAppearanceLightNavigationBar = true
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import com.xiaocydx.insets.sample.onClick
import com.xiaocydx.insets.statusBars
import com.xiaocydx.insets.systembar.EdgeToEdge
import com.xiaocydx.insets.systembar.SystemBar
import com.xiaocydx.insets.systembar.isAppearanceLight
import com.xiaocydx.insets.systembar.systemBarController

/**
Expand All @@ -32,7 +33,6 @@ class SystemBarVp2Activity : AppCompatActivity(), SystemBar {
private val controller = systemBarController {
// PageFragment自行处理状态栏Insets
statusBarEdgeToEdge = EdgeToEdge.Enabled
navigationBarColor = 0xFF5E79B5.toInt()
}

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down Expand Up @@ -67,11 +67,11 @@ class SystemBarVp2Activity : AppCompatActivity(), SystemBar {

enum class Page(
val statusBarColor: Int,
val isAppearanceLightStatusBar: Boolean
val isAppearanceLightStatusBar: Boolean = isAppearanceLight(statusBarColor)
) {
A(0xFFBABBC4.toInt(), true),
B(0xFF496291.toInt(), false),
C(0xFFD0CE85.toInt(), true)
A(0xFFBABBC4.toInt()),
B(0xFF496291.toInt()),
C(0xFFD0CE85.toInt())
}

class PageFragment : BaseFragment() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ interface SystemBarController {
/**
* 状态栏背景色,默认为`SystemBar.install()`设置的[Default.statusBarColor],
* 若[Default.statusBarColor]为`null`,则为`window.statusBarColor`的初始值。
*
* 设置状态栏背景色,若[isAppearanceLightStatusBar]未设置过,
* 则调用[isAppearanceLight],传入[statusBarColor]进行推断。
*/
@get:ColorInt
@set:ColorInt
Expand All @@ -48,6 +51,9 @@ interface SystemBarController {
/**
* 导航栏背景色,默认为`SystemBar.install()`设置的[Default.navigationBarColor],
* 若[Default.navigationBarColor]为`null`,则为`window.navigationBarColor`的初始值。
*
* 设置导航栏背景色,若[isAppearanceLightNavigationBar]未设置过,
* 则调用[isAppearanceLight],传入[navigationBarColor]进行推断。
*/
@get:ColorInt
@set:ColorInt
Expand Down Expand Up @@ -82,7 +88,7 @@ interface SystemBarController {
*
* 默认为`SystemBar.install()`设置的[Default.isAppearanceLightStatusBar],
* 若[Default.isAppearanceLightStatusBar]为`null`,则调用[isAppearanceLight],
* 传入`window.statusBarColor`的初始值进行推断
* 传入[statusBarColor]进行推断
*
* 对应`WindowInsetsControllerCompat.isAppearanceLightStatusBars`。
*/
Expand All @@ -93,7 +99,7 @@ interface SystemBarController {
*
* 默认为`SystemBar.install()`设置的[Default.isAppearanceLightNavigationBar],
* 若[Default.isAppearanceLightNavigationBar]为`null`,则调用[isAppearanceLight],
* 传入`window.navigationBarColor`的初始值进行推断
* 传入[navigationBarColor]进行推断
*
* 对应`WindowInsetsControllerCompat.isAppearanceLightNavigationBars`。
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,20 @@ internal class SystemBarControllerFlags(default: SystemBarController.Default) {
fun setAppearanceLightNavigationBar() {
hasAppearanceLightNavigationBar = true
}

fun clearStatusBarColor() {
hasStatusBarColor = false
}

fun clearNavigationBarColor() {
hasNavigationBarColor = false
}

fun clearAppearanceLightStatusBar() {
hasAppearanceLightStatusBar = false
}

fun clearAppearanceLightNavigationBar() {
hasAppearanceLightNavigationBar = false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,21 @@ internal abstract class SystemBarControllerImpl(
field = value
flags.setStatusBarColor()
container?.statusBarColor = value
if (!flags.hasAppearanceLightStatusBar) {
isAppearanceLightStatusBar = isAppearanceLight(value)
flags.clearAppearanceLightStatusBar()
}
}

final override var navigationBarColor = default.navigationBarColor ?: 0
set(value) {
field = value
flags.setNavigationBarColor()
container?.navigationBarColor = value
if (!flags.hasAppearanceLightNavigationBar) {
isAppearanceLightNavigationBar = isAppearanceLight(value)
flags.clearAppearanceLightNavigationBar()
}
}

final override var statusBarEdgeToEdge = default.statusBarEdgeToEdge
Expand Down Expand Up @@ -109,24 +117,24 @@ internal abstract class SystemBarControllerImpl(

protected fun applyPendingSystemBarConfig() = with(flags) {
val window = requireNotNull(window)
if (hasAppearanceLightStatusBar) {
isAppearanceLightStatusBar = isAppearanceLightStatusBar
}
if (hasAppearanceLightNavigationBar) {
isAppearanceLightNavigationBar = isAppearanceLightNavigationBar
}
// 未设置isAppearanceLightStatusBar,根据statusBarColor进行推断
statusBarColor = when {
hasStatusBarColor -> statusBarColor
else -> window.initialState.statusBarColor
}
// 未设置isAppearanceLightNavigationBar,根据navigationBarColor进行推断
navigationBarColor = when {
hasNavigationBarColor -> navigationBarColor
else -> window.initialState.navigationBarColor
}
statusBarEdgeToEdge = statusBarEdgeToEdge
navigationBarEdgeToEdge = navigationBarEdgeToEdge
isAppearanceLightStatusBar = when {
hasAppearanceLightStatusBar -> isAppearanceLightStatusBar
else -> isAppearanceLight(window.initialState.statusBarColor)
}
isAppearanceLightNavigationBar = when {
hasAppearanceLightNavigationBar -> isAppearanceLightNavigationBar
else -> isAppearanceLight(window.initialState.navigationBarColor)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ open class SystemBarControllerWrapper : SystemBarController {
}

private fun applyPendingSystemBarConfig(delegate: SystemBarController) = with(flags) {
if (hasAppearanceLightStatusBar) delegate.isAppearanceLightStatusBar = isAppearanceLightStatusBar
if (hasAppearanceLightNavigationBar) delegate.isAppearanceLightNavigationBar = isAppearanceLightNavigationBar
if (hasStatusBarColor) delegate.statusBarColor = statusBarColor
if (hasNavigationBarColor) delegate.navigationBarColor = navigationBarColor
delegate.statusBarEdgeToEdge = statusBarEdgeToEdge
delegate.navigationBarEdgeToEdge = navigationBarEdgeToEdge
if (hasAppearanceLightStatusBar) delegate.isAppearanceLightStatusBar = isAppearanceLightStatusBar
if (hasAppearanceLightNavigationBar) delegate.isAppearanceLightNavigationBar = isAppearanceLightNavigationBar
}
}

0 comments on commit c49adb4

Please sign in to comment.