Migrated some legacy functions to kotlin extensions

This commit is contained in:
Prathamesh More 2022-05-05 11:55:54 +05:30
parent ee300722af
commit 08f4c62b4a
18 changed files with 290 additions and 662 deletions

View file

@ -25,13 +25,13 @@ import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder 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.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.audiocover.AudioFileCover import code.name.monkey.retromusic.glide.audiocover.AudioFileCover
import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.interfaces.ICabHolder
import code.name.monkey.retromusic.interfaces.ICallbacks import code.name.monkey.retromusic.interfaces.ICallbacks
import code.name.monkey.retromusic.util.MusicUtil 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.load.engine.DiskCacheStrategy
import com.bumptech.glide.signature.MediaStoreSignature import com.bumptech.glide.signature.MediaStoreSignature
import me.zhanghai.android.fastscroll.PopupTextProvider import me.zhanghai.android.fastscroll.PopupTextProvider
@ -45,7 +45,7 @@ class SongFileAdapter(
private var dataSet: List<File>, private var dataSet: List<File>,
private val itemLayoutRes: Int, private val itemLayoutRes: Int,
private val iCallbacks: ICallbacks?, private val iCallbacks: ICallbacks?,
iCabHolder: ICabHolder? iCabHolder: ICabHolder?,
) : AbsMultiSelectAdapter<SongFileAdapter.ViewHolder, File>( ) : AbsMultiSelectAdapter<SongFileAdapter.ViewHolder, File>(
activity, iCabHolder, R.menu.menu_media_selection activity, iCabHolder, R.menu.menu_media_selection
), PopupTextProvider { ), PopupTextProvider {
@ -110,9 +110,7 @@ class SongFileAdapter(
) )
) )
} else { } else {
val error = RetroUtil.getTintedVectorDrawable( val error = activity.getTintedDrawable(R.drawable.ic_file_music, iconColor)
activity, R.drawable.ic_file_music, iconColor
)
GlideApp.with(activity) GlideApp.with(activity)
.load(AudioFileCover(file.path)) .load(AudioFileCover(file.path))
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)

View file

@ -15,19 +15,16 @@
package code.name.monkey.retromusic.appshortcuts package code.name.monkey.retromusic.appshortcuts
import android.content.Context import android.content.Context
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.graphics.drawable.Icon import android.graphics.drawable.Icon
import android.graphics.drawable.LayerDrawable import android.graphics.drawable.LayerDrawable
import android.os.Build import android.os.Build
import android.util.TypedValue import android.util.TypedValue
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.graphics.applyCanvas import androidx.core.graphics.drawable.toBitmap
import androidx.core.graphics.createBitmap
import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.R 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.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
@RequiresApi(Build.VERSION_CODES.N_MR1) @RequiresApi(Build.VERSION_CODES.N_MR1)
object AppShortcutIconGenerator { object AppShortcutIconGenerator {
@ -64,25 +61,17 @@ object AppShortcutIconGenerator {
context: Context, context: Context,
iconId: Int, iconId: Int,
foregroundColor: Int, foregroundColor: Int,
backgroundColor: Int backgroundColor: Int,
): Icon { ): Icon {
// Get and tint foreground and background drawables // Get and tint foreground and background drawables
val vectorDrawable = RetroUtil.getTintedVectorDrawable(context, iconId, foregroundColor) val vectorDrawable = context.getTintedDrawable(iconId, foregroundColor)
val backgroundDrawable = RetroUtil.getTintedVectorDrawable( val backgroundDrawable =
context, R.drawable.ic_app_shortcut_background, backgroundColor context.getTintedDrawable(R.drawable.ic_app_shortcut_background, backgroundColor)
)
// Squash the two drawables together // Squash the two drawables together
val layerDrawable = LayerDrawable(arrayOf(backgroundDrawable, vectorDrawable)) val layerDrawable = LayerDrawable(arrayOf(backgroundDrawable, vectorDrawable))
// Return as an Icon // Return as an Icon
return Icon.createWithBitmap(drawableToBitmap(layerDrawable)) return Icon.createWithBitmap(layerDrawable.toBitmap())
}
private fun drawableToBitmap(drawable: Drawable): Bitmap {
return createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight).applyCanvas {
drawable.setBounds(0, 0, width, height)
drawable.draw(this)
}
} }
} }

View file

@ -22,11 +22,13 @@ import android.graphics.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.view.View import android.view.View
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.graphics.drawable.toBitmap
import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget 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.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.service.MusicService 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.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.RetroUtil
import com.bumptech.glide.Glide 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.target.Target
import com.bumptech.glide.request.transition.Transition 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.setImageViewResource(R.id.image, R.drawable.default_audio_art)
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next, context.getTintedDrawable(
RetroUtil.getTintedVectorDrawable(
context,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
MaterialValueHelper.getPrimaryTextColor(context, false) MaterialValueHelper.getPrimaryTextColor(context, false)
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
MaterialValueHelper.getPrimaryTextColor(context, false) MaterialValueHelper.getPrimaryTextColor(context, false)
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_play_arrow_white_32dp, R.drawable.ic_play_arrow_white_32dp,
MaterialValueHelper.getPrimaryTextColor(context, false) MaterialValueHelper.getPrimaryTextColor(context, false)
), 1f ).toBitmap()
)
) )
linkButtons(context, appWidgetView) linkButtons(context, appWidgetView)
@ -123,33 +118,27 @@ class AppWidgetBig : BaseAppWidget() {
val playPauseRes = val playPauseRes =
if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
playPauseRes, playPauseRes,
primaryColor primaryColor
), 1f ).toBitmap()
)
) )
// Set prev/next button drawables // Set prev/next button drawables
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
primaryColor primaryColor
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
primaryColor primaryColor
), 1f ).toBitmap()
)
) )
// Link actions buttons to intents // Link actions buttons to intents
@ -167,10 +156,10 @@ class AppWidgetBig : BaseAppWidget() {
.asBitmap() .asBitmap()
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.into(object : SimpleTarget<Bitmap>(widgetImageSize, widgetImageSize) { .into(object : CustomTarget<Bitmap>(widgetImageSize, widgetImageSize) {
override fun onResourceReady( override fun onResourceReady(
resource: Bitmap, resource: Bitmap,
transition: Transition<in Bitmap>? transition: Transition<in Bitmap>?,
) { ) {
update(resource) update(resource)
} }
@ -180,6 +169,8 @@ class AppWidgetBig : BaseAppWidget() {
update(null) update(null)
} }
override fun onLoadCleared(placeholder: Drawable?) {}
private fun update(bitmap: Bitmap?) { private fun update(bitmap: Bitmap?) {
if (bitmap == null) { if (bitmap == null) {
appWidgetView.setImageViewResource( appWidgetView.setImageViewResource(

View file

@ -22,11 +22,13 @@ import android.graphics.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.view.View import android.view.View
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.graphics.drawable.toBitmap
import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget 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.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper 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_REWIND
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP 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.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.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import com.bumptech.glide.Glide 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.target.Target
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
@ -56,31 +56,25 @@ class AppWidgetCard : BaseAppWidget() {
appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art)
val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true)
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
secondaryColor secondaryColor
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
secondaryColor secondaryColor
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_play_arrow_white_32dp, R.drawable.ic_play_arrow_white_32dp,
secondaryColor secondaryColor
), 1f ).toBitmap()
)
) )
linkButtons(context, appWidgetView) linkButtons(context, appWidgetView)
@ -109,33 +103,27 @@ class AppWidgetCard : BaseAppWidget() {
val playPauseRes = val playPauseRes =
if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
playPauseRes, playPauseRes,
MaterialValueHelper.getSecondaryTextColor(service, true) MaterialValueHelper.getSecondaryTextColor(service, true)
), 1f ).toBitmap()
)
) )
// Set prev/next button drawables // Set prev/next button drawables
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
MaterialValueHelper.getSecondaryTextColor(service, true) MaterialValueHelper.getSecondaryTextColor(service, true)
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
MaterialValueHelper.getSecondaryTextColor(service, true) MaterialValueHelper.getSecondaryTextColor(service, true)
), 1f ).toBitmap()
)
) )
// Link actions buttons to intents // Link actions buttons to intents
@ -158,10 +146,10 @@ class AppWidgetCard : BaseAppWidget() {
target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.centerCrop() .centerCrop()
.into(object : SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) {
override fun onResourceReady( override fun onResourceReady(
resource: BitmapPaletteWrapper, resource: BitmapPaletteWrapper,
transition: Transition<in BitmapPaletteWrapper>? transition: Transition<in BitmapPaletteWrapper>?,
) { ) {
val palette = resource.palette val palette = resource.palette
update( update(
@ -180,30 +168,23 @@ class AppWidgetCard : BaseAppWidget() {
update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) update(null, MaterialValueHelper.getSecondaryTextColor(service, true))
} }
override fun onLoadCleared(placeholder: Drawable?) {}
private fun update(bitmap: Bitmap?, color: Int) { private fun update(bitmap: Bitmap?, color: Int) {
// Set correct drawable for pause state // Set correct drawable for pause state
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, ImageUtil.createBitmap( R.id.button_toggle_play_pause,
ImageUtil.getTintedVectorDrawable( service.getTintedDrawable(playPauseRes, color).toBitmap()
service, playPauseRes, color
)
)
) )
// Set prev/next button drawables // Set prev/next button drawables
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, ImageUtil.createBitmap( R.id.button_next,
ImageUtil.getTintedVectorDrawable( service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap()
service, R.drawable.ic_skip_next, color
)
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, ImageUtil.createBitmap( R.id.button_prev,
ImageUtil.getTintedVectorDrawable( service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap()
service, R.drawable.ic_skip_previous, color
)
)
) )
val image = getAlbumArtDrawable(service, bitmap) val image = getAlbumArtDrawable(service, bitmap)

View file

@ -21,18 +21,19 @@ import android.content.Intent
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.graphics.drawable.toBitmap
import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget 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.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
import code.name.monkey.retromusic.service.MusicService 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.ACTION_TOGGLE_PAUSE
import code.name.monkey.retromusic.service.MusicService.Companion.TOGGLE_FAVORITE 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.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.RetroUtil
@ -57,13 +58,11 @@ class AppWidgetCircle : BaseAppWidget() {
appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art)
val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true)
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_play_arrow, R.drawable.ic_play_arrow,
secondaryColor secondaryColor
), 1f ).toBitmap()
)
) )
linkButtons(context, appWidgetView) linkButtons(context, appWidgetView)
@ -83,13 +82,11 @@ class AppWidgetCircle : BaseAppWidget() {
val playPauseRes = val playPauseRes =
if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
playPauseRes, playPauseRes,
MaterialValueHelper.getSecondaryTextColor(service, true) MaterialValueHelper.getSecondaryTextColor(service, true)
), 1f ).toBitmap()
)
) )
val isFavorite = runBlocking(Dispatchers.IO) { val isFavorite = runBlocking(Dispatchers.IO) {
return@runBlocking MusicUtil.repository.isSongFavorite(song.id) return@runBlocking MusicUtil.repository.isSongFavorite(song.id)
@ -97,13 +94,11 @@ class AppWidgetCircle : BaseAppWidget() {
val favoriteRes = val favoriteRes =
if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_favorite, createBitmap( R.id.button_toggle_favorite,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
favoriteRes, favoriteRes,
MaterialValueHelper.getSecondaryTextColor(service, true) MaterialValueHelper.getSecondaryTextColor(service, true)
), 1f ).toBitmap()
)
) )
// Link actions buttons to intents // Link actions buttons to intents
@ -125,7 +120,7 @@ class AppWidgetCircle : BaseAppWidget() {
.into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) {
override fun onResourceReady( override fun onResourceReady(
resource: BitmapPaletteWrapper, resource: BitmapPaletteWrapper,
transition: Transition<in BitmapPaletteWrapper>? transition: Transition<in BitmapPaletteWrapper>?,
) { ) {
val palette = resource.palette val palette = resource.palette
update( update(
@ -147,20 +142,18 @@ class AppWidgetCircle : BaseAppWidget() {
private fun update(bitmap: Bitmap?, color: Int) { private fun update(bitmap: Bitmap?, color: Int) {
// Set correct drawable for pause state // Set correct drawable for pause state
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, ImageUtil.createBitmap( R.id.button_toggle_play_pause,
ImageUtil.getTintedVectorDrawable( service.getTintedDrawable(
service, playPauseRes, color playPauseRes, color
) ).toBitmap()
)
) )
// Set favorite button drawables // Set favorite button drawables
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_favorite, ImageUtil.createBitmap( R.id.button_toggle_favorite,
ImageUtil.getTintedVectorDrawable( service.getTintedDrawable(
service, favoriteRes, color favoriteRes, color
) ).toBitmap()
)
) )
if (bitmap != null) { if (bitmap != null) {
appWidgetView.setImageViewBitmap(R.id.image, bitmap) appWidgetView.setImageViewBitmap(R.id.image, bitmap)

View file

@ -23,11 +23,13 @@ import android.graphics.Color
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.view.View import android.view.View
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.graphics.drawable.toBitmap
import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget 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.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper 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_REWIND
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_SKIP 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.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.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import com.bumptech.glide.Glide 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.target.Target
import com.bumptech.glide.request.transition.Transition 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.setImageViewResource(R.id.image, R.drawable.default_audio_art)
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, R.id.button_next,
createBitmap(
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
MaterialValueHelper.getSecondaryTextColor(context, true) MaterialValueHelper.getSecondaryTextColor(context, true)
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, R.id.button_prev,
createBitmap(
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
MaterialValueHelper.getSecondaryTextColor(context, true) MaterialValueHelper.getSecondaryTextColor(context, true)
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, R.id.button_toggle_play_pause,
createBitmap(
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_play_arrow_white_32dp, R.drawable.ic_play_arrow_white_32dp,
MaterialValueHelper.getSecondaryTextColor(context, true) MaterialValueHelper.getSecondaryTextColor(context, true)
), 1f ).toBitmap()
)
) )
linkButtons(context, appWidgetView) linkButtons(context, appWidgetView)
@ -129,10 +123,10 @@ class AppWidgetClassic : BaseAppWidget() {
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.centerCrop() .centerCrop()
.into(object : SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) {
override fun onResourceReady( override fun onResourceReady(
resource: BitmapPaletteWrapper, resource: BitmapPaletteWrapper,
transition: Transition<in BitmapPaletteWrapper>? transition: Transition<in BitmapPaletteWrapper>?,
) { ) {
val palette = resource.palette val palette = resource.palette
update( update(
@ -153,41 +147,34 @@ class AppWidgetClassic : BaseAppWidget() {
update(null, Color.WHITE) update(null, Color.WHITE)
} }
override fun onLoadCleared(placeholder: Drawable?) {}
private fun update(bitmap: Bitmap?, color: Int) { private fun update(bitmap: Bitmap?, color: Int) {
// Set correct drawable for pause state // Set correct drawable for pause state
val playPauseRes = val playPauseRes =
if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, R.id.button_toggle_play_pause,
ImageUtil.createBitmap( service.getTintedDrawable(
ImageUtil.getTintedVectorDrawable(
service,
playPauseRes, playPauseRes,
color color
) ).toBitmap()
)
) )
// Set prev/next button drawables // Set prev/next button drawables
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, R.id.button_next,
ImageUtil.createBitmap( service.getTintedDrawable(
ImageUtil.getTintedVectorDrawable(
service,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
color color
) ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, R.id.button_prev,
ImageUtil.createBitmap( service.getTintedDrawable(
ImageUtil.getTintedVectorDrawable(
service,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
color color
) ).toBitmap()
)
) )
val image = getAlbumArtDrawable(service, bitmap) val image = getAlbumArtDrawable(service, bitmap)

View file

@ -22,11 +22,13 @@ import android.graphics.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.view.View import android.view.View
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.graphics.drawable.toBitmap
import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget 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.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper 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_SKIP
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE
import code.name.monkey.retromusic.util.DensityUtil 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.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import com.bumptech.glide.Glide 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.target.Target
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
@ -57,31 +57,25 @@ class AppWidgetMD3 : BaseAppWidget() {
appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art) appWidgetView.setImageViewResource(R.id.image, R.drawable.default_audio_art)
val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true) val secondaryColor = MaterialValueHelper.getSecondaryTextColor(context, true)
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
secondaryColor secondaryColor
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
secondaryColor secondaryColor
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_play_arrow_white_32dp, R.drawable.ic_play_arrow_white_32dp,
secondaryColor secondaryColor
), 1f ).toBitmap()
)
) )
linkButtons(context, appWidgetView) linkButtons(context, appWidgetView)
@ -110,33 +104,27 @@ class AppWidgetMD3 : BaseAppWidget() {
val playPauseRes = val playPauseRes =
if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp if (isPlaying) R.drawable.ic_pause else R.drawable.ic_play_arrow_white_32dp
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
playPauseRes, playPauseRes,
MaterialValueHelper.getSecondaryTextColor(service, true) MaterialValueHelper.getSecondaryTextColor(service, true)
), 1f ).toBitmap()
)
) )
// Set prev/next button drawables // Set prev/next button drawables
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
MaterialValueHelper.getSecondaryTextColor(service, true) MaterialValueHelper.getSecondaryTextColor(service, true)
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
MaterialValueHelper.getSecondaryTextColor(service, true) MaterialValueHelper.getSecondaryTextColor(service, true)
), 1f ).toBitmap()
)
) )
// Link actions buttons to intents // Link actions buttons to intents
@ -159,10 +147,10 @@ class AppWidgetMD3 : BaseAppWidget() {
target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.centerCrop() .centerCrop()
.into(object : SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) {
override fun onResourceReady( override fun onResourceReady(
resource: BitmapPaletteWrapper, resource: BitmapPaletteWrapper,
transition: Transition<in BitmapPaletteWrapper>? transition: Transition<in BitmapPaletteWrapper>?,
) { ) {
val palette = resource.palette val palette = resource.palette
update( update(
@ -181,30 +169,23 @@ class AppWidgetMD3 : BaseAppWidget() {
update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) update(null, MaterialValueHelper.getSecondaryTextColor(service, true))
} }
override fun onLoadCleared(placeholder: Drawable?) {}
private fun update(bitmap: Bitmap?, color: Int) { private fun update(bitmap: Bitmap?, color: Int) {
// Set correct drawable for pause state // Set correct drawable for pause state
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, ImageUtil.createBitmap( R.id.button_toggle_play_pause,
ImageUtil.getTintedVectorDrawable( service.getTintedDrawable(playPauseRes, color).toBitmap()
service, playPauseRes, color
)
)
) )
// Set prev/next button drawables // Set prev/next button drawables
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, ImageUtil.createBitmap( R.id.button_next,
ImageUtil.getTintedVectorDrawable( service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap()
service, R.drawable.ic_skip_next, color
)
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, ImageUtil.createBitmap( R.id.button_prev,
ImageUtil.getTintedVectorDrawable( service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap()
service, R.drawable.ic_skip_previous, color
)
)
) )
val image = getAlbumArtDrawable(service, bitmap) val image = getAlbumArtDrawable(service, bitmap)

View file

@ -22,11 +22,13 @@ import android.graphics.Bitmap
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.view.View import android.view.View
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.graphics.drawable.toBitmap
import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget 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.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper 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_SKIP
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import com.bumptech.glide.Glide 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.target.Target
import com.bumptech.glide.request.transition.Transition 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.setImageViewResource(R.id.image, R.drawable.default_audio_art)
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, R.id.button_next,
createBitmap( context.getTintedDrawable(
RetroUtil.getTintedVectorDrawable(
context,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
MaterialValueHelper.getSecondaryTextColor(context, true) MaterialValueHelper.getSecondaryTextColor(context, true)
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, R.id.button_prev,
createBitmap(
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
MaterialValueHelper.getSecondaryTextColor(context, true) MaterialValueHelper.getSecondaryTextColor(context, true)
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, R.id.button_toggle_play_pause,
createBitmap(
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_play_arrow_white_32dp, R.drawable.ic_play_arrow_white_32dp,
MaterialValueHelper.getSecondaryTextColor(context, true) MaterialValueHelper.getSecondaryTextColor(context, true)
), 1f ).toBitmap()
)
) )
linkButtons(context, appWidgetView) linkButtons(context, appWidgetView)
@ -132,10 +126,10 @@ class AppWidgetSmall : BaseAppWidget() {
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.centerCrop() .centerCrop()
.into(object : SimpleTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) {
override fun onResourceReady( override fun onResourceReady(
resource: BitmapPaletteWrapper, resource: BitmapPaletteWrapper,
transition: Transition<in BitmapPaletteWrapper>? transition: Transition<in BitmapPaletteWrapper>?,
) { ) {
val palette = resource.palette val palette = resource.palette
update( update(
@ -154,32 +148,27 @@ class AppWidgetSmall : BaseAppWidget() {
update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) update(null, MaterialValueHelper.getSecondaryTextColor(service, true))
} }
override fun onLoadCleared(placeholder: Drawable?) {
update(null, MaterialValueHelper.getSecondaryTextColor(service, true))
}
private fun update(bitmap: Bitmap?, color: Int) { private fun update(bitmap: Bitmap?, color: Int) {
// Set correct drawable for pause state // Set correct drawable for pause state
val playPauseRes = if (isPlaying) R.drawable.ic_pause val playPauseRes = if (isPlaying) R.drawable.ic_pause
else R.drawable.ic_play_arrow_white_32dp else R.drawable.ic_play_arrow_white_32dp
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(playPauseRes, color).toBitmap()
service, playPauseRes, color
), 1f
)
) )
// Set prev/next button drawables // Set prev/next button drawables
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(R.drawable.ic_skip_next, color).toBitmap()
service, R.drawable.ic_skip_next, color
), 1f
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(R.drawable.ic_skip_previous, color).toBitmap()
service, R.drawable.ic_skip_previous, color
), 1f
)
) )
val image = getAlbumArtDrawable(service, bitmap) val image = getAlbumArtDrawable(service, bitmap)

View file

@ -21,47 +21,41 @@ import android.content.Intent
import android.view.View import android.view.View
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toBitmap
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget 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
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND 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_SKIP
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_TOGGLE_PAUSE
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
class AppWidgetText : BaseAppWidget() { class AppWidgetText : BaseAppWidget() {
override fun defaultAppWidget(context: Context, appWidgetIds: IntArray) { override fun defaultAppWidget(context: Context, appWidgetIds: IntArray) {
val appWidgetView = RemoteViews(context.packageName, R.layout.app_widget_text) val appWidgetView = RemoteViews(context.packageName, R.layout.app_widget_text)
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(R.drawable.ic_skip_next, ContextCompat.getColor(
context, R.drawable.ic_skip_next, ContextCompat.getColor(
context, R.color.md_white_1000 context, R.color.md_white_1000
) )).toBitmap()
), 1f
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(R.drawable.ic_skip_previous, ContextCompat.getColor(
context, R.drawable.ic_skip_previous, ContextCompat.getColor(
context, R.color.md_white_1000 context, R.color.md_white_1000
) )
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(R.drawable.ic_play_arrow_white_32dp, ContextCompat.getColor(
context, R.drawable.ic_play_arrow_white_32dp, ContextCompat.getColor(
context, R.color.md_white_1000 context, R.color.md_white_1000
) )
), 1f ).toBitmap()
)
) )
appWidgetView.setTextColor( appWidgetView.setTextColor(
@ -131,36 +125,29 @@ class AppWidgetText : BaseAppWidget() {
val playPauseRes = if (isPlaying) R.drawable.ic_pause val playPauseRes = if (isPlaying) R.drawable.ic_pause
else R.drawable.ic_play_arrow_white_32dp else R.drawable.ic_play_arrow_white_32dp
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_toggle_play_pause, createBitmap( R.id.button_toggle_play_pause,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(playPauseRes, ContextCompat.getColor(
service, playPauseRes, ContextCompat.getColor( service, R.color.md_white_1000)
service, R.color.md_white_1000 ).toBitmap()
)
), 1f
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_next, createBitmap( R.id.button_next,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
R.drawable.ic_skip_next, R.drawable.ic_skip_next,
ContextCompat.getColor( ContextCompat.getColor(
service, service,
R.color.md_white_1000 R.color.md_white_1000
) )
), 1f ).toBitmap()
)
) )
appWidgetView.setImageViewBitmap( appWidgetView.setImageViewBitmap(
R.id.button_prev, createBitmap( R.id.button_prev,
RetroUtil.getTintedVectorDrawable( service.getTintedDrawable(
service,
R.drawable.ic_skip_previous, R.drawable.ic_skip_previous,
ContextCompat.getColor( ContextCompat.getColor(
service, R.color.md_white_1000 service, R.color.md_white_1000
) )
), 1f ).toBitmap()
)
) )
pushUpdate(service.applicationContext, appWidgetIds, appWidgetView) pushUpdate(service.applicationContext, appWidgetIds, appWidgetView)

View file

@ -25,8 +25,6 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.core.content.ContextCompat 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.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
@ -169,16 +167,6 @@ abstract class BaseAppWidget : AppWidgetProvider() {
return rounded 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( protected fun composeRoundedRectPath(
rect: RectF, rect: RectF,
tl: Float, tl: Float,

View file

@ -4,8 +4,9 @@ import android.content.Context
import android.net.Uri import android.net.Uri
import android.support.v4.media.MediaBrowserCompat import android.support.v4.media.MediaBrowserCompat
import android.support.v4.media.MediaDescriptionCompat import android.support.v4.media.MediaDescriptionCompat
import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.drawable.toBitmap
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import code.name.monkey.retromusic.util.ImageUtil
internal object AutoMediaItem { internal object AutoMediaItem {
@ -13,7 +14,7 @@ internal object AutoMediaItem {
return Builder(context) return Builder(context)
} }
internal class Builder(val mContext: Context) { internal class Builder(private val mContext: Context) {
private var mBuilder: MediaDescriptionCompat.Builder? private var mBuilder: MediaDescriptionCompat.Builder?
private var mFlags = 0 private var mFlags = 0
fun path(fullPath: String): Builder { fun path(fullPath: String): Builder {
@ -42,13 +43,11 @@ internal object AutoMediaItem {
fun icon(iconDrawableId: Int): Builder { fun icon(iconDrawableId: Int): Builder {
mBuilder?.setIconBitmap( mBuilder?.setIconBitmap(
ImageUtil.createBitmap( ResourcesCompat.getDrawable(
ImageUtil.getVectorDrawable(
mContext.resources, mContext.resources,
iconDrawableId, iconDrawableId,
mContext.theme mContext.theme
) )?.toBitmap()
)
) )
return this return this
} }

View file

@ -2,8 +2,12 @@ package code.name.monkey.retromusic.extensions
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.graphics.drawable.Drawable
import android.widget.Toast import android.widget.Toast
import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.core.content.ContextCompat
fun Context.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) { fun Context.showToast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) {
showToast(getString(stringRes), duration) showToast(getString(stringRes), duration)
@ -16,3 +20,7 @@ fun Context.showToast(message: String, duration: Int = Toast.LENGTH_SHORT) {
val Context.isLandscape: Boolean get() = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE val Context.isLandscape: Boolean get() = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
val Context.isTablet: Boolean get() = resources.configuration.smallestScreenWidthDp >= 600 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)!!
}

View file

@ -27,7 +27,7 @@ import androidx.core.graphics.drawable.toBitmap
fun Context.scaledDrawableResources( fun Context.scaledDrawableResources(
@DrawableRes id: Int, @DrawableRes id: Int,
@DimenRes width: Int, @DimenRes width: Int,
@DimenRes height: Int @DimenRes height: Int,
): Drawable { ): Drawable {
val w = resources.getDimension(width).toInt() val w = resources.getDimension(width).toInt()
val h = resources.getDimension(height).toInt() val h = resources.getDimension(height).toInt()

View file

@ -20,7 +20,6 @@ import android.content.ContentUris
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.drawable.AnimatedVectorDrawable import android.graphics.drawable.AnimatedVectorDrawable
import android.graphics.drawable.Drawable
import android.media.MediaMetadataRetriever import android.media.MediaMetadataRetriever
import android.os.Bundle import android.os.Bundle
import android.provider.MediaStore 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.service.MusicService
import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.RingtoneManager import code.name.monkey.retromusic.util.RingtoneManager
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@ -81,7 +79,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
private var playerAlbumCoverFragment: PlayerAlbumCoverFragment? = null private var playerAlbumCoverFragment: PlayerAlbumCoverFragment? = null
override fun onMenuItemClick( override fun onMenuItemClick(
item: MenuItem item: MenuItem,
): Boolean { ): Boolean {
val song = MusicPlayerRemote.currentSong val song = MusicPlayerRemote.currentSong
when (item.itemId) { when (item.itemId) {
@ -212,8 +210,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
private fun showLyricsIcon(item: MenuItem) { private fun showLyricsIcon(item: MenuItem) {
val icon = val icon =
if (PreferenceUtil.showLyrics) R.drawable.ic_lyrics else R.drawable.ic_lyrics_outline if (PreferenceUtil.showLyrics) R.drawable.ic_lyrics else R.drawable.ic_lyrics_outline
val drawable: Drawable = RetroUtil.getTintedVectorDrawable( val drawable = requireContext().getTintedDrawable(
requireContext(),
icon, icon,
toolbarIconColor() toolbarIconColor()
) )
@ -268,8 +265,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
} else { } else {
if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border
} }
val drawable: Drawable = RetroUtil.getTintedVectorDrawable( val drawable = requireContext().getTintedDrawable(
requireContext(),
icon, icon,
toolbarIconColor() toolbarIconColor()
) )
@ -337,7 +333,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
e1: MotionEvent?, e1: MotionEvent?,
e2: MotionEvent?, e2: MotionEvent?,
distanceX: Float, distanceX: Float,
distanceY: Float distanceY: Float,
): Boolean { ): Boolean {
return when { return when {
abs(distanceX) > abs(distanceY) -> { abs(distanceX) > abs(distanceY) -> {

View file

@ -18,7 +18,6 @@ import android.content.Intent
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.AnimatedVectorDrawable import android.graphics.drawable.AnimatedVectorDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import android.view.View 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.databinding.FragmentFullPlayerControlsBinding
import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.PlaylistEntity
import code.name.monkey.retromusic.db.toSongEntity import code.name.monkey.retromusic.db.toSongEntity
import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.*
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.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.ReloadType
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment 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.model.Song
import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -237,17 +232,14 @@ class FullPlaybackControlsFragment :
} else { } else {
if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border
} }
val drawable: Drawable = RetroUtil.getTintedVectorDrawable( val drawable = requireContext().getTintedDrawable(
requireContext(),
icon, icon,
Color.WHITE Color.WHITE
) )
binding.songFavourite.apply { binding.songFavourite.apply {
setImageDrawable(drawable) setImageDrawable(drawable)
getDrawable().also { if (drawable is AnimatedVectorDrawable) {
if (it is AnimatedVectorDrawable) { drawable.start()
it.start()
}
} }
} }
} }

View file

@ -33,6 +33,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.MainActivity 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.isColorLight
import code.name.monkey.retromusic.extensions.isSystemDarkModeEnabled import code.name.monkey.retromusic.extensions.isSystemDarkModeEnabled
import code.name.monkey.retromusic.extensions.toBitmap import code.name.monkey.retromusic.extensions.toBitmap
@ -56,7 +57,7 @@ import com.bumptech.glide.request.transition.Transition
*/ */
@SuppressLint("RestrictedApi") @SuppressLint("RestrictedApi")
class PlayingNotificationClassic( class PlayingNotificationClassic(
val context: Context val context: Context,
) : PlayingNotification(context) { ) : PlayingNotification(context) {
private var primaryColor: Int = 0 private var primaryColor: Int = 0
@ -115,7 +116,7 @@ class PlayingNotificationClassic(
) { ) {
override fun onResourceReady( override fun onResourceReady(
resource: BitmapPaletteWrapper, resource: BitmapPaletteWrapper,
transition: Transition<in BitmapPaletteWrapper>? transition: Transition<in BitmapPaletteWrapper>?,
) { ) {
val colors = MediaNotificationProcessor(context, resource.bitmap) val colors = MediaNotificationProcessor(context, resource.bitmap)
update(resource.bitmap, colors.backgroundColor) update(resource.bitmap, colors.backgroundColor)
@ -184,20 +185,17 @@ class PlayingNotificationClassic(
val secondary = MaterialValueHelper.getSecondaryTextColor(context, dark) val secondary = MaterialValueHelper.getSecondaryTextColor(context, dark)
primaryColor = primary primaryColor = primary
val close = RetroUtil.getTintedVectorDrawable( val close = context.getTintedDrawable(
context,
R.drawable.ic_close, R.drawable.ic_close,
primary primary
).toBitmap() ).toBitmap()
val prev = val prev =
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_previous_round_white_32dp, R.drawable.ic_skip_previous_round_white_32dp,
primary primary
).toBitmap() ).toBitmap()
val next = val next =
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_skip_next_round_white_32dp, R.drawable.ic_skip_next_round_white_32dp,
primary primary
).toBitmap() ).toBitmap()
@ -222,16 +220,14 @@ class PlayingNotificationClassic(
contentView.setImageViewBitmap( contentView.setImageViewBitmap(
R.id.smallIcon, R.id.smallIcon,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_notification, R.drawable.ic_notification,
secondary secondary
).toBitmap(0.6f) ).toBitmap(0.6f)
) )
bigContentView.setImageViewBitmap( bigContentView.setImageViewBitmap(
R.id.smallIcon, R.id.smallIcon,
RetroUtil.getTintedVectorDrawable( context.getTintedDrawable(
context,
R.drawable.ic_notification, R.drawable.ic_notification,
secondary secondary
).toBitmap(0.6f) ).toBitmap(0.6f)
@ -241,8 +237,7 @@ class PlayingNotificationClassic(
} }
private fun getPlayPauseBitmap(isPlaying: Boolean): Bitmap { private fun getPlayPauseBitmap(isPlaying: Boolean): Bitmap {
return RetroUtil.getTintedVectorDrawable( return context.getTintedDrawable(
context,
if (isPlaying) if (isPlaying)
R.drawable.ic_pause_white_48dp R.drawable.ic_pause_white_48dp
else else
@ -262,7 +257,7 @@ class PlayingNotificationClassic(
private fun buildPendingIntent( private fun buildPendingIntent(
context: Context, action: String, context: Context, action: String,
serviceName: ComponentName? serviceName: ComponentName?,
): PendingIntent { ): PendingIntent {
val intent = Intent(action) val intent = Intent(action)
intent.component = serviceName intent.component = serviceName
@ -299,7 +294,7 @@ class PlayingNotificationClassic(
companion object { companion object {
fun from( fun from(
context: Context, context: Context,
notificationManager: NotificationManager notificationManager: NotificationManager,
): PlayingNotification { ): PlayingNotification {
if (VersionUtils.hasOreo()) { if (VersionUtils.hasOreo()) {
createNotificationChannel(context, notificationManager) createNotificationChannel(context, notificationManager)

View file

@ -14,128 +14,17 @@
package code.name.monkey.retromusic.util; package code.name.monkey.retromusic.util;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap; 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.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 * Created on : June 18, 2016 Author : zetbaitsu Name : Zetra GitHub : https://github.com/zetbaitsu
*/ */
public class ImageUtil { 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() {} 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) { public static Bitmap resizeBitmap(@NonNull Bitmap src, int maxForSmallerSize) {
int width = src.getWidth(); int width = src.getWidth();
int height = src.getHeight(); int height = src.getHeight();
@ -185,108 +74,4 @@ public class ImageUtil {
return inSampleSize; 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);
}
} }

View file

@ -15,14 +15,7 @@ package code.name.monkey.retromusic.util
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.content.res.Resources
import android.content.res.Resources.Theme
import android.graphics.Point 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 code.name.monkey.retromusic.App.Companion.getContext
import java.net.InetAddress import java.net.InetAddress
import java.net.NetworkInterface import java.net.NetworkInterface
@ -30,8 +23,8 @@ import java.text.DecimalFormat
import java.util.* import java.util.*
object RetroUtil { object RetroUtil {
fun formatValue(value: Float): String { fun formatValue(numValue: Float): String {
var value = value var value = numValue
val arr = arrayOf("", "K", "M", "B", "T", "P", "E") val arr = arrayOf("", "K", "M", "B", "T", "P", "E")
var index = 0 var index = 0
while (value / 1000 >= 1) { while (value / 1000 >= 1) {
@ -76,30 +69,6 @@ object RetroUtil {
return result 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 val isLandscape: Boolean
get() = (getContext().resources.configuration.orientation get() = (getContext().resources.configuration.orientation
== Configuration.ORIENTATION_LANDSCAPE) == Configuration.ORIENTATION_LANDSCAPE)