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 3192d1700..f6ed05809 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 @@ -25,13 +25,13 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.audiocover.AudioFileCover import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.interfaces.ICallbacks import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.signature.MediaStoreSignature import me.zhanghai.android.fastscroll.PopupTextProvider @@ -45,7 +45,7 @@ class SongFileAdapter( private var dataSet: List, private val itemLayoutRes: Int, private val iCallbacks: ICallbacks?, - iCabHolder: ICabHolder? + iCabHolder: ICabHolder?, ) : AbsMultiSelectAdapter( activity, iCabHolder, R.menu.menu_media_selection ), PopupTextProvider { @@ -110,9 +110,7 @@ class SongFileAdapter( ) ) } else { - val error = RetroUtil.getTintedVectorDrawable( - activity, R.drawable.ic_file_music, iconColor - ) + val error = activity.getTintedDrawable(R.drawable.ic_file_music, iconColor) GlideApp.with(activity) .load(AudioFileCover(file.path)) .diskCacheStrategy(DiskCacheStrategy.NONE) diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt index 78d8d90a2..ad8f964e7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/AppShortcutIconGenerator.kt @@ -15,19 +15,16 @@ package code.name.monkey.retromusic.appshortcuts import android.content.Context -import android.graphics.Bitmap -import android.graphics.drawable.Drawable import android.graphics.drawable.Icon import android.graphics.drawable.LayerDrawable import android.os.Build import android.util.TypedValue import androidx.annotation.RequiresApi -import androidx.core.graphics.applyCanvas -import androidx.core.graphics.createBitmap +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil @RequiresApi(Build.VERSION_CODES.N_MR1) object AppShortcutIconGenerator { @@ -64,25 +61,17 @@ object AppShortcutIconGenerator { context: Context, iconId: Int, foregroundColor: Int, - backgroundColor: Int + backgroundColor: Int, ): Icon { // Get and tint foreground and background drawables - val vectorDrawable = RetroUtil.getTintedVectorDrawable(context, iconId, foregroundColor) - val backgroundDrawable = RetroUtil.getTintedVectorDrawable( - context, R.drawable.ic_app_shortcut_background, backgroundColor - ) + val vectorDrawable = context.getTintedDrawable(iconId, foregroundColor) + val backgroundDrawable = + context.getTintedDrawable(R.drawable.ic_app_shortcut_background, backgroundColor) // Squash the two drawables together val layerDrawable = LayerDrawable(arrayOf(backgroundDrawable, vectorDrawable)) // Return as an Icon - return Icon.createWithBitmap(drawableToBitmap(layerDrawable)) - } - - private fun drawableToBitmap(drawable: Drawable): Bitmap { - return createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight).applyCanvas { - drawable.setBounds(0, 0, width, height) - drawable.draw(this) - } + return Icon.createWithBitmap(layerDrawable.toBitmap()) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt index ac2f6359f..0aea9d366 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt @@ -22,11 +22,13 @@ import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.service.MusicService @@ -36,7 +38,7 @@ import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -58,31 +60,24 @@ class AppWidgetBig : BaseAppWidget() { ) appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - MaterialValueHelper.getPrimaryTextColor(context, false) - ), 1f - ) + R.id.button_next, context.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getPrimaryTextColor(context, false) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - MaterialValueHelper.getPrimaryTextColor(context, false) - ), 1f - ) + R.id.button_prev, + context.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getPrimaryTextColor(context, false) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - MaterialValueHelper.getPrimaryTextColor(context, false) - ), 1f - ) + R.id.button_toggle_play_pause, + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + MaterialValueHelper.getPrimaryTextColor(context, false) + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -123,33 +118,27 @@ class AppWidgetBig : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - playPauseRes, - primaryColor - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, + primaryColor + ).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_next, - primaryColor - ), 1f - ) + R.id.button_next, + service.getTintedDrawable( + R.drawable.ic_skip_next, + primaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - primaryColor - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable( + R.drawable.ic_skip_previous, + primaryColor + ).toBitmap() ) // Link actions buttons to intents @@ -167,10 +156,10 @@ class AppWidgetBig : BaseAppWidget() { .asBitmap() //.checkIgnoreMediaStore() .load(RetroGlideExtension.getSongModel(song)) - .into(object : SimpleTarget(widgetImageSize, widgetImageSize) { + .into(object : CustomTarget(widgetImageSize, widgetImageSize) { override fun onResourceReady( resource: Bitmap, - transition: Transition? + transition: Transition?, ) { update(resource) } @@ -180,6 +169,8 @@ class AppWidgetBig : BaseAppWidget() { update(null) } + override fun onLoadCleared(placeholder: Drawable?) {} + private fun update(bitmap: Bitmap?) { if (bitmap == null) { appWidgetView.setImageViewResource( diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt index a6e6524b9..80e0b09ea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt @@ -22,11 +22,13 @@ import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper @@ -34,11 +36,9 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE -import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -56,31 +56,25 @@ class AppWidgetCard : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - secondaryColor - ), 1f - ) + R.id.button_next, + context.getTintedDrawable( + R.drawable.ic_skip_next, + secondaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - secondaryColor - ), 1f - ) + R.id.button_prev, + context.getTintedDrawable( + R.drawable.ic_skip_previous, + secondaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - secondaryColor - ), 1f - ) + R.id.button_toggle_play_pause, + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + secondaryColor + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -109,33 +103,27 @@ class AppWidgetCard : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - playPauseRes, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_next, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_next, + service.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Link actions buttons to intents @@ -158,10 +146,10 @@ class AppWidgetCard : BaseAppWidget() { target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) .load(RetroGlideExtension.getSongModel(song)) .centerCrop() - .into(object : SimpleTarget(imageSize, imageSize) { + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -180,30 +168,23 @@ class AppWidgetCard : BaseAppWidget() { update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) } + override fun onLoadCleared(placeholder: Drawable?) {} + private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, playPauseRes, color - ) - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable(playPauseRes, color).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_next, color - ) - ) + R.id.button_next, + service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_previous, color - ) - ) + R.id.button_prev, + service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap() ) val image = getAlbumArtDrawable(service, bitmap) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt index ba6abe7f7..cdb48a063 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt @@ -21,18 +21,19 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.service.MusicService.Companion.TOGGLE_FAVORITE -import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil @@ -57,13 +58,11 @@ class AppWidgetCircle : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow, - secondaryColor - ), 1f - ) + R.id.button_toggle_play_pause, + context.getTintedDrawable( + R.drawable.ic_play_arrow, + secondaryColor + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -83,13 +82,11 @@ class AppWidgetCircle : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - playPauseRes, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) val isFavorite = runBlocking(Dispatchers.IO) { return@runBlocking MusicUtil.repository.isSongFavorite(song.id) @@ -97,13 +94,11 @@ class AppWidgetCircle : BaseAppWidget() { val favoriteRes = if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border appWidgetView.setImageViewBitmap( - R.id.button_toggle_favorite, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - favoriteRes, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_toggle_favorite, + service.getTintedDrawable( + favoriteRes, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Link actions buttons to intents @@ -125,7 +120,7 @@ class AppWidgetCircle : BaseAppWidget() { .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -147,20 +142,18 @@ class AppWidgetCircle : BaseAppWidget() { private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, playPauseRes, color - ) - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, color + ).toBitmap() ) // Set favorite button drawables appWidgetView.setImageViewBitmap( - R.id.button_toggle_favorite, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, favoriteRes, color - ) - ) + R.id.button_toggle_favorite, + service.getTintedDrawable( + favoriteRes, color + ).toBitmap() ) if (bitmap != null) { appWidgetView.setImageViewBitmap(R.id.image, bitmap) @@ -169,7 +162,7 @@ class AppWidgetCircle : BaseAppWidget() { pushUpdate(service, appWidgetIds, appWidgetView) } - override fun onLoadCleared(placeholder: Drawable?) { } + override fun onLoadCleared(placeholder: Drawable?) {} }) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt index e6db7985a..2f1d7b173 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt @@ -23,11 +23,13 @@ import android.graphics.Color import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper @@ -35,11 +37,9 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE -import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -57,33 +57,27 @@ class AppWidgetClassic : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewBitmap( R.id.button_next, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_prev, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_toggle_play_pause, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -129,10 +123,10 @@ class AppWidgetClassic : BaseAppWidget() { .load(RetroGlideExtension.getSongModel(song)) //.checkIgnoreMediaStore() .centerCrop() - .into(object : SimpleTarget(imageSize, imageSize) { + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -153,41 +147,34 @@ class AppWidgetClassic : BaseAppWidget() { update(null, Color.WHITE) } + override fun onLoadCleared(placeholder: Drawable?) {} + private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow appWidgetView.setImageViewBitmap( R.id.button_toggle_play_pause, - ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, - playPauseRes, - color - ) - ) + service.getTintedDrawable( + playPauseRes, + color + ).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( R.id.button_next, - ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_next, - color - ) - ) + service.getTintedDrawable( + R.drawable.ic_skip_next, + color + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_prev, - ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - color - ) - ) + service.getTintedDrawable( + R.drawable.ic_skip_previous, + color + ).toBitmap() ) val image = getAlbumArtDrawable(service, bitmap) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt index 9be2d108d..cc07fa1d2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetMD3.kt @@ -22,11 +22,13 @@ import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper @@ -35,11 +37,9 @@ import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.util.DensityUtil -import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -57,31 +57,25 @@ class AppWidgetMD3 : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - secondaryColor - ), 1f - ) + R.id.button_next, + context.getTintedDrawable( + R.drawable.ic_skip_next, + secondaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - secondaryColor - ), 1f - ) + R.id.button_prev, + context.getTintedDrawable( + R.drawable.ic_skip_previous, + secondaryColor + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - secondaryColor - ), 1f - ) + R.id.button_toggle_play_pause, + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + secondaryColor + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -110,33 +104,27 @@ class AppWidgetMD3 : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - playPauseRes, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable( + playPauseRes, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_next, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_next, + service.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - MaterialValueHelper.getSecondaryTextColor(service, true) - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getSecondaryTextColor(service, true) + ).toBitmap() ) // Link actions buttons to intents @@ -159,10 +147,10 @@ class AppWidgetMD3 : BaseAppWidget() { target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) .load(RetroGlideExtension.getSongModel(song)) .centerCrop() - .into(object : SimpleTarget(imageSize, imageSize) { + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -181,30 +169,23 @@ class AppWidgetMD3 : BaseAppWidget() { update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) } + override fun onLoadCleared(placeholder: Drawable?) {} + private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, playPauseRes, color - ) - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable(playPauseRes, color).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_next, color - ) - ) + R.id.button_next, + service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, ImageUtil.createBitmap( - ImageUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_previous, color - ) - ) + R.id.button_prev, + service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap() ) val image = getAlbumArtDrawable(service, bitmap) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt index 42677486e..12246e860 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt @@ -22,11 +22,13 @@ import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.View import android.widget.RemoteViews +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper @@ -35,9 +37,8 @@ import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.transition.Transition @@ -55,33 +56,26 @@ class AppWidgetSmall : BaseAppWidget() { appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewBitmap( R.id.button_next, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_next, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + context.getTintedDrawable( + R.drawable.ic_skip_next, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_prev, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_skip_previous, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_skip_previous, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) appWidgetView.setImageViewBitmap( R.id.button_toggle_play_pause, - createBitmap( - RetroUtil.getTintedVectorDrawable( - context, - R.drawable.ic_play_arrow_white_32dp, - MaterialValueHelper.getSecondaryTextColor(context, true) - ), 1f - ) + + context.getTintedDrawable( + R.drawable.ic_play_arrow_white_32dp, + MaterialValueHelper.getSecondaryTextColor(context, true) + ).toBitmap() ) linkButtons(context, appWidgetView) @@ -132,10 +126,10 @@ class AppWidgetSmall : BaseAppWidget() { //.checkIgnoreMediaStore() .load(RetroGlideExtension.getSongModel(song)) .centerCrop() - .into(object : SimpleTarget(imageSize, imageSize) { + .into(object : CustomTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val palette = resource.palette update( @@ -154,32 +148,27 @@ class AppWidgetSmall : BaseAppWidget() { update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) } + override fun onLoadCleared(placeholder: Drawable?) { + update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) + } + private fun update(bitmap: Bitmap?, color: Int) { // Set correct drawable for pause state val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, playPauseRes, color - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable(playPauseRes, color).toBitmap() ) // Set prev/next button drawables appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_next, color - ), 1f - ) + R.id.button_next, + service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, R.drawable.ic_skip_previous, color - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap() ) val image = getAlbumArtDrawable(service, bitmap) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt index c8005768d..5e9004e98 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt @@ -21,47 +21,41 @@ import android.content.Intent import android.view.View import android.widget.RemoteViews import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmap import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil class AppWidgetText : BaseAppWidget() { override fun defaultAppWidget(context: Context, appWidgetIds: IntArray) { val appWidgetView = RemoteViews(context.packageName, R.layout.app_widget_text) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, R.drawable.ic_skip_next, ContextCompat.getColor( - context, R.color.md_white_1000 - ) - ), 1f - ) + R.id.button_next, + context.getTintedDrawable(R.drawable.ic_skip_next, ContextCompat.getColor( + context, R.color.md_white_1000 + )).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, R.drawable.ic_skip_previous, ContextCompat.getColor( - context, R.color.md_white_1000 - ) - ), 1f + R.id.button_prev, + context.getTintedDrawable(R.drawable.ic_skip_previous, ContextCompat.getColor( + context, R.color.md_white_1000 ) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - context, R.drawable.ic_play_arrow_white_32dp, ContextCompat.getColor( - context, R.color.md_white_1000 - ) - ), 1f + R.id.button_toggle_play_pause, + context.getTintedDrawable(R.drawable.ic_play_arrow_white_32dp, ContextCompat.getColor( + context, R.color.md_white_1000 ) + ).toBitmap() ) appWidgetView.setTextColor( @@ -131,36 +125,29 @@ class AppWidgetText : BaseAppWidget() { val playPauseRes = if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, playPauseRes, ContextCompat.getColor( - service, R.color.md_white_1000 - ) - ), 1f - ) + R.id.button_toggle_play_pause, + service.getTintedDrawable(playPauseRes, ContextCompat.getColor( + service, R.color.md_white_1000) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_next, createBitmap( - RetroUtil.getTintedVectorDrawable( + R.id.button_next, + service.getTintedDrawable( + R.drawable.ic_skip_next, + ContextCompat.getColor( service, - R.drawable.ic_skip_next, - ContextCompat.getColor( - service, - R.color.md_white_1000 - ) - ), 1f - ) + R.color.md_white_1000 + ) + ).toBitmap() ) appWidgetView.setImageViewBitmap( - R.id.button_prev, createBitmap( - RetroUtil.getTintedVectorDrawable( - service, - R.drawable.ic_skip_previous, - ContextCompat.getColor( - service, R.color.md_white_1000 - ) - ), 1f - ) + R.id.button_prev, + service.getTintedDrawable( + R.drawable.ic_skip_previous, + ContextCompat.getColor( + service, R.color.md_white_1000 + ) + ).toBitmap() ) pushUpdate(service.applicationContext, appWidgetIds, appWidgetView) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt index 24b73c085..e460b7956 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt @@ -25,8 +25,6 @@ import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.widget.RemoteViews import androidx.core.content.ContextCompat -import androidx.core.graphics.applyCanvas -import androidx.core.graphics.createBitmap import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song @@ -169,16 +167,6 @@ abstract class BaseAppWidget : AppWidgetProvider() { return rounded } - fun createBitmap(drawable: Drawable, sizeMultiplier: Float): Bitmap { - return createBitmap( - (drawable.intrinsicWidth * sizeMultiplier).toInt(), - (drawable.intrinsicHeight * sizeMultiplier).toInt(), - ).applyCanvas { - drawable.setBounds(0, 0, this.width, this.height) - drawable.draw(this) - } - } - protected fun composeRoundedRectPath( rect: RectF, tl: Float, diff --git a/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt b/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt index b94a60274..534b0ec52 100644 --- a/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt +++ b/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt @@ -4,8 +4,9 @@ import android.content.Context import android.net.Uri import android.support.v4.media.MediaBrowserCompat import android.support.v4.media.MediaDescriptionCompat +import androidx.core.content.res.ResourcesCompat +import androidx.core.graphics.drawable.toBitmap import androidx.core.os.bundleOf -import code.name.monkey.retromusic.util.ImageUtil internal object AutoMediaItem { @@ -13,7 +14,7 @@ internal object AutoMediaItem { return Builder(context) } - internal class Builder(val mContext: Context) { + internal class Builder(private val mContext: Context) { private var mBuilder: MediaDescriptionCompat.Builder? private var mFlags = 0 fun path(fullPath: String): Builder { @@ -42,13 +43,11 @@ internal object AutoMediaItem { fun icon(iconDrawableId: Int): Builder { mBuilder?.setIconBitmap( - ImageUtil.createBitmap( - ImageUtil.getVectorDrawable( + ResourcesCompat.getDrawable( mContext.resources, iconDrawableId, mContext.theme - ) - ) + )?.toBitmap() ) return this } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt index 8cbc4be53..a479903d7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ContextExtensions.kt @@ -2,8 +2,12 @@ package code.name.monkey.retromusic.extensions import android.content.Context import android.content.res.Configuration +import android.graphics.drawable.Drawable import android.widget.Toast +import androidx.annotation.ColorInt +import androidx.annotation.DrawableRes import androidx.annotation.StringRes +import androidx.core.content.ContextCompat fun Context.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) { showToast(getString(stringRes), duration) @@ -15,4 +19,8 @@ fun Context.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) { val Context.isLandscape: Boolean get() = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE -val Context.isTablet: Boolean get() = resources.configuration.smallestScreenWidthDp >= 600 \ No newline at end of file +val Context.isTablet: Boolean get() = resources.configuration.smallestScreenWidthDp >= 600 + +fun Context.getTintedDrawable(@DrawableRes id: Int, @ColorInt color: Int): Drawable { + return ContextCompat.getDrawable(this, id)?.tint(color)!! +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExtensions.kt index db06f137f..c23f0e979 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExtensions.kt @@ -27,7 +27,7 @@ import androidx.core.graphics.drawable.toBitmap fun Context.scaledDrawableResources( @DrawableRes id: Int, @DimenRes width: Int, - @DimenRes height: Int + @DimenRes height: Int, ): Drawable { val w = resources.getDimension(width).toInt() val h = resources.getDimension(height).toInt() 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 03dfc27f3..082f1ce4b 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 @@ -20,7 +20,6 @@ import android.content.ContentUris import android.content.Context import android.content.Intent import android.graphics.drawable.AnimatedVectorDrawable -import android.graphics.drawable.Drawable import android.media.MediaMetadataRetriever import android.os.Bundle import android.provider.MediaStore @@ -59,7 +58,6 @@ import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.RingtoneManager import com.google.android.material.bottomsheet.BottomSheetBehavior import kotlinx.coroutines.Dispatchers.IO @@ -81,7 +79,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme private var playerAlbumCoverFragment: PlayerAlbumCoverFragment? = null override fun onMenuItemClick( - item: MenuItem + item: MenuItem, ): Boolean { val song = MusicPlayerRemote.currentSong when (item.itemId) { @@ -212,8 +210,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme 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(), + val drawable = requireContext().getTintedDrawable( icon, toolbarIconColor() ) @@ -268,8 +265,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme } else { if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border } - val drawable: Drawable = RetroUtil.getTintedVectorDrawable( - requireContext(), + val drawable = requireContext().getTintedDrawable( icon, toolbarIconColor() ) @@ -337,7 +333,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, - distanceY: Float + distanceY: Float, ): Boolean { return when { abs(distanceX) > abs(distanceY) -> { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt index 51cfe3308..08831b0c6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt @@ -18,7 +18,6 @@ import android.content.Intent import android.content.res.ColorStateList import android.graphics.Color import android.graphics.drawable.AnimatedVectorDrawable -import android.graphics.drawable.Drawable import android.os.Bundle import android.view.MenuItem import android.view.View @@ -34,10 +33,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.databinding.FragmentFullPlayerControlsBinding import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.toSongEntity -import code.name.monkey.retromusic.extensions.applyColor -import code.name.monkey.retromusic.extensions.getSongInfo -import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment @@ -48,7 +44,6 @@ import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.PreferenceUtil -import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -237,17 +232,14 @@ class FullPlaybackControlsFragment : } else { if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border } - val drawable: Drawable = RetroUtil.getTintedVectorDrawable( - requireContext(), + val drawable = requireContext().getTintedDrawable( icon, Color.WHITE ) binding.songFavourite.apply { setImageDrawable(drawable) - getDrawable().also { - if (it is AnimatedVectorDrawable) { - it.start() - } + if (drawable is AnimatedVectorDrawable) { + drawable.start() } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt index 2e39e6cdd..7acb1d21c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationClassic.kt @@ -33,6 +33,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity +import code.name.monkey.retromusic.extensions.getTintedDrawable import code.name.monkey.retromusic.extensions.isColorLight import code.name.monkey.retromusic.extensions.isSystemDarkModeEnabled import code.name.monkey.retromusic.extensions.toBitmap @@ -56,7 +57,7 @@ import com.bumptech.glide.request.transition.Transition */ @SuppressLint("RestrictedApi") class PlayingNotificationClassic( - val context: Context + val context: Context, ) : PlayingNotification(context) { private var primaryColor: Int = 0 @@ -115,7 +116,7 @@ class PlayingNotificationClassic( ) { override fun onResourceReady( resource: BitmapPaletteWrapper, - transition: Transition? + transition: Transition?, ) { val colors = MediaNotificationProcessor(context, resource.bitmap) update(resource.bitmap, colors.backgroundColor) @@ -184,20 +185,17 @@ class PlayingNotificationClassic( val secondary = MaterialValueHelper.getSecondaryTextColor(context, dark) primaryColor = primary - val close = RetroUtil.getTintedVectorDrawable( - context, + val close = context.getTintedDrawable( R.drawable.ic_close, primary ).toBitmap() val prev = - RetroUtil.getTintedVectorDrawable( - context, + context.getTintedDrawable( R.drawable.ic_skip_previous_round_white_32dp, primary ).toBitmap() val next = - RetroUtil.getTintedVectorDrawable( - context, + context.getTintedDrawable( R.drawable.ic_skip_next_round_white_32dp, primary ).toBitmap() @@ -222,16 +220,14 @@ class PlayingNotificationClassic( contentView.setImageViewBitmap( R.id.smallIcon, - RetroUtil.getTintedVectorDrawable( - context, + context.getTintedDrawable( R.drawable.ic_notification, secondary ).toBitmap(0.6f) ) bigContentView.setImageViewBitmap( R.id.smallIcon, - RetroUtil.getTintedVectorDrawable( - context, + context.getTintedDrawable( R.drawable.ic_notification, secondary ).toBitmap(0.6f) @@ -241,8 +237,7 @@ class PlayingNotificationClassic( } private fun getPlayPauseBitmap(isPlaying: Boolean): Bitmap { - return RetroUtil.getTintedVectorDrawable( - context, + return context.getTintedDrawable( if (isPlaying) R.drawable.ic_pause_white_48dp else @@ -262,7 +257,7 @@ class PlayingNotificationClassic( private fun buildPendingIntent( context: Context, action: String, - serviceName: ComponentName? + serviceName: ComponentName?, ): PendingIntent { val intent = Intent(action) intent.component = serviceName @@ -299,7 +294,7 @@ class PlayingNotificationClassic( companion object { fun from( context: Context, - notificationManager: NotificationManager + notificationManager: NotificationManager, ): PlayingNotification { if (VersionUtils.hasOreo()) { createNotificationChannel(context, notificationManager) diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java index d67f0721c..b87eceab9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java @@ -14,128 +14,17 @@ package code.name.monkey.retromusic.util; -import android.content.Context; -import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; -import android.graphics.drawable.Drawable; -import androidx.annotation.ColorInt; -import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.res.ResourcesCompat; -import androidx.exifinterface.media.ExifInterface; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import code.name.monkey.appthemehelper.util.TintHelper; /** * Created on : June 18, 2016 Author : zetbaitsu Name : Zetra GitHub : https://github.com/zetbaitsu */ public class ImageUtil { - private static final int TOLERANCE = 20; - // Alpha amount for which values below are considered transparent. - private static final int ALPHA_TOLERANCE = 50; - private static int[] mTempBuffer; - private ImageUtil() {} - public static boolean isGrayscale(Bitmap bitmap) { - final int height = bitmap.getHeight(); - final int width = bitmap.getWidth(); - int size = height * width; - ensureBufferSize(size); - bitmap.getPixels(mTempBuffer, 0, width, 0, 0, width, height); - for (int i = 0; i < size; i++) { - if (!isGrayscale(mTempBuffer[i])) { - return false; - } - } - return true; - } - - public static Bitmap createBitmap(Drawable drawable) { - return createBitmap(drawable, 1f); - } - - public static Bitmap createBitmap(Drawable drawable, float sizeMultiplier) { - Bitmap bitmap = - Bitmap.createBitmap( - (int) (drawable.getIntrinsicWidth() * sizeMultiplier), - (int) (drawable.getIntrinsicHeight() * sizeMultiplier), - Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(bitmap); - drawable.setBounds(0, 0, c.getWidth(), c.getHeight()); - drawable.draw(c); - return bitmap; - } - - public static Drawable getTintedVectorDrawable( - @NonNull Resources res, - @DrawableRes int resId, - @Nullable Resources.Theme theme, - @ColorInt int color) { - return TintHelper.createTintedDrawable(getVectorDrawable(res, resId, theme), color); - } - - public static Drawable getTintedVectorDrawable( - @NonNull Context context, @DrawableRes int id, @ColorInt int color) { - return TintHelper.createTintedDrawable( - getVectorDrawable(context.getResources(), id, context.getTheme()), color); - } - - public static Drawable getVectorDrawable(@NonNull Context context, @DrawableRes int id) { - return getVectorDrawable(context.getResources(), id, context.getTheme()); - } - - public static Drawable getVectorDrawable( - @NonNull Resources res, @DrawableRes int resId, @Nullable Resources.Theme theme) { - return ResourcesCompat.getDrawable(res,resId, theme); - } - - /** Makes sure that {@code mTempBuffer} has at least length {@code size}. */ - private static void ensureBufferSize(int size) { - if (mTempBuffer == null || mTempBuffer.length < size) { - mTempBuffer = new int[size]; - } - } - - public static Bitmap setBitmapColor(Bitmap bitmap, int color) { - Bitmap result = - Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth() - 1, bitmap.getHeight() - 1); - Paint paint = new Paint(); - paint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)); - - Canvas canvas = new Canvas(result); - canvas.drawBitmap(result, 0, 0, paint); - - return result; - } - - public static boolean isGrayscale(int color) { - int alpha = 0xFF & (color >> 24); - if (alpha < ALPHA_TOLERANCE) { - return true; - } - int r = 0xFF & (color >> 16); - int g = 0xFF & (color >> 8); - int b = 0xFF & color; - return Math.abs(r - g) < TOLERANCE - && Math.abs(r - b) < TOLERANCE - && Math.abs(g - b) < TOLERANCE; - } // Amount (max is 255) that two channels can differ before the color is no longer "gray". - public static Bitmap resizeBitmap(@NonNull Bitmap src, int maxForSmallerSize) { int width = src.getWidth(); int height = src.getHeight(); @@ -185,108 +74,4 @@ public class ImageUtil { return inSampleSize; } - - static File compressImage( - File imageFile, - int reqWidth, - int reqHeight, - Bitmap.CompressFormat compressFormat, - int quality, - String destinationPath) - throws IOException { - FileOutputStream fileOutputStream = null; - File file = new File(destinationPath).getParentFile(); - if (!file.exists()) { - file.mkdirs(); - } - try { - fileOutputStream = new FileOutputStream(destinationPath); - // write the compressed bitmap at the destination specified by destinationPath. - decodeSampledBitmapFromFile(imageFile, reqWidth, reqHeight) - .compress(compressFormat, quality, fileOutputStream); - } finally { - if (fileOutputStream != null) { - fileOutputStream.flush(); - fileOutputStream.close(); - } - } - - return new File(destinationPath); - } - - static Bitmap decodeSampledBitmapFromFile(File imageFile, int reqWidth, int reqHeight) - throws IOException { - // First decode with inJustDecodeBounds=true to check dimensions - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options); - - // Calculate inSampleSize - options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); - - // Decode bitmap with inSampleSize set - options.inJustDecodeBounds = false; - - Bitmap scaledBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options); - - // check the rotation of the image and display it properly - ExifInterface exif; - exif = new ExifInterface(imageFile.getAbsolutePath()); - int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 0); - Matrix matrix = new Matrix(); - if (orientation == 6) { - matrix.postRotate(90); - } else if (orientation == 3) { - matrix.postRotate(180); - } else if (orientation == 8) { - matrix.postRotate(270); - } - scaledBitmap = - Bitmap.createBitmap( - scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); - return scaledBitmap; - } - - private static int calculateInSampleSize( - BitmapFactory.Options options, int reqWidth, int reqHeight) { - // Raw height and width of image - final int height = options.outHeight; - final int width = options.outWidth; - int inSampleSize = 1; - - if (height > reqHeight || width > reqWidth) { - - final int halfHeight = height / 2; - final int halfWidth = width / 2; - - // Calculate the largest inSampleSize value that is a power of 2 and keeps both - // height and width larger than the requested height and width. - while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) { - inSampleSize *= 2; - } - } - - return inSampleSize; - } - - @NonNull - public static Bitmap getResizedBitmap(@NonNull Bitmap image, int maxSize) { - int width = image.getWidth(); - int height = image.getHeight(); - - float bitmapRatio = (float) width / (float) height; - if (bitmapRatio > 1) { - width = maxSize; - height = (int) (width / bitmapRatio); - } else { - height = maxSize; - width = (int) (height * bitmapRatio); - } - return Bitmap.createScaledBitmap(image, width, height, true); - } - - public static Bitmap resize(InputStream stream, int scaledWidth, int scaledHeight) { - final Bitmap bitmap = BitmapFactory.decodeStream(stream); - return Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true); - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.kt index 25223ec32..60f4f5823 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.kt @@ -15,14 +15,7 @@ package code.name.monkey.retromusic.util import android.content.Context import android.content.res.Configuration -import android.content.res.Resources -import android.content.res.Resources.Theme import android.graphics.Point -import android.graphics.drawable.Drawable -import androidx.annotation.ColorInt -import androidx.annotation.DrawableRes -import androidx.core.content.res.ResourcesCompat -import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.App.Companion.getContext import java.net.InetAddress import java.net.NetworkInterface @@ -30,8 +23,8 @@ import java.text.DecimalFormat import java.util.* object RetroUtil { - fun formatValue(value: Float): String { - var value = value + fun formatValue(numValue: Float): String { + var value = numValue val arr = arrayOf("", "K", "M", "B", "T", "P", "E") var index = 0 while (value / 1000 >= 1) { @@ -76,30 +69,6 @@ object RetroUtil { return result } - fun getTintedVectorDrawable( - context: Context, - @DrawableRes id: Int, - @ColorInt color: Int, - ): Drawable { - return TintHelper.createTintedDrawable( - getVectorDrawable(context.resources, id, context.theme), color) - } - - fun getTintedVectorDrawable( - res: Resources, - @DrawableRes resId: Int, - theme: Theme?, - @ColorInt color: Int, - ): Drawable { - return TintHelper.createTintedDrawable(getVectorDrawable(res, resId, theme), color) - } - - private fun getVectorDrawable( - res: Resources, @DrawableRes resId: Int, theme: Theme?, - ): Drawable? { - return ResourcesCompat.getDrawable(res, resId, theme) - } - val isLandscape: Boolean get() = (getContext().resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE)