Dialog content has changed follow font
This commit is contained in:
parent
038e872e7a
commit
c6c89e9b9e
36 changed files with 161 additions and 87 deletions
|
@ -43,19 +43,19 @@ class AppShortcutLauncherActivity : Activity() {
|
|||
when (shortcutType) {
|
||||
SHORTCUT_TYPE_SHUFFLE_ALL -> {
|
||||
startServiceWithPlaylist(
|
||||
SHUFFLE_MODE_SHUFFLE, ShuffleAllPlaylist(applicationContext)
|
||||
SHUFFLE_MODE_SHUFFLE, ShuffleAllPlaylist()
|
||||
)
|
||||
DynamicShortcutManager.reportShortcutUsed(this, ShuffleAllShortcutType.id)
|
||||
}
|
||||
SHORTCUT_TYPE_TOP_TRACKS -> {
|
||||
startServiceWithPlaylist(
|
||||
SHUFFLE_MODE_NONE, TopTracksPlaylist(applicationContext)
|
||||
SHUFFLE_MODE_NONE, TopTracksPlaylist()
|
||||
)
|
||||
DynamicShortcutManager.reportShortcutUsed(this, TopTracksShortcutType.id)
|
||||
}
|
||||
SHORTCUT_TYPE_LAST_ADDED -> {
|
||||
startServiceWithPlaylist(
|
||||
SHUFFLE_MODE_NONE, LastAddedPlaylist(applicationContext)
|
||||
SHUFFLE_MODE_NONE, LastAddedPlaylist()
|
||||
)
|
||||
DynamicShortcutManager.reportShortcutUsed(this, LastAddedShortcutType.id)
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ package code.name.monkey.retromusic.dialogs
|
|||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import code.name.monkey.retromusic.EXTRA_SONG
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.extensions.colorButtons
|
||||
|
@ -26,9 +25,6 @@ import code.name.monkey.retromusic.extensions.materialDialog
|
|||
import code.name.monkey.retromusic.model.Song
|
||||
import code.name.monkey.retromusic.repository.PlaylistRepository
|
||||
import code.name.monkey.retromusic.util.PlaylistsUtil
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
|
||||
|
@ -37,35 +33,28 @@ class AddToPlaylistDialog : DialogFragment() {
|
|||
override fun onCreateDialog(
|
||||
savedInstanceState: Bundle?
|
||||
): Dialog {
|
||||
val materialDialog = materialDialog(R.string.add_playlist_title)
|
||||
lifecycleScope.launch {
|
||||
val playlists = playlistRepository.playlists()
|
||||
val playlistNames = mutableListOf<String>()
|
||||
playlistNames.add(requireContext().resources.getString(R.string.action_new_playlist))
|
||||
for (p in playlists) {
|
||||
playlistNames.add(p.name)
|
||||
}
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
materialDialog.setItems(playlistNames.toTypedArray()) { _, which ->
|
||||
val songs = extraNotNull<ArrayList<Song>>(EXTRA_SONG).value
|
||||
if (which == 0) {
|
||||
CreatePlaylistDialog.create(songs)
|
||||
.show(requireActivity().supportFragmentManager, "ADD_TO_PLAYLIST")
|
||||
} else {
|
||||
PlaylistsUtil.addToPlaylist(
|
||||
requireContext(),
|
||||
songs,
|
||||
playlists[which - 1].id,
|
||||
true
|
||||
)
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
val playlists = playlistRepository.playlists()
|
||||
val playlistNames = mutableListOf<String>()
|
||||
playlistNames.add(requireContext().resources.getString(R.string.action_new_playlist))
|
||||
for (p in playlists) {
|
||||
playlistNames.add(p.name)
|
||||
}
|
||||
|
||||
return materialDialog(R.string.add_playlist_title)
|
||||
.setItems(playlistNames.toTypedArray()) { _, which ->
|
||||
val songs = extraNotNull<ArrayList<Song>>(EXTRA_SONG).value
|
||||
if (which == 0) {
|
||||
CreatePlaylistDialog.create(songs)
|
||||
.show(requireActivity().supportFragmentManager, "ADD_TO_PLAYLIST")
|
||||
} else {
|
||||
PlaylistsUtil.addToPlaylist(
|
||||
requireContext(),
|
||||
songs,
|
||||
playlists[which - 1].id,
|
||||
true
|
||||
)
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
.create().colorButtons()
|
||||
}
|
||||
|
||||
|
|
|
@ -127,6 +127,7 @@ fun TextInputLayout.accentColor() {
|
|||
defaultHintTextColor = colorState
|
||||
isHintAnimationEnabled = true
|
||||
}
|
||||
fun TextInputEditText.accentColor(){
|
||||
|
||||
fun TextInputEditText.accentColor() {
|
||||
|
||||
}
|
|
@ -61,7 +61,7 @@ class LibraryViewModel(
|
|||
|
||||
private val loadArtists: Deferred<List<Artist>>
|
||||
get() = viewModelScope.async(IO) {
|
||||
realRepository.allArtists()
|
||||
realRepository.albumArtists()
|
||||
}
|
||||
|
||||
private val loadPlaylists: Deferred<List<Playlist>>
|
||||
|
|
|
@ -75,14 +75,14 @@ class HomeFragment :
|
|||
lastAdded.setOnClickListener {
|
||||
findActivityNavController(R.id.fragment_container).navigate(
|
||||
R.id.playlistDetailsFragment,
|
||||
bundleOf(EXTRA_PLAYLIST to LastAddedPlaylist(requireActivity()))
|
||||
bundleOf(EXTRA_PLAYLIST to LastAddedPlaylist())
|
||||
)
|
||||
}
|
||||
|
||||
topPlayed.setOnClickListener {
|
||||
findActivityNavController(R.id.fragment_container).navigate(
|
||||
R.id.playlistDetailsFragment,
|
||||
bundleOf(EXTRA_PLAYLIST to TopTracksPlaylist(requireActivity()))
|
||||
bundleOf(EXTRA_PLAYLIST to TopTracksPlaylist())
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,7 @@ class HomeFragment :
|
|||
history.setOnClickListener {
|
||||
requireActivity().findNavController(R.id.fragment_container).navigate(
|
||||
R.id.playlistDetailsFragment,
|
||||
bundleOf(EXTRA_PLAYLIST to HistoryPlaylist(requireActivity()))
|
||||
bundleOf(EXTRA_PLAYLIST to HistoryPlaylist())
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,9 @@ class Album {
|
|||
val songCount: Int
|
||||
get() = songs!!.size
|
||||
|
||||
val albumArtist: String?
|
||||
get() = safeGetFirstSong().albumArtist
|
||||
|
||||
constructor(songs: ArrayList<Song>) {
|
||||
this.songs = songs
|
||||
}
|
||||
|
|
|
@ -25,10 +25,10 @@ class Artist {
|
|||
|
||||
val name: String
|
||||
get() {
|
||||
val name = safeGetFirstAlbum().artistName
|
||||
val name = safeGetFirstAlbum().safeGetFirstSong().albumArtist
|
||||
return if (MusicUtil.isArtistNameUnknown(name)) {
|
||||
UNKNOWN_ARTIST_DISPLAY_NAME
|
||||
} else name!!
|
||||
} else safeGetFirstAlbum().safeGetFirstSong().artistName
|
||||
}
|
||||
|
||||
val songCount: Int
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
package code.name.monkey.retromusic.model.smartplaylist
|
||||
|
||||
import android.content.Context
|
||||
import code.name.monkey.retromusic.App
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
import org.koin.core.KoinComponent
|
||||
|
||||
class HistoryPlaylist(
|
||||
context: Context
|
||||
) : AbsSmartPlaylist(context.getString(R.string.history), R.drawable.ic_history), KoinComponent {
|
||||
|
||||
@Parcelize
|
||||
class HistoryPlaylist :
|
||||
AbsSmartPlaylist(
|
||||
App.getContext().getString(R.string.history),
|
||||
R.drawable.ic_history
|
||||
),
|
||||
KoinComponent {
|
||||
override fun songs(): List<Song> {
|
||||
return topPlayedRepository.recentlyPlayedTracks()
|
||||
}
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
package code.name.monkey.retromusic.model.smartplaylist
|
||||
|
||||
import android.content.Context
|
||||
import code.name.monkey.retromusic.App
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
|
||||
class LastAddedPlaylist(context: Context) :
|
||||
AbsSmartPlaylist(context.getString(R.string.last_added), R.drawable.ic_library_add) {
|
||||
@Parcelize
|
||||
class LastAddedPlaylist :
|
||||
AbsSmartPlaylist(App.getContext().getString(R.string.last_added), R.drawable.ic_library_add) {
|
||||
override fun songs(): List<Song> {
|
||||
return lastAddedRepository.recentSongs()
|
||||
}
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
package code.name.monkey.retromusic.model.smartplaylist
|
||||
|
||||
import android.content.Context
|
||||
import code.name.monkey.retromusic.App
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
|
||||
class NotPlayedPlaylist(
|
||||
context: Context
|
||||
) : AbsSmartPlaylist(context.getString(R.string.not_recently_played), R.drawable.ic_watch_later) {
|
||||
@Parcelize
|
||||
class NotPlayedPlaylist : AbsSmartPlaylist(
|
||||
App.getContext().getString(R.string.not_recently_played),
|
||||
R.drawable.ic_watch_later
|
||||
) {
|
||||
override fun songs(): List<Song> {
|
||||
return topPlayedRepository.notRecentlyPlayedTracks()
|
||||
}
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
package code.name.monkey.retromusic.model.smartplaylist
|
||||
|
||||
import android.content.Context
|
||||
import code.name.monkey.retromusic.App
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
|
||||
class ShuffleAllPlaylist(
|
||||
context: Context
|
||||
) : AbsSmartPlaylist(context.getString(R.string.action_shuffle_all), R.drawable.ic_shuffle) {
|
||||
@Parcelize
|
||||
class ShuffleAllPlaylist : AbsSmartPlaylist(
|
||||
App.getContext().getString(R.string.action_shuffle_all),
|
||||
R.drawable.ic_shuffle
|
||||
) {
|
||||
override fun songs(): List<Song> {
|
||||
return songRepository.songs()
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package code.name.monkey.retromusic.model.smartplaylist
|
||||
|
||||
import android.content.Context
|
||||
import code.name.monkey.retromusic.App
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
|
||||
class TopTracksPlaylist(
|
||||
context: Context
|
||||
) : AbsSmartPlaylist(
|
||||
context.getString(R.string.my_top_tracks),
|
||||
@Parcelize
|
||||
class TopTracksPlaylist : AbsSmartPlaylist(
|
||||
App.getContext().getString(R.string.my_top_tracks),
|
||||
R.drawable.ic_trending_up
|
||||
) {
|
||||
override fun songs(): List<Song> {
|
||||
|
|
|
@ -63,7 +63,7 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog
|
|||
chooserDialog?.setCallback(this)
|
||||
refreshBlacklistData()
|
||||
return materialDialog(R.string.blacklist)
|
||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||
.setPositiveButton(R.string.done) { _, _ ->
|
||||
dismiss()
|
||||
}
|
||||
.setNeutralButton(R.string.clear_action) { _, _ ->
|
||||
|
|
|
@ -22,6 +22,8 @@ import code.name.monkey.retromusic.util.PreferenceUtil
|
|||
interface ArtistRepository {
|
||||
fun artists(): List<Artist>
|
||||
|
||||
fun albumArtists(): List<Artist>
|
||||
|
||||
fun artists(query: String): List<Artist>
|
||||
|
||||
fun artist(artistId: Int): Artist
|
||||
|
@ -59,6 +61,31 @@ class RealArtistRepository(
|
|||
return splitIntoArtists(albumRepository.splitIntoAlbums(songs))
|
||||
}
|
||||
|
||||
override fun albumArtists(): List<Artist> {
|
||||
val songs = songRepository.songs(
|
||||
songRepository.makeSongCursor(
|
||||
null,
|
||||
null,
|
||||
getSongLoaderSortOrder()
|
||||
)
|
||||
)
|
||||
return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs))
|
||||
}
|
||||
|
||||
private fun splitIntoAlbumArtists(albums: List<Album>): List<Artist> {
|
||||
// First group the songs in albums by filtering each artist name
|
||||
val amap = hashMapOf<String, Artist>()
|
||||
albums.forEach {
|
||||
val key = it.albumArtist
|
||||
if (key != null) {
|
||||
val artist: Artist = if (amap[key] != null) amap[key]!! else Artist()
|
||||
artist.albums?.add(it)
|
||||
amap[key] = artist
|
||||
}
|
||||
}
|
||||
return ArrayList(amap.values)
|
||||
}
|
||||
|
||||
override fun artist(artistId: Int): Artist {
|
||||
val songs = songRepository.songs(
|
||||
songRepository.makeSongCursor(
|
||||
|
|
|
@ -36,6 +36,8 @@ interface Repository {
|
|||
|
||||
suspend fun allArtists(): List<Artist>
|
||||
|
||||
suspend fun albumArtists(): List<Artist>
|
||||
|
||||
suspend fun allPlaylists(): List<Playlist>
|
||||
|
||||
suspend fun allGenres(): List<Genre>
|
||||
|
@ -112,6 +114,8 @@ class RealRepository(
|
|||
|
||||
override suspend fun allArtists(): List<Artist> = artistRepository.artists()
|
||||
|
||||
override suspend fun albumArtists(): List<Artist> = artistRepository.albumArtists()
|
||||
|
||||
override suspend fun artistById(artistId: Int): Artist = artistRepository.artist(artistId)
|
||||
|
||||
override suspend fun recentArtists(): List<Artist> = lastAddedRepository.recentArtists()
|
||||
|
@ -212,7 +216,7 @@ class RealRepository(
|
|||
|
||||
override suspend fun suggestionsHome(): Home {
|
||||
val songs =
|
||||
NotPlayedPlaylist(context).songs().shuffled().takeIf {
|
||||
NotPlayedPlaylist().songs().shuffled().takeIf {
|
||||
it.size > 9
|
||||
} ?: emptyList()
|
||||
println(songs.size)
|
Loading…
Add table
Add a link
Reference in a new issue