Utilize new plumbing to dynamically push screens or start Activity

instances, based on context.
This commit is contained in:
casey langen 2019-02-14 10:04:24 -08:00
parent fdff0b69be
commit 841eff56f5
6 changed files with 40 additions and 12 deletions

View File

@ -25,6 +25,7 @@ class AlbumBrowseActivity: FragmentActivityWithTransport() {
override fun createContentFragment(): BaseFragment =
(intent.extras ?: Bundle()).run {
AlbumBrowseFragment.create(
applicationContext,
getString(Album.Extra.CATEGORY_NAME, ""),
getLong(Album.Extra.CATEGORY_ID, -1))
}

View File

@ -1,5 +1,6 @@
package io.casey.musikcube.remote.ui.albums.fragment
import android.content.Context
import android.os.Bundle
import android.support.v4.view.ViewCompat
import android.view.LayoutInflater
@ -16,6 +17,7 @@ import io.casey.musikcube.remote.ui.albums.constant.Album
import io.casey.musikcube.remote.ui.shared.activity.IFilterable
import io.casey.musikcube.remote.ui.shared.activity.ITitleProvider
import io.casey.musikcube.remote.ui.shared.activity.ITransportObserver
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.mixin.DataProviderMixin
@ -129,7 +131,8 @@ class AlbumBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITranspo
appCompatActivity,
Metadata.Category.ALBUM,
album.id,
album.value)))
album.value))
.pushTo(pushContainerId))
false ->
startActivity(
TrackListActivity.getStartIntent(
@ -147,11 +150,19 @@ class AlbumBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITranspo
companion object {
const val TAG = "AlbumBrowseFragment"
fun create(categoryName: String = "", categoryId: Long = -1L): AlbumBrowseFragment =
fun create(context: Context,
categoryName: String = "",
categoryId: Long = -1L,
categoryValue: String = ""): AlbumBrowseFragment =
AlbumBrowseFragment().apply {
arguments = Bundle().apply {
putString(Album.Extra.CATEGORY_NAME, categoryName)
putLong(Album.Extra.CATEGORY_ID, categoryId)
if (categoryValue.isNotBlank()) {
putString(
Shared.Extra.TITLE_OVERRIDE,
context.getString(R.string.albums_by_title, categoryValue))
}
}
}
}

View File

@ -13,8 +13,12 @@ import io.casey.musikcube.remote.ui.shared.activity.IFilterable
import io.casey.musikcube.remote.ui.tracks.fragment.TrackListFragment
import io.casey.musikcube.remote.service.playback.impl.remote.Metadata
import io.casey.musikcube.remote.ui.shared.activity.ITransportObserver
import io.casey.musikcube.remote.ui.shared.extension.pushTo
import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment
class BrowseFragmentAdapter(private val context: Context, fm: FragmentManager): FragmentPagerAdapter(fm) {
class BrowseFragmentAdapter(private val context: Context,
fm: FragmentManager,
private val containerId: Int = -1): FragmentPagerAdapter(fm) {
private val fragments = mutableMapOf<Int, Fragment>()
var filter = ""
@ -41,15 +45,17 @@ class BrowseFragmentAdapter(private val context: Context, fm: FragmentManager):
else -> 0
}
override fun getItem(index: Int): Fragment =
when (index) {
override fun getItem(index: Int): Fragment {
val fragment: BaseFragment = when (index) {
0 -> CategoryBrowseFragment.create(
CategoryBrowseFragment.arguments(context, Metadata.Category.ALBUM_ARTIST))
1 -> AlbumBrowseFragment.create()
1 -> AlbumBrowseFragment.create(context)
2 -> TrackListFragment.create()
else -> CategoryBrowseFragment.create(
CategoryBrowseFragment.arguments(Metadata.Category.PLAYLISTS, NavigationType.Tracks))
}
return fragment.pushTo(this.containerId)
}
override fun getPageTitle(position: Int): CharSequence? =
context.getString(when (position) {

View File

@ -26,7 +26,7 @@ class BrowseFragment: BaseFragment(), ITransportObserver, IFilterable, ITitlePro
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
inflater.inflate(R.layout.browse_fragment, container, false).apply {
adapter = BrowseFragmentAdapter(appCompatActivity, childFragmentManager)
adapter = BrowseFragmentAdapter(appCompatActivity, childFragmentManager, R.id.content_container)
val pager = findViewById<ViewPager>(R.id.view_pager)
pager.adapter = adapter

View File

@ -193,12 +193,14 @@ class CategoryBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITran
}
private fun navigateToAlbums(entry: ICategoryValue) =
when (this.pushContainerId > 0) {
when (pushContainerId > 0) {
true ->
this.pushWithToolbar(
this.pushContainerId,
pushContainerId,
"AlbumsBy($entry.value)",
AlbumBrowseFragment.create(entry.type, entry.id))
AlbumBrowseFragment
.create(app, entry.type, entry.id, entry.value)
.pushTo(pushContainerId))
false ->
startActivity(AlbumBrowseActivity
.getStartIntent(appCompatActivity, category, entry))
@ -212,7 +214,8 @@ class CategoryBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITran
this.pushContainerId,
"TracksBy($entry.value)",
TrackListFragment.create(TrackListFragment
.arguments(appCompatActivity, entry.type, entry.id)))
.arguments(appCompatActivity, entry.type, entry.id))
.pushTo(pushContainerId))
false ->
startActivity(TrackListActivity.getStartIntent(
appCompatActivity, category, entry.id, entry.value))

View File

@ -189,7 +189,14 @@ val BaseFragment.pushContainerId: Int
get() = this.extras.getInt(Shared.Extra.PUSH_CONTAINER_ID, -1)
inline fun <reified T: BaseFragment> T.pushTo(containerId: Int): T {
this.extras.putInt(Shared.Extra.PUSH_CONTAINER_ID, containerId)
if (containerId > 0) {
this.extras.putInt(Shared.Extra.PUSH_CONTAINER_ID, containerId)
}
return this
}
inline fun <reified T: BaseFragment> T.pushTo(other: BaseFragment): T {
this.pushTo(other.pushContainerId)
return this
}