parent
dca26f14eb
commit
25f072a5d5
|
@ -26,9 +26,12 @@ import androidx.lifecycle.Observer
|
|||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.navigation.Navigation
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import java.security.SecureRandom
|
||||
import java.util.Collections
|
||||
import java.util.Random
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.koin.android.viewmodel.ext.android.viewModel
|
||||
import org.koin.core.component.KoinApiExtension
|
||||
import org.moire.ultrasonic.R
|
||||
import org.moire.ultrasonic.data.ActiveServerProvider
|
||||
import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline
|
||||
|
@ -52,13 +55,12 @@ import org.moire.ultrasonic.view.EntryAdapter
|
|||
import org.moire.ultrasonic.view.SelectMusicFolderView
|
||||
import org.moire.ultrasonic.view.SongView
|
||||
import timber.log.Timber
|
||||
import java.security.SecureRandom
|
||||
import java.util.Collections
|
||||
import java.util.Random
|
||||
|
||||
/**
|
||||
* Displays a group of playable media from the library, which can be an Album, a Playlist, etc.
|
||||
* TODO: Break up this class into smaller more specific classes, extending a base class if necessary
|
||||
*/
|
||||
@KoinApiExtension
|
||||
class SelectAlbumFragment : Fragment() {
|
||||
|
||||
private var refreshAlbumListView: SwipeRefreshLayout? = null
|
||||
|
@ -89,11 +91,10 @@ class SelectAlbumFragment : Fragment() {
|
|||
private val shareHandler: ShareHandler by inject()
|
||||
private var cancellationToken: CancellationToken? = null
|
||||
private val activeServerProvider: ActiveServerProvider by inject()
|
||||
private val serverSettingsModel: ServerSettingsModel by viewModel()
|
||||
|
||||
private val serverSettingsModel: ServerSettingsModel by viewModels()
|
||||
private val model: SelectAlbumModel by viewModels()
|
||||
|
||||
|
||||
private val random: Random = SecureRandom()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
@ -210,15 +211,15 @@ class SelectAlbumFragment : Fragment() {
|
|||
}
|
||||
unpinButton!!.setOnClickListener {
|
||||
unpin()
|
||||
selectAll(false, false)
|
||||
selectAll(selected = false, toast = false)
|
||||
}
|
||||
downloadButton!!.setOnClickListener {
|
||||
downloadBackground(false)
|
||||
selectAll(false, false)
|
||||
selectAll(selected = false, toast = false)
|
||||
}
|
||||
deleteButton!!.setOnClickListener {
|
||||
delete()
|
||||
selectAll(false, false)
|
||||
selectAll(selected = false, toast = false)
|
||||
}
|
||||
|
||||
registerForContextMenu(albumListView!!)
|
||||
|
@ -256,30 +257,14 @@ class SelectAlbumFragment : Fragment() {
|
|||
Constants.INTENT_EXTRA_NAME_ALBUM_LIST_OFFSET, 0
|
||||
)
|
||||
|
||||
triggerLoad(refresh, id, name, playlistId, playlistName, podcastChannelId, shareId, shareName, albumListType, albumListTitle, albumListSize, albumListOffset, genreName, getStarredTracks, getVideos, getRandomTracks, isAlbum, parentId)
|
||||
|
||||
fun setTitle(name: String?) {
|
||||
setTitle(this@SelectAlbumFragment, name)
|
||||
}
|
||||
|
||||
fun setTitle(name: Int) {
|
||||
setTitle(this@SelectAlbumFragment, name)
|
||||
}
|
||||
|
||||
private fun triggerLoad(
|
||||
refresh: Boolean,
|
||||
id: String?,
|
||||
name: String?,
|
||||
playlistId: String?,
|
||||
playlistName: String?,
|
||||
podcastChannelId: String?,
|
||||
shareId: String?,
|
||||
shareName: String?,
|
||||
albumListType: String?,
|
||||
albumListTitle: Int,
|
||||
albumListSize: Int,
|
||||
albumListOffset: Int,
|
||||
genreName: String?,
|
||||
getStarredTracks: Int,
|
||||
getVideos: Int,
|
||||
getRandomTracks: Int,
|
||||
isAlbum: Boolean,
|
||||
parentId: String?
|
||||
) {
|
||||
serverSettingsModel.viewModelScope.launch {
|
||||
refreshAlbumListView!!.isRefreshing = true
|
||||
|
||||
|
@ -295,7 +280,7 @@ class SelectAlbumFragment : Fragment() {
|
|||
setTitle(shareName)
|
||||
model.getShare(shareId, shareName)
|
||||
} else if (albumListType != null) {
|
||||
setTitle(this@SelectAlbumFragment, albumListTitle)
|
||||
setTitle(albumListTitle)
|
||||
model.getAlbumList(albumListType, albumListSize, albumListOffset)
|
||||
} else if (genreName != null) {
|
||||
setTitle(genreName)
|
||||
|
@ -304,10 +289,10 @@ class SelectAlbumFragment : Fragment() {
|
|||
setTitle(getString(R.string.main_songs_starred))
|
||||
model.getStarred()
|
||||
} else if (getVideos != 0) {
|
||||
setTitle(this@SelectAlbumFragment, R.string.main_videos)
|
||||
setTitle(R.string.main_videos)
|
||||
model.getVideos(refresh)
|
||||
} else if (getRandomTracks != 0) {
|
||||
setTitle(this@SelectAlbumFragment, R.string.main_songs_random)
|
||||
setTitle(R.string.main_songs_random)
|
||||
model.getRandom(albumListSize)
|
||||
} else {
|
||||
setTitle(name)
|
||||
|
@ -326,11 +311,6 @@ class SelectAlbumFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun setTitle(name: String?) {
|
||||
setTitle(this@SelectAlbumFragment, name)
|
||||
}
|
||||
|
||||
|
||||
override fun onCreateContextMenu(menu: ContextMenu, view: View, menuInfo: ContextMenuInfo?) {
|
||||
super.onCreateContextMenu(menu, view, menuInfo)
|
||||
val info = menuInfo as AdapterContextMenuInfo?
|
||||
|
@ -366,32 +346,44 @@ class SelectAlbumFragment : Fragment() {
|
|||
when (menuItem.itemId) {
|
||||
R.id.album_menu_play_now -> {
|
||||
downloadHandler.downloadRecursively(
|
||||
this, entryId, save = false, append = false, autoPlay = true, shuffle = false, background = false, playNext = false, unpin = false, isArtist = false
|
||||
this, entryId, save = false, append = false,
|
||||
autoPlay = true, shuffle = false, background = false,
|
||||
playNext = false, unpin = false, isArtist = false
|
||||
)
|
||||
}
|
||||
R.id.album_menu_play_next -> {
|
||||
downloadHandler.downloadRecursively(
|
||||
this, entryId, save = false, append = false, autoPlay = false, shuffle = false, background = false, playNext = true, unpin = false, isArtist = false
|
||||
this, entryId, save = false, append = false,
|
||||
autoPlay = false, shuffle = false, background = false,
|
||||
playNext = true, unpin = false, isArtist = false
|
||||
)
|
||||
}
|
||||
R.id.album_menu_play_last -> {
|
||||
downloadHandler.downloadRecursively(
|
||||
this, entryId, save = false, append = true, autoPlay = false, shuffle = false, background = false, playNext = false, unpin = false, isArtist = false
|
||||
this, entryId, save = false, append = true,
|
||||
autoPlay = false, shuffle = false, background = false,
|
||||
playNext = false, unpin = false, isArtist = false
|
||||
)
|
||||
}
|
||||
R.id.album_menu_pin -> {
|
||||
downloadHandler.downloadRecursively(
|
||||
this, entryId, save = true, append = true, autoPlay = false, shuffle = false, background = false, playNext = false, unpin = false, isArtist = false
|
||||
this, entryId, save = true, append = true,
|
||||
autoPlay = false, shuffle = false, background = false,
|
||||
playNext = false, unpin = false, isArtist = false
|
||||
)
|
||||
}
|
||||
R.id.album_menu_unpin -> {
|
||||
downloadHandler.downloadRecursively(
|
||||
this, entryId, save = false, append = false, autoPlay = false, shuffle = false, background = false, playNext = false, unpin = true, isArtist = false
|
||||
this, entryId, save = false, append = false,
|
||||
autoPlay = false, shuffle = false, background = false,
|
||||
playNext = false, unpin = true, isArtist = false
|
||||
)
|
||||
}
|
||||
R.id.album_menu_download -> {
|
||||
downloadHandler.downloadRecursively(
|
||||
this, entryId, save = false, append = false, autoPlay = false, shuffle = false, background = true, playNext = false, unpin = false, isArtist = false
|
||||
this, entryId, save = false, append = false,
|
||||
autoPlay = false, shuffle = false, background = true,
|
||||
playNext = false, unpin = false, isArtist = false
|
||||
)
|
||||
}
|
||||
R.id.select_album_play_all -> {
|
||||
|
@ -497,8 +489,6 @@ class SelectAlbumFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private fun selectAllOrNone() {
|
||||
var someUnselected = false
|
||||
val count = albumListView!!.count
|
||||
|
@ -610,7 +600,7 @@ class SelectAlbumFragment : Fragment() {
|
|||
var songs = getSelectedSongs(albumListView)
|
||||
|
||||
if (songs.isEmpty()) {
|
||||
selectAll(true, false)
|
||||
selectAll(selected = true, toast = false)
|
||||
songs = getSelectedSongs(albumListView)
|
||||
}
|
||||
|
||||
|
@ -628,6 +618,15 @@ class SelectAlbumFragment : Fragment() {
|
|||
mediaPlayerController.unpin(songs)
|
||||
}
|
||||
|
||||
private val musicFolderObserver = Observer<List<MusicFolder>> { changedFolders ->
|
||||
if (changedFolders != null) {
|
||||
selectFolderHeader!!.setData(
|
||||
activeServerProvider.getActiveServer().musicFolderId,
|
||||
changedFolders
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private val albumListObserver = Observer<MusicDirectory> { musicDirectory ->
|
||||
if (musicDirectory.getChildren().isNotEmpty()) {
|
||||
pinButton!!.visibility = View.GONE
|
||||
|
@ -676,15 +675,6 @@ class SelectAlbumFragment : Fragment() {
|
|||
updateInterfaceWithEntries(musicDirectory)
|
||||
}
|
||||
|
||||
private val musicFolderObserver = Observer<List<MusicFolder>> { changedFolders ->
|
||||
if (changedFolders != null) {
|
||||
selectFolderHeader!!.setData(
|
||||
activeServerProvider.getActiveServer().musicFolderId,
|
||||
changedFolders
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private val songsForGenreObserver = Observer<MusicDirectory> { musicDirectory ->
|
||||
|
||||
// Hide more button when results are less than album list size
|
||||
|
@ -713,7 +703,6 @@ class SelectAlbumFragment : Fragment() {
|
|||
updateInterfaceWithEntries(musicDirectory)
|
||||
}
|
||||
|
||||
// Our old "done" function
|
||||
private val defaultObserver = Observer(this::updateInterfaceWithEntries)
|
||||
|
||||
private fun updateInterfaceWithEntries(musicDirectory: MusicDirectory) {
|
||||
|
@ -803,7 +792,10 @@ class SelectAlbumFragment : Fragment() {
|
|||
|
||||
enableButtons()
|
||||
|
||||
val isAlbumList = requireArguments().containsKey(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TYPE)
|
||||
val isAlbumList = requireArguments().containsKey(
|
||||
Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TYPE
|
||||
)
|
||||
|
||||
playAllButtonVisible = !(isAlbumList || entries.isEmpty()) && !allVideos
|
||||
shareButtonVisible = !isOffline(context) && songCount > 0
|
||||
|
||||
|
@ -903,7 +895,6 @@ class SelectAlbumFragment : Fragment() {
|
|||
return header
|
||||
}
|
||||
|
||||
|
||||
private fun getSelectedSongs(albumListView: ListView?): List<MusicDirectory.Entry?> {
|
||||
val songs: MutableList<MusicDirectory.Entry?> = ArrayList(10)
|
||||
|
||||
|
|
Loading…
Reference in New Issue