Merge branch 'dev' into reset_image

This commit is contained in:
Phani-22 2022-03-18 07:51:40 +05:30 committed by GitHub
commit 647e504f3d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
37 changed files with 384 additions and 120 deletions

View file

@ -163,4 +163,5 @@ const val APPBAR_MODE = "appbar_mode"
const val WALLPAPER_ACCENT = "wallpaper_accent"
const val SCREEN_ON_LYRICS = "screen_on_lyrics"
const val CIRCLE_PLAY_BUTTON = "circle_play_button"
const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing"
const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing"
const val PAUSE_HISTORY = "pause_history"

View file

@ -31,6 +31,7 @@ import code.name.monkey.retromusic.service.MusicService.Companion.PLAY_STATE_CHA
import code.name.monkey.retromusic.service.MusicService.Companion.QUEUE_CHANGED
import code.name.monkey.retromusic.service.MusicService.Companion.REPEAT_MODE_CHANGED
import code.name.monkey.retromusic.service.MusicService.Companion.SHUFFLE_MODE_CHANGED
import code.name.monkey.retromusic.util.PreferenceUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject
@ -123,7 +124,10 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi
if (entity != null) {
repository.updateHistorySong(MusicPlayerRemote.currentSong)
} else {
repository.addSongToHistory(MusicPlayerRemote.currentSong)
// Check whether pause history option is ON or OFF
if (!PreferenceUtil.pauseHistory) {
repository.addSongToHistory(MusicPlayerRemote.currentSong)
}
}
val songs = repository.checkSongExistInPlayCount(MusicPlayerRemote.currentSong.id)
if (songs.isNotEmpty()) {

View file

@ -35,7 +35,7 @@ import kotlinx.coroutines.withContext
import java.io.File
class LibraryViewModel(
private val repository: RealRepository
private val repository: RealRepository,
) : ViewModel(), IMusicServiceEventListener {
private val _paletteColor = MutableLiveData<Int>()
@ -50,6 +50,7 @@ class LibraryViewModel(
private val searchResults = MutableLiveData<List<Any>>()
private val fabMargin = MutableLiveData(0)
private val songHistory = MutableLiveData<List<Song>>()
private var previousSongHistory = ArrayList<HistoryEntity>()
val paletteColor: LiveData<Int> = _paletteColor
init {
@ -143,12 +144,11 @@ class LibraryViewModel(
suggestions.postValue(repository.suggestions())
}
fun search(query: String?, filter: Filter) {
fun search(query: String?, filter: Filter) =
viewModelScope.launch(IO) {
val result = repository.search(query, filter)
val result =repository.search(query, filter)
searchResults.postValue(result)
}
}
fun forceReload(reloadType: ReloadType) = viewModelScope.launch(IO) {
when (reloadType) {
@ -342,11 +342,27 @@ class LibraryViewModel(
fun clearHistory() {
viewModelScope.launch(IO) {
previousSongHistory = repository.historySong() as ArrayList<HistoryEntity>
repository.clearSongHistory()
}
songHistory.value = emptyList()
}
fun restoreHistory() {
viewModelScope.launch(IO) {
if (previousSongHistory.isNotEmpty()) {
val history = ArrayList<Song>()
for (song in previousSongHistory) {
repository.addSongToHistory(song.toSong())
history.add(song.toSong())
}
songHistory.postValue(history)
}
}
}
fun favorites() = repository.favorites()
fun clearSearchResult() {
@ -363,6 +379,14 @@ class LibraryViewModel(
createPlaylist(PlaylistEntity(playlistName = playlistName))
insertSongs(songs.map { it.toSongEntity(playlistId) })
forceReload(Playlists)
withContext(Main) {
Toast.makeText(
App.getContext(),
App.getContext()
.getString(R.string.playlist_created_sucessfully, playlistName),
Toast.LENGTH_SHORT
).show()
}
} else {
val playlist = playlists.firstOrNull()
if (playlist != null) {
@ -370,21 +394,13 @@ class LibraryViewModel(
it.toSongEntity(playListId = playlist.playListId)
})
}
withContext(Main) {
Toast.makeText(
App.getContext(),
"Playlist already exists",
Toast.LENGTH_SHORT
).show()
if (songs.isNotEmpty()) {
Toast.makeText(
App.getContext(),
"Adding songs to $playlistName",
Toast.LENGTH_SHORT
).show()
}
}
}
withContext(Main) {
Toast.makeText(App.getContext(), App.getContext().getString(
R.string.added_song_count_to_playlist,
songs.size,
playlistName
), Toast.LENGTH_SHORT).show()
}
}
}

View file

@ -80,6 +80,7 @@ import kotlinx.coroutines.withContext
import org.koin.android.ext.android.get
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koin.core.parameter.parametersOf
import java.text.Collator
class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_details),
IAlbumClickListener, ICabHolder {
@ -437,15 +438,13 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det
o2.trackNumber
)
}
SONG_A_Z -> album.songs.sortedWith { o1, o2 ->
o1.title.compareTo(
o2.title
)
SONG_A_Z -> {
val collator = Collator.getInstance()
album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) }
}
SONG_Z_A -> album.songs.sortedWith { o1, o2 ->
o2.title.compareTo(
o1.title
)
SONG_Z_A -> {
val collator = Collator.getInstance()
album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) }
}
SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
o1.duration.compareTo(

View file

@ -187,7 +187,7 @@ class HomeFragment :
}
GlideApp.with(requireActivity())
.load(RetroGlideExtension.getUserModel())
.userProfileOptions(RetroGlideExtension.getUserModel())
.userProfileOptions(RetroGlideExtension.getUserModel(), requireContext())
.into(binding.userImage)
}

View file

@ -14,6 +14,7 @@
*/
package code.name.monkey.retromusic.fragments.other
import android.graphics.Color
import android.os.Bundle
import android.view.Menu
import android.view.MenuInflater
@ -22,6 +23,7 @@ import android.view.View
import androidx.activity.addCallback
import androidx.core.os.bundleOf
import androidx.core.view.doOnPreDraw
import androidx.core.view.isVisible
import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
@ -51,8 +53,10 @@ import com.afollestad.materialcab.attached.destroy
import com.afollestad.materialcab.attached.isActive
import com.afollestad.materialcab.createCab
import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.transition.MaterialSharedAxis
class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_detail),
IArtistClickListener, IAlbumClickListener, ICabHolder {
private val args by navArgs<DetailListFragmentArgs>()
@ -162,9 +166,12 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
adapter = songAdapter
layoutManager = linearLayoutManager()
}
libraryViewModel.observableHistorySongs().observe(viewLifecycleOwner) {
songAdapter.swapDataSet(it)
binding.empty.isVisible = it.isEmpty()
}
}
private fun loadFavorite() {
@ -236,6 +243,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
return if (RetroUtil.isLandscape()) 4 else 2
}
override fun onArtist(artistId: Long, view: View) {
findNavController().navigate(
R.id.artistDetailsFragment,
@ -305,11 +313,24 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_clear_history -> libraryViewModel.clearHistory()
/*
TODO("Show a snackbar showing that history has been successfully
cleared and that will have an undo button")
*/
R.id.action_clear_history -> {
if (binding.recyclerView.adapter?.itemCount!! > 0) {
libraryViewModel.clearHistory()
val snackBar =
Snackbar.make(binding.container,
getString(R.string.history_cleared),
Snackbar.LENGTH_LONG)
.setAction(getString(R.string.history_undo_button)) {
libraryViewModel.restoreHistory()
}
.setActionTextColor(Color.YELLOW)
val snackBarView = snackBar.view
snackBarView.translationY =
-(resources.getDimension(R.dimen.mini_player_height))
snackBar.show()
}
}
}
return false
}

View file

@ -167,7 +167,7 @@ class UserInfoFragment : Fragment() {
}
GlideApp.with(this)
.load(RetroGlideExtension.getUserModel())
.userProfileOptions(RetroGlideExtension.getUserModel())
.userProfileOptions(RetroGlideExtension.getUserModel(), requireContext())
.into(binding.userImage)
}

View file

@ -14,6 +14,9 @@
*/
package code.name.monkey.retromusic.fragments.player.material
import android.animation.ArgbEvaluator
import android.animation.ValueAnimator
import android.graphics.drawable.GradientDrawable
import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
@ -22,12 +25,16 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.databinding.FragmentMaterialBinding
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.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import code.name.monkey.retromusic.views.DrawableGradient
/**
* @author Hemanth S (h4h13).
@ -48,6 +55,33 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) {
private var _binding: FragmentMaterialBinding? = null
private val binding get() = _binding!!
private var valueAnimator: ValueAnimator? = null
private fun colorize(i: Int) {
if (valueAnimator != null) {
valueAnimator?.cancel()
}
valueAnimator = ValueAnimator.ofObject(
ArgbEvaluator(),
surfaceColor(),
i
)
valueAnimator?.addUpdateListener { animation ->
if (isAdded) {
val drawable = DrawableGradient(
GradientDrawable.Orientation.TOP_BOTTOM,
intArrayOf(
animation.animatedValue as Int,
surfaceColor()
), 0
)
binding.colorGradientBackground.background = drawable
}
}
valueAnimator?.setDuration(ViewUtil.RETRO_MUSIC_ANIM_TIME.toLong())?.start()
}
override fun onShow() {
playbackControlsFragment.show()
@ -74,6 +108,10 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) {
colorControlNormal(),
requireActivity()
)
if (PreferenceUtil.isAdaptiveColor) {
colorize(color.backgroundColor)
}
}
override fun toggleFavorite(song: Song) {

View file

@ -46,6 +46,7 @@ import com.google.android.material.chip.ChipGroup
import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.transition.MaterialFadeThrough
import kotlinx.coroutines.Job
import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEvent
import java.util.*
@ -63,6 +64,8 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
private lateinit var searchAdapter: SearchAdapter
private var query: String? = null
private var job: Job? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
enterTransition = MaterialFadeThrough().addTarget(view)
@ -184,7 +187,8 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
binding.voiceSearch.isGone = query.isNotEmpty()
binding.clearText.isVisible = query.isNotEmpty()
val filter = getFilter()
libraryViewModel.search(query, filter)
job?.cancel()
job = libraryViewModel.search(query, filter)
}
private fun getFilter(): Filter {

View file

@ -1,5 +1,6 @@
package code.name.monkey.retromusic.glide
import android.content.Context
import android.graphics.drawable.Drawable
import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor
import code.name.monkey.appthemehelper.util.TintHelper
@ -150,10 +151,11 @@ object RetroGlideExtension {
@GlideOption
fun userProfileOptions(
baseRequestOptions: BaseRequestOptions<*>,
file: File
file: File,
context: Context
): BaseRequestOptions<*> {
return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY)
.error(getErrorUserProfile())
.error(getErrorUserProfile(context))
.signature(createSignature(file))
}
@ -201,11 +203,11 @@ object RetroGlideExtension {
return File(dir, USER_BANNER)
}
private fun getErrorUserProfile(): Drawable {
private fun getErrorUserProfile(context: Context): Drawable {
return TintHelper.createTintedDrawable(
getContext(),
R.drawable.ic_account,
accentColor(getContext())
accentColor(context)
)
}

View file

@ -43,9 +43,7 @@ class WallpaperAccentManager(val context: Context) {
.getWallpaperColors(WallpaperManager.FLAG_SYSTEM)
if (colors != null) {
val primaryColor = colors.primaryColor.toArgb()
if (primaryColor != ThemeStore.wallpaperColor(context)) {
ThemeStore.editTheme(context).wallpaperColor(primaryColor).commit()
}
ThemeStore.editTheme(context).wallpaperColor(context, primaryColor).commit()
}
}
}

View file

@ -17,6 +17,7 @@ package code.name.monkey.retromusic.model
import code.name.monkey.retromusic.helper.SortOrder
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import java.text.Collator
data class Artist(
val id: Long,
@ -60,37 +61,34 @@ data class Artist(
get() = albums.flatMap { it.songs }
val sortedSongs: List<Song>
get() = songs.sortedWith(
when (PreferenceUtil.artistDetailSongSortOrder) {
SortOrder.ArtistSongSortOrder.SONG_A_Z -> { o1, o2 ->
o1.title.compareTo(
o2.title
)
}
SortOrder.ArtistSongSortOrder.SONG_Z_A -> { o1, o2 ->
o2.title.compareTo(
o1.title
)
}
SortOrder.ArtistSongSortOrder.SONG_ALBUM -> { o1, o2 ->
o1.albumName.compareTo(
o2.albumName
)
}
SortOrder.ArtistSongSortOrder.SONG_YEAR -> { o1, o2 ->
o2.year.compareTo(
o1.year
)
}
SortOrder.ArtistSongSortOrder.SONG_DURATION -> { o1, o2 ->
o1.duration.compareTo(
o2.duration
)
}
else -> {
throw IllegalArgumentException("invalid ${PreferenceUtil.artistDetailSongSortOrder}")
}
})
get() {
val collator = Collator.getInstance()
return songs.sortedWith(
when (PreferenceUtil.artistDetailSongSortOrder) {
SortOrder.ArtistSongSortOrder.SONG_A_Z -> { o1, o2 ->
collator.compare(o1.title, o2.title)
}
SortOrder.ArtistSongSortOrder.SONG_Z_A -> { o1, o2 ->
collator.compare(o2.title, o1.title)
}
SortOrder.ArtistSongSortOrder.SONG_ALBUM -> { o1, o2 ->
collator.compare(o1.albumName, o2.albumName)
}
SortOrder.ArtistSongSortOrder.SONG_YEAR -> { o1, o2 ->
o2.year.compareTo(
o1.year
)
}
SortOrder.ArtistSongSortOrder.SONG_DURATION -> { o1, o2 ->
o1.duration.compareTo(
o2.duration
)
}
else -> {
throw IllegalArgumentException("invalid ${PreferenceUtil.artistDetailSongSortOrder}")
}
})
}
fun safeGetFirstAlbum(): Album {
return albums.firstOrNull() ?: Album.empty

View file

@ -19,6 +19,7 @@ import code.name.monkey.retromusic.helper.SortOrder
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.PreferenceUtil
import java.text.Collator
/**
@ -65,8 +66,7 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) :
)
val songs = songRepository.songs(cursor)
val album = Album(albumId, songs)
sortAlbumSongs(album)
return album
return sortAlbumSongs(album)
}
// We don't need sorted list of songs (with sortAlbumSongs())
@ -74,23 +74,36 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) :
fun splitIntoAlbums(
songs: List<Song>
): List<Album> {
return if (PreferenceUtil.albumSortOrder != SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS) songs.groupBy { it.albumId }
.map { Album(it.key, it.value) }
// We can't sort Album with the help of MediaStore so a hack
else songs.groupBy { it.albumId }.map { Album(it.key, it.value) }
.sortedByDescending { it.songCount }
val grouped = songs.groupBy { it.albumId }.map { Album(it.key, it.value) }
val collator = Collator.getInstance()
return when (PreferenceUtil.albumSortOrder) {
SortOrder.AlbumSortOrder.ALBUM_A_Z -> {
grouped.sortedWith { a1, a2 -> collator.compare(a1.title, a2.title) }
}
SortOrder.AlbumSortOrder.ALBUM_Z_A -> {
grouped.sortedWith { a1, a2 -> collator.compare(a2.title, a1.title) }
}
SortOrder.AlbumSortOrder.ALBUM_ARTIST -> {
grouped.sortedWith { a1, a2 -> collator.compare(a1.albumArtist, a2.albumArtist) }
}
SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS -> {
grouped.sortedByDescending { it.songCount }
}
else -> grouped
}
}
private fun sortAlbumSongs(album: Album): Album {
val collator = Collator.getInstance()
val songs = when (PreferenceUtil.albumDetailSongSortOrder) {
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs.sortedWith { o1, o2 ->
o1.trackNumber.compareTo(o2.trackNumber)
}
SortOrder.AlbumSongSortOrder.SONG_A_Z -> album.songs.sortedWith { o1, o2 ->
o1.title.compareTo(o2.title)
SortOrder.AlbumSongSortOrder.SONG_A_Z -> {
album.songs.sortedWith { o1, o2 -> collator.compare(o1.title, o2.title) }
}
SortOrder.AlbumSongSortOrder.SONG_Z_A -> album.songs.sortedWith { o1, o2 ->
o2.title.compareTo(o1.title)
SortOrder.AlbumSongSortOrder.SONG_Z_A -> {
album.songs.sortedWith { o1, o2 -> collator.compare(o2.title, o1.title) }
}
SortOrder.AlbumSongSortOrder.SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
o1.duration.compareTo(o2.duration)

View file

@ -20,6 +20,7 @@ import code.name.monkey.retromusic.helper.SortOrder
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.util.PreferenceUtil
import java.text.Collator
interface ArtistRepository {
fun artists(): List<Artist>
@ -103,7 +104,8 @@ class RealArtistRepository(
getSongLoaderSortOrder()
)
)
return splitIntoArtists(albumRepository.splitIntoAlbums(songs))
val artists = splitIntoArtists(albumRepository.splitIntoAlbums(songs))
return sortArtists(artists)
}
override fun albumArtists(): List<Artist> {
@ -115,7 +117,8 @@ class RealArtistRepository(
if (PreferenceUtil.artistSortOrder == SortOrder.ArtistSortOrder.ARTIST_A_Z) "" else " DESC"
)
)
return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs))
val artists = splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs))
return sortArtists(artists)
}
override fun albumArtists(query: String): List<Artist> {
@ -126,7 +129,8 @@ class RealArtistRepository(
getSongLoaderSortOrder()
)
)
return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs))
val artists = splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs))
return sortArtists(artists)
}
override fun artists(query: String): List<Artist> {
@ -137,7 +141,8 @@ class RealArtistRepository(
getSongLoaderSortOrder()
)
)
return splitIntoArtists(albumRepository.splitIntoAlbums(songs))
val artists = splitIntoArtists(albumRepository.splitIntoAlbums(songs))
return sortArtists(artists)
}
@ -165,4 +170,17 @@ class RealArtistRepository(
return albums.groupBy { it.artistId }
.map { Artist(it.key, it.value) }
}
private fun sortArtists(artists: List<Artist>): List<Artist> {
val collator = Collator.getInstance()
return when (PreferenceUtil.artistSortOrder) {
SortOrder.ArtistSortOrder.ARTIST_A_Z -> {
artists.sortedWith { a1, a2 -> collator.compare(a1.name, a2.name) }
}
SortOrder.ArtistSortOrder.ARTIST_Z_A -> {
artists.sortedWith { a1, a2 -> collator.compare(a2.name, a1.name) }
}
else -> artists
}
}
}

View file

@ -28,9 +28,11 @@ import code.name.monkey.retromusic.extensions.getInt
import code.name.monkey.retromusic.extensions.getLong
import code.name.monkey.retromusic.extensions.getString
import code.name.monkey.retromusic.extensions.getStringOrNull
import code.name.monkey.retromusic.helper.SortOrder
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.providers.BlacklistStore
import code.name.monkey.retromusic.util.PreferenceUtil
import java.text.Collator
/**
* Created by hemanths on 10/08/17.
@ -66,7 +68,28 @@ class RealSongRepository(private val context: Context) : SongRepository {
} while (cursor.moveToNext())
}
cursor?.close()
return songs
val collator = Collator.getInstance()
return when (PreferenceUtil.songSortOrder) {
SortOrder.SongSortOrder.SONG_A_Z -> {
songs.sortedWith{ s1, s2 -> collator.compare(s1.title, s2.title) }
}
SortOrder.SongSortOrder.SONG_Z_A -> {
songs.sortedWith{ s1, s2 -> collator.compare(s2.title, s1.title) }
}
SortOrder.SongSortOrder.SONG_ALBUM -> {
songs.sortedWith{ s1, s2 -> collator.compare(s1.albumName, s2.albumName) }
}
SortOrder.SongSortOrder.SONG_ALBUM_ARTIST -> {
songs.sortedWith{ s1, s2 -> collator.compare(s1.albumArtist, s2.albumArtist) }
}
SortOrder.SongSortOrder.SONG_ARTIST -> {
songs.sortedWith{ s1, s2 -> collator.compare(s1.artistName, s2.artistName) }
}
SortOrder.SongSortOrder.COMPOSER -> {
songs.sortedWith{ s1, s2 -> collator.compare(s1.composer, s2.composer) }
}
else -> songs
}
}
override fun song(cursor: Cursor?): Song {

View file

@ -125,8 +125,14 @@ class PlayingNotificationImpl24(
}
override fun updateMetadata(song: Song, onUpdate: () -> Unit) {
setContentTitle(song.title)
setContentText(
setContentTitle(
HtmlCompat.fromHtml(
"<b>" + song.title + "</b>",
HtmlCompat.FROM_HTML_MODE_LEGACY
)
)
setContentText(song.artistName)
setSubText(
HtmlCompat.fromHtml(
"<b>" + song.albumName + "</b>",
HtmlCompat.FROM_HTML_MODE_LEGACY
@ -169,10 +175,12 @@ class PlayingNotificationImpl24(
}
override fun onLoadCleared(placeholder: Drawable?) {
setLargeIcon(BitmapFactory.decodeResource(
context.resources,
R.drawable.default_audio_art
))
setLargeIcon(
BitmapFactory.decodeResource(
context.resources,
R.drawable.default_audio_art
)
)
onUpdate()
}
})

View file

@ -637,6 +637,12 @@ object PreferenceUtil {
true
)
val pauseHistory: Boolean
get() = sharedPreferences.getBoolean(
PAUSE_HISTORY,
false
)
var audioFadeDuration
get() = sharedPreferences
.getInt(AUDIO_FADE_DURATION, 0)

View file

@ -49,7 +49,6 @@ import java.util.Collections;
import java.util.List;
import code.name.monkey.appthemehelper.util.TintHelper;
import code.name.monkey.appthemehelper.util.VersionUtils;
import code.name.monkey.retromusic.App;
public class RetroUtil {

View file

@ -17,12 +17,10 @@ package code.name.monkey.retromusic.util
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.provider.BaseColumns
import android.provider.MediaStore
import android.provider.Settings
import android.widget.Toast
import androidx.annotation.RequiresApi
import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.model.Song