Fixed Buggy Navigation bar color on Just Black theme

This commit is contained in:
Prathamesh More 2022-01-06 14:50:47 +05:30
parent 5589fab2c6
commit 6205befb25
6 changed files with 50 additions and 111 deletions

View file

@ -27,7 +27,6 @@ class WhatsNewActivity : AbsThemeActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val binding = ActivityWhatsNewBinding.inflate(layoutInflater) val binding = ActivityWhatsNewBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
setLightStatusBarAuto(surfaceColor())
setTaskDescriptionColorAuto() setTaskDescriptionColorAuto()
binding.toolbar.setNavigationOnClickListener { onBackPressed() } binding.toolbar.setNavigationOnClickListener { onBackPressed() }
ToolbarContentTintHelper.colorBackButton(binding.toolbar) ToolbarContentTintHelper.colorBackButton(binding.toolbar)

View file

@ -31,7 +31,7 @@ import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.commit import androidx.fragment.app.commit
import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.RetroBottomSheetBehavior import code.name.monkey.retromusic.RetroBottomSheetBehavior
import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding
@ -199,6 +199,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
} }
private fun animateNavigationBarColor(color: Int) { private fun animateNavigationBarColor(color: Int) {
if (VersionUtils.hasOreo()) return
navigationBarColorAnimator?.cancel() navigationBarColorAnimator?.cancel()
navigationBarColorAnimator = ValueAnimator navigationBarColorAnimator = ValueAnimator
.ofArgb(window.navigationBarColor, color).apply { .ofArgb(window.navigationBarColor, color).apply {
@ -217,8 +218,8 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
setMiniPlayerAlphaProgress(0F) setMiniPlayerAlphaProgress(0F)
// restore values // restore values
animateNavigationBarColor(surfaceColor()) animateNavigationBarColor(surfaceColor())
setLightStatusBarAuto(surfaceColor()) setLightStatusBarAuto()
setLightNavigationAuto() setLightNavigationBarAuto()
setTaskDescriptionColor(taskColor) setTaskDescriptionColor(taskColor)
} }
@ -291,7 +292,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
if (panelState == STATE_EXPANDED) { if (panelState == STATE_EXPANDED) {
navigationBarColor = surfaceColor() navigationBarColor = surfaceColor()
setTaskDescColor(paletteColor) setTaskDescColor(paletteColor)
val isColorLight = ColorUtil.isColorLight(paletteColor) val isColorLight = paletteColor.isColorLight
if (PreferenceUtil.isAdaptiveColor && (nowPlayingScreen == Normal || nowPlayingScreen == Flat)) { if (PreferenceUtil.isAdaptiveColor && (nowPlayingScreen == Normal || nowPlayingScreen == Flat)) {
setLightNavigationBar(true) setLightNavigationBar(true)
setLightStatusBar(isColorLight) setLightStatusBar(isColorLight)
@ -314,13 +315,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
setLightStatusBar(false) setLightStatusBar(false)
} else if (nowPlayingScreen == Fit) { } else if (nowPlayingScreen == Fit) {
setLightStatusBar(false) setLightStatusBar(false)
} else {
setLightStatusBar(
ColorUtil.isColorLight(
surfaceColor()
)
)
setLightNavigationBar(true)
} }
} }
} }

View file

@ -24,6 +24,7 @@ import androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode
import androidx.core.os.ConfigurationCompat import androidx.core.os.ConfigurationCompat
import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.common.ATHToolbarActivity
import code.name.monkey.retromusic.LanguageContextWrapper import code.name.monkey.retromusic.LanguageContextWrapper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.theme.ThemeManager import code.name.monkey.retromusic.util.theme.ThemeManager
@ -42,7 +43,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
setImmersiveFullscreen() setImmersiveFullscreen()
registerSystemUiVisibility() registerSystemUiVisibility()
toggleScreenOn() toggleScreenOn()
setLightNavigationAuto() setLightNavigationBarAuto()
setLightStatusBarAuto(surfaceColor()) setLightStatusBarAuto(surfaceColor())
} }
@ -57,6 +58,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
com.google.android.material.R.style.ThemeOverlay_Material3_DynamicColors_DayNight com.google.android.material.R.style.ThemeOverlay_Material3_DynamicColors_DayNight
) )
} }
setTheme(R.style.FontThemeOverlay)
} }
override fun onWindowFocusChanged(hasFocus: Boolean) { override fun onWindowFocusChanged(hasFocus: Boolean) {

View file

@ -4,6 +4,7 @@ import android.app.ActivityManager
import android.graphics.Color import android.graphics.Color
import android.os.Build import android.os.Build
import android.view.View import android.view.View
import android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
import android.view.WindowManager import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
@ -11,7 +12,6 @@ import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.WindowInsetsControllerCompat
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import code.name.monkey.appthemehelper.ATH
import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
@ -57,19 +57,19 @@ private fun AppCompatActivity.hideStatusBar(fullscreen: Boolean) {
} }
fun AppCompatActivity.setDrawBehindSystemBars() { fun AppCompatActivity.setDrawBehindSystemBars() {
WindowCompat.setDecorFitsSystemWindows(window, false)
if (VersionUtils.hasOreo()) { if (VersionUtils.hasOreo()) {
WindowCompat.setDecorFitsSystemWindows(window, false)
window.navigationBarColor = Color.TRANSPARENT
window.statusBarColor = Color.TRANSPARENT
if (VersionUtils.hasQ()) { if (VersionUtils.hasQ()) {
window.isNavigationBarContrastEnforced = false window.isNavigationBarContrastEnforced = false
} }
window.navigationBarColor = Color.TRANSPARENT
window.statusBarColor = Color.TRANSPARENT
} else { } else {
setNavigationBarColorPreOreo(surfaceColor()) setNavigationBarColorPreOreo(surfaceColor())
if (VersionUtils.hasMarshmallow()) { if (VersionUtils.hasMarshmallow()) {
setStatusBarColor(Color.TRANSPARENT) setStatusBarColor(Color.TRANSPARENT)
} else { } else {
setStatusBarColor(surfaceColor()) setStatusBarColor(Color.BLACK)
} }
} }
} }
@ -96,24 +96,49 @@ fun AppCompatActivity.setTaskDescriptionColorAuto() {
setTaskDescriptionColor(surfaceColor()) setTaskDescriptionColor(surfaceColor())
} }
fun AppCompatActivity.setLightNavigationAuto() { @Suppress("Deprecation")
ATH.setLightNavigationBarAuto(this, surfaceColor()) fun AppCompatActivity.setLightStatusBar(enabled: Boolean) {
if (VersionUtils.hasMarshmallow()) {
val decorView = 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 AppCompatActivity.setLightStatusBar(enabled: Boolean) { fun AppCompatActivity.setLightStatusBarAuto() {
ATH.setLightStatusBar(this, enabled) setLightStatusBar(surfaceColor().isColorLight)
} }
fun AppCompatActivity.setLightStatusBarAuto(bgColor: Int) { fun AppCompatActivity.setLightStatusBarAuto(bgColor: Int) {
setLightStatusBar(ColorUtil.isColorLight(bgColor)) setLightStatusBar(bgColor.isColorLight)
} }
@Suppress("Deprecation")
fun AppCompatActivity.setLightNavigationBar(enabled: Boolean) { fun AppCompatActivity.setLightNavigationBar(enabled: Boolean) {
ATH.setLightNavigationBar(this, enabled) if (VersionUtils.hasOreo()) {
val decorView = window.decorView
var systemUiVisibility = decorView.systemUiVisibility
systemUiVisibility = if (enabled) {
systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
} else {
systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.inv()
}
decorView.systemUiVisibility = systemUiVisibility
}
}
fun AppCompatActivity.setLightNavigationBarAuto() {
setLightNavigationBar(surfaceColor().isColorLight)
} }
fun AppCompatActivity.setLightNavigationBarAuto(bgColor: Int) { fun AppCompatActivity.setLightNavigationBarAuto(bgColor: Int) {
setLightNavigationBar(ColorUtil.isColorLight(bgColor)) setLightNavigationBar(bgColor.isColorLight)
} }

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.RetroMusic.Base.Adaptive" parent="Theme.Material3.DayNight.NoActionBar"> <style name="Theme.RetroMusic.Base.Adaptive" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:windowActionBarOverlay">true</item> <item name="android:windowActionBarOverlay">true</item>
@ -66,6 +66,7 @@
@style/Widget.MaterialComponents.FloatingActionButton @style/Widget.MaterialComponents.FloatingActionButton
</item> </item>
<item name="popupMenuBackground">@drawable/popup_background</item> <item name="popupMenuBackground">@drawable/popup_background</item>
<item name="android:enforceNavigationBarContrast" tools:targetApi="q">false</item>
</style> </style>
<style name="Theme.RetroMusic.Base.Light" parent="Theme.Material3.Light.NoActionBar"> <style name="Theme.RetroMusic.Base.Light" parent="Theme.Material3.Light.NoActionBar">
@ -107,5 +108,4 @@
<item name="android:layout_width">wrap_content</item> <item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
</style> </style>
</resources> </resources>

View file

@ -6,8 +6,11 @@ import android.content.Context
import android.os.Build import android.os.Build
import android.view.View import android.view.View
import android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR import android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
import android.view.WindowInsetsController
import android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.view.WindowInsetsControllerCompat
import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.TintHelper
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
@ -25,90 +28,6 @@ object ATH {
) > since ) > since
} }
@Suppress("Deprecation")
fun setLightStatusBar(activity: Activity, enabled: Boolean) {
if (VersionUtils.hasMarshmallow()) {
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()
}
}
}
@Suppress("Deprecation")
fun setLightNavigationBar(activity: Activity, enabled: Boolean) {
if (VersionUtils.hasOreo()) {
val decorView = activity.window.decorView
var systemUiVisibility = decorView.systemUiVisibility
systemUiVisibility = if (enabled) {
systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
} else {
systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.inv()
}
decorView.systemUiVisibility = systemUiVisibility
}
}
fun setLightNavigationBarAuto(activity: Activity, bgColor: Int) {
setLightNavigationBar(activity, ColorUtil.isColorLight(bgColor))
}
fun setNavigationBarColor(activity: Activity, color: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
activity.window.navigationBarColor = color
} else {
activity.window.navigationBarColor = ColorUtil.darkenColor(color)
}
setLightNavigationBarAuto(activity, color)
}
fun setActivityToolbarColorAuto(activity: Activity, toolbar: Toolbar?) {
setActivityToolbarColor(activity, toolbar, ThemeStore.primaryColor(activity))
}
private fun setActivityToolbarColor(
activity: Activity, toolbar: Toolbar?,
color: Int
) {
if (toolbar == null) {
return
}
toolbar.setBackgroundColor(color)
ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(
activity,
toolbar,
color
)
}
fun setTaskDescriptionColorAuto(activity: Activity) {
setTaskDescriptionColor(activity, ThemeStore.primaryColor(activity))
}
fun setTaskDescriptionColor(activity: Activity, @ColorInt color: Int) {
var colorFinal = color
// Task description requires fully opaque color
colorFinal = ColorUtil.stripAlpha(colorFinal)
// Sets color of entry in the system recents page
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
activity.setTaskDescription(
ActivityManager.TaskDescription(
activity.title as String?,
-1,
colorFinal
)
)
} else {
activity.setTaskDescription(ActivityManager.TaskDescription(activity.title as String?))
}
}
fun setTint(view: View, @ColorInt color: Int) { fun setTint(view: View, @ColorInt color: Int) {
TintHelper.setTintAuto(view, color, false) TintHelper.setTintAuto(view, color, false)
} }