Cleaned up, and (mostly) finished new context menus for tracks, artists,

albums, genres, and playlists. Also fixed a messed up string.
This commit is contained in:
casey langen 2017-11-19 00:46:31 -08:00
parent 584c41cc1a
commit eeafa9d7e8
10 changed files with 133 additions and 72 deletions

View File

@ -13,9 +13,9 @@ object Metadata {
val ALBUM_ARTIST_ID = "album_artist_id"
val GENRE = "genre"
val TRACK_NUM = "track_num"
val GENRE_ID = "visual_genre_id"
val GENRE_ID = "genre_id"
val ARTIST = "artist"
val ARTIST_ID = "visual_artist_id"
val ARTIST_ID = "artist_id"
val THUMBNAIL_ID = "thumbnail_id"
}
}
@ -26,6 +26,8 @@ object Metadata {
val TITLE = "title"
val ALBUM_ARTIST = "album_artist"
val ALBUM_ARTIST_ID = "album_artist_id"
val ARTIST = "artist"
val ARTIST_ID = "artist_id"
val THUMBNAIL_ID = "thumbnail_id"
}
}

View File

@ -1,6 +1,8 @@
package io.casey.musikcube.remote.service.websocket.model
interface IAlbum : ICategoryValue {
val artist: String
val artistId: Long
val albumArtist: String
val albumArtistId: Long
val name: String

View File

@ -9,6 +9,8 @@ class RemoteAlbum(val json: JSONObject) : IAlbum {
override val id: Long get() = json.optLong(Metadata.Album.ID, -1)
override val value: String get() = json.optString(Metadata.Album.TITLE, "")
override val name: String get() = value
override val artist: String get() = json.optString(Metadata.Album.ARTIST, "")
override val artistId: Long get() =json.optLong(Metadata.Album.ARTIST_ID, -1)
override val albumArtist: String get() = json.optString(Metadata.Album.ALBUM_ARTIST, "")
override val albumArtistId: Long get() = json.optLong(Metadata.Album.ALBUM_ARTIST_ID, -1)
override val thumbnailId: Long get() = json.optLong(Metadata.Album.THUMBNAIL_ID, -1)

View File

@ -17,6 +17,7 @@ import io.casey.musikcube.remote.injection.DaggerViewComponent
import io.casey.musikcube.remote.injection.DataModule
import io.casey.musikcube.remote.service.playback.PlaybackServiceFactory
import io.casey.musikcube.remote.service.websocket.Messages
import io.casey.musikcube.remote.service.websocket.model.IAlbum
import io.casey.musikcube.remote.service.websocket.model.ICategoryValue
import io.casey.musikcube.remote.service.websocket.model.IDataProvider
import io.casey.musikcube.remote.service.websocket.model.ITrack
@ -96,11 +97,16 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
fun createPlaylist(playlistName: String) {
provider.createPlaylist(playlistName).subscribeBy(
onNext = { id ->
listener?.onPlaylistCreated(id)
showSuccess(activity.getString(R.string.playlist_created, playlistName))
if (id > 0L) {
listener?.onPlaylistCreated(id)
showSuccess(activity.getString(R.string.playlist_created, playlistName))
}
else {
showError(activity.getString(R.string.playlist_not_created, playlistName))
}
},
onError = {
showSuccess(activity.getString(R.string.playlist_not_created, playlistName))
showError(activity.getString(R.string.playlist_not_created, playlistName))
})
}
@ -156,9 +162,7 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
fun showForTrack(track: ITrack, anchorView: View) {
val popup = PopupMenu(activity, anchorView)
popup.inflate(R.menu.generic_item_context_menu)
popup.menu.removeItem(R.id.menu_show_tracks)
popup.inflate(R.menu.track_item_context_menu)
popup.setOnMenuItemClickListener { item ->
val intent: Intent? = when (item.itemId) {
@ -166,26 +170,17 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
addToPlaylist(track)
null
}
R.id.menu_show_albums -> {
R.id.menu_show_artist_albums -> {
AlbumBrowseActivity.getStartIntent(
activity, Messages.Category.ARTIST, track.artistId)
}
R.id.menu_show_artists -> {
R.id.menu_show_artist_tracks -> {
TrackListActivity.getStartIntent(
activity,
Messages.Category.ARTIST,
track.artistId)
}
R.id.menu_show_genres -> {
CategoryBrowseActivity.getStartIntent(
activity,
Messages.Category.GENRE,
Messages.Category.ARTIST,
track.artistId)
}
else -> {
null
}
else -> null
}
if (intent != null) {
@ -223,61 +218,74 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
showForPlaylist(value.value, value.id, anchorView)
}
else {
val popup = PopupMenu(activity, anchorView)
popup.inflate(R.menu.generic_item_context_menu)
if (value.type != Messages.Category.GENRE) {
popup.menu.removeItem(R.id.menu_show_artists)
val menuId = when (value.type) {
Messages.Category.ARTIST -> R.menu.artist_item_context_menu
Messages.Category.ALBUM_ARTIST -> R.menu.artist_item_context_menu
Messages.Category.ALBUM -> R.menu.album_item_context_menu
Messages.Category.GENRE -> R.menu.genre_item_context_menu
else -> -1
}
when (value.type) {
Messages.Category.ARTIST -> popup.menu.removeItem(R.id.menu_show_artists)
Messages.Category.ALBUM -> popup.menu.removeItem(R.id.menu_show_albums)
Messages.Category.GENRE -> popup.menu.removeItem(R.id.menu_show_genres)
}
if (menuId != -1) {
val popup = PopupMenu(activity, anchorView)
popup.inflate(menuId)
popup.setOnMenuItemClickListener { item ->
val intent: Intent? = when (item.itemId) {
R.id.menu_add_to_playlist -> {
addToPlaylist(value)
null
popup.setOnMenuItemClickListener { item ->
val intent: Intent? = when (item.itemId) {
R.id.menu_add_to_playlist -> {
addToPlaylist(value)
null
}
R.id.menu_show_artist_albums -> {
if (value is IAlbum) {
AlbumBrowseActivity.getStartIntent(
activity, Messages.Category.ALBUM_ARTIST, value.albumArtistId)
}
else {
null /* should never happen */
}
}
R.id.menu_show_genre_albums -> {
AlbumBrowseActivity.getStartIntent(activity, value.type, value.id)
}
R.id.menu_show_artist_tracks,
R.id.menu_show_genre_tracks -> {
TrackListActivity.getStartIntent(activity, value.type, value.id)
}
R.id.menu_show_artist_genres -> {
CategoryBrowseActivity.getStartIntent(
activity, Messages.Category.GENRE, value.type, value.id)
}
R.id.menu_show_genre_artists -> {
CategoryBrowseActivity.getStartIntent(
activity, Messages.Category.ARTIST, value.type, value.id)
}
else -> null
}
R.id.menu_show_albums -> {
AlbumBrowseActivity.getStartIntent(activity, value.type, value.id)
}
R.id.menu_show_tracks -> {
TrackListActivity.getStartIntent(activity, value.type, value.id)
}
R.id.menu_show_genres -> {
CategoryBrowseActivity.getStartIntent(
activity, Messages.Category.GENRE, value.type, value.id)
}
R.id.menu_show_artists -> {
CategoryBrowseActivity.getStartIntent(
activity, Messages.Category.ARTIST, value.type, value.id)
}
else -> {
null
if (intent != null) {
activity.startActivity(intent)
}
true
}
if (intent != null) {
activity.startActivity(intent)
}
true
popup.show()
}
popup.show()
}
}
private fun deletePlaylistConfirmed(playlistId: Long, playlistName: String) {
if (playlistId != -1L) {
provider.deletePlaylist(playlistId).subscribeBy(
onNext = {
listener?.onPlaylistDeleted(playlistId)
showSuccess(activity.getString(R.string.playlist_deleted, playlistName))
onNext = { success ->
if (success) {
listener?.onPlaylistDeleted(playlistId)
showSuccess(activity.getString(R.string.playlist_deleted, playlistName))
}
else {
showSuccess(activity.getString(R.string.playlist_not_deleted, playlistName))
}
},
onError = {
showSuccess(activity.getString(R.string.playlist_not_deleted, playlistName))
@ -292,6 +300,9 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
showSnackbar(activity.findViewById(android.R.id.content), message)
private fun showError(message: Int) =
showError(activity.getString(message))
private fun showError(message: String) =
showErrorSnackbar(activity.findViewById(android.R.id.content), message)
class ConfirmDeletePlaylistDialog : BaseDialogFragment() {

View File

@ -30,11 +30,11 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_padding"
android:backgroundTint="@color/color_primary"
android:src="@drawable/ic_fab_add"
android:scaleType="center"
android:elevation="6dp"
android:visibility="gone"
app:backgroundTint="@color/color_primary"
app:fabSize="mini"
app:rippleColor="?colorAccent"/>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_add_to_playlist"
android:title="@string/menu_add_to_playlist"/>
<item
android:id="@+id/menu_show_artist_albums"
android:title="@string/menu_show_artist_albums"/>
<item
android:id="@+id/menu_show_artist_tracks"
android:title="@string/menu_show_artist_tracks"/>
</menu>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_add_to_playlist"
android:title="@string/menu_add_to_playlist"/>
<item
android:id="@+id/menu_show_artist_albums"
android:title="@string/menu_show_albums"/>
<item
android:id="@+id/menu_show_artist_genres"
android:title="@string/menu_show_genres"/>
<item
android:id="@+id/menu_show_artist_tracks"
android:title="@string/menu_show_tracks"/>
</menu>

View File

@ -1,23 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_add_to_playlist"
android:title="@string/menu_add_to_playlist"/>
<item
android:id="@+id/menu_show_artists"
android:id="@+id/menu_show_genre_artists"
android:title="@string/menu_show_artists"/>
<item
android:id="@+id/menu_show_albums"
android:id="@+id/menu_show_genre_albums"
android:title="@string/menu_show_albums"/>
<item
android:id="@+id/menu_show_genres"
android:title="@string/menu_show_genres"/>
<item
android:id="@+id/menu_show_tracks"
android:id="@+id/menu_show_genre_tracks"
android:title="@string/menu_show_tracks"/>
</menu>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_add_to_playlist"
android:title="@string/menu_add_to_playlist"/>
<item
android:id="@+id/menu_show_artist_tracks"
android:title="@string/menu_show_artist_tracks"/>
<item
android:id="@+id/menu_show_artist_albums"
android:title="@string/menu_show_albums"/>
</menu>

View File

@ -67,7 +67,10 @@
<string name="menu_add_to_playlist">add to playlist</string>
<string name="menu_show_tracks">songs</string>
<string name="menu_show_albums">albums</string>
<string name="menu_show_artists">artist</string>
<string name="menu_show_artists">artists</string>
<string name="menu_show_artist">artist</string>
<string name="menu_show_artist_albums">artist albums</string>
<string name="menu_show_artist_tracks">artist songs</string>
<string name="menu_show_genres">genres</string>
<string name="menu_delete_playlist">delete</string>
<string name="menu_play_playlist">play now</string>
@ -129,6 +132,6 @@
<string name="playlist_created">playlist \'%s\' created</string>
<string name="playlist_not_created">could not create playlist \'%s\'</string>
<string name="playlist_deleted">playlist \'%s\' deleted</string>
<string name="playlist_not_deleted">could not create playlist \'%s\'</string>
<string name="playlist_not_deleted">could not delete playlist \'%s\'</string>
</resources>