PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/dialogs/AddToPlaylistDialog.kt

74 lines
3.0 KiB
Kotlin
Raw Normal View History

package code.name.monkey.retromusic.dialogs
import android.app.Dialog
import android.os.Bundle
2020-09-05 18:24:05 +00:00
import androidx.core.os.bundleOf
import androidx.lifecycle.lifecycleScope
import code.name.monkey.retromusic.EXTRA_PLAYLISTS
2020-05-23 22:26:45 +00:00
import code.name.monkey.retromusic.EXTRA_SONG
import code.name.monkey.retromusic.R
2020-09-05 18:24:05 +00:00
import code.name.monkey.retromusic.db.PlaylistEntity
import code.name.monkey.retromusic.db.SongEntity
2020-07-19 11:21:15 +00:00
import code.name.monkey.retromusic.extensions.colorButtons
2020-05-23 21:47:23 +00:00
import code.name.monkey.retromusic.extensions.extraNotNull
2020-07-19 14:39:04 +00:00
import code.name.monkey.retromusic.extensions.materialDialog
2020-09-05 18:24:05 +00:00
import code.name.monkey.retromusic.fragments.LibraryViewModel
import code.name.monkey.retromusic.fragments.ReloadType.Playlists
import code.name.monkey.retromusic.model.Song
2020-09-05 18:24:05 +00:00
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
class AddToPlaylistDialog : BottomSheetDialogFragment() {
private val libraryViewModel by sharedViewModel<LibraryViewModel>()
2020-07-19 14:39:04 +00:00
2020-09-05 18:24:05 +00:00
companion object {
fun create(playlistEntities: List<PlaylistEntity>, song: Song): AddToPlaylistDialog {
val list = mutableListOf<Song>()
list.add(song)
return create(playlistEntities, list)
}
2019-03-04 03:55:09 +00:00
2020-09-05 18:24:05 +00:00
fun create(playlistEntities: List<PlaylistEntity>, songs: List<Song>): AddToPlaylistDialog {
return AddToPlaylistDialog().apply {
arguments = bundleOf(
EXTRA_SONG to songs,
EXTRA_PLAYLISTS to playlistEntities
)
}
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val playlistEntities = extraNotNull<List<PlaylistEntity>>(EXTRA_PLAYLISTS).value
val songs = extraNotNull<List<Song>>(EXTRA_SONG).value
2020-08-14 08:34:03 +00:00
val playlistNames = mutableListOf<String>()
playlistNames.add(requireContext().resources.getString(R.string.action_new_playlist))
2020-09-05 18:24:05 +00:00
for (p in playlistEntities) {
playlistNames.add(p.playlistName)
}
return materialDialog(R.string.add_playlist_title)
2020-08-14 08:34:03 +00:00
.setItems(playlistNames.toTypedArray()) { _, which ->
if (which == 0) {
CreatePlaylistDialog.create(songs)
2020-09-05 18:24:05 +00:00
.show(requireActivity().supportFragmentManager, "Dialog")
2020-08-14 08:34:03 +00:00
} else {
2020-09-05 18:24:05 +00:00
lifecycleScope.launch(Dispatchers.IO) {
val songEntities = songs.toSongEntity(playlistEntities[which - 1])
libraryViewModel.insertSongs(songEntities)
libraryViewModel.forceReload(Playlists)
}
2020-08-14 08:34:03 +00:00
}
dismiss()
}
2020-07-19 11:21:15 +00:00
.create().colorButtons()
}
2020-09-05 18:24:05 +00:00
}
2020-09-05 18:24:05 +00:00
private fun List<Song>.toSongEntity(playlistEntity: PlaylistEntity): List<SongEntity> {
return map {
it.toSongEntity(playlistEntity.playListId)
}
2020-09-05 18:24:05 +00:00
}