mirror of
https://github.com/clangen/musikcube.git
synced 2024-10-02 04:52:32 +00:00
Extracted "BrowseFragment" from "BrowseActivity". Now the fun begins...
This commit is contained in:
parent
fe10253ee5
commit
7a214fe113
@ -3,108 +3,57 @@ package io.casey.musikcube.remote.ui.browse.activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.FloatingActionButton
|
||||
import android.support.design.widget.TabLayout
|
||||
import android.support.v4.view.ViewPager
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import io.casey.musikcube.remote.R
|
||||
import io.casey.musikcube.remote.ui.browse.adapter.BrowseFragmentAdapter
|
||||
import io.casey.musikcube.remote.ui.browse.constant.Browse
|
||||
import io.casey.musikcube.remote.ui.browse.fragment.BrowseFragment
|
||||
import io.casey.musikcube.remote.ui.shared.activity.BaseActivity
|
||||
import io.casey.musikcube.remote.ui.shared.activity.IFabConsumer
|
||||
import io.casey.musikcube.remote.ui.shared.activity.IFilterable
|
||||
import io.casey.musikcube.remote.ui.shared.activity.ITransportObserver
|
||||
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(), IFilterable {
|
||||
private lateinit var transport: TransportFragment
|
||||
private lateinit var pager: ViewPager
|
||||
private lateinit var tabs: TabLayout
|
||||
private lateinit var fab: FloatingActionButton
|
||||
private lateinit var adapter: BrowseFragmentAdapter
|
||||
|
||||
class BrowseActivity: BaseActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setContentView(R.layout.browse_activity)
|
||||
|
||||
adapter = BrowseFragmentAdapter(this, supportFragmentManager)
|
||||
|
||||
pager = findViewById(R.id.view_pager)
|
||||
pager.adapter = adapter
|
||||
pager.currentItem = adapter.indexOf(extras.getString(EXTRA_INITIAL_CATEGORY_TYPE))
|
||||
|
||||
tabs = findViewById(R.id.tab_layout)
|
||||
tabs.setupWithViewPager(pager)
|
||||
|
||||
fab = findViewById(R.id.fab)
|
||||
fab.setOnClickListener {
|
||||
(adapter.fragmentAt(pager.currentItem) as? IFabConsumer)?.onFabPress(fab)
|
||||
if (savedInstanceState == null) {
|
||||
createFragments()
|
||||
}
|
||||
|
||||
when (savedInstanceState == null) {
|
||||
true -> createFragments()
|
||||
else -> restoreFragments()
|
||||
}
|
||||
|
||||
transport.modelChangedListener = {
|
||||
adapter.onTransportChanged()
|
||||
}
|
||||
|
||||
pager.addOnPageChangeListener(object: ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
}
|
||||
|
||||
override fun onPageScrolled(pos: Int, offset: Float, offsetPixels: Int) {
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
findFragment<TransportFragment>(TransportFragment.TAG).modelChangedListener = {
|
||||
supportFragmentManager.fragments.forEach {
|
||||
if (it is ITransportObserver) {
|
||||
it.onTransportChanged()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
enableUpNavigation()
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
return initSearchMenu(menu, this)
|
||||
}
|
||||
|
||||
override fun setFilter(filter: String) {
|
||||
adapter.filter = filter
|
||||
}
|
||||
|
||||
private fun createFragments() {
|
||||
transport = TransportFragment.create()
|
||||
supportFragmentManager
|
||||
.beginTransaction()
|
||||
.add(R.id.transport_container, transport, TransportFragment.TAG)
|
||||
.add(
|
||||
R.id.content_container,
|
||||
BrowseFragment.create(extras),
|
||||
BrowseFragment.TAG)
|
||||
.add(
|
||||
R.id.transport_container,
|
||||
TransportFragment.create(),
|
||||
TransportFragment.TAG)
|
||||
.commit()
|
||||
}
|
||||
|
||||
private fun restoreFragments() {
|
||||
transport = findFragment(TransportFragment.TAG)
|
||||
supportFragmentManager.executePendingTransactions()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val EXTRA_INITIAL_CATEGORY_TYPE = "extra_initial_category_type"
|
||||
|
||||
fun getStartIntent(context: Context,
|
||||
initialCategoryType: String = ""): Intent =
|
||||
Intent(context, BrowseActivity::class.java).apply {
|
||||
putExtra(EXTRA_INITIAL_CATEGORY_TYPE, initialCategoryType)
|
||||
putExtra(Browse.Extras.INITIAL_CATEGORY_TYPE, initialCategoryType)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package io.casey.musikcube.remote.ui.browse.constant
|
||||
|
||||
object Browse {
|
||||
object Extras {
|
||||
const val INITIAL_CATEGORY_TYPE = "extra_initial_category_type"
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package io.casey.musikcube.remote.ui.browse.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.FloatingActionButton
|
||||
import android.support.design.widget.TabLayout
|
||||
import android.support.v4.view.ViewPager
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import io.casey.musikcube.remote.R
|
||||
import io.casey.musikcube.remote.ui.browse.adapter.BrowseFragmentAdapter
|
||||
import io.casey.musikcube.remote.ui.browse.constant.Browse
|
||||
import io.casey.musikcube.remote.ui.shared.activity.IFabConsumer
|
||||
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.initToolbarIfNecessary
|
||||
import io.casey.musikcube.remote.ui.shared.fragment.BaseFragment
|
||||
|
||||
class BrowseFragment: BaseFragment(), ITransportObserver, IFilterable, ITitleProvider {
|
||||
private lateinit var adapter: BrowseFragmentAdapter
|
||||
|
||||
override val title: String
|
||||
get() = getString(R.string.app_name)
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
|
||||
inflater.inflate(R.layout.browse_fragment, container, false).apply {
|
||||
adapter = BrowseFragmentAdapter(appCompatActivity, childFragmentManager)
|
||||
|
||||
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)
|
||||
fab.setOnClickListener {
|
||||
(adapter.fragmentAt(pager.currentItem) as? IFabConsumer)?.onFabPress(fab)
|
||||
}
|
||||
|
||||
pager.addOnPageChangeListener(object: ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
}
|
||||
|
||||
override fun onPageScrolled(pos: Int, offset: Float, offsetPixels: Int) {
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
initToolbarIfNecessary(appCompatActivity, this)
|
||||
}
|
||||
|
||||
override fun onTransportChanged() =
|
||||
adapter.onTransportChanged()
|
||||
|
||||
override fun setFilter(filter: String) {
|
||||
adapter.filter = filter
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "BrowseFragment"
|
||||
|
||||
fun create(extras: Bundle): BrowseFragment =
|
||||
BrowseFragment().apply { arguments = extras }
|
||||
}
|
||||
}
|
@ -1,58 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
<FrameLayout
|
||||
android:id="@+id/content_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1.0">
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark">
|
||||
|
||||
<android.support.v7.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
app:layout_scrollFlags="scroll|enterAlways|snap" />
|
||||
|
||||
<android.support.design.widget.TabLayout
|
||||
android:id="@+id/tab_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/color_primary" />
|
||||
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/fab"
|
||||
android:layout_gravity="bottom|right"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/fab_padding"
|
||||
android:src="@drawable/ic_fab_add"
|
||||
android:scaleType="center"
|
||||
android:elevation="6dp"
|
||||
android:visibility="gone"
|
||||
app:layout_anchor="@id/view_pager"
|
||||
app:layout_anchorGravity="bottom|right"
|
||||
app:backgroundTint="@color/color_primary"
|
||||
app:fabSize="mini"
|
||||
app:rippleColor="?colorAccent"/>
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
android:layout_weight="1.0" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/transport_container"
|
||||
|
49
src/musikdroid/app/src/main/res/layout/browse_fragment.xml
Normal file
49
src/musikdroid/app/src/main/res/layout/browse_fragment.xml
Normal file
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" >
|
||||
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.Dark">
|
||||
|
||||
<android.support.v7.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
app:layout_scrollFlags="scroll|enterAlways|snap" />
|
||||
|
||||
<android.support.design.widget.TabLayout
|
||||
android:id="@+id/tab_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/color_primary" />
|
||||
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/fab"
|
||||
android:layout_gravity="bottom|right"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/fab_padding"
|
||||
android:src="@drawable/ic_fab_add"
|
||||
android:scaleType="center"
|
||||
android:elevation="6dp"
|
||||
android:visibility="gone"
|
||||
app:layout_anchor="@id/view_pager"
|
||||
app:layout_anchorGravity="bottom|right"
|
||||
app:backgroundTint="@color/color_primary"
|
||||
app:fabSize="mini"
|
||||
app:rippleColor="?colorAccent"/>
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
Loading…
Reference in New Issue
Block a user