mirror of
https://github.com/clangen/musikcube.git
synced 2025-02-11 18:40:28 +00:00
Fixed playlist chooser and tied up a couple other loose ends.
This commit is contained in:
parent
aadd2bec7e
commit
dd4fe103c7
@ -2,18 +2,20 @@ package io.casey.musikcube.remote.ui.navigation
|
||||
|
||||
import android.content.Intent
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import io.casey.musikcube.remote.R
|
||||
import io.casey.musikcube.remote.service.playback.impl.remote.Metadata
|
||||
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.constant.NavigationType
|
||||
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
|
||||
import io.casey.musikcube.remote.ui.shared.extension.pushWithToolbar
|
||||
import io.casey.musikcube.remote.ui.shared.extension.*
|
||||
import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment
|
||||
import io.casey.musikcube.remote.ui.tracks.activity.EditPlaylistActivity
|
||||
import io.casey.musikcube.remote.ui.tracks.activity.TrackListActivity
|
||||
import io.casey.musikcube.remote.ui.tracks.fragment.TrackListFragment
|
||||
|
||||
@ -109,6 +111,35 @@ object Navigate {
|
||||
.getStartIntent(activity, targetType, sourceType, sourceId, sourceValue))
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* playlist-related
|
||||
*
|
||||
*/
|
||||
|
||||
fun toPlaylistChooser(requestCode: Int,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
CategoryBrowseActivity.getStartIntent(
|
||||
activity,
|
||||
Metadata.Category.PLAYLISTS,
|
||||
NavigationType.Select,
|
||||
activity.getString(R.string.playlist_edit_pick_playlist))
|
||||
.withoutTransport()
|
||||
.withTransitionType(Transition.Vertical)
|
||||
.apply {
|
||||
startActivityForResult(this, requestCode, activity, fragment)
|
||||
}
|
||||
|
||||
fun toPlaylistEditor(requestCode: Int,
|
||||
playlistName: String,
|
||||
playlistId: Long,
|
||||
activity: AppCompatActivity,
|
||||
fragment: BaseFragment? = null) =
|
||||
EditPlaylistActivity.getStartIntent(activity, playlistName, playlistId).apply {
|
||||
startActivityForResult(this, requestCode, activity, fragment)
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* list of tracks
|
||||
|
@ -1,5 +1,9 @@
|
||||
package io.casey.musikcube.remote.ui.navigation
|
||||
|
||||
enum class Transition {
|
||||
Horizontal, Vertical
|
||||
Horizontal, Vertical;
|
||||
companion object {
|
||||
fun from(name: String, fallback: Transition = Horizontal): Transition =
|
||||
values().firstOrNull { it.name == name } ?: fallback
|
||||
}
|
||||
}
|
@ -5,12 +5,14 @@ import android.support.design.widget.FloatingActionButton
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import io.casey.musikcube.remote.R
|
||||
import io.casey.musikcube.remote.ui.navigation.Transition
|
||||
import io.casey.musikcube.remote.ui.shared.constant.Shared
|
||||
import io.casey.musikcube.remote.ui.shared.extension.*
|
||||
import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment
|
||||
import io.casey.musikcube.remote.ui.shared.fragment.TransportFragment
|
||||
|
||||
abstract class FragmentActivityWithTransport: BaseActivity(), IFilterable {
|
||||
protected lateinit var transport: TransportFragment
|
||||
protected var transport: TransportFragment? = null
|
||||
private set
|
||||
|
||||
protected lateinit var content: BaseFragment
|
||||
@ -30,7 +32,7 @@ abstract class FragmentActivityWithTransport: BaseActivity(), IFilterable {
|
||||
else -> restoreFragments()
|
||||
}
|
||||
|
||||
transport.modelChangedListener = {
|
||||
transport?.modelChangedListener = {
|
||||
onTransportChanged()
|
||||
}
|
||||
|
||||
@ -80,6 +82,9 @@ abstract class FragmentActivityWithTransport: BaseActivity(), IFilterable {
|
||||
setFilter(filter)
|
||||
} ?: Unit
|
||||
|
||||
override val transitionType: Transition
|
||||
get() = intent.transitionType
|
||||
|
||||
protected abstract fun createContentFragment(): BaseFragment
|
||||
protected abstract val contentFragmentTag: String
|
||||
|
||||
@ -89,14 +94,16 @@ abstract class FragmentActivityWithTransport: BaseActivity(), IFilterable {
|
||||
|
||||
private fun createFragments() {
|
||||
content = createContentFragment()
|
||||
.withToolbar()
|
||||
.withTitleOverride(this)
|
||||
transport = TransportFragment.create()
|
||||
supportFragmentManager
|
||||
.beginTransaction()
|
||||
.add(R.id.content_container, content, contentFragmentTag)
|
||||
.add(R.id.transport_container, transport, TransportFragment.TAG)
|
||||
.commit()
|
||||
.withToolbar().withTitleOverride(this)
|
||||
supportFragmentManager.beginTransaction().apply {
|
||||
add(R.id.content_container, content, contentFragmentTag)
|
||||
if (!withoutTransport) {
|
||||
transport = TransportFragment.create().apply {
|
||||
add(R.id.transport_container, this, TransportFragment.TAG)
|
||||
}
|
||||
}
|
||||
commit()
|
||||
}
|
||||
supportFragmentManager.executePendingTransactions()
|
||||
}
|
||||
|
||||
@ -104,4 +111,7 @@ abstract class FragmentActivityWithTransport: BaseActivity(), IFilterable {
|
||||
transport = findFragment(TransportFragment.TAG)
|
||||
content = findFragment(contentFragmentTag)
|
||||
}
|
||||
|
||||
private val withoutTransport
|
||||
get() = extras.getBoolean(Shared.Extra.WITHOUT_TRANSPORT, false)
|
||||
}
|
@ -2,10 +2,11 @@ package io.casey.musikcube.remote.ui.shared.constant
|
||||
|
||||
object Shared {
|
||||
object Extra {
|
||||
const val TITLE_OVERRIDE = "extra_title_override"
|
||||
const val WITH_TOOLBAR = "extra_with_toolbar"
|
||||
const val PUSH_CONTAINER_ID = "extra_push_container_id"
|
||||
const val WITHOUT_TRANSPORT = "extra_without_transport"
|
||||
const val ELEVATION = "extra_elevation"
|
||||
const val PUSH_CONTAINER_ID = "extra_push_container_id"
|
||||
const val TITLE_OVERRIDE = "extra_title_override"
|
||||
const val TRANSITION_TYPE = "extra_transition_type"
|
||||
const val WITH_TOOLBAR = "extra_with_toolbar"
|
||||
const val WITHOUT_TRANSPORT = "extra_without_transport"
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ package io.casey.musikcube.remote.ui.shared.extension
|
||||
|
||||
import android.app.SearchManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.Snackbar
|
||||
@ -197,6 +198,10 @@ val FragmentManager.topOfStack: String?
|
||||
return null
|
||||
}
|
||||
|
||||
inline fun <reified T> FragmentManager.find(tag: String): T {
|
||||
return findFragmentByTag(tag) as T
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* Bundle
|
||||
@ -211,6 +216,25 @@ fun Bundle.withElevation(fm: FragmentManager): Bundle {
|
||||
val Bundle.elevation: Float
|
||||
get() = this.getFloat(Shared.Extra.ELEVATION, 0.0f)
|
||||
|
||||
/*
|
||||
*
|
||||
* Intent
|
||||
*
|
||||
*/
|
||||
|
||||
fun Intent.withoutTransport() =
|
||||
this.apply {
|
||||
putExtra(Shared.Extra.WITHOUT_TRANSPORT, true)
|
||||
}
|
||||
|
||||
fun Intent.withTransitionType(type: Transition) =
|
||||
this.apply {
|
||||
putExtra(Shared.Extra.TRANSITION_TYPE, type.name)
|
||||
}
|
||||
|
||||
val Intent.transitionType
|
||||
get() = Transition.from(getStringExtra(Shared.Extra.TRANSITION_TYPE))
|
||||
|
||||
/*
|
||||
*
|
||||
* BaseFragment
|
||||
@ -391,10 +415,6 @@ fun View.setVisible(visible: Boolean) {
|
||||
this.visibility = if (visible) View.VISIBLE else View.GONE
|
||||
}
|
||||
|
||||
inline fun <reified T> FragmentManager.find(tag: String): T {
|
||||
return findFragmentByTag(tag) as T
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* Colors
|
||||
@ -480,3 +500,16 @@ fun fallback(input: String?, fallback: String): String =
|
||||
|
||||
fun fallback(input: String?, fallback: Int): String =
|
||||
if (input.isNullOrEmpty()) Application.instance.getString(fallback) else input
|
||||
|
||||
fun startActivityForResult(intent: Intent,
|
||||
requestCode: Int,
|
||||
activity: AppCompatActivity?,
|
||||
fragment: BaseFragment? = null) =
|
||||
when {
|
||||
fragment != null ->
|
||||
fragment.startActivityForResult(intent, requestCode)
|
||||
activity != null ->
|
||||
activity.startActivityForResult(intent, requestCode)
|
||||
else ->
|
||||
throw IllegalArgumentException("")
|
||||
}
|
||||
|
@ -20,9 +20,7 @@ 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.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
|
||||
@ -185,14 +183,7 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
|
||||
private fun showPlaylistChooser(callback: (Long, String) -> Unit) {
|
||||
completion = callback
|
||||
pendingCode = REQUEST_ADD_TO_PLAYLIST
|
||||
|
||||
val intent = CategoryBrowseActivity.getStartIntent(
|
||||
activity,
|
||||
Metadata.Category.PLAYLISTS,
|
||||
NavigationType.Select,
|
||||
activity.getString(R.string.playlist_edit_pick_playlist))
|
||||
|
||||
startActivityForResult(intent, pendingCode)
|
||||
Navigate.toPlaylistChooser(pendingCode, activity, fragment)
|
||||
}
|
||||
|
||||
fun showForTrack(track: ITrack, anchorView: View) {
|
||||
@ -253,8 +244,7 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
|
||||
ConfirmDeletePlaylistDialog.show(activity, this, playlistName, playlistId)
|
||||
}
|
||||
R.id.menu_playlist_edit -> {
|
||||
startActivityForResult(EditPlaylistActivity.getStartIntent(
|
||||
activity, playlistName, playlistId), REQUEST_EDIT_PLAYLIST)
|
||||
Navigate.toPlaylistEditor(REQUEST_EDIT_PLAYLIST, playlistName, playlistId, activity, fragment)
|
||||
}
|
||||
R.id.menu_playlist_rename -> {
|
||||
EnterPlaylistNameDialog.showForRename(activity, this, playlistName, playlistId)
|
||||
@ -388,13 +378,6 @@ class ItemContextMenuMixin(private val activity: AppCompatActivity,
|
||||
private fun showError(message: String) =
|
||||
showErrorSnackbar(activity.findViewById(android.R.id.content), message)
|
||||
|
||||
private fun startActivityForResult(intent: Intent, requestCode: Int) {
|
||||
when (fragment != null) {
|
||||
true -> fragment.startActivityForResult(intent, requestCode)
|
||||
false -> activity.startActivityForResult(intent, requestCode)
|
||||
}
|
||||
}
|
||||
|
||||
class ConfirmRemoveFromPlaylistDialog : BaseDialogFragment() {
|
||||
private lateinit var mixin: ItemContextMenuMixin
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user