Migrate to ksp and fixed some deprecations

This commit is contained in:
Prathamesh More 2023-03-06 13:53:54 +05:30
parent 4236a134ad
commit 054c09d999
73 changed files with 575 additions and 260 deletions

View file

@ -3,6 +3,7 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs.kotlin" apply plugin: "androidx.navigation.safeargs.kotlin"
apply plugin: 'kotlin-parcelize' apply plugin: 'kotlin-parcelize'
apply plugin: 'com.google.devtools.ksp'
android { android {
compileSdk 33 compileSdk 33
@ -123,7 +124,7 @@ dependencies {
def room_version = '2.5.0' def room_version = '2.5.0'
implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version" implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version" ksp "androidx.room:room-compiler:$room_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
@ -156,7 +157,7 @@ dependencies {
def glide_version = '4.15.0' def glide_version = '4.15.0'
implementation "com.github.bumptech.glide:glide:$glide_version" implementation "com.github.bumptech.glide:glide:$glide_version"
kapt "com.github.bumptech.glide:compiler:$glide_version" ksp "com.github.bumptech.glide:ksp:$glide_version"
implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version" implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version"
implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0' implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0'

View file

@ -26,8 +26,8 @@ import code.name.monkey.retromusic.db.toSongEntity
import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.drawAboveSystemBars import code.name.monkey.retromusic.extensions.drawAboveSystemBars
import code.name.monkey.retromusic.glide.BlurTransformation import code.name.monkey.retromusic.glide.BlurTransformation
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.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback
@ -36,6 +36,7 @@ import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.RealRepository 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.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import com.bumptech.glide.Glide
import com.google.android.material.slider.Slider import com.google.android.material.slider.Slider
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -64,7 +65,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
lastPlaybackControlsColor = accentColor() lastPlaybackControlsColor = accentColor()
binding.close.setOnClickListener { binding.close.setOnClickListener {
onBackPressed() onBackPressedDispatcher.onBackPressed()
} }
binding.repeatButton.drawAboveSystemBars() binding.repeatButton.drawAboveSystemBars()
} }
@ -185,6 +186,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
lastPlaybackControlsColor, lastPlaybackControlsColor,
PorterDuff.Mode.SRC_IN PorterDuff.Mode.SRC_IN
) )
else -> binding.shuffleButton.setColorFilter( else -> binding.shuffleButton.setColorFilter(
lastDisabledPlaybackControlsColor, lastDisabledPlaybackControlsColor,
PorterDuff.Mode.SRC_IN PorterDuff.Mode.SRC_IN
@ -201,6 +203,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
PorterDuff.Mode.SRC_IN PorterDuff.Mode.SRC_IN
) )
} }
MusicService.REPEAT_MODE_ALL -> { MusicService.REPEAT_MODE_ALL -> {
binding.repeatButton.setImageResource(R.drawable.ic_repeat) binding.repeatButton.setImageResource(R.drawable.ic_repeat)
binding.repeatButton.setColorFilter( binding.repeatButton.setColorFilter(
@ -208,6 +211,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
PorterDuff.Mode.SRC_IN PorterDuff.Mode.SRC_IN
) )
} }
MusicService.REPEAT_MODE_THIS -> { MusicService.REPEAT_MODE_THIS -> {
binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) binding.repeatButton.setImageResource(R.drawable.ic_repeat_one)
binding.repeatButton.setColorFilter( binding.repeatButton.setColorFilter(
@ -235,7 +239,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback {
binding.songTitle.text = song.title binding.songTitle.text = song.title
binding.songText.text = song.artistName binding.songText.text = song.artistName
GlideApp.with(this) Glide.with(this)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.songCoverOptions(song) .songCoverOptions(song)
.transform(BlurTransformation.Builder(this).build()) .transform(BlurTransformation.Builder(this).build())

View file

@ -77,7 +77,7 @@ class LicenseActivity : AbsThemeActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) { if (item.itemId == android.R.id.home) {
onBackPressed() onBackPressedDispatcher.onBackPressed()
return true return true
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)

View file

@ -26,11 +26,13 @@ import code.name.monkey.retromusic.extensions.hideStatusBar
import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto import code.name.monkey.retromusic.extensions.setTaskDescriptionColorAuto
import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.extensions.whichFragment
import code.name.monkey.retromusic.fragments.player.lockscreen.LockScreenControlsFragment import code.name.monkey.retromusic.fragments.player.lockscreen.LockScreenControlsFragment
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import com.r0adkll.slidr.Slidr import com.r0adkll.slidr.Slidr
import com.r0adkll.slidr.model.SlidrConfig import com.r0adkll.slidr.model.SlidrConfig
import com.r0adkll.slidr.model.SlidrListener import com.r0adkll.slidr.model.SlidrListener
@ -105,7 +107,7 @@ class LockScreenActivity : AbsMusicServiceActivity() {
private fun updateSongs() { private fun updateSongs() {
val song = MusicPlayerRemote.currentSong val song = MusicPlayerRemote.currentSong
GlideApp.with(this) Glide.with(this)
.asBitmapPalette() .asBitmapPalette()
.songCoverOptions(song) .songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))

View file

@ -22,6 +22,7 @@ import android.content.res.ColorStateList
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.Settings import android.provider.Settings
import androidx.activity.OnBackPressedCallback
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.net.toUri import androidx.core.net.toUri
@ -61,9 +62,11 @@ class PermissionActivity : AbsMusicServiceActivity() {
if (VersionUtils.hasS()) { if (VersionUtils.hasS()) {
binding.bluetoothPermission.show() binding.bluetoothPermission.show()
binding.bluetoothPermission.setButtonClick { binding.bluetoothPermission.setButtonClick {
ActivityCompat.requestPermissions(this, ActivityCompat.requestPermissions(
this,
arrayOf(BLUETOOTH_CONNECT), arrayOf(BLUETOOTH_CONNECT),
BLUETOOTH_PERMISSION_REQUEST) BLUETOOTH_PERMISSION_REQUEST
)
} }
} else { } else {
binding.audioPermission.setNumber("2") binding.audioPermission.setNumber("2")
@ -81,14 +84,22 @@ class PermissionActivity : AbsMusicServiceActivity() {
finish() finish()
} }
} }
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
finishAffinity()
remove()
}
})
} }
private fun setupTitle() { private fun setupTitle() {
val color = accentColor() val color = accentColor()
val hexColor = String.format("#%06X", 0xFFFFFF and color) val hexColor = String.format("#%06X", 0xFFFFFF and color)
val appName = val appName =
getString(R.string.message_welcome, getString(
"<b>Retro <span style='color:$hexColor';>Music</span></b>") R.string.message_welcome,
"<b>Retro <span style='color:$hexColor';>Music</span></b>"
)
.parseAsHtml() .parseAsHtml()
binding.appNameText.text = appName binding.appNameText.text = appName
} }
@ -118,23 +129,22 @@ class PermissionActivity : AbsMusicServiceActivity() {
} }
private fun hasStoragePermission(): Boolean { private fun hasStoragePermission(): Boolean {
return ActivityCompat.checkSelfPermission(this, return ActivityCompat.checkSelfPermission(
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED this,
Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED
} }
@RequiresApi(Build.VERSION_CODES.S) @RequiresApi(Build.VERSION_CODES.S)
private fun hasBluetoothPermission(): Boolean { private fun hasBluetoothPermission(): Boolean {
return ActivityCompat.checkSelfPermission(this, return ActivityCompat.checkSelfPermission(
BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED this,
BLUETOOTH_CONNECT
) == PackageManager.PERMISSION_GRANTED
} }
@RequiresApi(Build.VERSION_CODES.M) @RequiresApi(Build.VERSION_CODES.M)
private fun hasAudioPermission(): Boolean { private fun hasAudioPermission(): Boolean {
return Settings.System.canWrite(this) return Settings.System.canWrite(this)
} }
override fun onBackPressed() {
super.onBackPressed()
finishAffinity()
}
} }

View file

@ -30,12 +30,14 @@ import code.name.monkey.retromusic.databinding.ActivityShareInstagramBinding
import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.setLightStatusBar import code.name.monkey.retromusic.extensions.setLightStatusBar
import code.name.monkey.retromusic.extensions.setStatusBarColor import code.name.monkey.retromusic.extensions.setStatusBarColor
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.Share import code.name.monkey.retromusic.util.Share
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
/** /**
* Created by hemanths on 2020-02-02. * Created by hemanths on 2020-02-02.
@ -51,7 +53,7 @@ class ShareInstagramStory : AbsThemeActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) { if (item.itemId == android.R.id.home) {
onBackPressed() onBackPressedDispatcher.onBackPressed()
return true return true
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
@ -68,7 +70,7 @@ class ShareInstagramStory : AbsThemeActivity() {
val song = intent.extras?.getParcelable<Song>(EXTRA_SONG) val song = intent.extras?.getParcelable<Song>(EXTRA_SONG)
song?.let { songFinal -> song?.let { songFinal ->
GlideApp.with(this) Glide.with(this)
.asBitmapPalette() .asBitmapPalette()
.songCoverOptions(songFinal) .songCoverOptions(songFinal)
.load(RetroGlideExtension.getSongModel(songFinal)) .load(RetroGlideExtension.getSongModel(songFinal))

View file

@ -30,7 +30,7 @@ class SupportDevelopmentActivity : AbsThemeActivity() {
lateinit var binding: ActivityDonationBinding lateinit var binding: ActivityDonationBinding
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) { if (item.itemId == android.R.id.home) {
onBackPressed() onBackPressedDispatcher.onBackPressed()
return true return true
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)

View file

@ -22,7 +22,7 @@ import code.name.monkey.retromusic.extensions.openUrl
import code.name.monkey.retromusic.util.PreferenceUtil.lastVersion import code.name.monkey.retromusic.util.PreferenceUtil.lastVersion
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import java.nio.charset.StandardCharsets import java.nio.charset.StandardCharsets
import java.util.* import java.util.Locale
class WhatsNewFragment : BottomSheetDialogFragment() { class WhatsNewFragment : BottomSheetDialogFragment() {
private var _binding: FragmentWhatsNewBinding? = null private var _binding: FragmentWhatsNewBinding? = null
@ -41,7 +41,7 @@ class WhatsNewFragment : BottomSheetDialogFragment() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
try { try {
val buf = StringBuilder() val buf = StringBuilder()
val stream= requireContext().assets.open("retro-changelog.html") val stream = requireContext().assets.open("retro-changelog.html")
stream.reader(StandardCharsets.UTF_8).buffered().use { br -> stream.reader(StandardCharsets.UTF_8).buffered().use { br ->
var str: String? var str: String?
while (br.readLine().also { str = it } != null) { while (br.readLine().also { str = it } != null) {

View file

@ -33,10 +33,44 @@ import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.fragment.app.commit import androidx.fragment.app.commit
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.* import code.name.monkey.retromusic.ADAPTIVE_COLOR_APP
import code.name.monkey.retromusic.ALBUM_COVER_STYLE
import code.name.monkey.retromusic.ALBUM_COVER_TRANSFORM
import code.name.monkey.retromusic.CAROUSEL_EFFECT
import code.name.monkey.retromusic.CIRCLE_PLAY_BUTTON
import code.name.monkey.retromusic.EXTRA_SONG_INFO
import code.name.monkey.retromusic.KEEP_SCREEN_ON
import code.name.monkey.retromusic.LIBRARY_CATEGORIES
import code.name.monkey.retromusic.NOW_PLAYING_SCREEN_ID
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.SCREEN_ON_LYRICS
import code.name.monkey.retromusic.SWIPE_ANYWHERE_NOW_PLAYING
import code.name.monkey.retromusic.SWIPE_DOWN_DISMISS
import code.name.monkey.retromusic.TAB_TEXT_MODE
import code.name.monkey.retromusic.TOGGLE_ADD_CONTROLS
import code.name.monkey.retromusic.TOGGLE_FULL_SCREEN
import code.name.monkey.retromusic.TOGGLE_VOLUME
import code.name.monkey.retromusic.activities.PermissionActivity import code.name.monkey.retromusic.activities.PermissionActivity
import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.currentFragment
import code.name.monkey.retromusic.extensions.darkAccentColor
import code.name.monkey.retromusic.extensions.dip
import code.name.monkey.retromusic.extensions.getBottomInsets
import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.isColorLight
import code.name.monkey.retromusic.extensions.isLandscape
import code.name.monkey.retromusic.extensions.keepScreenOn
import code.name.monkey.retromusic.extensions.maybeSetScreenOn
import code.name.monkey.retromusic.extensions.peekHeightAnimate
import code.name.monkey.retromusic.extensions.setLightNavigationBar
import code.name.monkey.retromusic.extensions.setLightNavigationBarAuto
import code.name.monkey.retromusic.extensions.setLightStatusBar
import code.name.monkey.retromusic.extensions.setLightStatusBarAuto
import code.name.monkey.retromusic.extensions.setNavigationBarColorPreOreo
import code.name.monkey.retromusic.extensions.setTaskDescriptionColor
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.extensions.whichFragment
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.fragments.NowPlayingScreen import code.name.monkey.retromusic.fragments.NowPlayingScreen
import code.name.monkey.retromusic.fragments.NowPlayingScreen.* import code.name.monkey.retromusic.fragments.NowPlayingScreen.*
@ -68,7 +102,13 @@ import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.logD import code.name.monkey.retromusic.util.logD
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetBehavior.* import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_DRAGGING
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_SETTLING
import com.google.android.material.bottomsheet.BottomSheetBehavior.from
import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
@ -120,21 +160,25 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
keepScreenOn(true) keepScreenOn(true)
} }
} }
STATE_COLLAPSED -> { STATE_COLLAPSED -> {
onPanelCollapsed() onPanelCollapsed()
if ((PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics) || !PreferenceUtil.isScreenOnEnabled) { if ((PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics) || !PreferenceUtil.isScreenOnEnabled) {
keepScreenOn(false) keepScreenOn(false)
} }
} }
STATE_SETTLING, STATE_DRAGGING -> { STATE_SETTLING, STATE_DRAGGING -> {
if (fromNotification) { if (fromNotification) {
binding.navigationView.bringToFront() binding.navigationView.bringToFront()
fromNotification = false fromNotification = false
} }
} }
STATE_HIDDEN -> { STATE_HIDDEN -> {
MusicPlayerRemote.clearQueue() MusicPlayerRemote.clearQueue()
} }
else -> { else -> {
logD("Do a flip") logD("Do a flip")
} }
@ -198,9 +242,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
SWIPE_DOWN_DISMISS -> { SWIPE_DOWN_DISMISS -> {
bottomSheetBehavior.isHideable = PreferenceUtil.swipeDownToDismiss bottomSheetBehavior.isHideable = PreferenceUtil.swipeDownToDismiss
} }
TOGGLE_ADD_CONTROLS -> { TOGGLE_ADD_CONTROLS -> {
miniPlayerFragment?.setUpButtons() miniPlayerFragment?.setUpButtons()
} }
NOW_PLAYING_SCREEN_ID -> { NOW_PLAYING_SCREEN_ID -> {
chooseFragmentForTheme() chooseFragmentForTheme()
binding.slidingPanel.updateLayoutParams<ViewGroup.LayoutParams> { binding.slidingPanel.updateLayoutParams<ViewGroup.LayoutParams> {
@ -212,33 +258,41 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
onServiceConnected() onServiceConnected()
} }
} }
ALBUM_COVER_TRANSFORM, CAROUSEL_EFFECT, ALBUM_COVER_TRANSFORM, CAROUSEL_EFFECT,
ALBUM_COVER_STYLE, TOGGLE_VOLUME, EXTRA_SONG_INFO, CIRCLE_PLAY_BUTTON, ALBUM_COVER_STYLE, TOGGLE_VOLUME, EXTRA_SONG_INFO, CIRCLE_PLAY_BUTTON,
-> { -> {
chooseFragmentForTheme() chooseFragmentForTheme()
onServiceConnected() onServiceConnected()
} }
SWIPE_ANYWHERE_NOW_PLAYING -> { SWIPE_ANYWHERE_NOW_PLAYING -> {
playerFragment.addSwipeDetector() playerFragment.addSwipeDetector()
} }
ADAPTIVE_COLOR_APP -> { ADAPTIVE_COLOR_APP -> {
if (PreferenceUtil.nowPlayingScreen in listOf(Normal, Material, Flat)) { if (PreferenceUtil.nowPlayingScreen in listOf(Normal, Material, Flat)) {
chooseFragmentForTheme() chooseFragmentForTheme()
onServiceConnected() onServiceConnected()
} }
} }
LIBRARY_CATEGORIES -> { LIBRARY_CATEGORIES -> {
updateTabs() updateTabs()
} }
TAB_TEXT_MODE -> { TAB_TEXT_MODE -> {
navigationView.labelVisibilityMode = PreferenceUtil.tabTitleMode navigationView.labelVisibilityMode = PreferenceUtil.tabTitleMode
} }
TOGGLE_FULL_SCREEN -> { TOGGLE_FULL_SCREEN -> {
recreate() recreate()
} }
SCREEN_ON_LYRICS -> { SCREEN_ON_LYRICS -> {
keepScreenOn(bottomSheetBehavior.state == STATE_EXPANDED && PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics || PreferenceUtil.isScreenOnEnabled) keepScreenOn(bottomSheetBehavior.state == STATE_EXPANDED && PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics || PreferenceUtil.isScreenOnEnabled)
} }
KEEP_SCREEN_ON -> { KEEP_SCREEN_ON -> {
maybeSetScreenOn() maybeSetScreenOn()
} }
@ -475,8 +529,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
} else { } else {
bottomSheetBehavior.peekHeight = heightOfBarWithTabs bottomSheetBehavior.peekHeight = heightOfBarWithTabs
} }
libraryViewModel.setFabMargin(this, libraryViewModel.setFabMargin(
dip(R.dimen.bottom_nav_mini_player_height)) this,
dip(R.dimen.bottom_nav_mini_player_height)
)
} else { } else {
logD("Details") logD("Details")
if (animate) { if (animate) {

View file

@ -79,7 +79,7 @@ open class BugReportActivity : AbsThemeActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) { if (item.itemId == android.R.id.home) {
onBackPressed() onBackPressedDispatcher.onBackPressed()
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
} }

View file

@ -56,7 +56,7 @@ import org.jaudiotagger.audio.AudioFileIO
import org.jaudiotagger.tag.FieldKey import org.jaudiotagger.tag.FieldKey
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
import java.io.File import java.io.File
import java.util.* import java.util.Collections
abstract class AbsTagEditorActivity<VB : ViewBinding> : AbsBaseActivity() { abstract class AbsTagEditorActivity<VB : ViewBinding> : AbsBaseActivity() {
abstract val editorImage: ImageView abstract val editorImage: ImageView
@ -307,7 +307,7 @@ abstract class AbsTagEditorActivity<VB : ViewBinding> : AbsBaseActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
android.R.id.home -> { android.R.id.home -> {
super.onBackPressed() onBackPressedDispatcher.onBackPressed()
return true return true
} }
} }
@ -409,15 +409,18 @@ abstract class AbsTagEditorActivity<VB : ViewBinding> : AbsBaseActivity() {
loadImageFromFile(it) loadImageFromFile(it)
} }
} }
SAFGuideActivity.REQUEST_CODE_SAF_GUIDE -> { SAFGuideActivity.REQUEST_CODE_SAF_GUIDE -> {
SAFUtil.openTreePicker(this) SAFUtil.openTreePicker(this)
} }
SAFUtil.REQUEST_SAF_PICK_TREE -> { SAFUtil.REQUEST_SAF_PICK_TREE -> {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
SAFUtil.saveTreeUri(this, intent) SAFUtil.saveTreeUri(this, intent)
writeTags(savedSongPaths) writeTags(savedSongPaths)
} }
} }
SAFUtil.REQUEST_SAF_PICK_FILE -> { SAFUtil.REQUEST_SAF_PICK_FILE -> {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
writeTags(Collections.singletonList(currentSongPath + SAFUtil.SEPARATOR + intent!!.dataString)) writeTags(Collections.singletonList(currentSongPath + SAFUtil.SEPARATOR + intent!!.dataString))

View file

@ -30,8 +30,12 @@ import androidx.core.widget.doAfterTextChanged
import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.ActivityAlbumTagEditorBinding import code.name.monkey.retromusic.databinding.ActivityAlbumTagEditorBinding
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.appHandleColor
import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.extensions.defaultFooterColor
import code.name.monkey.retromusic.extensions.isColorLight
import code.name.monkey.retromusic.extensions.setTint
import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.glide.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
import code.name.monkey.retromusic.model.ArtworkInfo import code.name.monkey.retromusic.model.ArtworkInfo
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
@ -40,12 +44,13 @@ import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.RetroColorUtil.generatePalette import code.name.monkey.retromusic.util.RetroColorUtil.generatePalette
import code.name.monkey.retromusic.util.RetroColorUtil.getColor import code.name.monkey.retromusic.util.RetroColorUtil.getColor
import code.name.monkey.retromusic.util.logD import code.name.monkey.retromusic.util.logD
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.target.ImageViewTarget import com.bumptech.glide.request.target.ImageViewTarget
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import org.jaudiotagger.tag.FieldKey import org.jaudiotagger.tag.FieldKey
import java.util.* import java.util.EnumMap
class AlbumTagEditorActivity : AbsTagEditorActivity<ActivityAlbumTagEditorBinding>() { class AlbumTagEditorActivity : AbsTagEditorActivity<ActivityAlbumTagEditorBinding>() {
@ -132,7 +137,9 @@ class AlbumTagEditorActivity : AbsTagEditorActivity<ActivityAlbumTagEditorBindin
} }
override fun loadImageFromFile(selectedFile: Uri?) { override fun loadImageFromFile(selectedFile: Uri?) {
GlideApp.with(this@AlbumTagEditorActivity).asBitmapPalette().load(selectedFile) Glide.with(this@AlbumTagEditorActivity)
.asBitmapPalette()
.load(selectedFile)
.diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true)
.into(object : ImageViewTarget<BitmapPaletteWrapper>(binding.editorImage) { .into(object : ImageViewTarget<BitmapPaletteWrapper>(binding.editorImage) {
override fun onResourceReady( override fun onResourceReady(

View file

@ -31,7 +31,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.ActivitySongTagEditorBinding import code.name.monkey.retromusic.databinding.ActivitySongTagEditorBinding
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.*
import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
import code.name.monkey.retromusic.model.ArtworkInfo import code.name.monkey.retromusic.model.ArtworkInfo
import code.name.monkey.retromusic.repository.SongRepository import code.name.monkey.retromusic.repository.SongRepository
@ -39,6 +39,7 @@ 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.RetroColorUtil import code.name.monkey.retromusic.util.RetroColorUtil
import code.name.monkey.retromusic.util.logD import code.name.monkey.retromusic.util.logD
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.target.ImageViewTarget import com.bumptech.glide.request.target.ImageViewTarget
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
@ -171,8 +172,11 @@ class SongTagEditorActivity : AbsTagEditorActivity<ActivitySongTagEditorBinding>
override fun getSongUris(): List<Uri> = listOf(MusicUtil.getSongFileUri(id)) override fun getSongUris(): List<Uri> = listOf(MusicUtil.getSongFileUri(id))
override fun loadImageFromFile(selectedFile: Uri?) { override fun loadImageFromFile(selectedFile: Uri?) {
GlideApp.with(this@SongTagEditorActivity).asBitmapPalette().load(selectedFile) Glide.with(this@SongTagEditorActivity)
.diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true) .asBitmapPalette()
.load(selectedFile)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(object : ImageViewTarget<BitmapPaletteWrapper>(binding.editorImage) { .into(object : ImageViewTarget<BitmapPaletteWrapper>(binding.editorImage) {
override fun onResourceReady( override fun onResourceReady(
resource: BitmapPaletteWrapper, resource: BitmapPaletteWrapper,

View file

@ -23,13 +23,15 @@ import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.ItemGenreBinding import code.name.monkey.retromusic.databinding.ItemGenreBinding
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.interfaces.IGenreClickListener import code.name.monkey.retromusic.interfaces.IGenreClickListener
import code.name.monkey.retromusic.model.Genre import code.name.monkey.retromusic.model.Genre
import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import java.util.* import java.util.*
/** /**
@ -68,10 +70,10 @@ class GenreAdapter(
private fun loadGenreImage(genre: Genre, holder: GenreAdapter.ViewHolder) { private fun loadGenreImage(genre: Genre, holder: GenreAdapter.ViewHolder) {
val genreSong = MusicUtil.songByGenre(genre.id) val genreSong = MusicUtil.songByGenre(genre.id)
GlideApp.with(activity) Glide.with(activity)
.asBitmapPalette() .asBitmapPalette()
.load(RetroGlideExtension.getSongModel(genreSong))
.songCoverOptions(genreSong) .songCoverOptions(genreSong)
.load(RetroGlideExtension.getSongModel(genreSong))
.into(object : RetroMusicColoredTarget(holder.binding.image) { .into(object : RetroMusicColoredTarget(holder.binding.image) {
override fun onColorReady(colors: MediaNotificationProcessor) { override fun onColorReady(colors: MediaNotificationProcessor) {
setColors(holder, colors) setColors(holder, colors)

View file

@ -29,8 +29,10 @@ import code.name.monkey.appthemehelper.ThemeStore
import code.name.monkey.retromusic.* import code.name.monkey.retromusic.*
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
import code.name.monkey.retromusic.db.PlaylistWithSongs import code.name.monkey.retromusic.db.PlaylistWithSongs
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.RetroGlideExtension.albumCoverOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.artistImageOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.menu.SongMenuHelper import code.name.monkey.retromusic.helper.menu.SongMenuHelper
import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Album
@ -38,6 +40,7 @@ import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.model.Genre import code.name.monkey.retromusic.model.Genre
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import com.bumptech.glide.Glide
import java.util.* import java.util.*
class SearchAdapter( class SearchAdapter(
@ -68,6 +71,7 @@ class SearchAdapter(
false false
), viewType ), viewType
) )
ALBUM, ARTIST, ALBUM_ARTIST -> ViewHolder( ALBUM, ARTIST, ALBUM_ARTIST -> ViewHolder(
LayoutInflater.from(activity).inflate( LayoutInflater.from(activity).inflate(
R.layout.item_list_big, R.layout.item_list_big,
@ -75,6 +79,7 @@ class SearchAdapter(
false false
), viewType ), viewType
) )
else -> ViewHolder( else -> ViewHolder(
LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false), LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false),
viewType viewType
@ -89,24 +94,30 @@ class SearchAdapter(
val album = dataSet[position] as Album val album = dataSet[position] as Album
holder.title?.text = album.title holder.title?.text = album.title
holder.text?.text = album.artistName holder.text?.text = album.artistName
GlideApp.with(activity).asDrawable().albumCoverOptions(album.safeGetFirstSong()).load(RetroGlideExtension.getSongModel(album.safeGetFirstSong())) Glide.with(activity).asDrawable().albumCoverOptions(album.safeGetFirstSong())
.load(RetroGlideExtension.getSongModel(album.safeGetFirstSong()))
.into(holder.image!!) .into(holder.image!!)
} }
ARTIST -> { ARTIST -> {
holder.imageTextContainer?.isVisible = true holder.imageTextContainer?.isVisible = true
val artist = dataSet[position] as Artist val artist = dataSet[position] as Artist
holder.title?.text = artist.name holder.title?.text = artist.name
holder.text?.text = MusicUtil.getArtistInfoString(activity, artist) holder.text?.text = MusicUtil.getArtistInfoString(activity, artist)
GlideApp.with(activity).asDrawable().artistImageOptions(artist).load( Glide.with(activity).asDrawable().artistImageOptions(artist).load(
RetroGlideExtension.getArtistModel(artist)).into(holder.image!!) RetroGlideExtension.getArtistModel(artist)
).into(holder.image!!)
} }
SONG -> { SONG -> {
holder.imageTextContainer?.isVisible = true holder.imageTextContainer?.isVisible = true
val song = dataSet[position] as Song val song = dataSet[position] as Song
holder.title?.text = song.title holder.title?.text = song.title
holder.text?.text = song.albumName holder.text?.text = song.albumName
GlideApp.with(activity).asDrawable().songCoverOptions(song).load(RetroGlideExtension.getSongModel(song)).into(holder.image!!) Glide.with(activity).asDrawable().songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)).into(holder.image!!)
} }
GENRE -> { GENRE -> {
val genre = dataSet[position] as Genre val genre = dataSet[position] as Genre
holder.title?.text = genre.name holder.title?.text = genre.name
@ -119,19 +130,23 @@ class SearchAdapter(
) )
) )
} }
PLAYLIST -> { PLAYLIST -> {
val playlist = dataSet[position] as PlaylistWithSongs val playlist = dataSet[position] as PlaylistWithSongs
holder.title?.text = playlist.playlistEntity.playlistName holder.title?.text = playlist.playlistEntity.playlistName
//holder.text?.text = MusicUtil.playlistInfoString(activity, playlist.songs) //holder.text?.text = MusicUtil.playlistInfoString(activity, playlist.songs)
} }
ALBUM_ARTIST -> { ALBUM_ARTIST -> {
holder.imageTextContainer?.isVisible = true holder.imageTextContainer?.isVisible = true
val artist = dataSet[position] as Artist val artist = dataSet[position] as Artist
holder.title?.text = artist.name holder.title?.text = artist.name
holder.text?.text = MusicUtil.getArtistInfoString(activity, artist) holder.text?.text = MusicUtil.getArtistInfoString(activity, artist)
GlideApp.with(activity).asDrawable().artistImageOptions(artist).load( Glide.with(activity).asDrawable().artistImageOptions(artist).load(
RetroGlideExtension.getArtistModel(artist)).into(holder.image!!) RetroGlideExtension.getArtistModel(artist)
).into(holder.image!!)
} }
else -> { else -> {
holder.title?.text = dataSet[position].toString() holder.title?.text = dataSet[position].toString()
holder.title?.setTextColor(ThemeStore.accentColor(activity)) holder.title?.setTextColor(ThemeStore.accentColor(activity))
@ -177,30 +192,35 @@ class SearchAdapter(
bundleOf(EXTRA_ALBUM_ID to (item as Album).id) bundleOf(EXTRA_ALBUM_ID to (item as Album).id)
) )
} }
ARTIST -> { ARTIST -> {
activity.findNavController(R.id.fragment_container).navigate( activity.findNavController(R.id.fragment_container).navigate(
R.id.artistDetailsFragment, R.id.artistDetailsFragment,
bundleOf(EXTRA_ARTIST_ID to (item as Artist).id) bundleOf(EXTRA_ARTIST_ID to (item as Artist).id)
) )
} }
ALBUM_ARTIST ->{
ALBUM_ARTIST -> {
activity.findNavController(R.id.fragment_container).navigate( activity.findNavController(R.id.fragment_container).navigate(
R.id.albumArtistDetailsFragment, R.id.albumArtistDetailsFragment,
bundleOf(EXTRA_ARTIST_NAME to (item as Artist).name) bundleOf(EXTRA_ARTIST_NAME to (item as Artist).name)
) )
} }
GENRE -> { GENRE -> {
activity.findNavController(R.id.fragment_container).navigate( activity.findNavController(R.id.fragment_container).navigate(
R.id.genreDetailsFragment, R.id.genreDetailsFragment,
bundleOf(EXTRA_GENRE to (item as Genre)) bundleOf(EXTRA_GENRE to (item as Genre))
) )
} }
PLAYLIST -> { PLAYLIST -> {
activity.findNavController(R.id.fragment_container).navigate( activity.findNavController(R.id.fragment_container).navigate(
R.id.playlistDetailsFragment, R.id.playlistDetailsFragment,
bundleOf(EXTRA_PLAYLIST to (item as PlaylistWithSongs)) bundleOf(EXTRA_PLAYLIST to (item as PlaylistWithSongs))
) )
} }
SONG -> { SONG -> {
MusicPlayerRemote.playNext(item as Song) MusicPlayerRemote.playNext(item as Song)
MusicPlayerRemote.playNextSong() MusicPlayerRemote.playNextSong()

View file

@ -26,11 +26,11 @@ 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.extensions.getTintedDrawable
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.ICallbacks import code.name.monkey.retromusic.interfaces.ICallbacks
import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import com.bumptech.glide.Glide
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
@ -109,7 +109,7 @@ class SongFileAdapter(
) )
} else { } else {
val error = activity.getTintedDrawable(R.drawable.ic_audio_file, iconColor) val error = activity.getTintedDrawable(R.drawable.ic_audio_file, iconColor)
GlideApp.with(activity) Glide.with(activity)
.load(AudioFileCover(file.path)) .load(AudioFileCover(file.path))
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.error(error) .error(error)

View file

@ -24,8 +24,9 @@ import androidx.fragment.app.FragmentActivity
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.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroGlideExtension.albumCoverOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.helper.SortOrder
import code.name.monkey.retromusic.helper.menu.SongsMenuHelper import code.name.monkey.retromusic.helper.menu.SongsMenuHelper
@ -35,6 +36,7 @@ import code.name.monkey.retromusic.model.Song
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.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import me.zhanghai.android.fastscroll.PopupTextProvider import me.zhanghai.android.fastscroll.PopupTextProvider
open class AlbumAdapter( open class AlbumAdapter(
@ -110,7 +112,9 @@ open class AlbumAdapter(
return return
} }
val song = album.safeGetFirstSong() val song = album.safeGetFirstSong()
GlideApp.with(activity).asBitmapPalette().albumCoverOptions(song) Glide.with(activity)
.asBitmapPalette()
.albumCoverOptions(song)
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.into(object : RetroMusicColoredTarget(holder.image!!) { .into(object : RetroMusicColoredTarget(holder.image!!) {
@ -160,6 +164,7 @@ open class AlbumAdapter(
when (PreferenceUtil.albumSortOrder) { when (PreferenceUtil.albumSortOrder) {
SortOrder.AlbumSortOrder.ALBUM_A_Z, SortOrder.AlbumSortOrder.ALBUM_Z_A -> sectionName = SortOrder.AlbumSortOrder.ALBUM_A_Z, SortOrder.AlbumSortOrder.ALBUM_Z_A -> sectionName =
dataSet[position].title dataSet[position].title
SortOrder.AlbumSortOrder.ALBUM_ARTIST -> sectionName = dataSet[position].albumArtist SortOrder.AlbumSortOrder.ALBUM_ARTIST -> sectionName = dataSet[position].albumArtist
SortOrder.AlbumSortOrder.ALBUM_YEAR -> return MusicUtil.getYearString( SortOrder.AlbumSortOrder.ALBUM_YEAR -> return MusicUtil.getYearString(
dataSet[position].year dataSet[position].year

View file

@ -26,16 +26,24 @@ import androidx.lifecycle.lifecycleScope
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.fragments.AlbumCoverStyle import code.name.monkey.retromusic.fragments.AlbumCoverStyle
import code.name.monkey.retromusic.fragments.NowPlayingScreen.* import code.name.monkey.retromusic.fragments.NowPlayingScreen.Card
import code.name.monkey.retromusic.fragments.NowPlayingScreen.Classic
import code.name.monkey.retromusic.fragments.NowPlayingScreen.Fit
import code.name.monkey.retromusic.fragments.NowPlayingScreen.Full
import code.name.monkey.retromusic.fragments.NowPlayingScreen.Gradient
import code.name.monkey.retromusic.fragments.NowPlayingScreen.Peek
import code.name.monkey.retromusic.fragments.NowPlayingScreen.Tiny
import code.name.monkey.retromusic.fragments.base.goToLyrics import code.name.monkey.retromusic.fragments.base.goToLyrics
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.misc.CustomFragmentStatePagerAdapter import code.name.monkey.retromusic.misc.CustomFragmentStatePagerAdapter
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
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.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -164,7 +172,9 @@ class AlbumCoverPagerAdapter(
} }
private fun loadAlbumCover(albumCover: ImageView) { private fun loadAlbumCover(albumCover: ImageView) {
GlideApp.with(this).asBitmapPalette().songCoverOptions(song) Glide.with(this)
.asBitmapPalette()
.songCoverOptions(song)
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.dontAnimate() .dontAnimate()

View file

@ -17,14 +17,16 @@ package code.name.monkey.retromusic.adapter.album
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
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.RetroGlideExtension.albumCoverOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.helper.HorizontalAdapterHelper import code.name.monkey.retromusic.helper.HorizontalAdapterHelper
import code.name.monkey.retromusic.interfaces.IAlbumClickListener import code.name.monkey.retromusic.interfaces.IAlbumClickListener
import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
class HorizontalAlbumAdapter( class HorizontalAlbumAdapter(
activity: FragmentActivity, activity: FragmentActivity,
@ -47,7 +49,9 @@ class HorizontalAlbumAdapter(
override fun loadAlbumCover(album: Album, holder: ViewHolder) { override fun loadAlbumCover(album: Album, holder: ViewHolder) {
if (holder.image == null) return if (holder.image == null) return
GlideApp.with(activity).asBitmapPalette().albumCoverOptions(album.safeGetFirstSong()) Glide.with(activity)
.asBitmapPalette()
.albumCoverOptions(album.safeGetFirstSong())
.load(RetroGlideExtension.getSongModel(album.safeGetFirstSong())) .load(RetroGlideExtension.getSongModel(album.safeGetFirstSong()))
.into(object : RetroMusicColoredTarget(holder.image!!) { .into(object : RetroMusicColoredTarget(holder.image!!) {
override fun onColorReady(colors: MediaNotificationProcessor) { override fun onColorReady(colors: MediaNotificationProcessor) {

View file

@ -27,8 +27,9 @@ 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.hide import code.name.monkey.retromusic.extensions.hide
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.RetroGlideExtension.artistImageOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.helper.menu.SongsMenuHelper import code.name.monkey.retromusic.helper.menu.SongsMenuHelper
import code.name.monkey.retromusic.interfaces.IAlbumArtistClickListener import code.name.monkey.retromusic.interfaces.IAlbumArtistClickListener
@ -38,6 +39,7 @@ import code.name.monkey.retromusic.model.Song
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.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import me.zhanghai.android.fastscroll.PopupTextProvider import me.zhanghai.android.fastscroll.PopupTextProvider
class ArtistAdapter( class ArtistAdapter(
@ -109,10 +111,10 @@ class ArtistAdapter(
if (holder.image == null) { if (holder.image == null) {
return return
} }
GlideApp.with(activity) Glide.with(activity)
.asBitmapPalette() .asBitmapPalette()
.load(RetroGlideExtension.getArtistModel(artist))
.artistImageOptions(artist) .artistImageOptions(artist)
.load(RetroGlideExtension.getArtistModel(artist))
.transition(RetroGlideExtension.getDefaultTransition()) .transition(RetroGlideExtension.getDefaultTransition())
.into(object : RetroMusicColoredTarget(holder.image!!) { .into(object : RetroMusicColoredTarget(holder.image!!) {
override fun onColorReady(colors: MediaNotificationProcessor) { override fun onColorReady(colors: MediaNotificationProcessor) {

View file

@ -33,7 +33,7 @@ import code.name.monkey.retromusic.db.PlaylistEntity
import code.name.monkey.retromusic.db.PlaylistWithSongs import code.name.monkey.retromusic.db.PlaylistWithSongs
import code.name.monkey.retromusic.db.toSongs import code.name.monkey.retromusic.db.toSongs
import code.name.monkey.retromusic.extensions.dipToPix import code.name.monkey.retromusic.extensions.dipToPix
import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension.playlistOptions
import code.name.monkey.retromusic.glide.playlistPreview.PlaylistPreview import code.name.monkey.retromusic.glide.playlistPreview.PlaylistPreview
import code.name.monkey.retromusic.helper.SortOrder.PlaylistSortOrder import code.name.monkey.retromusic.helper.SortOrder.PlaylistSortOrder
import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper
@ -42,6 +42,7 @@ import code.name.monkey.retromusic.interfaces.IPlaylistClickListener
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
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 com.bumptech.glide.Glide
import me.zhanghai.android.fastscroll.PopupTextProvider import me.zhanghai.android.fastscroll.PopupTextProvider
class PlaylistAdapter( class PlaylistAdapter(
@ -105,7 +106,7 @@ class PlaylistAdapter(
holder.image?.setPadding(activity.dipToPix(8F).toInt()) holder.image?.setPadding(activity.dipToPix(8F).toInt())
holder.image?.setImageDrawable(getIconRes()) holder.image?.setImageDrawable(getIconRes())
} else { } else {
GlideApp.with(activity) Glide.with(activity)
.load( .load(
PlaylistPreview(playlist) PlaylistPreview(playlist)
) )

View file

@ -19,8 +19,8 @@ import android.view.View
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
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.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicPlayerRemote.isPlaying import code.name.monkey.retromusic.helper.MusicPlayerRemote.isPlaying
import code.name.monkey.retromusic.helper.MusicPlayerRemote.playNextSong import code.name.monkey.retromusic.helper.MusicPlayerRemote.playNextSong
@ -28,6 +28,7 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote.removeFromQueue
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.ViewUtil
import com.bumptech.glide.Glide
import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter
import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange
import com.h6ah4i.android.widget.advrecyclerview.draggable.annotation.DraggableItemStateFlags import com.h6ah4i.android.widget.advrecyclerview.draggable.annotation.DraggableItemStateFlags
@ -76,7 +77,7 @@ class PlayingQueueAdapter(
if (holder.image == null) { if (holder.image == null) {
return return
} }
GlideApp.with(activity) Glide.with(activity)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.songCoverOptions(song) .songCoverOptions(song)
.into(holder.image!!) .into(holder.image!!)
@ -195,7 +196,7 @@ class PlayingQueueAdapter(
return if (result == SwipeableItemConstants.RESULT_CANCELED) { return if (result == SwipeableItemConstants.RESULT_CANCELED) {
SwipeResultActionDefault() SwipeResultActionDefault()
} else { } else {
SwipedResultActionRemoveItem(this, position, activity) SwipedResultActionRemoveItem(this, position)
} }
} }
@ -216,12 +217,9 @@ class PlayingQueueAdapter(
internal class SwipedResultActionRemoveItem( internal class SwipedResultActionRemoveItem(
private val adapter: PlayingQueueAdapter, private val adapter: PlayingQueueAdapter,
private val position: Int, private val position: Int,
private val activity: FragmentActivity,
) : SwipeResultActionRemoveItem() { ) : SwipeResultActionRemoveItem() {
private var songToRemove: Song? = null private var songToRemove: Song? = null
private val isPlaying: Boolean = MusicPlayerRemote.isPlaying
private val songProgressMillis = 0
override fun onPerformAction() { override fun onPerformAction() {
// currentlyShownSnackbar = null // currentlyShownSnackbar = null
} }

View file

@ -29,8 +29,9 @@ import code.name.monkey.retromusic.EXTRA_ALBUM_ID
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.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.helper.SortOrder
@ -41,6 +42,7 @@ 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
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import me.zhanghai.android.fastscroll.PopupTextProvider import me.zhanghai.android.fastscroll.PopupTextProvider
/** /**
@ -116,7 +118,9 @@ open class SongAdapter(
if (holder.image == null) { if (holder.image == null) {
return return
} }
GlideApp.with(activity).asBitmapPalette().songCoverOptions(song) Glide.with(activity)
.asBitmapPalette()
.songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.into(object : RetroMusicColoredTarget(holder.image!!) { .into(object : RetroMusicColoredTarget(holder.image!!) {
override fun onColorReady(colors: MediaNotificationProcessor) { override fun onColorReady(colors: MediaNotificationProcessor) {
@ -155,7 +159,11 @@ open class SongAdapter(
override fun getPopupText(position: Int): String { override fun getPopupText(position: Int): String {
val sectionName: String? = when (PreferenceUtil.songSortOrder) { val sectionName: String? = when (PreferenceUtil.songSortOrder) {
SortOrder.SongSortOrder.SONG_DEFAULT -> return MusicUtil.getSectionName(dataSet[position].title, true) SortOrder.SongSortOrder.SONG_DEFAULT -> return MusicUtil.getSectionName(
dataSet[position].title,
true
)
SortOrder.SongSortOrder.SONG_A_Z, SortOrder.SongSortOrder.SONG_Z_A -> dataSet[position].title SortOrder.SongSortOrder.SONG_A_Z, SortOrder.SongSortOrder.SONG_Z_A -> dataSet[position].title
SortOrder.SongSortOrder.SONG_ALBUM -> dataSet[position].albumName SortOrder.SongSortOrder.SONG_ALBUM -> dataSet[position].albumName
SortOrder.SongSortOrder.SONG_ARTIST -> dataSet[position].artistName SortOrder.SongSortOrder.SONG_ARTIST -> dataSet[position].artistName

View file

@ -29,7 +29,6 @@ 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.extensions.getTintedDrawable
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
import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND
@ -152,7 +151,7 @@ class AppWidgetBig : BaseAppWidget() {
if (target != null) { if (target != null) {
Glide.with(service).clear(target) Glide.with(service).clear(target)
} }
target = GlideApp.with(appContext) target = Glide.with(appContext)
.asBitmap() .asBitmap()
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))

View file

@ -29,8 +29,9 @@ 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.extensions.getTintedDrawable
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
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_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND
@ -143,7 +144,9 @@ class AppWidgetCard : BaseAppWidget() {
if (target != null) { if (target != null) {
Glide.with(service).clear(target) Glide.with(service).clear(target)
} }
target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) target = Glide.with(service)
.asBitmapPalette()
.songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.centerCrop() .centerCrop()
.into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) {

View file

@ -28,8 +28,9 @@ 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.extensions.getTintedDrawable
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
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
@ -114,7 +115,9 @@ class AppWidgetCircle : BaseAppWidget() {
if (target != null) { if (target != null) {
Glide.with(service).clear(target) Glide.with(service).clear(target)
} }
target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) target = Glide.with(service)
.asBitmapPalette()
.songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.apply(RequestOptions.circleCropTransform()) .apply(RequestOptions.circleCropTransform())
.into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) {

View file

@ -30,8 +30,9 @@ 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.extensions.getTintedDrawable
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
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_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND
@ -119,7 +120,9 @@ class AppWidgetClassic : BaseAppWidget() {
if (target != null) { if (target != null) {
Glide.with(service).clear(target) Glide.with(service).clear(target)
} }
target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) target = Glide.with(service)
.asBitmapPalette()
.songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.centerCrop() .centerCrop()

View file

@ -29,8 +29,9 @@ 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.extensions.getTintedDrawable
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
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_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND
@ -144,7 +145,9 @@ class AppWidgetMD3 : BaseAppWidget() {
if (target != null) { if (target != null) {
Glide.with(service).clear(target) Glide.with(service).clear(target)
} }
target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) target = Glide.with(service)
.asBitmapPalette()
.songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.centerCrop() .centerCrop()
.into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) { .into(object : CustomTarget<BitmapPaletteWrapper>(imageSize, imageSize) {

View file

@ -29,8 +29,9 @@ 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.extensions.getTintedDrawable
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
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_REWIND import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_REWIND
@ -122,7 +123,9 @@ class AppWidgetSmall : BaseAppWidget() {
if (target != null) { if (target != null) {
Glide.with(service).clear(target) Glide.with(service).clear(target)
} }
target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) target = Glide.with(service)
.asBitmapPalette()
.songCoverOptions(song)
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.centerCrop() .centerCrop()

View file

@ -27,10 +27,10 @@ import code.name.monkey.retromusic.extensions.extraNotNull
import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.extensions.materialDialog
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
class AddToPlaylistDialog : DialogFragment() { class AddToPlaylistDialog : DialogFragment() {
private val libraryViewModel by sharedViewModel<LibraryViewModel>() private val libraryViewModel by activityViewModel<LibraryViewModel>()
companion object { companion object {
fun create(playlistEntities: List<PlaylistEntity>, song: Song): AddToPlaylistDialog { fun create(playlistEntities: List<PlaylistEntity>, song: Song): AddToPlaylistDialog {
@ -58,7 +58,7 @@ class AddToPlaylistDialog : DialogFragment() {
playlistNames.add(entity.playlistName) playlistNames.add(entity.playlistName)
} }
return materialDialog(R.string.add_playlist_title) return materialDialog(R.string.add_playlist_title)
.setItems(playlistNames.toTypedArray()) { dialog, which-> .setItems(playlistNames.toTypedArray()) { dialog, which ->
if (which == 0) { if (which == 0) {
showCreateDialog(songs) showCreateDialog(songs)
} else { } else {

View file

@ -29,12 +29,12 @@ import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
class CreatePlaylistDialog : DialogFragment() { class CreatePlaylistDialog : DialogFragment() {
private var _binding: DialogPlaylistBinding? = null private var _binding: DialogPlaylistBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private val libraryViewModel by sharedViewModel<LibraryViewModel>() private val libraryViewModel by activityViewModel<LibraryViewModel>()
companion object { companion object {
fun create(song: Song): CreatePlaylistDialog { fun create(song: Song): CreatePlaylistDialog {

View file

@ -27,11 +27,11 @@ import code.name.monkey.retromusic.extensions.extraNotNull
import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.extensions.materialDialog
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 org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
class DeletePlaylistDialog : DialogFragment() { class DeletePlaylistDialog : DialogFragment() {
private val libraryViewModel by sharedViewModel<LibraryViewModel>() private val libraryViewModel by activityViewModel<LibraryViewModel>()
companion object { companion object {
@ -55,10 +55,13 @@ class DeletePlaylistDialog : DialogFragment() {
//noinspection ConstantConditions //noinspection ConstantConditions
if (playlists.size > 1) { if (playlists.size > 1) {
title = R.string.delete_playlists_title title = R.string.delete_playlists_title
message = String.format(getString(R.string.delete_x_playlists), playlists.size).parseAsHtml() message =
String.format(getString(R.string.delete_x_playlists), playlists.size).parseAsHtml()
} else { } else {
title = R.string.delete_playlist_title title = R.string.delete_playlist_title
message = String.format(getString(R.string.delete_playlist_x), playlists[0].playlistName).parseAsHtml() message =
String.format(getString(R.string.delete_playlist_x), playlists[0].playlistName)
.parseAsHtml()
} }
return materialDialog(title) return materialDialog(title)

View file

@ -21,10 +21,10 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.colorButtons import code.name.monkey.retromusic.extensions.colorButtons
import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.extensions.materialDialog
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
class ImportPlaylistDialog : DialogFragment() { class ImportPlaylistDialog : DialogFragment() {
private val libraryViewModel by sharedViewModel<LibraryViewModel>() private val libraryViewModel by activityViewModel<LibraryViewModel>()
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return materialDialog(R.string.import_playlist) return materialDialog(R.string.import_playlist)

View file

@ -26,10 +26,10 @@ import code.name.monkey.retromusic.extensions.colorButtons
import code.name.monkey.retromusic.extensions.extraNotNull import code.name.monkey.retromusic.extensions.extraNotNull
import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.extensions.materialDialog
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
class RemoveSongFromPlaylistDialog : DialogFragment() { class RemoveSongFromPlaylistDialog : DialogFragment() {
private val libraryViewModel by sharedViewModel<LibraryViewModel>() private val libraryViewModel by activityViewModel<LibraryViewModel>()
companion object { companion object {
fun create(song: SongEntity): RemoveSongFromPlaylistDialog { fun create(song: SongEntity): RemoveSongFromPlaylistDialog {

View file

@ -29,11 +29,11 @@ import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.ReloadType
import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
class RenamePlaylistDialog : DialogFragment() { class RenamePlaylistDialog : DialogFragment() {
private val libraryViewModel by sharedViewModel<LibraryViewModel>() private val libraryViewModel by activityViewModel<LibraryViewModel>()
companion object { companion object {
fun create(playlistEntity: PlaylistEntity): RenamePlaylistDialog { fun create(playlistEntity: PlaylistEntity): RenamePlaylistDialog {

View file

@ -30,12 +30,12 @@ import code.name.monkey.retromusic.extensions.openUrl
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.NavigationUtil
import dev.chrisbanes.insetter.applyInsetter import dev.chrisbanes.insetter.applyInsetter
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener {
private var _binding: FragmentAboutBinding? = null private var _binding: FragmentAboutBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private val libraryViewModel by sharedViewModel<LibraryViewModel>() private val libraryViewModel by activityViewModel<LibraryViewModel>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)

View file

@ -18,7 +18,11 @@ import android.app.ActivityOptions
import android.content.Intent import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.SubMenu
import android.view.View
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.text.parseAsHtml import androidx.core.text.parseAsHtml
@ -43,10 +47,16 @@ import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter
import code.name.monkey.retromusic.databinding.FragmentAlbumDetailsBinding import code.name.monkey.retromusic.databinding.FragmentAlbumDetailsBinding
import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog
import code.name.monkey.retromusic.dialogs.DeleteSongsDialog import code.name.monkey.retromusic.dialogs.DeleteSongsDialog
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.applyColor
import code.name.monkey.retromusic.extensions.applyOutlineColor
import code.name.monkey.retromusic.extensions.findActivityNavController
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
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.RetroGlideExtension.albumCoverOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.artistImageOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.SingleColorTarget import code.name.monkey.retromusic.glide.SingleColorTarget
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_A_Z import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_A_Z
@ -59,7 +69,12 @@ import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.network.Result import code.name.monkey.retromusic.network.Result
import code.name.monkey.retromusic.network.model.LastFmAlbum import code.name.monkey.retromusic.network.model.LastFmAlbum
import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.repository.RealRepository
import code.name.monkey.retromusic.util.* import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.logD
import code.name.monkey.retromusic.util.logE
import com.bumptech.glide.Glide
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.transition.MaterialArcMotion import com.google.android.material.transition.MaterialArcMotion
import com.google.android.material.transition.MaterialContainerTransform import com.google.android.material.transition.MaterialContainerTransform
@ -230,9 +245,11 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
is Result.Loading -> { is Result.Loading -> {
logD("Loading") logD("Loading")
} }
is Result.Error -> { is Result.Error -> {
logE("Error") logE("Error")
} }
is Result.Success -> { is Result.Success -> {
aboutAlbum(result.data) aboutAlbum(result.data)
} }
@ -285,7 +302,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner) { detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner) {
moreAlbums(it) moreAlbums(it)
} }
GlideApp.with(requireContext()) Glide.with(requireContext())
//.forceDownload(PreferenceUtil.isAllowedToDownloadMetadata()) //.forceDownload(PreferenceUtil.isAllowedToDownloadMetadata())
.load( .load(
RetroGlideExtension.getArtistModel( RetroGlideExtension.getArtistModel(
@ -300,7 +317,8 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
} }
private fun loadAlbumCover(album: Album) { private fun loadAlbumCover(album: Album) {
GlideApp.with(requireContext()).asBitmapPalette() Glide.with(requireContext())
.asBitmapPalette()
.albumCoverOptions(album.safeGetFirstSong()) .albumCoverOptions(album.safeGetFirstSong())
//.checkIgnoreMediaStore() //.checkIgnoreMediaStore()
.load(RetroGlideExtension.getSongModel(album.safeGetFirstSong())) .load(RetroGlideExtension.getSongModel(album.safeGetFirstSong()))
@ -354,10 +372,12 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
MusicPlayerRemote.playNext(songs) MusicPlayerRemote.playNext(songs)
return true return true
} }
R.id.action_add_to_current_playing -> { R.id.action_add_to_current_playing -> {
MusicPlayerRemote.enqueue(songs) MusicPlayerRemote.enqueue(songs)
return true return true
} }
R.id.action_add_to_playlist -> { R.id.action_add_to_playlist -> {
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
val playlists = get<RealRepository>().fetchPlaylists() val playlists = get<RealRepository>().fetchPlaylists()
@ -368,10 +388,12 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
} }
return true return true
} }
R.id.action_delete_from_device -> { R.id.action_delete_from_device -> {
DeleteSongsDialog.create(songs).show(childFragmentManager, "DELETE_SONGS") DeleteSongsDialog.create(songs).show(childFragmentManager, "DELETE_SONGS")
return true return true
} }
R.id.action_tag_editor -> { R.id.action_tag_editor -> {
val intent = Intent(requireContext(), AlbumTagEditorActivity::class.java) val intent = Intent(requireContext(), AlbumTagEditorActivity::class.java)
intent.putExtra(AbsTagEditorActivity.EXTRA_ID, album.id) intent.putExtra(AbsTagEditorActivity.EXTRA_ID, album.id)
@ -385,6 +407,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
) )
return true return true
} }
R.id.action_sort_order_title -> sortOrder = SONG_A_Z R.id.action_sort_order_title -> sortOrder = SONG_A_Z
R.id.action_sort_order_title_desc -> sortOrder = SONG_Z_A R.id.action_sort_order_title_desc -> sortOrder = SONG_Z_A
R.id.action_sort_order_track_list -> sortOrder = SONG_TRACK_LIST R.id.action_sort_order_track_list -> sortOrder = SONG_TRACK_LIST
@ -403,6 +426,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked = true SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked = true
SONG_TRACK_LIST -> SONG_TRACK_LIST ->
sortOrder.findItem(R.id.action_sort_order_track_list).isChecked = true sortOrder.findItem(R.id.action_sort_order_track_list).isChecked = true
SONG_DURATION -> SONG_DURATION ->
sortOrder.findItem(R.id.action_sort_order_artist_song_duration).isChecked = true sortOrder.findItem(R.id.action_sort_order_artist_song_duration).isChecked = true
} }
@ -416,19 +440,23 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
o2.trackNumber o2.trackNumber
) )
} }
SONG_A_Z -> { SONG_A_Z -> {
val collator = Collator.getInstance() val collator = Collator.getInstance()
album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) } album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) }
} }
SONG_Z_A -> { SONG_Z_A -> {
val collator = Collator.getInstance() val collator = Collator.getInstance()
album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) } album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) }
} }
SONG_DURATION -> album.songs.sortedWith { o1, o2 -> SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
o1.duration.compareTo( o1.duration.compareTo(
o2.duration o2.duration
) )
} }
else -> throw IllegalArgumentException("invalid $sortOrder") else -> throw IllegalArgumentException("invalid $sortOrder")
} }
album = album.copy(songs = songs) album = album.copy(songs = songs)

View file

@ -27,10 +27,15 @@ import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter
import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter
import code.name.monkey.retromusic.databinding.FragmentArtistDetailsBinding import code.name.monkey.retromusic.databinding.FragmentArtistDetailsBinding
import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.applyColor
import code.name.monkey.retromusic.extensions.applyOutlineColor
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
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.RetroGlideExtension.artistImageOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.SingleColorTarget import code.name.monkey.retromusic.glide.SingleColorTarget
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.helper.SortOrder
@ -39,14 +44,20 @@ import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.network.Result import code.name.monkey.retromusic.network.Result
import code.name.monkey.retromusic.network.model.LastFmArtist import code.name.monkey.retromusic.network.model.LastFmArtist
import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.repository.RealRepository
import code.name.monkey.retromusic.util.* import code.name.monkey.retromusic.util.CustomArtistImageUtil
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroUtil
import code.name.monkey.retromusic.util.logD
import code.name.monkey.retromusic.util.logE
import com.bumptech.glide.Glide
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.transition.MaterialContainerTransform import com.google.android.material.transition.MaterialContainerTransform
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get import org.koin.android.ext.android.get
import java.util.* import java.util.Locale
abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_artist_details), abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_artist_details),
IAlbumClickListener { IAlbumClickListener {
@ -203,7 +214,9 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
} }
private fun loadArtistImage(artist: Artist) { private fun loadArtistImage(artist: Artist) {
GlideApp.with(requireContext()).asBitmapPalette().artistImageOptions(artist) Glide.with(requireContext())
.asBitmapPalette()
.artistImageOptions(artist)
.load(RetroGlideExtension.getArtistModel(artist)) .load(RetroGlideExtension.getArtistModel(artist))
.dontAnimate() .dontAnimate()
.into(object : SingleColorTarget(binding.image) { .into(object : SingleColorTarget(binding.image) {
@ -243,10 +256,12 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
MusicPlayerRemote.playNext(songs) MusicPlayerRemote.playNext(songs)
return true return true
} }
R.id.action_add_to_current_playing -> { R.id.action_add_to_current_playing -> {
MusicPlayerRemote.enqueue(songs) MusicPlayerRemote.enqueue(songs)
return true return true
} }
R.id.action_add_to_playlist -> { R.id.action_add_to_playlist -> {
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
val playlists = get<RealRepository>().fetchPlaylists() val playlists = get<RealRepository>().fetchPlaylists()
@ -257,6 +272,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
} }
return true return true
} }
R.id.action_set_artist_image -> { R.id.action_set_artist_image -> {
val intent = Intent(Intent.ACTION_GET_CONTENT) val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "image/*" intent.type = "image/*"
@ -268,6 +284,7 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
) )
return true return true
} }
R.id.action_reset_artist_image -> { R.id.action_reset_artist_image -> {
showToast(resources.getString(R.string.updating)) showToast(resources.getString(R.string.updating))
lifecycleScope.launch { lifecycleScope.launch {
@ -315,14 +332,19 @@ abstract class AbsArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragm
when (savedSongSortOrder) { when (savedSongSortOrder) {
SortOrder.ArtistSongSortOrder.SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title).isChecked = SortOrder.ArtistSongSortOrder.SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title).isChecked =
true true
SortOrder.ArtistSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked = SortOrder.ArtistSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked =
true true
SortOrder.ArtistSongSortOrder.SONG_ALBUM -> SortOrder.ArtistSongSortOrder.SONG_ALBUM ->
sortOrder.findItem(R.id.action_sort_order_album).isChecked = true sortOrder.findItem(R.id.action_sort_order_album).isChecked = true
SortOrder.ArtistSongSortOrder.SONG_YEAR -> SortOrder.ArtistSongSortOrder.SONG_YEAR ->
sortOrder.findItem(R.id.action_sort_order_year).isChecked = true sortOrder.findItem(R.id.action_sort_order_year).isChecked = true
SortOrder.ArtistSongSortOrder.SONG_DURATION -> SortOrder.ArtistSongSortOrder.SONG_DURATION ->
sortOrder.findItem(R.id.action_sort_order_song_duration).isChecked = true sortOrder.findItem(R.id.action_sort_order_song_duration).isChecked = true
else -> { else -> {
throw IllegalArgumentException("invalid $savedSongSortOrder") throw IllegalArgumentException("invalid $savedSongSortOrder")
} }

View file

@ -22,18 +22,18 @@ import androidx.core.view.MenuProvider
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.MainActivity
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
abstract class AbsMainActivityFragment(@LayoutRes layout: Int) : AbsMusicServiceFragment(layout), abstract class AbsMainActivityFragment(@LayoutRes layout: Int) : AbsMusicServiceFragment(layout),
MenuProvider { MenuProvider {
val libraryViewModel: LibraryViewModel by sharedViewModel() val libraryViewModel: LibraryViewModel by activityViewModel()
val mainActivity: MainActivity val mainActivity: MainActivity
get() = activity as MainActivity get() = activity as MainActivity
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val menuHost: MenuHost = requireActivity() as MenuHost val menuHost: MenuHost = requireActivity()
menuHost.addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.STARTED) menuHost.addMenuProvider(this, viewLifecycleOwner, Lifecycle.State.STARTED)
} }
} }

View file

@ -65,13 +65,13 @@ import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get import org.koin.android.ext.android.get
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
import kotlin.math.abs import kotlin.math.abs
abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragment(layout), abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragment(layout),
Toolbar.OnMenuItemClickListener, IPaletteColorHolder, PlayerAlbumCoverFragment.Callbacks { Toolbar.OnMenuItemClickListener, IPaletteColorHolder, PlayerAlbumCoverFragment.Callbacks {
val libraryViewModel: LibraryViewModel by sharedViewModel() val libraryViewModel: LibraryViewModel by activityViewModel()
val mainActivity: MainActivity val mainActivity: MainActivity
get() = activity as MainActivity get() = activity as MainActivity
@ -87,6 +87,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
PlaybackSpeedDialog.newInstance().show(childFragmentManager, "PLAYBACK_SETTINGS") PlaybackSpeedDialog.newInstance().show(childFragmentManager, "PLAYBACK_SETTINGS")
return true return true
} }
R.id.action_toggle_lyrics -> { R.id.action_toggle_lyrics -> {
PreferenceUtil.showLyrics = !PreferenceUtil.showLyrics PreferenceUtil.showLyrics = !PreferenceUtil.showLyrics
showLyricsIcon(item) showLyricsIcon(item)
@ -97,26 +98,32 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
} }
return true return true
} }
R.id.action_go_to_lyrics -> { R.id.action_go_to_lyrics -> {
goToLyrics(requireActivity()) goToLyrics(requireActivity())
return true return true
} }
R.id.action_toggle_favorite -> { R.id.action_toggle_favorite -> {
toggleFavorite(song) toggleFavorite(song)
return true return true
} }
R.id.action_share -> { R.id.action_share -> {
SongShareDialog.create(song).show(childFragmentManager, "SHARE_SONG") SongShareDialog.create(song).show(childFragmentManager, "SHARE_SONG")
return true return true
} }
R.id.action_go_to_drive_mode -> { R.id.action_go_to_drive_mode -> {
NavigationUtil.gotoDriveMode(requireActivity()) NavigationUtil.gotoDriveMode(requireActivity())
return true return true
} }
R.id.action_delete_from_device -> { R.id.action_delete_from_device -> {
DeleteSongsDialog.create(song).show(childFragmentManager, "DELETE_SONGS") DeleteSongsDialog.create(song).show(childFragmentManager, "DELETE_SONGS")
return true return true
} }
R.id.action_add_to_playlist -> { R.id.action_add_to_playlist -> {
lifecycleScope.launch(IO) { lifecycleScope.launch(IO) {
val playlists = get<RealRepository>().fetchPlaylists() val playlists = get<RealRepository>().fetchPlaylists()
@ -127,25 +134,30 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
} }
return true return true
} }
R.id.action_clear_playing_queue -> { R.id.action_clear_playing_queue -> {
MusicPlayerRemote.clearQueue() MusicPlayerRemote.clearQueue()
return true return true
} }
R.id.action_save_playing_queue -> { R.id.action_save_playing_queue -> {
CreatePlaylistDialog.create(ArrayList(MusicPlayerRemote.playingQueue)) CreatePlaylistDialog.create(ArrayList(MusicPlayerRemote.playingQueue))
.show(childFragmentManager, "ADD_TO_PLAYLIST") .show(childFragmentManager, "ADD_TO_PLAYLIST")
return true return true
} }
R.id.action_tag_editor -> { R.id.action_tag_editor -> {
val intent = Intent(activity, SongTagEditorActivity::class.java) val intent = Intent(activity, SongTagEditorActivity::class.java)
intent.putExtra(AbsTagEditorActivity.EXTRA_ID, song.id) intent.putExtra(AbsTagEditorActivity.EXTRA_ID, song.id)
startActivity(intent) startActivity(intent)
return true return true
} }
R.id.action_details -> { R.id.action_details -> {
SongDetailDialog.create(song).show(childFragmentManager, "SONG_DETAIL") SongDetailDialog.create(song).show(childFragmentManager, "SONG_DETAIL")
return true return true
} }
R.id.action_go_to_album -> { R.id.action_go_to_album -> {
//Hide Bottom Bar First, else Bottom Sheet doesn't collapse fully //Hide Bottom Bar First, else Bottom Sheet doesn't collapse fully
mainActivity.setBottomNavVisibility(false) mainActivity.setBottomNavVisibility(false)
@ -156,10 +168,12 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
) )
return true return true
} }
R.id.action_go_to_artist -> { R.id.action_go_to_artist -> {
goToArtist(requireActivity()) goToArtist(requireActivity())
return true return true
} }
R.id.now_playing -> { R.id.now_playing -> {
requireActivity().findNavController(R.id.fragment_container).navigate( requireActivity().findNavController(R.id.fragment_container).navigate(
R.id.playing_queue_fragment, R.id.playing_queue_fragment,
@ -169,18 +183,22 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
mainActivity.collapsePanel() mainActivity.collapsePanel()
return true return true
} }
R.id.action_show_lyrics -> { R.id.action_show_lyrics -> {
goToLyrics(requireActivity()) goToLyrics(requireActivity())
return true return true
} }
R.id.action_equalizer -> { R.id.action_equalizer -> {
NavigationUtil.openEqualizer(requireActivity()) NavigationUtil.openEqualizer(requireActivity())
return true return true
} }
R.id.action_sleep_timer -> { R.id.action_sleep_timer -> {
SleepTimerDialog().show(parentFragmentManager, "SLEEP_TIMER") SleepTimerDialog().show(parentFragmentManager, "SLEEP_TIMER")
return true return true
} }
R.id.action_set_as_ringtone -> { R.id.action_set_as_ringtone -> {
requireContext().run { requireContext().run {
if (RingtoneManager.requiresDialog(this)) { if (RingtoneManager.requiresDialog(this)) {
@ -192,6 +210,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
return true return true
} }
R.id.action_go_to_genre -> { R.id.action_go_to_genre -> {
val retriever = MediaMetadataRetriever() val retriever = MediaMetadataRetriever()
val trackUri = val trackUri =
@ -363,6 +382,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMusicServiceFragme
view.parent.requestDisallowInterceptTouchEvent(true) view.parent.requestDisallowInterceptTouchEvent(true)
true true
} }
else -> { else -> {
false false
} }

View file

@ -17,7 +17,11 @@ import android.content.Context
import android.media.MediaScannerConnection import android.media.MediaScannerConnection
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.view.* import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
@ -70,7 +74,8 @@ import java.io.File
import java.io.FileFilter import java.io.FileFilter
import java.io.IOException import java.io.IOException
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
import java.util.* import java.util.Collections
import java.util.LinkedList
class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
IMainActivityFragmentCallbacks, SelectionCallback, ICallbacks, IMainActivityFragmentCallbacks, SelectionCallback, ICallbacks,
@ -113,7 +118,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
override fun handleOnBackPressed() { override fun handleOnBackPressed() {
if (!handleBackPress()) { if (!handleBackPress()) {
remove() remove()
requireActivity().onBackPressed() requireActivity().onBackPressedDispatcher.onBackPressed()
} }
} }
}) })
@ -187,10 +192,12 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
} }
return@setOnMenuItemClickListener true return@setOnMenuItemClickListener true
} }
R.id.action_add_to_blacklist -> { R.id.action_add_to_blacklist -> {
BlacklistStore.getInstance(requireContext()).addPath(file) BlacklistStore.getInstance(requireContext()).addPath(file)
return@setOnMenuItemClickListener true return@setOnMenuItemClickListener true
} }
R.id.action_set_as_start_directory -> { R.id.action_set_as_start_directory -> {
startDirectory = file startDirectory = file
showToast( showToast(
@ -198,6 +205,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
) )
return@setOnMenuItemClickListener true return@setOnMenuItemClickListener true
} }
R.id.action_scan -> { R.id.action_scan -> {
lifecycleScope.launch { lifecycleScope.launch {
listPaths(file, AUDIO_FILE_FILTER) { paths -> scanPaths(paths) } listPaths(file, AUDIO_FILE_FILTER) { paths -> scanPaths(paths) }
@ -229,6 +237,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
} }
return@setOnMenuItemClickListener true return@setOnMenuItemClickListener true
} }
R.id.action_scan -> { R.id.action_scan -> {
lifecycleScope.launch { lifecycleScope.launch {
listPaths(file, AUDIO_FILE_FILTER) { paths -> scanPaths(paths) } listPaths(file, AUDIO_FILE_FILTER) { paths -> scanPaths(paths) }
@ -353,6 +362,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
) )
return true return true
} }
R.id.action_scan -> { R.id.action_scan -> {
val crumb = activeCrumb val crumb = activeCrumb
if (crumb != null) { if (crumb != null) {
@ -362,6 +372,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder),
} }
return true return true
} }
R.id.action_settings -> { R.id.action_settings -> {
findNavController().navigate( findNavController().navigate(
R.id.settings_fragment, R.id.settings_fragment,

View file

@ -15,8 +15,12 @@
package code.name.monkey.retromusic.fragments.home package code.name.monkey.retromusic.fragments.home
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM import android.view.MenuItem.SHOW_AS_ACTION_IF_ROOM
import android.view.View
import android.view.ViewGroup
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.text.parseAsHtml import androidx.core.text.parseAsHtml
@ -30,21 +34,32 @@ import androidx.recyclerview.widget.LinearLayoutManager
import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.common.ATHToolbarActivity
import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.* import code.name.monkey.retromusic.EXTRA_PLAYLIST_TYPE
import code.name.monkey.retromusic.HISTORY_PLAYLIST
import code.name.monkey.retromusic.LAST_ADDED_PLAYLIST
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.TOP_PLAYED_PLAYLIST
import code.name.monkey.retromusic.adapter.HomeAdapter import code.name.monkey.retromusic.adapter.HomeAdapter
import code.name.monkey.retromusic.databinding.FragmentHomeBinding import code.name.monkey.retromusic.databinding.FragmentHomeBinding
import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog
import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.dip
import code.name.monkey.retromusic.extensions.drawNextToNavbar
import code.name.monkey.retromusic.extensions.elevatedAccentColor
import code.name.monkey.retromusic.extensions.setUpMediaRouteButton
import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.ReloadType
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
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.RetroGlideExtension.profileBannerOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.userProfileOptions
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.interfaces.IScrollHelper import code.name.monkey.retromusic.interfaces.IScrollHelper
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.PreferenceUtil.userName import code.name.monkey.retromusic.util.PreferenceUtil.userName
import com.bumptech.glide.Glide
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.transition.MaterialFadeThrough import com.google.android.material.transition.MaterialFadeThrough
import com.google.android.material.transition.MaterialSharedAxis import com.google.android.material.transition.MaterialSharedAxis
@ -169,12 +184,12 @@ class HomeFragment :
private fun loadProfile() { private fun loadProfile() {
binding.bannerImage?.let { binding.bannerImage?.let {
GlideApp.with(requireContext()) Glide.with(requireContext())
.load(RetroGlideExtension.getBannerModel()) .load(RetroGlideExtension.getBannerModel())
.profileBannerOptions(RetroGlideExtension.getBannerModel()) .profileBannerOptions(RetroGlideExtension.getBannerModel())
.into(it) .into(it)
} }
GlideApp.with(requireActivity()) Glide.with(requireActivity())
.load(RetroGlideExtension.getUserModel()) .load(RetroGlideExtension.getUserModel())
.userProfileOptions(RetroGlideExtension.getUserModel(), requireContext()) .userProfileOptions(RetroGlideExtension.getUserModel(), requireContext())
.into(binding.userImage) .into(binding.userImage)
@ -265,7 +280,7 @@ class HomeFragment :
MusicPlayerRemote.playNextSong() MusicPlayerRemote.playNextSong()
} }
} }
GlideApp.with(this) Glide.with(this)
.load(RetroGlideExtension.getSongModel(songs[index])) .load(RetroGlideExtension.getSongModel(songs[index]))
.songCoverOptions(songs[index]) .songCoverOptions(songs[index])
.into(imageView) .into(imageView)
@ -289,10 +304,12 @@ class HomeFragment :
null, null,
navOptions navOptions
) )
R.id.action_import_playlist -> ImportPlaylistDialog().show( R.id.action_import_playlist -> ImportPlaylistDialog().show(
childFragmentManager, childFragmentManager,
"ImportPlaylist" "ImportPlaylist"
) )
R.id.action_add_to_playlist -> CreatePlaylistDialog.create(emptyList()).show( R.id.action_add_to_playlist -> CreatePlaylistDialog.create(emptyList()).show(
childFragmentManager, childFragmentManager,
"ShowCreatePlaylistDialog" "ShowCreatePlaylistDialog"

View file

@ -31,13 +31,14 @@ import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.extensions.textColorPrimary import code.name.monkey.retromusic.extensions.textColorPrimary
import code.name.monkey.retromusic.extensions.textColorSecondary import code.name.monkey.retromusic.extensions.textColorSecondary
import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment
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.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
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 kotlin.math.abs import kotlin.math.abs
open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_player), open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_player),
@ -113,7 +114,7 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p
private fun updateSongCover() { private fun updateSongCover() {
val song = MusicPlayerRemote.currentSong val song = MusicPlayerRemote.currentSong
GlideApp.with(requireContext()) Glide.with(requireContext())
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.transition(RetroGlideExtension.getDefaultTransition()) .transition(RetroGlideExtension.getDefaultTransition())
.songCoverOptions(song) .songCoverOptions(song)

View file

@ -37,8 +37,9 @@ import code.name.monkey.retromusic.extensions.accentColor
import code.name.monkey.retromusic.extensions.applyToolbar import code.name.monkey.retromusic.extensions.applyToolbar
import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
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.RetroGlideExtension.profileBannerOptions
import code.name.monkey.retromusic.glide.RetroGlideExtension.userProfileOptions
import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.ImageUtil
import code.name.monkey.retromusic.util.PreferenceUtil.userName import code.name.monkey.retromusic.util.PreferenceUtil.userName
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
@ -54,14 +55,14 @@ import com.google.android.material.transition.MaterialContainerTransform
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
import java.io.File import java.io.File
class UserInfoFragment : Fragment() { class UserInfoFragment : Fragment() {
private var _binding: FragmentUserInfoBinding? = null private var _binding: FragmentUserInfoBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private val libraryViewModel: LibraryViewModel by sharedViewModel() private val libraryViewModel: LibraryViewModel by activityViewModel()
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -155,12 +156,12 @@ class UserInfoFragment : Fragment() {
private fun loadProfile() { private fun loadProfile() {
binding.bannerImage.let { binding.bannerImage.let {
GlideApp.with(this) Glide.with(this)
.load(RetroGlideExtension.getBannerModel()) .load(RetroGlideExtension.getBannerModel())
.profileBannerOptions(RetroGlideExtension.getBannerModel()) .profileBannerOptions(RetroGlideExtension.getBannerModel())
.into(it) .into(it)
} }
GlideApp.with(this) Glide.with(this)
.load(RetroGlideExtension.getUserModel()) .load(RetroGlideExtension.getUserModel())
.userProfileOptions(RetroGlideExtension.getUserModel(), requireContext()) .userProfileOptions(RetroGlideExtension.getUserModel(), requireContext())
.into(binding.userImage) .into(binding.userImage)
@ -209,9 +210,11 @@ class UserInfoFragment : Fragment() {
doIfResultOk(uri) doIfResultOk(uri)
} }
} }
ImagePicker.RESULT_ERROR -> { ImagePicker.RESULT_ERROR -> {
showToast(ImagePicker.getError(data)) showToast(ImagePicker.getError(data))
} }
else -> { else -> {
showToast("Task Cancelled") showToast("Task Cancelled")
} }

View file

@ -20,7 +20,12 @@ import androidx.appcompat.widget.Toolbar
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentAdaptivePlayerBinding import code.name.monkey.retromusic.databinding.FragmentAdaptivePlayerBinding
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.colorControlNormal
import code.name.monkey.retromusic.extensions.drawAboveSystemBars
import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.extensions.textColorPrimary
import code.name.monkey.retromusic.extensions.textColorSecondary
import code.name.monkey.retromusic.extensions.whichFragment
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
@ -60,7 +65,7 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
ToolbarContentTintHelper.colorizeToolbar(this, surfaceColor(), requireActivity()) ToolbarContentTintHelper.colorizeToolbar(this, surfaceColor(), requireActivity())
setTitleTextColor(textColorPrimary()) setTitleTextColor(textColorPrimary())
setSubtitleTextColor(textColorSecondary()) setSubtitleTextColor(textColorSecondary())

View file

@ -30,17 +30,22 @@ import code.name.monkey.retromusic.extensions.drawAboveSystemBars
import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.extensions.whichFragment
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.glide.* import code.name.monkey.retromusic.glide.BlurTransformation
import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroGlideExtension.simpleSongCoverOptions
import code.name.monkey.retromusic.glide.crossfadeListener
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder
class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur),
SharedPreferences.OnSharedPreferenceChangeListener { SharedPreferences.OnSharedPreferenceChangeListener {
private var lastRequest: GlideRequest<Drawable>? = null private var lastRequest: RequestBuilder<Drawable>? = null
override fun playerToolbar(): Toolbar { override fun playerToolbar(): Toolbar {
return binding.playerToolbar return binding.playerToolbar
@ -72,7 +77,7 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur),
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
ToolbarContentTintHelper.colorizeToolbar(this, Color.WHITE, activity) ToolbarContentTintHelper.colorizeToolbar(this, Color.WHITE, activity)
}.setOnMenuItemClickListener(this) }.setOnMenuItemClickListener(this)
} }
@ -114,14 +119,14 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur),
private fun updateBlur() { private fun updateBlur() {
// https://github.com/bumptech/glide/issues/527#issuecomment-148840717 // https://github.com/bumptech/glide/issues/527#issuecomment-148840717
GlideApp.with(this) Glide.with(this)
.load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong)) .load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong))
.simpleSongCoverOptions(MusicPlayerRemote.currentSong) .simpleSongCoverOptions(MusicPlayerRemote.currentSong)
.transform( .transform(
BlurTransformation.Builder(requireContext()).blurRadius(blurAmount.toFloat()) BlurTransformation.Builder(requireContext()).blurRadius(blurAmount.toFloat())
.build() .build()
).thumbnail(lastRequest) ).thumbnail(lastRequest)
.error(GlideApp.with(this).load(ColorDrawable(Color.DKGRAY)).fitCenter()) .error(Glide.with(this).load(ColorDrawable(Color.DKGRAY)).fitCenter())
.also { .also {
lastRequest = it.clone() lastRequest = it.clone()
it.crossfadeListener() it.crossfadeListener()

View file

@ -97,7 +97,7 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setOnMenuItemClickListener(this@CardFragment) setOnMenuItemClickListener(this@CardFragment)
ToolbarContentTintHelper.colorizeToolbar(this, Color.WHITE, activity) ToolbarContentTintHelper.colorizeToolbar(this, Color.WHITE, activity)

View file

@ -30,11 +30,16 @@ import code.name.monkey.retromusic.extensions.whichFragment
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment
import code.name.monkey.retromusic.glide.* import code.name.monkey.retromusic.glide.BlurTransformation
import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroGlideExtension.simpleSongCoverOptions
import code.name.monkey.retromusic.glide.crossfadeListener
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount import code.name.monkey.retromusic.util.PreferenceUtil.blurAmount
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder
class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player),
SharedPreferences.OnSharedPreferenceChangeListener { SharedPreferences.OnSharedPreferenceChangeListener {
@ -49,7 +54,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player),
private var _binding: FragmentCardBlurPlayerBinding? = null private var _binding: FragmentCardBlurPlayerBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!
private var lastRequest: GlideRequest<Drawable>? = null private var lastRequest: RequestBuilder<Drawable>? = null
override fun onShow() { override fun onShow() {
playbackControlsFragment.show() playbackControlsFragment.show()
@ -108,7 +113,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player),
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setTitleTextColor(Color.WHITE) setTitleTextColor(Color.WHITE)
setSubtitleTextColor(Color.WHITE) setSubtitleTextColor(Color.WHITE)
ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity) ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity)
@ -138,7 +143,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player),
private fun updateBlur() { private fun updateBlur() {
// https://github.com/bumptech/glide/issues/527#issuecomment-148840717 // https://github.com/bumptech/glide/issues/527#issuecomment-148840717
GlideApp.with(this) Glide.with(this)
.load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong)) .load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong))
.simpleSongCoverOptions(MusicPlayerRemote.currentSong) .simpleSongCoverOptions(MusicPlayerRemote.currentSong)
.transform( .transform(

View file

@ -38,9 +38,8 @@ import code.name.monkey.retromusic.fragments.MusicSeekSkipTouchListener
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.glide.GlideRequest
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroGlideExtension.simpleSongCoverOptions
import code.name.monkey.retromusic.glide.crossfadeListener import code.name.monkey.retromusic.glide.crossfadeListener
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
@ -51,6 +50,8 @@ import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import code.name.monkey.retromusic.volume.AudioVolumeObserver import code.name.monkey.retromusic.volume.AudioVolumeObserver
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
import com.bumptech.glide.Glide
import com.bumptech.glide.RequestBuilder
import com.google.android.material.slider.Slider import com.google.android.material.slider.Slider
import me.tankery.lib.circularseekbar.CircularSeekBar import me.tankery.lib.circularseekbar.CircularSeekBar
@ -72,9 +73,8 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
private val binding get() = _binding!! private val binding get() = _binding!!
private var rotateAnimator: ObjectAnimator? = null private var rotateAnimator: ObjectAnimator? = null
private var lastRequest: GlideRequest<Drawable>? = null private var lastRequest: RequestBuilder<Drawable>? = null
private var progressAnimator: ObjectAnimator? = null
var isSeeking = false var isSeeking = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -100,7 +100,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setOnMenuItemClickListener(this@CirclePlayerFragment) setOnMenuItemClickListener(this@CirclePlayerFragment)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
this, this,
@ -129,8 +129,12 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
private fun setUpPrevNext() { private fun setUpPrevNext() {
updatePrevNextColor() updatePrevNextColor()
binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true)) binding.nextButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), true))
binding.previousButton.setOnTouchListener(MusicSeekSkipTouchListener(requireActivity(), binding.previousButton.setOnTouchListener(
false)) MusicSeekSkipTouchListener(
requireActivity(),
false
)
)
} }
private fun updatePrevNextColor() { private fun updatePrevNextColor() {
@ -237,11 +241,11 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player),
} else { } else {
binding.songInfo.hide() binding.songInfo.hide()
} }
GlideApp.with(this) Glide.with(this)
.load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong)) .load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong))
.simpleSongCoverOptions(MusicPlayerRemote.currentSong) .simpleSongCoverOptions(MusicPlayerRemote.currentSong)
.thumbnail(lastRequest) .thumbnail(lastRequest)
.error(GlideApp.with(this).load(R.drawable.default_audio_art).fitCenter()) .error(Glide.with(this).load(R.drawable.default_audio_art).fitCenter())
.fitCenter().also { .fitCenter().also {
lastRequest = it.clone() lastRequest = it.clone()
it.crossfadeListener() it.crossfadeListener()

View file

@ -102,10 +102,12 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
BottomSheetBehavior.STATE_DRAGGING -> { BottomSheetBehavior.STATE_DRAGGING -> {
mainActivity.getBottomSheetBehavior().isDraggable = false mainActivity.getBottomSheetBehavior().isDraggable = false
} }
BottomSheetBehavior.STATE_COLLAPSED -> { BottomSheetBehavior.STATE_COLLAPSED -> {
resetToCurrentPosition() resetToCurrentPosition()
mainActivity.getBottomSheetBehavior().isDraggable = true mainActivity.getBottomSheetBehavior().isDraggable = true
} }
else -> { else -> {
mainActivity.getBottomSheetBehavior().isDraggable = true mainActivity.getBottomSheetBehavior().isDraggable = true
} }
@ -377,7 +379,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.inflateMenu(R.menu.menu_player) binding.playerToolbar.inflateMenu(R.menu.menu_player)
binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
binding.playerToolbar.setOnMenuItemClickListener(this) binding.playerToolbar.setOnMenuItemClickListener(this)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
@ -491,6 +493,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
lastPlaybackControlsColor, lastPlaybackControlsColor,
PorterDuff.Mode.SRC_IN PorterDuff.Mode.SRC_IN
) )
else -> binding.playerControlsContainer.shuffleButton.setColorFilter( else -> binding.playerControlsContainer.shuffleButton.setColorFilter(
lastDisabledPlaybackControlsColor, lastDisabledPlaybackControlsColor,
PorterDuff.Mode.SRC_IN PorterDuff.Mode.SRC_IN
@ -511,6 +514,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
PorterDuff.Mode.SRC_IN PorterDuff.Mode.SRC_IN
) )
} }
MusicService.REPEAT_MODE_ALL -> { MusicService.REPEAT_MODE_ALL -> {
binding.playerControlsContainer.repeatButton.setImageResource(R.drawable.ic_repeat) binding.playerControlsContainer.repeatButton.setImageResource(R.drawable.ic_repeat)
binding.playerControlsContainer.repeatButton.setColorFilter( binding.playerControlsContainer.repeatButton.setColorFilter(
@ -518,6 +522,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player
PorterDuff.Mode.SRC_IN PorterDuff.Mode.SRC_IN
) )
} }
MusicService.REPEAT_MODE_THIS -> { MusicService.REPEAT_MODE_THIS -> {
binding.playerControlsContainer.repeatButton.setImageResource(R.drawable.ic_repeat_one) binding.playerControlsContainer.repeatButton.setImageResource(R.drawable.ic_repeat_one)
binding.playerControlsContainer.repeatButton.setColorFilter( binding.playerControlsContainer.repeatButton.setColorFilter(

View file

@ -124,7 +124,7 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setOnMenuItemClickListener(this@ColorFragment) setOnMenuItemClickListener(this@ColorFragment)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
this, this,

View file

@ -100,7 +100,7 @@ class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setOnMenuItemClickListener(this@FitFragment) setOnMenuItemClickListener(this@FitFragment)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
this, this,

View file

@ -61,7 +61,7 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.inflateMenu(R.menu.menu_player) binding.playerToolbar.inflateMenu(R.menu.menu_player)
binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
binding.playerToolbar.setOnMenuItemClickListener(this) binding.playerToolbar.setOnMenuItemClickListener(this)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
binding.playerToolbar, binding.playerToolbar,

View file

@ -32,7 +32,11 @@ 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.* import code.name.monkey.retromusic.extensions.applyColor
import code.name.monkey.retromusic.extensions.getSongInfo
import code.name.monkey.retromusic.extensions.getTintedDrawable
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 +52,7 @@ import com.google.android.material.slider.Slider
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
/** /**
* Created by hemanths on 20/09/17. * Created by hemanths on 20/09/17.
@ -58,7 +62,7 @@ class FullPlaybackControlsFragment :
AbsPlayerControlsFragment(R.layout.fragment_full_player_controls), AbsPlayerControlsFragment(R.layout.fragment_full_player_controls),
PopupMenu.OnMenuItemClickListener { PopupMenu.OnMenuItemClickListener {
private val libraryViewModel: LibraryViewModel by sharedViewModel() private val libraryViewModel: LibraryViewModel by activityViewModel()
private var _binding: FragmentFullPlayerControlsBinding? = null private var _binding: FragmentFullPlayerControlsBinding? = null
private val binding get() = _binding!! private val binding get() = _binding!!

View file

@ -30,11 +30,12 @@ import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.base.goToArtist
import code.name.monkey.retromusic.fragments.player.CoverLyricsFragment import code.name.monkey.retromusic.fragments.player.CoverLyricsFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
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.RetroGlideExtension.artistImageOptions
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) { class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) {
private var _binding: FragmentFullBinding? = null private var _binding: FragmentFullBinding? = null
@ -51,7 +52,7 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
} }
} }
@ -135,7 +136,7 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) {
libraryViewModel.artist(MusicPlayerRemote.currentSong.artistId) libraryViewModel.artist(MusicPlayerRemote.currentSong.artistId)
.observe(viewLifecycleOwner) { artist -> .observe(viewLifecycleOwner) { artist ->
if (artist.id != -1L) { if (artist.id != -1L) {
GlideApp.with(requireActivity()) Glide.with(requireActivity())
.load(RetroGlideExtension.getArtistModel(artist)) .load(RetroGlideExtension.getArtistModel(artist))
.artistImageOptions(artist) .artistImageOptions(artist)
.into(binding.artistImage) .into(binding.artistImage)

View file

@ -122,7 +122,7 @@ class HomePlayerFragment : AbsPlayerFragment(R.layout.fragment_home_player),
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.inflateMenu(R.menu.menu_player) binding.playerToolbar.inflateMenu(R.menu.menu_player)
binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
binding.playerToolbar.setOnMenuItemClickListener(this) binding.playerToolbar.setOnMenuItemClickListener(this)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(

View file

@ -144,7 +144,7 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setOnMenuItemClickListener(this@MaterialFragment) setOnMenuItemClickListener(this@MaterialFragment)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
this, this,

View file

@ -103,7 +103,7 @@ class MD3PlayerFragment : AbsPlayerFragment(R.layout.fragment_md3_player) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.inflateMenu(R.menu.menu_player) binding.playerToolbar.inflateMenu(R.menu.menu_player)
//binding.playerToolbar.menu.setUpWithIcons() //binding.playerToolbar.menu.setUpWithIcons()
binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
binding.playerToolbar.setOnMenuItemClickListener(this) binding.playerToolbar.setOnMenuItemClickListener(this)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(

View file

@ -27,7 +27,11 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.SNOWFALL import code.name.monkey.retromusic.SNOWFALL
import code.name.monkey.retromusic.databinding.FragmentPlayerBinding import code.name.monkey.retromusic.databinding.FragmentPlayerBinding
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.colorControlNormal
import code.name.monkey.retromusic.extensions.drawAboveSystemBars
import code.name.monkey.retromusic.extensions.isColorLight
import code.name.monkey.retromusic.extensions.surfaceColor
import code.name.monkey.retromusic.extensions.whichFragment
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
@ -147,7 +151,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player),
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.inflateMenu(R.menu.menu_player) binding.playerToolbar.inflateMenu(R.menu.menu_player)
//binding.playerToolbar.menu.setUpWithIcons() //binding.playerToolbar.menu.setUpWithIcons()
binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
binding.playerToolbar.setOnMenuItemClickListener(this) binding.playerToolbar.setOnMenuItemClickListener(this)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(

View file

@ -20,7 +20,12 @@ import androidx.appcompat.widget.Toolbar
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentPeekPlayerBinding import code.name.monkey.retromusic.databinding.FragmentPeekPlayerBinding
import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.extensions.colorControlNormal
import code.name.monkey.retromusic.extensions.drawAboveSystemBarsWithPadding
import code.name.monkey.retromusic.extensions.getSongInfo
import code.name.monkey.retromusic.extensions.hide
import code.name.monkey.retromusic.extensions.show
import code.name.monkey.retromusic.extensions.whichFragment
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.base.goToAlbum import code.name.monkey.retromusic.fragments.base.goToAlbum
import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.base.goToArtist
@ -68,7 +73,7 @@ class PeekPlayerFragment : AbsPlayerFragment(R.layout.fragment_peek_player) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setOnMenuItemClickListener(this@PeekPlayerFragment) setOnMenuItemClickListener(this@PeekPlayerFragment)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
this, this,

View file

@ -63,7 +63,7 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) {
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setOnMenuItemClickListener(this@PlainPlayerFragment) setOnMenuItemClickListener(this@PlainPlayerFragment)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
this, this,

View file

@ -101,7 +101,7 @@ class SimplePlayerFragment : AbsPlayerFragment(R.layout.fragment_simple_player)
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.inflateMenu(R.menu.menu_player) binding.playerToolbar.inflateMenu(R.menu.menu_player)
binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
binding.playerToolbar.setOnMenuItemClickListener(this) binding.playerToolbar.setOnMenuItemClickListener(this)
ToolbarContentTintHelper.colorizeToolbar( ToolbarContentTintHelper.colorizeToolbar(
binding.playerToolbar, binding.playerToolbar,

View file

@ -159,7 +159,7 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player),
private fun setUpPlayerToolbar() { private fun setUpPlayerToolbar() {
binding.playerToolbar.apply { binding.playerToolbar.apply {
inflateMenu(R.menu.menu_player) inflateMenu(R.menu.menu_player)
setNavigationOnClickListener { requireActivity().onBackPressed() } setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() }
setOnMenuItemClickListener(this@TinyPlayerFragment) setOnMenuItemClickListener(this@TinyPlayerFragment)
} }
} }
@ -251,6 +251,7 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player),
initialY = event.y.toInt() initialY = event.y.toInt()
progressViewUpdateHelper.stop() progressViewUpdateHelper.stop()
} }
MotionEvent.ACTION_UP, MotionEvent.ACTION_UP,
MotionEvent.ACTION_CANCEL -> { MotionEvent.ACTION_CANCEL -> {
progressViewUpdateHelper.start() progressViewUpdateHelper.start()
@ -260,6 +261,7 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player),
return true return true
} }
} }
MotionEvent.ACTION_MOVE -> { MotionEvent.ACTION_MOVE -> {
if (isDragEnabled) { if (isDragEnabled) {
val diffY = (initialY - event.y).toInt() val diffY = (initialY - event.y).toInt()

View file

@ -24,14 +24,14 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.installLanguageAndRecreate import code.name.monkey.retromusic.extensions.installLanguageAndRecreate
import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.fragments.ReloadType.HomeSections import code.name.monkey.retromusic.fragments.ReloadType.HomeSections
import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.activityViewModel
/** /**
* @author Hemanth S (h4h13). * @author Hemanth S (h4h13).
*/ */
class OtherSettingsFragment : AbsSettingsFragment() { class OtherSettingsFragment : AbsSettingsFragment() {
private val libraryViewModel by sharedViewModel<LibraryViewModel>() private val libraryViewModel by activityViewModel<LibraryViewModel>()
override fun invalidateSettings() { override fun invalidateSettings() {
val languagePreference: ATEListPreference? = findPreference(LANGUAGE_NAME) val languagePreference: ATEListPreference? = findPreference(LANGUAGE_NAME)

View file

@ -41,7 +41,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), ColorCallback {
private fun setupToolbar() { private fun setupToolbar() {
applyToolbar(binding.toolbar) applyToolbar(binding.toolbar)
binding.toolbar.setNavigationOnClickListener { binding.toolbar.setNavigationOnClickListener {
requireActivity().onBackPressed() requireActivity().onBackPressedDispatcher.onBackPressed()
} }
val navController: NavController = findNavController(R.id.contentFrame) val navController: NavController = findNavController(R.id.contentFrame)
navController.addOnDestinationChangedListener { _, _, _ -> navController.addOnDestinationChangedListener { _, _, _ ->

View file

@ -23,14 +23,11 @@ import code.name.monkey.retromusic.util.PreferenceUtil
import com.bumptech.glide.GenericTransitionOptions import com.bumptech.glide.GenericTransitionOptions
import com.bumptech.glide.Priority import com.bumptech.glide.Priority
import com.bumptech.glide.RequestBuilder import com.bumptech.glide.RequestBuilder
import com.bumptech.glide.annotation.GlideExtension import com.bumptech.glide.RequestManager
import com.bumptech.glide.annotation.GlideOption
import com.bumptech.glide.annotation.GlideType
import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.Key import com.bumptech.glide.load.Key
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.BaseRequestOptions
import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.target.Target
import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
@ -40,7 +37,6 @@ import com.bumptech.glide.signature.MediaStoreSignature
import java.io.File import java.io.File
@GlideExtension
object RetroGlideExtension { object RetroGlideExtension {
private const val DEFAULT_ARTIST_IMAGE = private const val DEFAULT_ARTIST_IMAGE =
@ -54,10 +50,8 @@ object RetroGlideExtension {
private const val DEFAULT_ANIMATION = android.R.anim.fade_in private const val DEFAULT_ANIMATION = android.R.anim.fade_in
@JvmStatic fun RequestManager.asBitmapPalette(): RequestBuilder<BitmapPaletteWrapper> {
@GlideType(BitmapPaletteWrapper::class) return this.`as`(BitmapPaletteWrapper::class.java)
fun asBitmapPalette(requestBuilder: RequestBuilder<BitmapPaletteWrapper>): RequestBuilder<BitmapPaletteWrapper> {
return requestBuilder
} }
private fun getSongModel(song: Song, ignoreMediaStore: Boolean): Any { private fun getSongModel(song: Song, ignoreMediaStore: Boolean): Any {
@ -100,14 +94,10 @@ object RetroGlideExtension {
} }
} }
@JvmStatic fun <T> RequestBuilder<T>.artistImageOptions(
@GlideOption
fun artistImageOptions(
baseRequestOptions: BaseRequestOptions<*>,
artist: Artist artist: Artist
): BaseRequestOptions<*> { ): RequestBuilder<T> {
return baseRequestOptions return diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY_ARTIST)
.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY_ARTIST)
.priority(Priority.LOW) .priority(Priority.LOW)
.error(getDrawable(DEFAULT_ARTIST_IMAGE)) .error(getDrawable(DEFAULT_ARTIST_IMAGE))
.placeholder(getDrawable(DEFAULT_ARTIST_IMAGE)) .placeholder(getDrawable(DEFAULT_ARTIST_IMAGE))
@ -115,70 +105,52 @@ object RetroGlideExtension {
.signature(createSignature(artist)) .signature(createSignature(artist))
} }
@JvmStatic fun <T> RequestBuilder<T>.songCoverOptions(
@GlideOption
fun songCoverOptions(
baseRequestOptions: BaseRequestOptions<*>,
song: Song song: Song
): BaseRequestOptions<*> { ): RequestBuilder<T> {
return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) return diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(getDrawable(DEFAULT_SONG_IMAGE)) .error(getDrawable(DEFAULT_SONG_IMAGE))
.placeholder(getDrawable(DEFAULT_SONG_IMAGE)) .placeholder(getDrawable(DEFAULT_SONG_IMAGE))
.signature(createSignature(song)) .signature(createSignature(song))
} }
@JvmStatic fun <T> RequestBuilder<T>.simpleSongCoverOptions(
@GlideOption
fun simpleSongCoverOptions(
baseRequestOptions: BaseRequestOptions<*>,
song: Song song: Song
): BaseRequestOptions<*> { ): RequestBuilder<T> {
return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) return diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.signature(createSignature(song)) .signature(createSignature(song))
} }
@JvmStatic fun <T> RequestBuilder<T>.albumCoverOptions(
@GlideOption
fun albumCoverOptions(
baseRequestOptions: BaseRequestOptions<*>,
song: Song song: Song
): BaseRequestOptions<*> { ): RequestBuilder<T> {
return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) return diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(ContextCompat.getDrawable(getContext(), DEFAULT_ALBUM_IMAGE)) .error(ContextCompat.getDrawable(getContext(), DEFAULT_ALBUM_IMAGE))
.placeholder(ContextCompat.getDrawable(getContext(), DEFAULT_ALBUM_IMAGE)) .placeholder(ContextCompat.getDrawable(getContext(), DEFAULT_ALBUM_IMAGE))
.signature(createSignature(song)) .signature(createSignature(song))
} }
@JvmStatic fun <T> RequestBuilder<T>.userProfileOptions(
@GlideOption
fun userProfileOptions(
baseRequestOptions: BaseRequestOptions<*>,
file: File, file: File,
context: Context context: Context
): BaseRequestOptions<*> { ): RequestBuilder<T> {
return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) return diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(getErrorUserProfile(context)) .error(getErrorUserProfile(context))
.signature(createSignature(file)) .signature(createSignature(file))
} }
@JvmStatic fun <T> RequestBuilder<T>.profileBannerOptions(
@GlideOption
fun profileBannerOptions(
baseRequestOptions: BaseRequestOptions<*>,
file: File file: File
): BaseRequestOptions<*> { ): RequestBuilder<T> {
return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) return diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.placeholder(DEFAULT_ERROR_IMAGE_BANNER) .placeholder(DEFAULT_ERROR_IMAGE_BANNER)
.error(DEFAULT_ERROR_IMAGE_BANNER) .error(DEFAULT_ERROR_IMAGE_BANNER)
.signature(createSignature(file)) .signature(createSignature(file))
} }
@JvmStatic fun <T> RequestBuilder<T>.playlistOptions(
@GlideOption ): RequestBuilder<T> {
fun playlistOptions( return diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
baseRequestOptions: BaseRequestOptions<*>
): BaseRequestOptions<*> {
return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(getDrawable(DEFAULT_ALBUM_IMAGE)) .error(getDrawable(DEFAULT_ALBUM_IMAGE))
} }
@ -223,7 +195,7 @@ object RetroGlideExtension {
} }
// https://github.com/bumptech/glide/issues/527#issuecomment-148840717 // https://github.com/bumptech/glide/issues/527#issuecomment-148840717
fun GlideRequest<Drawable>.crossfadeListener(): GlideRequest<Drawable> { fun RequestBuilder<Drawable>.crossfadeListener(): RequestBuilder<Drawable> {
return listener(object : RequestListener<Drawable> { return listener(object : RequestListener<Drawable> {
override fun onLoadFailed( override fun onLoadFailed(
e: GlideException?, e: GlideException?,

View file

@ -37,6 +37,7 @@ import android.support.v4.media.session.MediaSessionCompat
import android.support.v4.media.session.PlaybackStateCompat import android.support.v4.media.session.PlaybackStateCompat
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.core.app.ServiceCompat
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.media.MediaBrowserServiceCompat import androidx.media.MediaBrowserServiceCompat
@ -51,8 +52,9 @@ import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.extensions.toMediaSessionQueue import code.name.monkey.retromusic.extensions.toMediaSessionQueue
import code.name.monkey.retromusic.extensions.uri import code.name.monkey.retromusic.extensions.uri
import code.name.monkey.retromusic.glide.BlurTransformation import code.name.monkey.retromusic.glide.BlurTransformation
import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension.getDefaultTransition
import code.name.monkey.retromusic.glide.RetroGlideExtension.getSongModel import code.name.monkey.retromusic.glide.RetroGlideExtension.getSongModel
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.helper.ShuffleHelper.makeShuffleList import code.name.monkey.retromusic.helper.ShuffleHelper.makeShuffleList
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.model.Song.Companion.emptySong import code.name.monkey.retromusic.model.Song.Companion.emptySong
@ -82,6 +84,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil.registerOnSharedPreferenc
import code.name.monkey.retromusic.util.PreferenceUtil.unregisterOnSharedPreferenceChangedListener import code.name.monkey.retromusic.util.PreferenceUtil.unregisterOnSharedPreferenceChangedListener
import code.name.monkey.retromusic.volume.AudioVolumeObserver import code.name.monkey.retromusic.volume.AudioVolumeObserver
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget 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
@ -134,21 +137,27 @@ class MusicService : MediaBrowserServiceCompat(),
AppWidgetClassic.NAME -> { AppWidgetClassic.NAME -> {
appWidgetClassic.performUpdate(this@MusicService, ids) appWidgetClassic.performUpdate(this@MusicService, ids)
} }
AppWidgetSmall.NAME -> { AppWidgetSmall.NAME -> {
appWidgetSmall.performUpdate(this@MusicService, ids) appWidgetSmall.performUpdate(this@MusicService, ids)
} }
AppWidgetBig.NAME -> { AppWidgetBig.NAME -> {
appWidgetBig.performUpdate(this@MusicService, ids) appWidgetBig.performUpdate(this@MusicService, ids)
} }
AppWidgetCard.NAME -> { AppWidgetCard.NAME -> {
appWidgetCard.performUpdate(this@MusicService, ids) appWidgetCard.performUpdate(this@MusicService, ids)
} }
AppWidgetText.NAME -> { AppWidgetText.NAME -> {
appWidgetText.performUpdate(this@MusicService, ids) appWidgetText.performUpdate(this@MusicService, ids)
} }
AppWidgetMD3.NAME -> { AppWidgetMD3.NAME -> {
appWidgetMd3.performUpdate(this@MusicService, ids) appWidgetMd3.performUpdate(this@MusicService, ids)
} }
AppWidgetCircle.NAME -> { AppWidgetCircle.NAME -> {
appWidgetCircle.performUpdate(this@MusicService, ids) appWidgetCircle.performUpdate(this@MusicService, ids)
} }
@ -412,6 +421,7 @@ class MusicService : MediaBrowserServiceCompat(),
REPEAT_MODE_ALL -> if (isLastTrack) { REPEAT_MODE_ALL -> if (isLastTrack) {
position = 0 position = 0
} }
REPEAT_MODE_THIS -> if (force) { REPEAT_MODE_THIS -> if (force) {
if (isLastTrack) { if (isLastTrack) {
position = 0 position = 0
@ -419,9 +429,11 @@ class MusicService : MediaBrowserServiceCompat(),
} else { } else {
position -= 1 position -= 1
} }
REPEAT_MODE_NONE -> if (isLastTrack) { REPEAT_MODE_NONE -> if (isLastTrack) {
position -= 1 position -= 1
} }
else -> if (isLastTrack) { else -> if (isLastTrack) {
position -= 1 position -= 1
} }
@ -447,6 +459,7 @@ class MusicService : MediaBrowserServiceCompat(),
REPEAT_MODE_ALL -> if (newPosition < 0) { REPEAT_MODE_ALL -> if (newPosition < 0) {
newPosition = playingQueue.size - 1 newPosition = playingQueue.size - 1
} }
REPEAT_MODE_THIS -> if (force) { REPEAT_MODE_THIS -> if (force) {
if (newPosition < 0) { if (newPosition < 0) {
newPosition = playingQueue.size - 1 newPosition = playingQueue.size - 1
@ -454,9 +467,11 @@ class MusicService : MediaBrowserServiceCompat(),
} else { } else {
newPosition = getPosition() newPosition = getPosition()
} }
REPEAT_MODE_NONE -> if (newPosition < 0) { REPEAT_MODE_NONE -> if (newPosition < 0) {
newPosition = 0 newPosition = 0
} }
else -> if (newPosition < 0) { else -> if (newPosition < 0) {
newPosition = 0 newPosition = 0
} }
@ -486,6 +501,7 @@ class MusicService : MediaBrowserServiceCompat(),
makeShuffleList(playingQueue, getPosition()) makeShuffleList(playingQueue, getPosition())
position = 0 position = 0
} }
SHUFFLE_MODE_NONE -> { SHUFFLE_MODE_NONE -> {
this.shuffleMode = shuffleMode this.shuffleMode = shuffleMode
val currentSongId = Objects.requireNonNull(currentSong).id val currentSongId = Objects.requireNonNull(currentSong).id
@ -553,9 +569,11 @@ class MusicService : MediaBrowserServiceCompat(),
currentPosition in to until from -> { currentPosition in to until from -> {
position = currentPosition + 1 position = currentPosition + 1
} }
currentPosition in (from + 1)..to -> { currentPosition in (from + 1)..to -> {
position = currentPosition - 1 position = currentPosition - 1
} }
from == currentPosition -> { from == currentPosition -> {
position = to position = to
} }
@ -617,6 +635,7 @@ class MusicService : MediaBrowserServiceCompat(),
updateMediaSessionPlaybackState() updateMediaSessionPlaybackState()
playbackManager.setPlaybackSpeedPitch(playbackSpeed, playbackPitch) playbackManager.setPlaybackSpeedPitch(playbackSpeed, playbackPitch)
} }
CROSS_FADE_DURATION -> { CROSS_FADE_DURATION -> {
val progress = songProgressMillis val progress = songProgressMillis
val wasPlaying = isPlaying val wasPlaying = isPlaying
@ -627,6 +646,7 @@ class MusicService : MediaBrowserServiceCompat(),
playbackManager.setCrossFadeDuration(crossFadeDuration) playbackManager.setCrossFadeDuration(crossFadeDuration)
} }
} }
ALBUM_ART_ON_LOCK_SCREEN, BLURRED_ALBUM_ART -> updateMediaSessionMetaData(::updateMediaSessionPlaybackState) ALBUM_ART_ON_LOCK_SCREEN, BLURRED_ALBUM_ART -> updateMediaSessionMetaData(::updateMediaSessionPlaybackState)
COLORED_NOTIFICATION -> { COLORED_NOTIFICATION -> {
playingNotification?.updateMetadata(currentSong) { playingNotification?.updateMetadata(currentSong) {
@ -634,6 +654,7 @@ class MusicService : MediaBrowserServiceCompat(),
startForegroundOrNotify() startForegroundOrNotify()
} }
} }
CLASSIC_NOTIFICATION -> { CLASSIC_NOTIFICATION -> {
updateNotification() updateNotification()
playingNotification?.updateMetadata(currentSong) { playingNotification?.updateMetadata(currentSong) {
@ -641,6 +662,7 @@ class MusicService : MediaBrowserServiceCompat(),
startForegroundOrNotify() startForegroundOrNotify()
} }
} }
TOGGLE_HEADSET -> registerHeadsetEvents() TOGGLE_HEADSET -> registerHeadsetEvents()
} }
} }
@ -655,6 +677,7 @@ class MusicService : MediaBrowserServiceCompat(),
} else { } else {
play() play()
} }
ACTION_PAUSE -> pause() ACTION_PAUSE -> pause()
ACTION_PLAY -> play() ACTION_PLAY -> play()
ACTION_PLAY_PLAYLIST -> playFromPlaylist(intent) ACTION_PLAY_PLAYLIST -> playFromPlaylist(intent)
@ -664,6 +687,7 @@ class MusicService : MediaBrowserServiceCompat(),
pendingQuit = false pendingQuit = false
quit() quit()
} }
ACTION_PENDING_QUIT -> pendingQuit = true ACTION_PENDING_QUIT -> pendingQuit = true
TOGGLE_FAVORITE -> toggleFavorite() TOGGLE_FAVORITE -> toggleFavorite()
} }
@ -829,7 +853,7 @@ class MusicService : MediaBrowserServiceCompat(),
fun quit() { fun quit() {
pause() pause()
stopForeground(true) ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE)
isForeground = false isForeground = false
notificationManager?.cancel(PlayingNotification.NOTIFICATION_ID) notificationManager?.cancel(PlayingNotification.NOTIFICATION_ID)
@ -1023,7 +1047,7 @@ class MusicService : MediaBrowserServiceCompat(),
if (isAlbumArtOnLockScreen) { if (isAlbumArtOnLockScreen) {
// val screenSize: Point = RetroUtil.getScreenSize(this) // val screenSize: Point = RetroUtil.getScreenSize(this)
val request = GlideApp.with(this) val request = Glide.with(this)
.asBitmap() .asBitmap()
.songCoverOptions(song) .songCoverOptions(song)
.load(getSongModel(song)) .load(getSongModel(song))
@ -1078,12 +1102,14 @@ class MusicService : MediaBrowserServiceCompat(),
playingNotification?.setPlaying(isPlaying) playingNotification?.setPlaying(isPlaying)
startForegroundOrNotify() startForegroundOrNotify()
} }
FAVORITE_STATE_CHANGED -> { FAVORITE_STATE_CHANGED -> {
isCurrentFavorite { isFavorite -> isCurrentFavorite { isFavorite ->
playingNotification?.updateFavorite(isFavorite) playingNotification?.updateFavorite(isFavorite)
startForegroundOrNotify() startForegroundOrNotify()
} }
} }
META_CHANGED -> { META_CHANGED -> {
playingNotification?.updateMetadata(currentSong) { startForegroundOrNotify() } playingNotification?.updateMetadata(currentSong) { startForegroundOrNotify() }
isCurrentFavorite { isFavorite -> isCurrentFavorite { isFavorite ->
@ -1107,6 +1133,7 @@ class MusicService : MediaBrowserServiceCompat(),
storage.saveSong(currentSong) storage.saveSong(currentSong)
} }
} }
QUEUE_CHANGED -> { QUEUE_CHANGED -> {
mediaSession?.setQueueTitle(getString(R.string.now_playing_queue)) mediaSession?.setQueueTitle(getString(R.string.now_playing_queue))
mediaSession?.setQueue(playingQueue.toMediaSessionQueue()) mediaSession?.setQueue(playingQueue.toMediaSessionQueue())
@ -1128,7 +1155,7 @@ class MusicService : MediaBrowserServiceCompat(),
// We can't call stopForeground(false) on A12 though, which may result in crashes // We can't call stopForeground(false) on A12 though, which may result in crashes
// when we call startForeground after that e.g. when Alarm goes off, // when we call startForeground after that e.g. when Alarm goes off,
if (!VersionUtils.hasS()) { if (!VersionUtils.hasS()) {
stopForeground(false) ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_DETACH)
isForeground = false isForeground = false
} }
} }
@ -1156,7 +1183,7 @@ class MusicService : MediaBrowserServiceCompat(),
} }
private fun stopForegroundAndNotification() { private fun stopForegroundAndNotification() {
stopForeground(true) ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE)
notificationManager?.cancel(PlayingNotification.NOTIFICATION_ID) notificationManager?.cancel(PlayingNotification.NOTIFICATION_ID)
isForeground = false isForeground = false
} }

View file

@ -36,8 +36,9 @@ 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
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.RetroGlideExtension.asBitmapPalette
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
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
@ -47,6 +48,7 @@ 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.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
@ -105,7 +107,9 @@ class PlayingNotificationClassic(
setOngoing(true) setOngoing(true)
val bigNotificationImageSize = context.resources val bigNotificationImageSize = context.resources
.getDimensionPixelSize(R.dimen.notification_big_image_size) .getDimensionPixelSize(R.dimen.notification_big_image_size)
GlideApp.with(context).asBitmapPalette().songCoverOptions(song) Glide.with(context)
.asBitmapPalette()
.songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))
.centerCrop() .centerCrop()
.into(object : CustomTarget<BitmapPaletteWrapper>( .into(object : CustomTarget<BitmapPaletteWrapper>(
@ -124,14 +128,22 @@ class PlayingNotificationClassic(
super.onLoadFailed(errorDrawable) super.onLoadFailed(errorDrawable)
update( update(
null, null,
resolveColor(context, com.google.android.material.R.attr.colorSurface, Color.WHITE) resolveColor(
context,
com.google.android.material.R.attr.colorSurface,
Color.WHITE
)
) )
} }
override fun onLoadCleared(placeholder: Drawable?) { override fun onLoadCleared(placeholder: Drawable?) {
update( update(
null, null,
resolveColor(context, com.google.android.material.R.attr.colorSurface, Color.WHITE) resolveColor(
context,
com.google.android.material.R.attr.colorSurface,
Color.WHITE
)
) )
} }
@ -157,7 +169,11 @@ class PlayingNotificationClassic(
if (!VersionUtils.hasS()) { if (!VersionUtils.hasS()) {
if (!PreferenceUtil.isColoredNotification) { if (!PreferenceUtil.isColoredNotification) {
bgColorFinal = bgColorFinal =
resolveColor(context, com.google.android.material.R.attr.colorSurface, Color.WHITE) resolveColor(
context,
com.google.android.material.R.attr.colorSurface,
Color.WHITE
)
} }
setBackgroundColor(bgColorFinal) setBackgroundColor(bgColorFinal)
setNotificationContent(ColorUtil.isColorLight(bgColorFinal)) setNotificationContent(ColorUtil.isColorLight(bgColorFinal))

View file

@ -28,8 +28,8 @@ import androidx.media.app.NotificationCompat.MediaStyle
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.glide.GlideApp
import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroGlideExtension
import code.name.monkey.retromusic.glide.RetroGlideExtension.songCoverOptions
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.service.MusicService.Companion.ACTION_QUIT import code.name.monkey.retromusic.service.MusicService.Companion.ACTION_QUIT
@ -38,6 +38,7 @@ 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.service.MusicService.Companion.TOGGLE_FAVORITE import code.name.monkey.retromusic.service.MusicService.Companion.TOGGLE_FAVORITE
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition import com.bumptech.glide.request.transition.Transition
@ -116,7 +117,7 @@ class PlayingNotificationImpl24(
setSubText(song.albumName) setSubText(song.albumName)
val bigNotificationImageSize = context.resources val bigNotificationImageSize = context.resources
.getDimensionPixelSize(R.dimen.notification_big_image_size) .getDimensionPixelSize(R.dimen.notification_big_image_size)
GlideApp.with(context) Glide.with(context)
.asBitmap() .asBitmap()
.songCoverOptions(song) .songCoverOptions(song)
.load(RetroGlideExtension.getSongModel(song)) .load(RetroGlideExtension.getSongModel(song))

View file

@ -4,10 +4,10 @@ import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MergedImageUtils.joinImages import code.name.monkey.retromusic.util.MergedImageUtils.joinImages
import code.name.monkey.retromusic.util.MusicUtil.getMediaStoreAlbumCoverUri import code.name.monkey.retromusic.util.MusicUtil.getMediaStoreAlbumCoverUri
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.bitmap.RoundedCorners
object AutoGeneratedPlaylistBitmap { object AutoGeneratedPlaylistBitmap {
@ -31,7 +31,7 @@ object AutoGeneratedPlaylistBitmap {
private fun getBitmapWithAlbumId(context: Context, id: Long): Bitmap? { private fun getBitmapWithAlbumId(context: Context, id: Long): Bitmap? {
return try { return try {
GlideApp.with(context) Glide.with(context)
.asBitmap() .asBitmap()
.transform(RoundedCorners(20)) .transform(RoundedCorners(20))
.load(getMediaStoreAlbumCoverUri(id)) .load(getMediaStoreAlbumCoverUri(id))

View file

@ -24,14 +24,14 @@ import androidx.core.content.edit
import code.name.monkey.retromusic.App import code.name.monkey.retromusic.App
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.showToast import code.name.monkey.retromusic.extensions.showToast
import code.name.monkey.retromusic.glide.GlideApp
import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.model.Artist
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.util.* import java.util.Locale
class CustomArtistImageUtil private constructor(context: Context) { class CustomArtistImageUtil private constructor(context: Context) {
@ -45,7 +45,7 @@ class CustomArtistImageUtil private constructor(context: Context) {
val context = App.getContext() val context = App.getContext()
withContext(IO) { withContext(IO) {
runCatching { runCatching {
GlideApp.with(context) Glide.with(context)
.asBitmap() .asBitmap()
.load(uri) .load(uri)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)

View file

@ -31,7 +31,7 @@ class PurchaseActivity : AbsThemeActivity(), BillingProcessor.IBillingHandler {
setStatusBarColor(Color.TRANSPARENT) setStatusBarColor(Color.TRANSPARENT)
setLightStatusBar(false) setLightStatusBar(false)
binding.toolbar.navigationIcon?.setTint(Color.WHITE) binding.toolbar.navigationIcon?.setTint(Color.WHITE)
binding.toolbar.setNavigationOnClickListener { onBackPressed() } binding.toolbar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() }
binding.restoreButton.isEnabled = false binding.restoreButton.isEnabled = false
binding.purchaseButton.isEnabled = false binding.purchaseButton.isEnabled = false

View file

@ -2,12 +2,12 @@
buildscript { buildscript {
ext { ext {
lifecycle_version='2.5.1' lifecycle_version = '2.5.1'
navigation_version = '2.5.3' navigation_version = '2.5.3'
mdc_version = '1.9.0-alpha02' mdc_version = '1.9.0-alpha02'
preference_version = '1.2.0' preference_version = '1.2.0'
appcompat_version = '1.6.1' appcompat_version = '1.6.1'
core_version='1.9.0' core_version = '1.9.0'
} }
repositories { repositories {
@ -21,7 +21,8 @@ buildscript {
} }
} }
plugins { plugins {
id "com.github.ben-manes.versions" version "0.42.0" id "com.github.ben-manes.versions" version "0.42.0" apply false
id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false
} }
tasks.register('clean', Delete) { tasks.register('clean', Delete) {