mirror of
https://github.com/clangen/musikcube.git
synced 2025-03-29 19:20:28 +00:00
Renamed a couple interfaces to be prefixed with I
, and ensure
transport updates propagate through BrowseActivity properly.
This commit is contained in:
parent
7967502607
commit
530ffca376
@ -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 =
|
||||
|
@ -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(
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
@ -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 =
|
||||
|
@ -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() =
|
||||
|
@ -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
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
package io.casey.musikcube.remote.ui.shared.activity
|
||||
|
||||
interface Filterable {
|
||||
interface IFilterable {
|
||||
fun setFilter(filter: String)
|
||||
}
|
@ -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
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
package io.casey.musikcube.remote.ui.shared.activity
|
||||
|
||||
interface TitleProvider {
|
||||
interface ITitleProvider {
|
||||
val title: String
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package io.casey.musikcube.remote.ui.shared.activity
|
||||
|
||||
interface ITransportObserver {
|
||||
fun onTransportChanged()
|
||||
}
|
@ -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,
|
||||
|
@ -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 =
|
||||
|
@ -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?) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user