mirror of
https://github.com/clangen/musikcube.git
synced 2025-03-14 04:18:36 +00:00
Added category support to Navigate
, wired it into ItemContextMenuMixin
This commit is contained in:
parent
e578dae692
commit
96fece191c
@ -219,20 +219,27 @@ class CategoryBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITran
|
||||
this.arguments = arguments
|
||||
}
|
||||
|
||||
fun create(context: Context,
|
||||
targetType: String,
|
||||
predicateType: String = "",
|
||||
predicateId: Long = -1,
|
||||
predicateValue: String = ""): CategoryBrowseFragment =
|
||||
create(arguments(context, targetType, predicateType, predicateId, predicateValue))
|
||||
|
||||
fun arguments(context: Context,
|
||||
category: String,
|
||||
predicateType: String = "",
|
||||
predicateId: Long = -1,
|
||||
predicateValue: String = ""): Bundle =
|
||||
targetType: String,
|
||||
sourceType: String = "",
|
||||
sourceId: Long = -1,
|
||||
sourceValue: String = ""): Bundle =
|
||||
Bundle().apply {
|
||||
putString(Category.Extra.CATEGORY, category)
|
||||
putString(Category.Extra.PREDICATE_TYPE, predicateType)
|
||||
putLong(Category.Extra.PREDICATE_ID, predicateId)
|
||||
if (predicateValue.isNotBlank() && Category.NAME_TO_RELATED_TITLE.containsKey(category)) {
|
||||
val format = Category.NAME_TO_RELATED_TITLE[category]
|
||||
putString(Category.Extra.CATEGORY, targetType)
|
||||
putString(Category.Extra.PREDICATE_TYPE, sourceType)
|
||||
putLong(Category.Extra.PREDICATE_ID, sourceId)
|
||||
if (sourceValue.isNotBlank() && Category.NAME_TO_RELATED_TITLE.containsKey(targetType)) {
|
||||
val format = Category.NAME_TO_RELATED_TITLE[targetType]
|
||||
when (format) {
|
||||
null -> throw IllegalArgumentException("unknown category $category")
|
||||
else -> putString(Shared.Extra.TITLE_OVERRIDE, context.getString(format, predicateValue))
|
||||
null -> throw IllegalArgumentException("unknown category $targetType")
|
||||
else -> putString(Shared.Extra.TITLE_OVERRIDE, context.getString(format, sourceValue))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,8 @@ import io.casey.musikcube.remote.service.websocket.model.IAlbum
|
||||
import io.casey.musikcube.remote.service.websocket.model.ICategoryValue
|
||||
import io.casey.musikcube.remote.ui.albums.activity.AlbumBrowseActivity
|
||||
import io.casey.musikcube.remote.ui.albums.fragment.AlbumBrowseFragment
|
||||
import io.casey.musikcube.remote.ui.category.activity.CategoryBrowseActivity
|
||||
import io.casey.musikcube.remote.ui.category.fragment.CategoryBrowseFragment
|
||||
import io.casey.musikcube.remote.ui.playqueue.activity.PlayQueueActivity
|
||||
import io.casey.musikcube.remote.ui.playqueue.fragment.PlayQueueFragment
|
||||
import io.casey.musikcube.remote.ui.shared.extension.pushContainerId
|
||||
@ -16,21 +18,37 @@ import io.casey.musikcube.remote.ui.tracks.activity.TrackListActivity
|
||||
import io.casey.musikcube.remote.ui.tracks.fragment.TrackListFragment
|
||||
|
||||
object Navigate {
|
||||
fun toAlbums(category: String,
|
||||
entry: ICategoryValue,
|
||||
/*
|
||||
*
|
||||
* list of albums
|
||||
*
|
||||
*/
|
||||
fun toAlbums(categoryType: String,
|
||||
categoryEntry: ICategoryValue,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
when (fragment != null && fragment.pushContainerId > 0) {
|
||||
true ->
|
||||
fragment.pushWithToolbar(
|
||||
fragment.pushContainerId,
|
||||
"AlbumsBy($entry.value)",
|
||||
AlbumBrowseFragment.create(activity, category, entry.id, entry.value))
|
||||
false ->
|
||||
activity.startActivity(AlbumBrowseActivity
|
||||
.getStartIntent(activity, category, entry))
|
||||
toAlbums(categoryType, categoryEntry.id, categoryEntry.value, activity, fragment)
|
||||
|
||||
}
|
||||
fun toAlbums(categoryEntry: ICategoryValue,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
toAlbums(categoryEntry.type, categoryEntry.id, categoryEntry.value, activity, fragment)
|
||||
|
||||
fun toAlbums(categoryType: String,
|
||||
categoryId: Long,
|
||||
categoryValue: String,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
when (fragment != null && fragment.pushContainerId > 0) {
|
||||
true ->
|
||||
fragment.pushWithToolbar(
|
||||
fragment.pushContainerId,
|
||||
"AlbumsBy($categoryType-$categoryId-$categoryValue)",
|
||||
AlbumBrowseFragment.create(activity, categoryType, categoryId, categoryValue))
|
||||
false ->
|
||||
activity.startActivity(AlbumBrowseActivity
|
||||
.getStartIntent(activity, categoryType, categoryId, categoryValue))
|
||||
}
|
||||
|
||||
fun toAlbums(activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
@ -45,6 +63,12 @@ object Navigate {
|
||||
activity.startActivity(AlbumBrowseActivity.getStartIntent(activity))
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* single album
|
||||
*
|
||||
*/
|
||||
|
||||
fun toAlbum(album: IAlbum,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
@ -62,19 +86,61 @@ object Navigate {
|
||||
activity, Metadata.Category.ALBUM, album.id, album.value))
|
||||
}
|
||||
|
||||
fun toTracks(category: String,
|
||||
entry: ICategoryValue,
|
||||
/*
|
||||
*
|
||||
* list of categories
|
||||
*
|
||||
*/
|
||||
|
||||
fun toCategoryList(targetType: String,
|
||||
sourceType: String,
|
||||
sourceId: Long,
|
||||
sourceValue: String,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
when (fragment != null && fragment.pushContainerId > 0) {
|
||||
true ->
|
||||
fragment.pushWithToolbar(
|
||||
fragment.pushContainerId,
|
||||
"${targetType}By($sourceType-$sourceId-$sourceValue)",
|
||||
CategoryBrowseFragment.create(activity, targetType, sourceType, sourceId, sourceValue))
|
||||
false ->
|
||||
activity.startActivity(CategoryBrowseActivity
|
||||
.getStartIntent(activity, targetType, sourceType, sourceId, sourceValue))
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* list of tracks
|
||||
*
|
||||
*/
|
||||
|
||||
fun toTracks(categoryType: String,
|
||||
categoryEntry: ICategoryValue,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
toTracks(categoryType, categoryEntry.id, categoryEntry.value, activity, fragment)
|
||||
|
||||
fun toTracks(categoryEntry: ICategoryValue,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
toTracks(categoryEntry.type, categoryEntry.id, categoryEntry.value, activity, fragment)
|
||||
|
||||
fun toTracks(categoryType: String,
|
||||
categoryId: Long,
|
||||
categoryValue: String,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
when (fragment != null && fragment.pushContainerId > 0) {
|
||||
true ->
|
||||
fragment.pushWithToolbar(
|
||||
fragment.pushContainerId,
|
||||
"TracksBy($entry.value)",
|
||||
TrackListFragment.create(TrackListFragment.arguments(activity, entry.type, entry.id)))
|
||||
"TracksBy($categoryType-$categoryId-$categoryValue)",
|
||||
TrackListFragment.create(TrackListFragment.arguments(
|
||||
activity, categoryType, categoryId, categoryValue)))
|
||||
false ->
|
||||
activity.startActivity(TrackListActivity.getStartIntent(
|
||||
activity, category, entry.id, entry.value))
|
||||
activity, categoryType, categoryId, categoryValue))
|
||||
}
|
||||
|
||||
fun toPlayQueue(playingIndex: Int,
|
||||
|
@ -20,10 +20,10 @@ 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
|
||||
import io.casey.musikcube.remote.ui.albums.activity.AlbumBrowseActivity
|
||||
import io.casey.musikcube.remote.ui.category.activity.CategoryBrowseActivity
|
||||
import io.casey.musikcube.remote.ui.category.constant.Category
|
||||
import io.casey.musikcube.remote.ui.category.constant.NavigationType
|
||||
import io.casey.musikcube.remote.ui.navigation.Navigate
|
||||
import io.casey.musikcube.remote.ui.shared.extension.hideKeyboard
|
||||
import io.casey.musikcube.remote.ui.shared.extension.showErrorSnackbar
|
||||
import io.casey.musikcube.remote.ui.shared.extension.showKeyboard
|
||||
@ -214,31 +214,31 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
|
||||
}
|
||||
|
||||
popup.setOnMenuItemClickListener { item ->
|
||||
val intent: Intent? = when (item.itemId) {
|
||||
when (item.itemId) {
|
||||
R.id.menu_add_to_playlist -> {
|
||||
addToPlaylist(track)
|
||||
null
|
||||
}
|
||||
R.id.menu_remove_from_playlist -> {
|
||||
ConfirmRemoveFromPlaylistDialog.show(
|
||||
activity, this, categoryId, categoryValue, position, track)
|
||||
null
|
||||
}
|
||||
R.id.menu_show_artist_albums -> {
|
||||
AlbumBrowseActivity.getStartIntent(
|
||||
activity, Metadata.Category.ARTIST, track.artistId, track.artist)
|
||||
Navigate.toAlbums(
|
||||
Metadata.Category.ARTIST,
|
||||
track.artistId,
|
||||
track.artist,
|
||||
activity,
|
||||
fragment)
|
||||
}
|
||||
R.id.menu_show_artist_tracks -> {
|
||||
TrackListActivity.getStartIntent(
|
||||
activity, Metadata.Category.ARTIST, track.artistId, track.artist)
|
||||
Navigate.toTracks(
|
||||
Metadata.Category.ARTIST,
|
||||
track.artistId,
|
||||
track.artist,
|
||||
activity,
|
||||
fragment)
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (intent != null) {
|
||||
activity.startActivity(intent)
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
@ -290,54 +290,57 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
|
||||
popup.inflate(menuId)
|
||||
|
||||
popup.setOnMenuItemClickListener { item ->
|
||||
val intent: Intent? = when (item.itemId) {
|
||||
when (item.itemId) {
|
||||
R.id.menu_add_to_playlist -> {
|
||||
addToPlaylist(value)
|
||||
null
|
||||
}
|
||||
R.id.menu_show_artist_albums,
|
||||
R.id.menu_show_genre_albums -> {
|
||||
if (value is IAlbum) {
|
||||
AlbumBrowseActivity.getStartIntent(
|
||||
activity,
|
||||
Navigate.toAlbums(
|
||||
Metadata.Category.ALBUM_ARTIST,
|
||||
value.albumArtistId,
|
||||
value.albumArtist)
|
||||
value.albumArtist,
|
||||
activity,
|
||||
fragment)
|
||||
}
|
||||
else {
|
||||
AlbumBrowseActivity.getStartIntent(
|
||||
activity, value.type, value.id, value.value)
|
||||
Navigate.toAlbums(value, activity, fragment)
|
||||
}
|
||||
}
|
||||
R.id.menu_show_artist_tracks,
|
||||
R.id.menu_show_genre_tracks -> {
|
||||
if (value is IAlbum) {
|
||||
TrackListActivity.getStartIntent(
|
||||
activity,
|
||||
Navigate.toTracks(
|
||||
Metadata.Category.ALBUM_ARTIST,
|
||||
value.albumArtistId,
|
||||
value.albumArtist)
|
||||
value.albumArtist,
|
||||
activity,
|
||||
fragment)
|
||||
}
|
||||
else {
|
||||
TrackListActivity.getStartIntent(
|
||||
activity, value.type, value.id, value.value)
|
||||
Navigate.toTracks(value, activity, fragment)
|
||||
}
|
||||
}
|
||||
R.id.menu_show_artist_genres -> {
|
||||
CategoryBrowseActivity.getStartIntent(
|
||||
activity, Metadata.Category.GENRE, value.type, value.id, value.value)
|
||||
Navigate.toCategoryList(
|
||||
Metadata.Category.GENRE,
|
||||
value.type,
|
||||
value.id,
|
||||
value.value,
|
||||
activity,
|
||||
fragment)
|
||||
}
|
||||
R.id.menu_show_genre_artists -> {
|
||||
CategoryBrowseActivity.getStartIntent(
|
||||
activity, Metadata.Category.ARTIST, value.type, value.id, value.value)
|
||||
Navigate.toCategoryList(
|
||||
Metadata.Category.ARTIST,
|
||||
value.type,
|
||||
value.id,
|
||||
value.value,
|
||||
activity,
|
||||
fragment)
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (intent != null) {
|
||||
activity.startActivity(intent)
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
|
@ -37,13 +37,13 @@ class TrackListActivity: FragmentActivityWithTransport() {
|
||||
}
|
||||
|
||||
fun getStartIntent(context: Context,
|
||||
type: String = "",
|
||||
id: Long = 0,
|
||||
categoryType: String = "",
|
||||
categoryId: Long = 0,
|
||||
categoryValue: String = ""): Intent =
|
||||
Intent(context, TrackListActivity::class.java).apply {
|
||||
putExtra(
|
||||
Track.Extra.FRAGMENT_ARGUMENTS,
|
||||
TrackListFragment.arguments(context, type, id, categoryValue))
|
||||
TrackListFragment.arguments(context, categoryType, categoryId, categoryValue))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -278,11 +278,11 @@ class TrackListFragment: BaseFragment(), IFilterable, ITitleProvider, ITransport
|
||||
const val TAG = "TrackListFragment"
|
||||
|
||||
fun arguments(context: Context,
|
||||
type: String = "",
|
||||
id: Long = 0,
|
||||
categoryType: String = "",
|
||||
categoryId: Long = 0,
|
||||
categoryValue: String = ""): Bundle = Bundle().apply {
|
||||
putString(Track.Extra.CATEGORY_TYPE, type)
|
||||
putLong(Track.Extra.SELECTED_ID, id)
|
||||
putLong(Track.Extra.SELECTED_ID, categoryId)
|
||||
putString(Track.Extra.CATEGORY_TYPE, categoryType)
|
||||
putString(Track.Extra.CATEGORY_VALUE, categoryValue)
|
||||
if (Strings.notEmpty(categoryValue)) {
|
||||
putString(
|
||||
|
Loading…
x
Reference in New Issue
Block a user