Added navigation bar color to Pre Oreo devices for better navigation bar visibility
This commit is contained in:
parent
7b1f9cc1f3
commit
edb6574c35
13 changed files with 115 additions and 46 deletions
|
@ -17,6 +17,7 @@ package code.name.monkey.retromusic.activities
|
|||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavDestination
|
||||
import code.name.monkey.appthemehelper.ThemeStore
|
||||
|
@ -34,7 +35,6 @@ class SettingsActivity : AbsThemeActivity(), ColorCallback, OnThemeChangedListen
|
|||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
val mSavedInstanceState = extra<Bundle>(TAG).value ?: savedInstanceState
|
||||
super.onCreate(mSavedInstanceState)
|
||||
setLightStatusBarAuto(surfaceColor())
|
||||
binding = ActivitySettingsBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
setupToolbar()
|
||||
|
|
|
@ -14,12 +14,15 @@
|
|||
*/
|
||||
package code.name.monkey.retromusic.activities.base
|
||||
|
||||
import android.animation.ArgbEvaluator
|
||||
import android.animation.ValueAnimator
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewTreeObserver
|
||||
import android.view.animation.PathInterpolator
|
||||
import android.widget.FrameLayout
|
||||
import androidx.core.animation.doOnEnd
|
||||
import androidx.core.view.ViewCompat
|
||||
|
@ -61,9 +64,11 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
|||
import code.name.monkey.retromusic.model.CategoryInfo
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||
import code.name.monkey.retromusic.util.RetroUtil
|
||||
import code.name.monkey.retromusic.util.ViewUtil
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
|
||||
|
||||
abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
||||
companion object {
|
||||
val TAG: String = AbsSlidingMusicPanelActivity::class.java.simpleName
|
||||
|
@ -82,10 +87,22 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
private val panelState: Int
|
||||
get() = bottomSheetBehavior.state
|
||||
private lateinit var binding: SlidingMusicPanelLayoutBinding
|
||||
|
||||
private var navigationBarColorAnimator: ValueAnimator? = null
|
||||
private val argbEvaluator: ArgbEvaluator = ArgbEvaluator()
|
||||
|
||||
private val bottomSheetCallbackList = object : BottomSheetCallback() {
|
||||
|
||||
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
||||
setMiniPlayerAlphaProgress(slideOffset)
|
||||
navigationBarColorAnimator?.cancel()
|
||||
setNavigationBarColorPreOreo(
|
||||
argbEvaluator.evaluate(
|
||||
slideOffset,
|
||||
surfaceColor(),
|
||||
playerFragment!!.paletteColor
|
||||
) as Int
|
||||
)
|
||||
}
|
||||
|
||||
override fun onStateChanged(bottomSheet: View, newState: Int) {
|
||||
|
@ -177,9 +194,25 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
binding.playerFragmentContainer.alpha = (progress - 0.2F) / 0.2F
|
||||
}
|
||||
|
||||
private fun animateNavigationBarColor(color: Int) {
|
||||
navigationBarColorAnimator?.cancel()
|
||||
navigationBarColorAnimator = ValueAnimator
|
||||
.ofArgb(window.navigationBarColor, color).apply {
|
||||
duration = ViewUtil.RETRO_MUSIC_ANIM_TIME.toLong()
|
||||
interpolator = PathInterpolator(0.4f, 0f, 1f, 1f)
|
||||
addUpdateListener { animation: ValueAnimator ->
|
||||
setNavigationBarColorPreOreo(
|
||||
animation.animatedValue as Int
|
||||
)
|
||||
}
|
||||
start()
|
||||
}
|
||||
}
|
||||
|
||||
open fun onPanelCollapsed() {
|
||||
setMiniPlayerAlphaProgress(0F)
|
||||
// restore values
|
||||
animateNavigationBarColor(surfaceColor())
|
||||
setLightStatusBarAuto(surfaceColor())
|
||||
setLightNavigationAuto()
|
||||
setTaskDescriptionColor(taskColor)
|
||||
|
@ -258,12 +291,15 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
setLightNavigationBar(true)
|
||||
setLightStatusBar(isColorLight)
|
||||
} else if (nowPlayingScreen == Card || nowPlayingScreen == Blur || nowPlayingScreen == BlurCard) {
|
||||
animateNavigationBarColor(Color.BLACK)
|
||||
setLightStatusBar(false)
|
||||
setLightNavigationBar(true)
|
||||
} else if (nowPlayingScreen == Color || nowPlayingScreen == Tiny || nowPlayingScreen == Gradient) {
|
||||
animateNavigationBarColor(paletteColor)
|
||||
setLightNavigationBar(isColorLight)
|
||||
setLightStatusBar(isColorLight)
|
||||
} else if (nowPlayingScreen == Full) {
|
||||
animateNavigationBarColor(paletteColor)
|
||||
setLightNavigationBar(isColorLight)
|
||||
setLightStatusBar(false)
|
||||
} else if (nowPlayingScreen == Classic) {
|
||||
|
|
|
@ -14,14 +14,16 @@
|
|||
*/
|
||||
package code.name.monkey.retromusic.extensions
|
||||
|
||||
import android.R
|
||||
import android.app.Activity
|
||||
import android.view.View
|
||||
import androidx.annotation.DimenRes
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
|
||||
import com.google.android.material.appbar.MaterialToolbar
|
||||
import android.view.ViewGroup
|
||||
|
||||
fun AppCompatActivity.applyToolbar(toolbar: MaterialToolbar) {
|
||||
//toolbar.setBackgroundColor(surfaceColor())
|
||||
ToolbarContentTintHelper.colorBackButton(toolbar)
|
||||
setSupportActionBar(toolbar)
|
||||
}
|
||||
|
@ -38,4 +40,6 @@ inline fun <reified T : Any> Activity.extraNotNull(key: String, default: T? = nu
|
|||
|
||||
fun Activity.dip(@DimenRes id: Int): Int {
|
||||
return resources.getDimensionPixelSize(id)
|
||||
}
|
||||
}
|
||||
|
||||
inline val Activity.rootView: View get() = findViewById<ViewGroup>(R.id.content).getChildAt(0)
|
|
@ -6,9 +6,7 @@ import android.os.Build
|
|||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.WindowInsetsControllerCompat
|
||||
import androidx.core.view.*
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import code.name.monkey.appthemehelper.ATH
|
||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
|
@ -46,7 +44,6 @@ fun AppCompatActivity.exitFullscreen() {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
fun AppCompatActivity.hideStatusBar() {
|
||||
hideStatusBar(PreferenceUtil.isFullScreenMode)
|
||||
}
|
||||
|
@ -54,16 +51,25 @@ fun AppCompatActivity.hideStatusBar() {
|
|||
private fun AppCompatActivity.hideStatusBar(fullscreen: Boolean) {
|
||||
val statusBar = window.decorView.rootView.findViewById<View>(R.id.status_bar)
|
||||
if (statusBar != null) {
|
||||
statusBar.visibility = if (fullscreen) View.GONE else View.VISIBLE
|
||||
statusBar.isGone = fullscreen
|
||||
}
|
||||
}
|
||||
|
||||
fun AppCompatActivity.setDrawBehindSystemBars() {
|
||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||
window.statusBarColor = Color.TRANSPARENT
|
||||
window.navigationBarColor = Color.TRANSPARENT
|
||||
if (VersionUtils.hasQ()) {
|
||||
window.isNavigationBarContrastEnforced = false
|
||||
if (VersionUtils.hasOreo()) {
|
||||
if (VersionUtils.hasQ()) {
|
||||
window.isNavigationBarContrastEnforced = false
|
||||
}
|
||||
setNavigationBarColor(Color.TRANSPARENT)
|
||||
setStatusBarColor(Color.TRANSPARENT)
|
||||
} else {
|
||||
setNavigationBarColorPreOreo(surfaceColor())
|
||||
if (VersionUtils.hasMarshmallow()) {
|
||||
setStatusBarColor(Color.TRANSPARENT)
|
||||
} else {
|
||||
setStatusBarColor(surfaceColor())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,7 +108,11 @@ fun AppCompatActivity.setLightStatusBarAuto(bgColor: Int) {
|
|||
}
|
||||
|
||||
fun AppCompatActivity.setLightNavigationBar(enabled: Boolean) {
|
||||
ATH.setLightNavigationBar(this, enabled)
|
||||
ATH.setLightNavigationBar(this, enabled)
|
||||
}
|
||||
|
||||
fun AppCompatActivity.setLightNavigationBarAuto(bgColor: Int) {
|
||||
setLightNavigationBar(ColorUtil.isColorLight(bgColor))
|
||||
}
|
||||
|
||||
|
||||
|
@ -136,4 +146,32 @@ fun AppCompatActivity.setStatusBarColorAuto() {
|
|||
// we don't want to use statusbar color because we are doing the color darkening on our own to support KitKat
|
||||
setStatusBarColor(ATHUtil.resolveColor(this, R.attr.colorSurface))
|
||||
setLightStatusBarAuto(ATHUtil.resolveColor(this, R.attr.colorSurface))
|
||||
}
|
||||
|
||||
fun AppCompatActivity.setNavigationBarColor(color: Int) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
window.navigationBarColor = color
|
||||
} else {
|
||||
window.navigationBarColor = ColorUtil.darkenColor(color)
|
||||
}
|
||||
setLightNavigationBarAuto(color)
|
||||
}
|
||||
|
||||
fun AppCompatActivity.setNavigationBarColorPreOreo(color: Int) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
window.navigationBarColor = ColorUtil.darkenColor(color)
|
||||
}
|
||||
}
|
||||
|
||||
fun AppCompatActivity.setStatusBarColorPreMarshmallow(color: Int) {
|
||||
val statusBar = window.decorView.rootView.findViewById<View>(R.id.status_bar)
|
||||
if (statusBar != null) {
|
||||
statusBar.setBackgroundColor(
|
||||
ColorUtil.darkenColor(
|
||||
color
|
||||
)
|
||||
)
|
||||
} else {
|
||||
window.statusBarColor = ColorUtil.darkenColor(color)
|
||||
}
|
||||
}
|
|
@ -66,7 +66,6 @@ val FragmentManager.currentNavigationFragment: Fragment?
|
|||
fun AppCompatActivity.currentFragment(navHostId: Int): Fragment? {
|
||||
val navHostFragment: NavHostFragment =
|
||||
supportFragmentManager.findFragmentById(navHostId) as NavHostFragment
|
||||
navHostFragment.targetFragment
|
||||
return navHostFragment.childFragmentManager.fragments.firstOrNull()
|
||||
}
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@ import androidx.preference.ListPreference
|
|||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceManager
|
||||
import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEPreferenceFragmentCompat
|
||||
import code.name.monkey.retromusic.BuildConfig
|
||||
import code.name.monkey.retromusic.activities.OnThemeChangedListener
|
||||
import code.name.monkey.retromusic.extensions.rootView
|
||||
import code.name.monkey.retromusic.extensions.safeGetBottomInsets
|
||||
import code.name.monkey.retromusic.preferences.*
|
||||
import code.name.monkey.retromusic.util.NavigationUtil
|
||||
|
@ -77,7 +77,7 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() {
|
|||
// So we get insets from decor view
|
||||
// https://github.com/material-components/material-components-android/issues/1310
|
||||
ViewCompat.setOnApplyWindowInsetsListener(
|
||||
requireActivity().window.decorView
|
||||
requireActivity().rootView
|
||||
) { _, insets ->
|
||||
listView.updatePadding(bottom = insets.safeGetBottomInsets())
|
||||
insets
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
package code.name.monkey.retromusic.fragments.settings
|
||||
|
||||
import android.content.res.ColorStateList
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
|
@ -29,6 +28,7 @@ import code.name.monkey.retromusic.App
|
|||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.databinding.FragmentMainSettingsBinding
|
||||
import code.name.monkey.retromusic.extensions.hide
|
||||
import code.name.monkey.retromusic.extensions.rootView
|
||||
import code.name.monkey.retromusic.extensions.safeGetBottomInsets
|
||||
import code.name.monkey.retromusic.extensions.show
|
||||
import code.name.monkey.retromusic.util.NavigationUtil
|
||||
|
@ -90,7 +90,7 @@ class MainSettingsFragment : Fragment(), View.OnClickListener {
|
|||
}
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(
|
||||
requireActivity().window.decorView
|
||||
requireActivity().rootView
|
||||
) { _, insets ->
|
||||
binding.container.updatePadding(bottom = insets.safeGetBottomInsets())
|
||||
insets
|
||||
|
@ -100,6 +100,5 @@ class MainSettingsFragment : Fragment(), View.OnClickListener {
|
|||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
ViewCompat.setOnApplyWindowInsetsListener(requireActivity().window.decorView, null)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,8 @@
|
|||
package code.name.monkey.retromusic.glide
|
||||
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor
|
||||
import code.name.monkey.appthemehelper.util.TintHelper
|
||||
import code.name.monkey.retromusic.App
|
||||
import code.name.monkey.retromusic.App.Companion.getContext
|
||||
import code.name.monkey.retromusic.Constants.USER_BANNER
|
||||
import code.name.monkey.retromusic.Constants.USER_PROFILE
|
||||
|
|
|
@ -13,33 +13,31 @@
|
|||
*/
|
||||
package code.name.monkey.retromusic.lyrics
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import kotlin.jvm.JvmOverloads
|
||||
import android.text.TextPaint
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.animation.ValueAnimator
|
||||
import android.view.GestureDetector
|
||||
import android.widget.Scroller
|
||||
import android.view.GestureDetector.SimpleOnGestureListener
|
||||
import android.view.MotionEvent
|
||||
import code.name.monkey.retromusic.R
|
||||
import android.text.TextUtils
|
||||
import android.os.AsyncTask
|
||||
import android.text.StaticLayout
|
||||
import android.view.animation.LinearInterpolator
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Paint
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.AsyncTask
|
||||
import android.os.Looper
|
||||
import android.text.Layout
|
||||
import android.text.StaticLayout
|
||||
import android.text.TextPaint
|
||||
import android.text.TextUtils
|
||||
import android.text.format.DateUtils
|
||||
import android.util.AttributeSet
|
||||
import android.view.GestureDetector
|
||||
import android.view.GestureDetector.SimpleOnGestureListener
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.animation.LinearInterpolator
|
||||
import android.widget.Scroller
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import code.name.monkey.retromusic.BuildConfig
|
||||
import code.name.monkey.retromusic.R
|
||||
import java.io.File
|
||||
import java.lang.StringBuilder
|
||||
import java.util.*
|
||||
import kotlin.math.abs
|
||||
|
||||
|
|
|
@ -15,12 +15,7 @@
|
|||
package code.name.monkey.retromusic.util
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.net.Uri
|
||||
import code.name.monkey.retromusic.R
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.play.core.review.ReviewManagerFactory
|
||||
|
||||
object AppRater {
|
||||
|
|
|
@ -26,7 +26,6 @@ import androidx.core.graphics.BlendModeCompat.SRC_IN
|
|||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||
import code.name.monkey.appthemehelper.util.MaterialValueHelper
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
|
||||
object ViewUtil {
|
||||
|
||||
|
|
|
@ -29,7 +29,13 @@ object ThemeManager {
|
|||
context: Context
|
||||
): Int = when (context.generalThemeValue) {
|
||||
DARK -> AppCompatDelegate.MODE_NIGHT_YES
|
||||
BLACK -> {
|
||||
if (PreferenceUtil.baseTheme == "dark") {
|
||||
AppCompatDelegate.MODE_NIGHT_YES
|
||||
} else {
|
||||
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
|
||||
}
|
||||
}
|
||||
else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -3,7 +3,6 @@ package code.name.monkey.appthemehelper
|
|||
import android.app.Activity
|
||||
import android.app.ActivityManager
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.os.Build
|
||||
import android.view.View
|
||||
import androidx.annotation.ColorInt
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue