diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt index 50687925a..379a2e789 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt @@ -32,7 +32,6 @@ import android.view.View import android.widget.RelativeLayout import android.widget.Toast import androidx.annotation.LayoutRes -import androidx.appcompat.graphics.drawable.DrawableWrapper import androidx.appcompat.widget.Toolbar import androidx.core.os.bundleOf import androidx.core.view.isVisible @@ -86,8 +85,8 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme return true } R.id.action_toggle_lyrics -> { - PreferenceUtil.showLyrics = !item.isChecked - item.isChecked = !item.isChecked + PreferenceUtil.showLyrics = !PreferenceUtil.showLyrics + showLyricsIcon(item) if (PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics) { mainActivity.keepScreenOn(true) } else if (!PreferenceUtil.isScreenOnEnabled && !PreferenceUtil.showLyrics) { @@ -205,6 +204,18 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme return false } + private fun showLyricsIcon(item: MenuItem) { + val icon = + if (PreferenceUtil.showLyrics) R.drawable.ic_lyrics else R.drawable.ic_lyrics_outline + val drawable: Drawable = RetroUtil.getTintedVectorDrawable( + requireContext(), + icon, + toolbarIconColor() + ) + item.isChecked = PreferenceUtil.showLyrics + item.icon = drawable + } + abstract fun playerToolbar(): Toolbar? abstract fun onShow() @@ -299,7 +310,6 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme playerToolbar()?.menu?.removeItem(R.id.action_toggle_lyrics) } else { playerToolbar()?.menu?.findItem(R.id.action_toggle_lyrics)?.apply { - fixCheckStateOnIcon() isCheckable = true isChecked = PreferenceUtil.showLyrics } @@ -424,16 +434,4 @@ fun goToLyrics(activity: Activity) { null ) } -} - -/** Fixes checked state being ignored by injecting checked state directly into drawable */ -@SuppressLint("RestrictedApi") -class CheckDrawableWrapper(val menuItem: MenuItem) : DrawableWrapper(menuItem.icon) { - // inject checked state into drawable state set - override fun setState(stateSet: IntArray) = super.setState( - if (menuItem.isChecked) stateSet + android.R.attr.state_checked else stateSet - ) -} - -/** Wrap icon drawable with [CheckDrawableWrapper]. */ -fun MenuItem.fixCheckStateOnIcon() = apply { icon = CheckDrawableWrapper(this) } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt index c76d5b456..c952a5903 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt @@ -16,7 +16,6 @@ package code.name.monkey.retromusic.fragments.player.color import android.animation.ValueAnimator import android.os.Bundle -import android.os.Handler import android.view.View import androidx.appcompat.widget.Toolbar import androidx.core.animation.doOnEnd @@ -61,7 +60,7 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { _binding?.root?.setBackgroundColor(color.backgroundColor) } animator.start() - Handler().post { + binding.playerToolbar.post { ToolbarContentTintHelper.colorizeToolbar( binding.playerToolbar, color.secondaryTextColor, diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java index 8c266b65a..62ffd2a47 100755 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/ToolbarContentTintHelper.java @@ -341,7 +341,7 @@ public final class ToolbarContentTintHelper { .setSubtitleTextColor(ATHUtil.INSTANCE.resolveColor(activity, android.R.attr.textColorSecondary)); //Step 4: Changing the color of the Overflow Menu icon. - setOverflowButtonColor(activity, toolbarView, toolbarIconsColor); + setOverflowButtonColor(toolbarView, toolbarIconsColor); } } @@ -530,6 +530,16 @@ public final class ToolbarContentTintHelper { v.getViewTreeObserver().removeOnGlobalLayoutListener(listener); } + private static void setOverflowButtonColor(final Toolbar toolbar, final int color) { + Drawable drawable = toolbar.getOverflowIcon(); + if (drawable != null) { + // If we don't mutate the drawable, then all drawables with this id will have the ColorFilter + drawable.mutate(); + drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); + } + + } + private static void setOverflowButtonColor(final Activity activity, final Toolbar toolbar, final int toolbarIconsColor) { final ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();