Fixed playlist fab

This commit is contained in:
casey langen 2019-02-14 19:27:54 -08:00
parent 841eff56f5
commit 81332c2af8
3 changed files with 49 additions and 31 deletions

View File

@ -29,6 +29,8 @@ class BrowseFragmentAdapter(private val context: Context,
}
}
var onFragmentInstantiated: ((Int) -> Unit?)? = null
fun onTransportChanged() =
fragments.forEach {
(it.value as? ITransportObserver)?.onTransportChanged()
@ -73,6 +75,7 @@ class BrowseFragmentAdapter(private val context: Context,
val result = super.instantiateItem(container, position)
fragments[position] = result as Fragment
(result as? IFilterable)?.setFilter(filter)
onFragmentInstantiated?.invoke(position)
return result
}
}

View File

@ -26,20 +26,41 @@ 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, R.id.content_container)
val pager = findViewById<ViewPager>(R.id.view_pager)
pager.adapter = adapter
pager.currentItem = adapter.indexOf(extras.getString(Browse.Extras.INITIAL_CATEGORY_TYPE))
val tabs = findViewById<TabLayout>(R.id.tab_layout)
tabs.setupWithViewPager(pager)
val fab = findViewById<FloatingActionButton>(R.id.fab)
val pager = findViewById<ViewPager>(R.id.view_pager)
val tabs = findViewById<TabLayout>(R.id.tab_layout)
val showFabIfNecessary = { pos: Int ->
adapter.fragmentAt(pos)?.let {
when (it is IFabConsumer) {
true -> {
when (it.fabVisible) {
true -> fab.show()
false -> fab.hide()
}
}
false -> fab.hide()
}
}
}
fab.setOnClickListener {
(adapter.fragmentAt(pager.currentItem) as? IFabConsumer)?.onFabPress(fab)
}
adapter = BrowseFragmentAdapter(appCompatActivity, childFragmentManager, R.id.content_container)
adapter.onFragmentInstantiated = { pos ->
if (pos == pager.currentItem) {
showFabIfNecessary(pos)
}
}
pager.adapter = adapter
pager.currentItem = adapter.indexOf(extras.getString(Browse.Extras.INITIAL_CATEGORY_TYPE))
tabs.setupWithViewPager(pager)
pager.addOnPageChangeListener(object: ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
@ -48,21 +69,13 @@ class BrowseFragment: BaseFragment(), ITransportObserver, IFilterable, ITitlePro
}
override fun onPageSelected(pos: Int) {
adapter.fragmentAt(pos)?.let {
when (it is IFabConsumer) {
true -> {
when (it.fabVisible) {
true -> fab.show()
false -> fab.hide()
}
}
false -> fab.hide()
}
}
showFabIfNecessary(pos)
}
})
initToolbarIfNecessary(appCompatActivity, this)
showFabIfNecessary(pager.currentItem)
}
override fun onTransportChanged() =

View File

@ -38,16 +38,25 @@ import io.reactivex.rxkotlin.subscribeBy
class CategoryBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITransportObserver, IFabConsumer {
private lateinit var adapter: CategoryBrowseAdapter
private var navigationType: NavigationType = NavigationType.Albums
private var lastFilter: String? = null
private var category: String = ""
private var predicateType: String = ""
private var predicateId: Long = -1
private lateinit var rootView: View
private lateinit var emptyView: EmptyListView
private lateinit var data: DataProviderMixin
private lateinit var playback: PlaybackMixin
private val navigationType: NavigationType
get() = NavigationType.get(extras.getInt(
Category.Extra.NAVIGATION_TYPE, NavigationType.Albums.ordinal))
private val category
get() = extras.getString(Category.Extra.CATEGORY, "")
private val predicateType: String
get() = extras.getString(Category.Extra.PREDICATE_TYPE, "")
private val predicateId: Long
get() = extras.getLong(Category.Extra.PREDICATE_ID, -1L)
override val title: String
get() {
Category.NAME_TO_TITLE[category]?.let {
@ -64,13 +73,6 @@ class CategoryBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITran
playback = mixin(PlaybackMixin())
mixin(ItemContextMenuMixin(appCompatActivity, contextMenuListener, this))
extras.run {
category = getString(Category.Extra.CATEGORY, category)
predicateType = getString(Category.Extra.PREDICATE_TYPE, predicateType)
predicateId = getLong(Category.Extra.PREDICATE_ID, predicateId)
navigationType = NavigationType.get(getInt(Category.Extra.NAVIGATION_TYPE, navigationType.ordinal))
}
adapter = CategoryBrowseAdapter(adapterListener, playback, navigationType, category, prefs)
}