Revert "Update to ViewPager2/FragmentStateAdapter to fix deprecation warnings."

This reverts commit 35915b1100.
This commit is contained in:
casey langen 2022-11-27 12:15:34 -08:00
parent 2725e96c03
commit 4facbddea7
4 changed files with 47 additions and 41 deletions

View File

@ -23,6 +23,11 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
@ -88,7 +93,6 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01'
implementation 'com.google.android.material:material:1.8.0-alpha02'
implementation 'androidx.media:media:1.6.0'

View File

@ -1,8 +1,10 @@
package io.casey.musikcube.remote.ui.browse.adapter
import android.content.Context
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import io.casey.musikcube.remote.R
import io.casey.musikcube.remote.service.playback.impl.remote.Metadata
import io.casey.musikcube.remote.ui.albums.fragment.AlbumBrowseFragment
@ -17,9 +19,9 @@ import io.casey.musikcube.remote.ui.tracks.fragment.TrackListFragment
class BrowseFragmentAdapter(private val context: Context,
private val playback: PlaybackMixin,
fragment: Fragment,
fm: FragmentManager,
private val containerId: Int = -1)
: FragmentStateAdapter(fragment)
: FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
{
private val fragments = mutableMapOf<Int, Fragment>()
@ -50,16 +52,7 @@ class BrowseFragmentAdapter(private val context: Context,
else -> 0
}
fun getPageTitle(position: Int): CharSequence =
context.getString(when (position) {
0 -> R.string.button_artists
1 -> R.string.button_albums
2 -> R.string.button_tracks
3 -> R.string.button_playlists
else -> R.string.button_offline
})
override fun createFragment(index: Int): Fragment {
override fun getItem(index: Int): Fragment {
val fragment: BaseFragment = when (index) {
0 -> CategoryBrowseFragment.create(
CategoryBrowseFragment.arguments(context, Metadata.Category.ALBUM_ARTIST))
@ -70,14 +63,27 @@ class BrowseFragmentAdapter(private val context: Context,
else -> TrackListFragment.create(
TrackListFragment.arguments(context, Metadata.Category.OFFLINE))
}
fragment.pushTo(this.containerId)
(fragment as? IFilterable)?.setFilter(filter)
onFragmentInstantiated?.invoke(index)
fragments[index] = fragment
return fragment
return fragment.pushTo(this.containerId)
}
override fun getItemCount(): Int {
override fun getPageTitle(position: Int): CharSequence =
context.getString(when (position) {
0 -> R.string.button_artists
1 -> R.string.button_albums
2 -> R.string.button_tracks
3 -> R.string.button_playlists
else -> R.string.button_offline
})
override fun getCount(): Int {
return if (playback.streaming) 5 else 4 /* hide "offline" for remote playback */
}
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val result = super.instantiateItem(container, position)
fragments[position] = result as Fragment
(result as? IFilterable)?.setFilter(filter)
onFragmentInstantiated?.invoke(position)
return result
}
}

View File

@ -4,10 +4,9 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager.widget.ViewPager
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import io.casey.musikcube.remote.R
import io.casey.musikcube.remote.ui.browse.adapter.BrowseFragmentAdapter
import io.casey.musikcube.remote.ui.browse.constant.Browse
@ -33,7 +32,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 {
val fab = findViewById<FloatingActionButton>(R.id.fab)
val pager = findViewById<ViewPager2>(R.id.view_pager)
val pager = findViewById<ViewPager>(R.id.view_pager)
val tabs = findViewById<TabLayout>(R.id.tab_layout)
val showFabIfNecessary = { pos: Int ->
@ -57,7 +56,7 @@ class BrowseFragment: BaseFragment(), ITransportObserver, IFilterable, ITitlePro
adapter = BrowseFragmentAdapter(
appCompatActivity,
playback,
this@BrowseFragment,
childFragmentManager,
R.id.content_container)
adapter.onFragmentInstantiated = { pos ->
@ -68,26 +67,23 @@ class BrowseFragment: BaseFragment(), ITransportObserver, IFilterable, ITitlePro
pager.isSaveEnabled = false
pager.adapter = adapter
pager.offscreenPageLimit = adapter.itemCount
pager.currentItem = adapter.indexOf(extras.getString(Browse.Extras.INITIAL_CATEGORY_TYPE))
pager.registerOnPageChangeCallback(object: ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
showFabIfNecessary(position)
tabs.setupWithViewPager(pager)
pager.addOnPageChangeListener(object: ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(pos: Int, offset: Float, offsetPixels: Int) {
}
override fun onPageSelected(pos: Int) {
showFabIfNecessary(pos)
}
})
TabLayoutMediator(tabs, pager, true) { tab, position ->
tab.text = adapter.getPageTitle(position)
}.attach()
val initialIndex = adapter.indexOf(
extras.getString(Browse.Extras.INITIAL_CATEGORY_TYPE))
pager.setCurrentItem(initialIndex, false)
pager.post {
showFabIfNecessary(pager.currentItem)
}
showFabIfNecessary(pager.currentItem)
}
override fun onTransportChanged() =

View File

@ -27,7 +27,7 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager2.widget.ViewPager2
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"