From 6cc0985ab67d032ecad2dd4c09b659a40c909f28 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sat, 11 Sep 2021 16:52:47 +0530 Subject: [PATCH] Added color change animation on cab creation --- .../retromusic/adapter/SongFileAdapter.kt | 2 +- .../retromusic/adapter/album/AlbumAdapter.kt | 2 +- .../adapter/artist/ArtistAdapter.kt | 2 +- .../adapter/base/AbsMultiSelectAdapter.kt | 31 ++++++++++++++----- .../adapter/playlist/PlaylistAdapter.kt | 2 +- .../retromusic/adapter/song/SongAdapter.kt | 2 +- .../monkey/retromusic/util/ColorAnimUtil.kt | 19 ++++++++++++ .../retromusic/util/RetroColorUtil.java | 11 +++++++ 8 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt index 323eae4ea..7160568d7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt @@ -40,7 +40,7 @@ import kotlin.math.log10 import kotlin.math.pow class SongFileAdapter( - private val activity: AppCompatActivity, + override val activity: AppCompatActivity, private var dataSet: List, private val itemLayoutRes: Int, private val iCallbacks: ICallbacks?, diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt index 8f9e00f03..6ec336c45 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt @@ -39,7 +39,7 @@ import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import me.zhanghai.android.fastscroll.PopupTextProvider open class AlbumAdapter( - val activity: FragmentActivity, + override val activity: FragmentActivity, var dataSet: List, var itemLayoutRes: Int, iCabHolder: ICabHolder?, diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt index 2de75bc15..bff1666c6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt @@ -42,7 +42,7 @@ import me.zhanghai.android.fastscroll.PopupTextProvider import java.util.* class ArtistAdapter( - val activity: FragmentActivity, + override val activity: FragmentActivity, var dataSet: List, var itemLayoutRes: Int, val ICabHolder: ICabHolder?, diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt index 6ca95b255..ccffec7eb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.kt @@ -1,28 +1,44 @@ package code.name.monkey.retromusic.adapter.base -import android.content.Context +import android.graphics.Color import android.view.Menu import android.view.MenuItem import androidx.annotation.MenuRes +import androidx.fragment.app.FragmentActivity import androidx.recyclerview.widget.RecyclerView import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.interfaces.ICabHolder +import code.name.monkey.retromusic.util.ColorAnimUtil +import code.name.monkey.retromusic.util.RetroColorUtil import com.afollestad.materialcab.MaterialCab import java.util.* abstract class AbsMultiSelectAdapter( - context: Context, private val ICabHolder: ICabHolder?, @MenuRes menuRes: Int + open val activity: FragmentActivity, private val ICabHolder: ICabHolder?, @MenuRes menuRes: Int ) : RecyclerView.Adapter(), MaterialCab.Callback { - private val context: Context private var cab: MaterialCab? = null private val checked: MutableList private var menuRes: Int override fun onCabCreated(materialCab: MaterialCab, menu: Menu): Boolean { + // Animate the color change + ColorAnimUtil.createColorAnimator( + activity.surfaceColor(), + RetroColorUtil.shiftBackgroundColor(activity.surfaceColor()) + ).apply { + addUpdateListener { + // Change color of status bar too + activity.window.statusBarColor = animatedValue as Int + materialCab.setBackgroundColor(animatedValue as Int) + } + start() + } return true } override fun onCabFinished(materialCab: MaterialCab): Boolean { clearChecked() + activity.window.statusBarColor = Color.TRANSPARENT return true } @@ -31,7 +47,7 @@ abstract class AbsMultiSelectAdapter( checkAll() } else { onMultipleItemAction(menuItem, ArrayList(checked)) - cab!!.finish() + cab?.finish() clearChecked() } return true @@ -94,13 +110,13 @@ abstract class AbsMultiSelectAdapter( val size = checked.size when { size <= 0 -> { - cab!!.finish() + cab?.finish() } size == 1 -> { - cab!!.setTitle(getName(checked[0])) + cab?.setTitle(getName(checked[0])) } else -> { - cab!!.setTitle(context.getString(R.string.x_selected, size)) + cab?.setTitle(activity.getString(R.string.x_selected, size)) } } } @@ -109,6 +125,5 @@ abstract class AbsMultiSelectAdapter( init { checked = ArrayList() this.menuRes = menuRes - this.context = context } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt index afcb4ce89..4fd2994b2 100755 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt @@ -41,7 +41,7 @@ import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil class PlaylistAdapter( - private val activity: FragmentActivity, + override val activity: FragmentActivity, private var dataSet: List, private var itemLayoutRes: Int, ICabHolder: ICabHolder?, diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt index b828f6648..bab506209 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt @@ -50,7 +50,7 @@ import me.zhanghai.android.fastscroll.PopupTextProvider */ open class SongAdapter( - protected val activity: FragmentActivity, + override val activity: FragmentActivity, var dataSet: MutableList, protected var itemLayoutRes: Int, ICabHolder: ICabHolder?, diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt new file mode 100644 index 000000000..81cb66de6 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/util/ColorAnimUtil.kt @@ -0,0 +1,19 @@ +package code.name.monkey.retromusic.util + +import android.animation.ArgbEvaluator +import android.animation.ValueAnimator + +class ColorAnimUtil { + companion object { + fun createColorAnimator( + fromColor: Int, + toColor: Int, + mDuration: Long = 300 + ): ValueAnimator { + return ValueAnimator.ofInt(fromColor, toColor).apply { + setEvaluator(ArgbEvaluator()) + duration = mDuration + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java index 061eb17ff..33d5e567d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java @@ -205,6 +205,17 @@ public class RetroColorUtil { return color; } + @ColorInt + public static int shiftBackgroundColor(@ColorInt int backgroundColor) { + int color = backgroundColor; + if (ColorUtil.INSTANCE.isColorLight(color)) { + color = ColorUtil.INSTANCE.shiftColor(color, 0.5F); + } else { + color = ColorUtil.INSTANCE.shiftColor(color, 1.5F); + } + return color; + } + private static class SwatchComparator implements Comparator { private static SwatchComparator sInstance;