Renamed a couple interfaces to be prefixed with I, and ensure

transport updates propagate through BrowseActivity properly.
This commit is contained in:
casey langen 2019-02-10 12:48:29 -08:00
parent 7967502607
commit 530ffca376
14 changed files with 50 additions and 35 deletions

View File

@ -19,7 +19,7 @@ class AlbumBrowseActivity : FragmentActivityWithTransport() {
override fun onCreateOptionsMenu(menu: Menu): Boolean = albums.createOptionsMenu(menu)
override fun setFilter(filter: String) = albums.setFilter(filter)
override fun onTransportChanged() = albums.notifyTransportChanged()
override fun onTransportChanged() = albums.onTransportChanged()
override val contentFragmentTag: String = AlbumBrowseFragment.TAG
override fun createContentFragment(): BaseFragment =

View File

@ -12,8 +12,9 @@ import io.casey.musikcube.remote.service.websocket.model.IAlbum
import io.casey.musikcube.remote.service.websocket.model.IDataProvider
import io.casey.musikcube.remote.ui.albums.adapter.AlbumBrowseAdapter
import io.casey.musikcube.remote.ui.albums.constant.Album
import io.casey.musikcube.remote.ui.shared.activity.Filterable
import io.casey.musikcube.remote.ui.shared.activity.TitleProvider
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.extension.initSearchMenu
import io.casey.musikcube.remote.ui.shared.extension.setupDefaultRecyclerView
import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment
@ -25,7 +26,7 @@ import io.casey.musikcube.remote.ui.tracks.activity.TrackListActivity
import io.casey.musikcube.remote.util.Debouncer
import io.reactivex.rxkotlin.subscribeBy
class AlbumBrowseFragment: BaseFragment(), Filterable, TitleProvider {
class AlbumBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITransportObserver {
private var categoryName: String = ""
private var categoryId: Long = 0
private var lastFilter = ""
@ -77,7 +78,7 @@ class AlbumBrowseFragment: BaseFragment(), Filterable, TitleProvider {
}
fun createOptionsMenu(menu: Menu): Boolean = initSearchMenu(menu, this)
fun notifyTransportChanged() = adapter.notifyDataSetChanged()
override fun onTransportChanged() = adapter.notifyDataSetChanged()
private fun initObservables() =
disposables.add(data.provider.observeState().subscribeBy(

View File

@ -9,13 +9,13 @@ import android.view.Menu
import io.casey.musikcube.remote.R
import io.casey.musikcube.remote.ui.browse.adapter.BrowseFragmentAdapter
import io.casey.musikcube.remote.ui.shared.activity.BaseActivity
import io.casey.musikcube.remote.ui.shared.activity.Filterable
import io.casey.musikcube.remote.ui.shared.activity.IFilterable
import io.casey.musikcube.remote.ui.shared.extension.enableUpNavigation
import io.casey.musikcube.remote.ui.shared.extension.findFragment
import io.casey.musikcube.remote.ui.shared.extension.initSearchMenu
import io.casey.musikcube.remote.ui.shared.fragment.TransportFragment
class BrowseActivity: BaseActivity(), Filterable {
class BrowseActivity: BaseActivity(), IFilterable {
private lateinit var transport: TransportFragment
private lateinit var pager: ViewPager
private lateinit var tabs: TabLayout
@ -37,9 +37,9 @@ class BrowseActivity: BaseActivity(), Filterable {
else -> restoreFragments()
}
// transport.modelChangedListener = {
// content.notifyTransportChanged()
// }
transport.modelChangedListener = {
adapter.onTransportChanged()
}
enableUpNavigation()
}

View File

@ -9,9 +9,10 @@ import io.casey.musikcube.remote.R
import io.casey.musikcube.remote.ui.albums.fragment.AlbumBrowseFragment
import io.casey.musikcube.remote.ui.category.constant.NavigationType
import io.casey.musikcube.remote.ui.category.fragment.CategoryBrowseFragment
import io.casey.musikcube.remote.ui.shared.activity.Filterable
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
class BrowseFragmentAdapter(private val context: Context, fm: FragmentManager): FragmentPagerAdapter(fm) {
private val fragments = mutableMapOf<Int, Fragment>()
@ -20,10 +21,15 @@ class BrowseFragmentAdapter(private val context: Context, fm: FragmentManager):
set(value) {
field = value
fragments.forEach {
(it.value as? Filterable)?.setFilter(filter)
(it.value as? IFilterable)?.setFilter(filter)
}
}
fun onTransportChanged() =
fragments.forEach {
(it.value as? ITransportObserver)?.onTransportChanged()
}
override fun getItem(index: Int): Fragment =
when (index) {
0 -> AlbumBrowseFragment.create()
@ -49,7 +55,7 @@ class BrowseFragmentAdapter(private val context: Context, fm: FragmentManager):
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val result = super.instantiateItem(container, position)
fragments[position] = result as Fragment
(result as? Filterable)?.setFilter(filter)
(result as? IFilterable)?.setFilter(filter)
return result
}
}

View File

@ -25,7 +25,7 @@ class CategoryBrowseActivity: FragmentActivityWithTransport() {
override fun onCreateOptionsMenu(menu: Menu): Boolean = category.createOptionsMenu(menu)
override fun setFilter(filter: String) = category.setFilter(filter)
override fun onTransportChanged() = category.notifyTransportChanged()
override fun onTransportChanged() = category.onTransportChanged()
override val contentFragmentTag: String = CategoryBrowseFragment.TAG
override fun createContentFragment(): BaseFragment =

View File

@ -17,8 +17,9 @@ import io.casey.musikcube.remote.ui.albums.activity.AlbumBrowseActivity
import io.casey.musikcube.remote.ui.category.adapter.CategoryBrowseAdapter
import io.casey.musikcube.remote.ui.category.constant.Category
import io.casey.musikcube.remote.ui.category.constant.NavigationType
import io.casey.musikcube.remote.ui.shared.activity.Filterable
import io.casey.musikcube.remote.ui.shared.activity.TitleProvider
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.extension.EXTRA_ACTIVITY_TITLE
import io.casey.musikcube.remote.ui.shared.extension.initSearchMenu
import io.casey.musikcube.remote.ui.shared.extension.setFabVisible
@ -32,7 +33,7 @@ import io.casey.musikcube.remote.ui.tracks.activity.TrackListActivity
import io.casey.musikcube.remote.util.Debouncer
import io.reactivex.rxkotlin.subscribeBy
class CategoryBrowseFragment: BaseFragment(), Filterable, TitleProvider {
class CategoryBrowseFragment: BaseFragment(), IFilterable, ITitleProvider, ITransportObserver {
private lateinit var adapter: CategoryBrowseAdapter
private var navigationType: NavigationType = NavigationType.Tracks
private var lastFilter: String? = null
@ -111,7 +112,7 @@ class CategoryBrowseFragment: BaseFragment(), Filterable, TitleProvider {
return true
}
fun notifyTransportChanged() =
override fun onTransportChanged() =
adapter.notifyDataSetChanged()
private fun initObservers() =

View File

@ -9,7 +9,7 @@ import io.casey.musikcube.remote.ui.shared.extension.setTitleFromIntent
import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment
import io.casey.musikcube.remote.ui.shared.fragment.TransportFragment
abstract class FragmentActivityWithTransport: BaseActivity(), Filterable {
abstract class FragmentActivityWithTransport: BaseActivity(), IFilterable {
protected lateinit var transport: TransportFragment
private set
@ -37,18 +37,18 @@ abstract class FragmentActivityWithTransport: BaseActivity(), Filterable {
override fun onResume() {
super.onResume()
(content as? TitleProvider)?.run {
(content as? ITitleProvider)?.run {
setTitleFromIntent(this.title)
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean =
(content as? MenuProvider)?.run {
(content as? IMenuProvider)?.run {
return this.createOptionsMenu(menu)
} ?: false
override fun setFilter(filter: String) =
(content as? Filterable)?.run {
(content as? IFilterable)?.run {
setFilter(filter)
} ?: Unit

View File

@ -1,5 +1,5 @@
package io.casey.musikcube.remote.ui.shared.activity
interface Filterable {
interface IFilterable {
fun setFilter(filter: String)
}

View File

@ -2,6 +2,6 @@ package io.casey.musikcube.remote.ui.shared.activity
import android.view.Menu
interface MenuProvider {
interface IMenuProvider {
fun createOptionsMenu(menu: Menu): Boolean
}

View File

@ -1,5 +1,5 @@
package io.casey.musikcube.remote.ui.shared.activity
interface TitleProvider {
interface ITitleProvider {
val title: String
}

View File

@ -0,0 +1,5 @@
package io.casey.musikcube.remote.ui.shared.activity
interface ITransportObserver {
fun onTransportChanged()
}

View File

@ -25,7 +25,7 @@ import android.widget.TextView
import io.casey.musikcube.remote.Application
import io.casey.musikcube.remote.R
import io.casey.musikcube.remote.ui.settings.constants.Prefs
import io.casey.musikcube.remote.ui.shared.activity.Filterable
import io.casey.musikcube.remote.ui.shared.activity.IFilterable
import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment
import io.casey.musikcube.remote.ui.shared.fragment.TransportFragment
import io.casey.musikcube.remote.util.Strings
@ -111,7 +111,7 @@ fun BaseFragment.setFabVisible(visible: Boolean, fab: View, recyclerView: Recycl
this.appCompatActivity.setFabVisible(visible, fab, recyclerView)
}
fun AppCompatActivity.initSearchMenu(menu: Menu, filterable: Filterable?): Boolean {
fun AppCompatActivity.initSearchMenu(menu: Menu, filterable: IFilterable?): Boolean {
this.menuInflater.inflate(R.menu.search_menu, menu)
val searchMenuItem = menu.findItem(R.id.action_search)
@ -144,7 +144,7 @@ fun AppCompatActivity.initSearchMenu(menu: Menu, filterable: Filterable?): Boole
return true
}
fun Fragment.initSearchMenu(menu: Menu, filterable: Filterable?): Boolean =
fun Fragment.initSearchMenu(menu: Menu, filterable: IFilterable?): Boolean =
(activity as AppCompatActivity).initSearchMenu(menu, filterable)
fun CheckBox.setCheckWithoutEvent(checked: Boolean,

View File

@ -6,13 +6,13 @@ import android.view.Menu
import android.view.MenuItem
import io.casey.musikcube.remote.R
import io.casey.musikcube.remote.service.playback.impl.remote.Metadata
import io.casey.musikcube.remote.ui.shared.activity.Filterable
import io.casey.musikcube.remote.ui.shared.activity.FragmentActivityWithTransport
import io.casey.musikcube.remote.ui.shared.activity.IFilterable
import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment
import io.casey.musikcube.remote.ui.tracks.constant.Track
import io.casey.musikcube.remote.ui.tracks.fragment.TrackListFragment
class TrackListActivity : FragmentActivityWithTransport(), Filterable {
class TrackListActivity : FragmentActivityWithTransport(), IFilterable {
private val tracks
get() = content as TrackListFragment
@ -32,7 +32,7 @@ class TrackListActivity : FragmentActivityWithTransport(), Filterable {
override val contentFragmentTag: String = TrackListFragment.TAG
override fun onTransportChanged() = tracks.notifyTransportChanged()
override fun onTransportChanged() = tracks.onTransportChanged()
companion object {
fun getOfflineStartIntent(context: Context): Intent =

View File

@ -12,8 +12,9 @@ import io.casey.musikcube.remote.service.websocket.model.IDataProvider
import io.casey.musikcube.remote.service.websocket.model.ITrack
import io.casey.musikcube.remote.service.websocket.model.ITrackListQueryFactory
import io.casey.musikcube.remote.ui.home.activity.MainActivity
import io.casey.musikcube.remote.ui.shared.activity.Filterable
import io.casey.musikcube.remote.ui.shared.activity.TitleProvider
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.extension.EXTRA_ACTIVITY_TITLE
import io.casey.musikcube.remote.ui.shared.extension.initSearchMenu
import io.casey.musikcube.remote.ui.shared.extension.setupDefaultRecyclerView
@ -34,7 +35,7 @@ import io.casey.musikcube.remote.util.Strings
import io.reactivex.Observable
import io.reactivex.rxkotlin.subscribeBy
class TrackListFragment: BaseFragment(), Filterable, TitleProvider {
class TrackListFragment: BaseFragment(), IFilterable, ITitleProvider, ITransportObserver {
private lateinit var tracks: DefaultSlidingWindow
private lateinit var emptyView: EmptyListView
private lateinit var adapter: TrackListAdapter
@ -167,8 +168,9 @@ class TrackListFragment: BaseFragment(), Filterable, TitleProvider {
super.onActivityResult(requestCode, resultCode, data)
}
fun notifyTransportChanged() =
override fun onTransportChanged() {
adapter.notifyDataSetChanged()
}
private val filterDebouncer = object : Debouncer<String>(350) {
override fun onDebounced(last: String?) {