diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index fed88d483..5ccb5fe03 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -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(TAG).value ?: savedInstanceState super.onCreate(mSavedInstanceState) - setLightStatusBarAuto(surfaceColor()) binding = ActivitySettingsBinding.inflate(layoutInflater) setContentView(binding.root) setupToolbar() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index b80df4a60..2f1c2acd4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -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) { diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityExtensions.kt index ff33f4ad2..a68fb5702 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityExtensions.kt @@ -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 Activity.extraNotNull(key: String, default: T? = nu fun Activity.dip(@DimenRes id: Int): Int { return resources.getDimensionPixelSize(id) -} \ No newline at end of file +} + +inline val Activity.rootView: View get() = findViewById(R.id.content).getChildAt(0) \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt index adedcdba2..e782d8ddf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt @@ -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(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(R.id.status_bar) + if (statusBar != null) { + statusBar.setBackgroundColor( + ColorUtil.darkenColor( + color + ) + ) + } else { + window.statusBarColor = ColorUtil.darkenColor(color) + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExtensions.kt index 07ce4d3a0..734b60243 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/FragmentExtensions.kt @@ -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() } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt index 87960912e..7a0c4ffe3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt @@ -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 diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index 722b654ac..fed9d305f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -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) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt index f8854828b..8b7b83ad9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt @@ -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 diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/CoverLrcView.kt b/app/src/main/java/code/name/monkey/retromusic/lyrics/CoverLrcView.kt index 1173632c8..28a0b8de6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/lyrics/CoverLrcView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/CoverLrcView.kt @@ -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 diff --git a/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt b/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt index 64a4302aa..2e74530a0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt @@ -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 { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt index d582452e5..fdc23c380 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt @@ -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 { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt index c264d4e15..6a0d5c47b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/theme/ThemeManager.kt @@ -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 } -} - +} \ No newline at end of file diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt index 73644f888..904117d4d 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/ATH.kt @@ -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