Migrated some legacy functions to kotlin extensions
This commit is contained in:
parent
ee300722af
commit
08f4c62b4a
18 changed files with 290 additions and 662 deletions
|
@ -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)
|
||||||
|
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
@ -169,7 +162,7 @@ class AppWidgetCircle : BaseAppWidget() {
|
||||||
pushUpdate(service, appWidgetIds, appWidgetView)
|
pushUpdate(service, appWidgetIds, appWidgetView)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLoadCleared(placeholder: Drawable?) { }
|
override fun onLoadCleared(placeholder: Drawable?) {}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)!!
|
||||||
|
}
|
|
@ -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()
|
||||||
|
|
|
@ -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) -> {
|
||||||
|
|
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue