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

94 lines
3.8 KiB
Kotlin
Raw Normal View History

2020-10-06 08:46:04 +00:00
/*
* Copyright (c) 2020 Hemanth Savarla.
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*/
package code.name.monkey.retromusic.dialogs
import android.app.Dialog
import android.os.Bundle
import android.widget.ArrayAdapter
2020-09-05 18:24:05 +00:00
import androidx.core.os.bundleOf
2020-09-05 18:51:44 +00:00
import androidx.fragment.app.DialogFragment
2020-09-05 18:24:05 +00:00
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
2020-09-05 18:51:44 +00:00
import code.name.monkey.retromusic.db.toSongsEntity
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 kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
2020-09-05 18:51:44 +00:00
class AddToPlaylistDialog : DialogFragment() {
2020-09-05 18:24:05 +00:00
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 {
2020-09-05 18:51:44 +00:00
val list: MutableList<Song> = mutableListOf()
2020-09-05 18:24:05 +00:00
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
)
}
}
}
private fun playlistAdapter(playlists: List<String>): ArrayAdapter<String> {
val adapter = ArrayAdapter<String>(requireContext(), R.layout.item_simple_text, R.id.title)
adapter.addAll(playlists)
return adapter
}
2020-09-05 18:24:05 +00:00
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val playlistEntities = extraNotNull<List<PlaylistEntity>>(EXTRA_PLAYLISTS).value
val songs = extraNotNull<List<Song>>(EXTRA_SONG).value
val playlistNames = mutableListOf<String>()
2020-08-14 08:34:03 +00:00
playlistNames.add(requireContext().resources.getString(R.string.action_new_playlist))
2020-09-05 18:51:44 +00:00
for (entity: PlaylistEntity in playlistEntities) {
playlistNames.add(entity.playlistName)
}
return materialDialog(R.string.add_playlist_title)
.setAdapter(
playlistAdapter(playlistNames)
) { dialog, which ->
2020-08-14 08:34:03 +00:00
if (which == 0) {
showCreateDialog(songs)
2020-08-14 08:34:03 +00:00
} else {
2020-09-05 18:24:05 +00:00
lifecycleScope.launch(Dispatchers.IO) {
val songEntities = songs.toSongsEntity(playlistEntities[which - 1])
2020-09-05 18:24:05 +00:00
libraryViewModel.insertSongs(songEntities)
libraryViewModel.forceReload(Playlists)
}
2020-08-14 08:34:03 +00:00
}
dialog.dismiss()
2020-08-14 08:34:03 +00:00
}
2020-07-19 11:21:15 +00:00
.create().colorButtons()
}
private fun showCreateDialog(songs: List<Song>) {
CreatePlaylistDialog.create(songs).show(requireActivity().supportFragmentManager, "Dialog")
}
2020-10-06 08:46:04 +00:00
}