2020-08-11 18:29:44 +00:00
|
|
|
package code.name.monkey.retromusic.fragments.albums
|
2020-07-30 14:11:19 +00:00
|
|
|
|
2020-08-11 22:20:22 +00:00
|
|
|
import android.app.ActivityOptions
|
|
|
|
import android.content.Intent
|
2020-07-30 14:11:19 +00:00
|
|
|
import android.os.Bundle
|
2020-08-11 22:20:22 +00:00
|
|
|
import android.view.*
|
2020-07-30 14:11:19 +00:00
|
|
|
import androidx.appcompat.app.AppCompatActivity
|
2020-08-11 18:29:44 +00:00
|
|
|
import androidx.core.os.bundleOf
|
2020-09-07 09:31:27 +00:00
|
|
|
import androidx.core.text.HtmlCompat
|
2020-09-27 18:59:09 +00:00
|
|
|
import androidx.core.view.ViewCompat
|
2020-08-11 18:29:44 +00:00
|
|
|
import androidx.lifecycle.Observer
|
2020-08-20 20:02:40 +00:00
|
|
|
import androidx.lifecycle.lifecycleScope
|
2020-08-11 18:29:44 +00:00
|
|
|
import androidx.navigation.findNavController
|
2020-09-18 20:35:58 +00:00
|
|
|
import androidx.navigation.fragment.FragmentNavigatorExtras
|
2020-07-30 14:11:19 +00:00
|
|
|
import androidx.navigation.fragment.findNavController
|
2020-08-11 21:31:09 +00:00
|
|
|
import androidx.navigation.fragment.navArgs
|
2020-07-30 14:11:19 +00:00
|
|
|
import androidx.recyclerview.widget.DefaultItemAnimator
|
|
|
|
import androidx.recyclerview.widget.GridLayoutManager
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
2020-08-11 22:20:22 +00:00
|
|
|
import code.name.monkey.appthemehelper.common.ATHToolbarActivity.getToolbarBackgroundColor
|
2020-09-27 18:59:09 +00:00
|
|
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
2020-08-11 22:20:22 +00:00
|
|
|
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
|
2020-08-13 12:36:24 +00:00
|
|
|
import code.name.monkey.retromusic.EXTRA_ALBUM_ID
|
2020-08-11 18:29:44 +00:00
|
|
|
import code.name.monkey.retromusic.EXTRA_ARTIST_ID
|
2020-07-30 14:11:19 +00:00
|
|
|
import code.name.monkey.retromusic.R
|
2020-08-11 22:20:22 +00:00
|
|
|
import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity
|
|
|
|
import code.name.monkey.retromusic.activities.tageditor.AlbumTagEditorActivity
|
2020-07-30 14:11:19 +00:00
|
|
|
import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter
|
|
|
|
import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter
|
2020-09-05 18:24:05 +00:00
|
|
|
import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog
|
2020-08-11 22:20:22 +00:00
|
|
|
import code.name.monkey.retromusic.dialogs.DeleteSongsDialog
|
2020-08-11 21:31:09 +00:00
|
|
|
import code.name.monkey.retromusic.extensions.applyColor
|
2020-08-21 17:07:10 +00:00
|
|
|
import code.name.monkey.retromusic.extensions.applyOutlineColor
|
2020-07-30 14:11:19 +00:00
|
|
|
import code.name.monkey.retromusic.extensions.show
|
2020-08-11 21:31:09 +00:00
|
|
|
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
|
2020-07-30 14:11:19 +00:00
|
|
|
import code.name.monkey.retromusic.glide.AlbumGlideRequest
|
|
|
|
import code.name.monkey.retromusic.glide.ArtistGlideRequest
|
|
|
|
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
|
2020-08-31 12:30:07 +00:00
|
|
|
import code.name.monkey.retromusic.glide.SingleColorTarget
|
2020-07-30 14:11:19 +00:00
|
|
|
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
2020-08-11 22:20:22 +00:00
|
|
|
import code.name.monkey.retromusic.helper.SortOrder
|
2020-09-27 18:59:09 +00:00
|
|
|
import code.name.monkey.retromusic.interfaces.IAlbumClickListener
|
2020-07-30 14:11:19 +00:00
|
|
|
import code.name.monkey.retromusic.model.Album
|
|
|
|
import code.name.monkey.retromusic.model.Artist
|
2020-09-06 07:18:47 +00:00
|
|
|
import code.name.monkey.retromusic.network.Result
|
2020-07-30 14:11:19 +00:00
|
|
|
import code.name.monkey.retromusic.network.model.LastFmAlbum
|
2020-08-20 20:02:40 +00:00
|
|
|
import code.name.monkey.retromusic.repository.RealRepository
|
2020-09-17 17:56:59 +00:00
|
|
|
import code.name.monkey.retromusic.state.NowPlayingPanelState
|
2020-07-30 14:11:19 +00:00
|
|
|
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.color.MediaNotificationProcessor
|
|
|
|
import com.bumptech.glide.Glide
|
2020-09-27 18:59:09 +00:00
|
|
|
import com.google.android.material.transition.MaterialContainerTransform
|
2020-08-11 22:20:22 +00:00
|
|
|
import kotlinx.android.synthetic.main.fragment_album_content.*
|
|
|
|
import kotlinx.android.synthetic.main.fragment_album_details.*
|
2020-08-20 20:02:40 +00:00
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
import kotlinx.coroutines.withContext
|
|
|
|
import org.koin.android.ext.android.get
|
2020-07-30 14:11:19 +00:00
|
|
|
import org.koin.androidx.viewmodel.ext.android.viewModel
|
|
|
|
import org.koin.core.parameter.parametersOf
|
|
|
|
import java.util.*
|
|
|
|
|
2020-08-11 21:31:09 +00:00
|
|
|
class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_details),
|
2020-09-27 18:59:09 +00:00
|
|
|
IAlbumClickListener {
|
2020-08-11 22:20:22 +00:00
|
|
|
|
|
|
|
private val arguments by navArgs<AlbumDetailsFragmentArgs>()
|
|
|
|
private val detailsViewModel by viewModel<AlbumDetailsViewModel> {
|
|
|
|
parametersOf(arguments.extraAlbumId)
|
|
|
|
}
|
|
|
|
|
2020-07-30 14:11:19 +00:00
|
|
|
private lateinit var simpleSongAdapter: SimpleSongAdapter
|
|
|
|
private lateinit var album: Album
|
2020-08-11 18:29:44 +00:00
|
|
|
|
2020-07-30 14:11:19 +00:00
|
|
|
private val savedSortOrder: String
|
|
|
|
get() = PreferenceUtil.albumDetailSongSortOrder
|
|
|
|
|
2020-09-21 10:47:08 +00:00
|
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
|
|
|
super.onActivityCreated(savedInstanceState)
|
|
|
|
libraryViewModel.setPanelState(NowPlayingPanelState.COLLAPSED_WITHOUT)
|
|
|
|
}
|
|
|
|
|
2020-09-27 18:59:09 +00:00
|
|
|
private fun setUpTransitions() {
|
|
|
|
val transform = MaterialContainerTransform()
|
|
|
|
transform.setAllContainerColors(ATHUtil.resolveColor(requireContext(), R.attr.colorSurface))
|
|
|
|
sharedElementEnterTransition = transform
|
|
|
|
}
|
|
|
|
|
2020-09-18 11:01:55 +00:00
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
2020-09-27 18:59:09 +00:00
|
|
|
setUpTransitions()
|
2020-09-18 11:01:55 +00:00
|
|
|
}
|
2020-09-18 12:56:41 +00:00
|
|
|
|
2020-09-18 11:01:55 +00:00
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
|
|
super.onViewCreated(view, savedInstanceState)
|
2020-08-11 22:20:22 +00:00
|
|
|
setHasOptionsMenu(true)
|
2020-08-13 08:24:36 +00:00
|
|
|
mainActivity.addMusicServiceEventListener(detailsViewModel)
|
2020-08-11 18:29:44 +00:00
|
|
|
mainActivity.setSupportActionBar(toolbar)
|
2020-09-07 09:31:27 +00:00
|
|
|
toolbar.title = " "
|
2020-09-27 18:59:09 +00:00
|
|
|
ViewCompat.setTransitionName(container, "album")
|
2020-07-30 14:11:19 +00:00
|
|
|
postponeEnterTransition()
|
2020-09-05 15:52:10 +00:00
|
|
|
detailsViewModel.getAlbum().observe(viewLifecycleOwner, Observer {
|
2020-08-13 08:24:36 +00:00
|
|
|
startPostponedEnterTransition()
|
2020-08-31 12:30:07 +00:00
|
|
|
showAlbum(it)
|
2020-07-30 14:11:19 +00:00
|
|
|
})
|
2020-09-06 07:18:47 +00:00
|
|
|
|
2020-07-30 14:11:19 +00:00
|
|
|
setupRecyclerView()
|
|
|
|
artistImage.setOnClickListener {
|
2020-08-11 18:29:44 +00:00
|
|
|
requireActivity().findNavController(R.id.fragment_container)
|
|
|
|
.navigate(
|
|
|
|
R.id.artistDetailsFragment,
|
|
|
|
bundleOf(EXTRA_ARTIST_ID to album.artistId)
|
2020-07-30 14:11:19 +00:00
|
|
|
)
|
|
|
|
}
|
2020-09-18 11:01:55 +00:00
|
|
|
playAction.setOnClickListener { MusicPlayerRemote.openQueue(album.songs, 0, true) }
|
2020-07-30 14:11:19 +00:00
|
|
|
|
|
|
|
shuffleAction.setOnClickListener {
|
|
|
|
MusicPlayerRemote.openAndShuffleQueue(
|
2020-09-18 11:01:55 +00:00
|
|
|
album.songs,
|
2020-07-30 14:11:19 +00:00
|
|
|
true
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
aboutAlbumText.setOnClickListener {
|
|
|
|
if (aboutAlbumText.maxLines == 4) {
|
|
|
|
aboutAlbumText.maxLines = Integer.MAX_VALUE
|
|
|
|
} else {
|
|
|
|
aboutAlbumText.maxLines = 4
|
|
|
|
}
|
|
|
|
}
|
|
|
|
image.apply {
|
|
|
|
transitionName = getString(R.string.transition_album_art)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onDestroy() {
|
|
|
|
super.onDestroy()
|
2020-09-23 20:55:12 +00:00
|
|
|
serviceActivity?.removeMusicServiceEventListener(detailsViewModel)
|
2020-07-30 14:11:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private fun setupRecyclerView() {
|
|
|
|
simpleSongAdapter = SimpleSongAdapter(
|
|
|
|
requireActivity() as AppCompatActivity,
|
|
|
|
ArrayList(),
|
|
|
|
R.layout.item_song,
|
|
|
|
null
|
|
|
|
)
|
|
|
|
recyclerView.apply {
|
|
|
|
layoutManager = LinearLayoutManager(requireContext())
|
|
|
|
itemAnimator = DefaultItemAnimator()
|
|
|
|
isNestedScrollingEnabled = false
|
|
|
|
adapter = simpleSongAdapter
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun showAlbum(album: Album) {
|
2020-09-18 11:01:55 +00:00
|
|
|
if (album.songs.isEmpty()) {
|
2020-07-30 14:11:19 +00:00
|
|
|
return
|
|
|
|
}
|
|
|
|
this.album = album
|
|
|
|
|
|
|
|
albumTitle.text = album.title
|
2020-09-05 15:52:10 +00:00
|
|
|
val songText = resources.getQuantityString(
|
|
|
|
R.plurals.albumSongs,
|
|
|
|
album.songCount,
|
|
|
|
album.songCount
|
|
|
|
)
|
2020-07-30 14:11:19 +00:00
|
|
|
songTitle.text = songText
|
|
|
|
if (MusicUtil.getYearString(album.year) == "-") {
|
|
|
|
albumText.text = String.format(
|
|
|
|
"%s • %s",
|
|
|
|
album.artistName,
|
|
|
|
MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(album.songs))
|
|
|
|
)
|
|
|
|
} else {
|
|
|
|
albumText.text = String.format(
|
|
|
|
"%s • %s • %s",
|
|
|
|
album.artistName,
|
|
|
|
MusicUtil.getYearString(album.year),
|
|
|
|
MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(album.songs))
|
|
|
|
)
|
|
|
|
}
|
2020-09-05 15:52:10 +00:00
|
|
|
loadAlbumCover(album)
|
2020-07-30 14:11:19 +00:00
|
|
|
simpleSongAdapter.swapDataSet(album.songs)
|
2020-09-06 07:18:47 +00:00
|
|
|
detailsViewModel.getArtist(album.artistId).observe(viewLifecycleOwner, Observer {
|
|
|
|
loadArtistImage(it)
|
|
|
|
})
|
2020-09-06 10:47:06 +00:00
|
|
|
|
2020-09-06 07:18:47 +00:00
|
|
|
detailsViewModel.getAlbumInfo(album).observe(viewLifecycleOwner, Observer { result ->
|
|
|
|
when (result) {
|
|
|
|
is Result.Loading -> {
|
|
|
|
println("Loading")
|
|
|
|
}
|
|
|
|
is Result.Error -> {
|
|
|
|
println("Error")
|
|
|
|
}
|
|
|
|
is Result.Success -> {
|
|
|
|
aboutAlbum(result.data)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
2020-07-30 14:11:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private fun moreAlbums(albums: List<Album>) {
|
|
|
|
moreTitle.show()
|
|
|
|
moreRecyclerView.show()
|
|
|
|
moreTitle.text = String.format(getString(R.string.label_more_from), album.artistName)
|
|
|
|
|
|
|
|
val albumAdapter =
|
2020-08-11 18:29:44 +00:00
|
|
|
HorizontalAlbumAdapter(requireActivity() as AppCompatActivity, albums, null, this)
|
2020-07-30 14:11:19 +00:00
|
|
|
moreRecyclerView.layoutManager = GridLayoutManager(
|
|
|
|
requireContext(),
|
|
|
|
1,
|
|
|
|
GridLayoutManager.HORIZONTAL,
|
|
|
|
false
|
|
|
|
)
|
|
|
|
moreRecyclerView.adapter = albumAdapter
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun aboutAlbum(lastFmAlbum: LastFmAlbum) {
|
|
|
|
if (lastFmAlbum.album != null) {
|
|
|
|
if (lastFmAlbum.album.wiki != null) {
|
|
|
|
aboutAlbumText.show()
|
|
|
|
aboutAlbumTitle.show()
|
|
|
|
aboutAlbumTitle.text =
|
|
|
|
String.format(getString(R.string.about_album_label), lastFmAlbum.album.name)
|
2020-09-07 09:31:27 +00:00
|
|
|
aboutAlbumText.text = HtmlCompat.fromHtml(
|
|
|
|
lastFmAlbum.album.wiki.content,
|
|
|
|
HtmlCompat.FROM_HTML_MODE_LEGACY
|
|
|
|
)
|
2020-07-30 14:11:19 +00:00
|
|
|
}
|
|
|
|
if (lastFmAlbum.album.listeners.isNotEmpty()) {
|
|
|
|
listeners.show()
|
|
|
|
listenersLabel.show()
|
|
|
|
scrobbles.show()
|
|
|
|
scrobblesLabel.show()
|
|
|
|
|
|
|
|
listeners.text = RetroUtil.formatValue(lastFmAlbum.album.listeners.toFloat())
|
|
|
|
scrobbles.text = RetroUtil.formatValue(lastFmAlbum.album.playcount.toFloat())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun loadArtistImage(artist: Artist) {
|
2020-09-06 10:47:06 +00:00
|
|
|
detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner, Observer {
|
|
|
|
moreAlbums(it)
|
|
|
|
})
|
2020-07-30 14:11:19 +00:00
|
|
|
ArtistGlideRequest.Builder.from(Glide.with(requireContext()), artist)
|
2020-09-05 15:52:10 +00:00
|
|
|
.forceDownload(PreferenceUtil.isAllowedToDownloadMetadata())
|
2020-07-30 14:11:19 +00:00
|
|
|
.generatePalette(requireContext())
|
|
|
|
.build()
|
|
|
|
.dontAnimate()
|
|
|
|
.dontTransform()
|
|
|
|
.into(object : RetroMusicColoredTarget(artistImage) {
|
|
|
|
override fun onColorReady(colors: MediaNotificationProcessor) {
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-09-05 15:52:10 +00:00
|
|
|
private fun loadAlbumCover(album: Album) {
|
2020-07-30 14:11:19 +00:00
|
|
|
AlbumGlideRequest.Builder.from(Glide.with(requireContext()), album.safeGetFirstSong())
|
2020-09-05 15:52:10 +00:00
|
|
|
.checkIgnoreMediaStore()
|
2020-07-30 14:11:19 +00:00
|
|
|
.generatePalette(requireContext())
|
|
|
|
.build()
|
2020-08-31 12:30:07 +00:00
|
|
|
.into(object : SingleColorTarget(image) {
|
|
|
|
override fun onColorReady(color: Int) {
|
|
|
|
setColors(color)
|
2020-07-30 14:11:19 +00:00
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-08-31 12:30:07 +00:00
|
|
|
private fun setColors(color: Int) {
|
2020-09-07 09:31:27 +00:00
|
|
|
shuffleAction.applyColor(color)
|
|
|
|
playAction.applyOutlineColor(color)
|
2020-07-30 14:11:19 +00:00
|
|
|
}
|
2020-08-11 18:29:44 +00:00
|
|
|
|
2020-09-17 21:25:41 +00:00
|
|
|
override fun onAlbumClick(albumId: Long, view: View) {
|
2020-08-11 18:29:44 +00:00
|
|
|
findNavController().navigate(
|
|
|
|
R.id.albumDetailsFragment,
|
2020-09-18 20:35:58 +00:00
|
|
|
bundleOf(EXTRA_ALBUM_ID to albumId),
|
|
|
|
null,
|
2020-09-27 18:59:09 +00:00
|
|
|
FragmentNavigatorExtras(
|
|
|
|
view to "album"
|
|
|
|
)
|
2020-08-11 18:29:44 +00:00
|
|
|
)
|
|
|
|
}
|
2020-08-11 22:20:22 +00:00
|
|
|
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
|
|
|
super.onCreateOptionsMenu(menu, inflater)
|
|
|
|
inflater.inflate(R.menu.menu_album_detail, menu)
|
|
|
|
val sortOrder = menu.findItem(R.id.action_sort_order)
|
|
|
|
setUpSortOrderMenu(sortOrder.subMenu)
|
|
|
|
ToolbarContentTintHelper.handleOnCreateOptionsMenu(
|
|
|
|
requireContext(),
|
|
|
|
toolbar,
|
|
|
|
menu,
|
|
|
|
getToolbarBackgroundColor(toolbar)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
return handleSortOrderMenuItem(item)
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun handleSortOrderMenuItem(item: MenuItem): Boolean {
|
|
|
|
var sortOrder: String? = null
|
|
|
|
val songs = simpleSongAdapter.dataSet
|
|
|
|
when (item.itemId) {
|
2020-08-13 12:36:24 +00:00
|
|
|
android.R.id.home -> findNavController().navigateUp()
|
2020-08-11 22:20:22 +00:00
|
|
|
R.id.action_play_next -> {
|
|
|
|
MusicPlayerRemote.playNext(songs)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
R.id.action_add_to_current_playing -> {
|
|
|
|
MusicPlayerRemote.enqueue(songs)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
R.id.action_add_to_playlist -> {
|
2020-08-20 20:02:40 +00:00
|
|
|
lifecycleScope.launch(Dispatchers.IO) {
|
2020-09-05 14:03:12 +00:00
|
|
|
val playlists = get<RealRepository>().fetchPlaylists()
|
2020-08-20 20:02:40 +00:00
|
|
|
withContext(Dispatchers.Main) {
|
2020-09-05 18:24:05 +00:00
|
|
|
AddToPlaylistDialog.create(playlists, songs)
|
2020-08-20 20:02:40 +00:00
|
|
|
.show(childFragmentManager, "ADD_PLAYLIST")
|
|
|
|
}
|
|
|
|
}
|
2020-08-11 22:20:22 +00:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
R.id.action_delete_from_device -> {
|
|
|
|
DeleteSongsDialog.create(songs).show(childFragmentManager, "DELETE_SONGS")
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
R.id.action_tag_editor -> {
|
|
|
|
val intent = Intent(requireContext(), AlbumTagEditorActivity::class.java)
|
|
|
|
intent.putExtra(AbsTagEditorActivity.EXTRA_ID, album.id)
|
|
|
|
val options = ActivityOptions.makeSceneTransitionAnimation(
|
|
|
|
requireActivity(),
|
|
|
|
albumCoverContainer,
|
|
|
|
"${getString(R.string.transition_album_art)}_${album.id}"
|
|
|
|
)
|
|
|
|
startActivityForResult(
|
|
|
|
intent,
|
|
|
|
TAG_EDITOR_REQUEST, options.toBundle()
|
|
|
|
)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
/*Sort*/
|
|
|
|
R.id.action_sort_order_title -> sortOrder = SortOrder.AlbumSongSortOrder.SONG_A_Z
|
|
|
|
R.id.action_sort_order_title_desc -> sortOrder = SortOrder.AlbumSongSortOrder.SONG_Z_A
|
|
|
|
R.id.action_sort_order_track_list -> sortOrder =
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST
|
|
|
|
R.id.action_sort_order_artist_song_duration ->
|
|
|
|
sortOrder = SortOrder.AlbumSongSortOrder.SONG_DURATION
|
|
|
|
}
|
|
|
|
if (sortOrder != null) {
|
|
|
|
item.isChecked = true
|
|
|
|
setSaveSortOrder(sortOrder)
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun setUpSortOrderMenu(sortOrder: SubMenu) {
|
|
|
|
when (savedSortOrder) {
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title)
|
|
|
|
.isChecked = true
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc)
|
|
|
|
.isChecked = true
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> sortOrder.findItem(R.id.action_sort_order_track_list)
|
|
|
|
.isChecked = true
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_DURATION -> sortOrder.findItem(R.id.action_sort_order_artist_song_duration)
|
|
|
|
.isChecked = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun setSaveSortOrder(sortOrder: String) {
|
|
|
|
PreferenceUtil.albumDetailSongSortOrder = sortOrder
|
2020-09-17 21:25:41 +00:00
|
|
|
val songs = when (sortOrder) {
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_TRACK_LIST -> album.songs.sortedWith { o1, o2 ->
|
2020-08-11 22:20:22 +00:00
|
|
|
o1.trackNumber.compareTo(
|
|
|
|
o2.trackNumber
|
|
|
|
)
|
2020-09-17 21:25:41 +00:00
|
|
|
}
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_A_Z -> album.songs.sortedWith { o1, o2 ->
|
2020-08-11 22:20:22 +00:00
|
|
|
o1.title.compareTo(
|
|
|
|
o2.title
|
|
|
|
)
|
2020-09-17 21:25:41 +00:00
|
|
|
}
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_Z_A -> album.songs.sortedWith { o1, o2 ->
|
2020-08-11 22:20:22 +00:00
|
|
|
o2.title.compareTo(
|
|
|
|
o1.title
|
|
|
|
)
|
2020-09-17 21:25:41 +00:00
|
|
|
}
|
|
|
|
SortOrder.AlbumSongSortOrder.SONG_DURATION -> album.songs.sortedWith { o1, o2 ->
|
2020-08-11 22:20:22 +00:00
|
|
|
o1.duration.compareTo(
|
|
|
|
o2.duration
|
|
|
|
)
|
2020-09-17 21:25:41 +00:00
|
|
|
}
|
|
|
|
else -> throw IllegalArgumentException("invalid $sortOrder")
|
2020-08-11 22:20:22 +00:00
|
|
|
}
|
2020-09-17 21:25:41 +00:00
|
|
|
album = album.copy(songs = songs)
|
|
|
|
simpleSongAdapter.swapDataSet(album.songs)
|
2020-08-11 22:20:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
const val TAG_EDITOR_REQUEST = 9002
|
|
|
|
}
|
2020-07-30 14:11:19 +00:00
|
|
|
}
|