From cfc73525713bb7f62b3e9969168225a106fbefdf Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Wed, 24 Nov 2021 15:13:34 -0700 Subject: [PATCH] playback: add slide up behavior Completely refactor PlaybackBarLayout into PlaybackLayout, which now not only handles the bar behavior but also allows for one to slide up the bar layout into the full playback layout. This was largely adapted from umano's AndroidSlidingUpPanel, albeit heavily minified and mixed with the previous window inset tricks of the previous layout. There are still some tweaks to be made, but this implementation seems to be really good. --- .../java/org/oxycblt/auxio/MainFragment.kt | 16 +- .../org/oxycblt/auxio/coil/AuxioFetcher.kt | 2 - .../oxycblt/auxio/excluded/ExcludedDialog.kt | 2 +- .../home/fastscroll/FastScrollRecyclerView.kt | 3 +- .../org/oxycblt/auxio/music/MusicLoader.kt | 4 +- .../auxio/playback/PlaybackBarLayout.kt | 423 ----------- .../oxycblt/auxio/playback/PlaybackBarView.kt | 34 +- .../auxio/playback/PlaybackFragment.kt | 17 +- .../oxycblt/auxio/playback/PlaybackLayout.kt | 683 ++++++++++++++++++ .../res/layout-land/fragment_playback.xml | 6 +- .../layout-sw600dp-land/fragment_playback.xml | 6 +- .../res/layout-sw600dp/fragment_playback.xml | 6 +- .../layout-w600dp/view_compact_playback.xml | 2 +- app/src/main/res/layout/fragment_main.xml | 4 +- app/src/main/res/layout/fragment_playback.xml | 6 +- .../main/res/layout/view_compact_playback.xml | 2 +- app/src/main/res/navigation/nav_main.xml | 18 +- app/src/main/res/values/ids.xml | 2 + app/src/main/res/values/styles_ui.xml | 36 +- 19 files changed, 739 insertions(+), 533 deletions(-) delete mode 100644 app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarLayout.kt create mode 100644 app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index d9b623bbb..fb86cbe95 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -28,13 +28,12 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import androidx.navigation.fragment.findNavController import com.google.android.material.snackbar.Snackbar import org.oxycblt.auxio.databinding.FragmentMainBinding import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.MusicViewModel -import org.oxycblt.auxio.playback.PlaybackBarLayout +import org.oxycblt.auxio.playback.PlaybackLayout import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.util.logD @@ -42,7 +41,7 @@ import org.oxycblt.auxio.util.logD * A wrapper around the home fragment that shows the playback fragment and controls * the more high-level navigation features. */ -class MainFragment : Fragment(), PlaybackBarLayout.ActionCallback { +class MainFragment : Fragment(), PlaybackLayout.ActionCallback { private val playbackModel: PlaybackViewModel by activityViewModels() private val detailModel: DetailViewModel by activityViewModels() private val musicModel: MusicViewModel by activityViewModels() @@ -66,6 +65,7 @@ class MainFragment : Fragment(), PlaybackBarLayout.ActionCallback { binding.lifecycleOwner = viewLifecycleOwner // --- VIEWMODEL SETUP --- + binding.mainBarLayout.setActionCallback(this) binding.mainBarLayout.setSong(playbackModel.song.value) @@ -73,7 +73,7 @@ class MainFragment : Fragment(), PlaybackBarLayout.ActionCallback { binding.mainBarLayout.setPosition(playbackModel.position.value!!) playbackModel.song.observe(viewLifecycleOwner) { song -> - binding.mainBarLayout.setSong(song, animate = true) + binding.mainBarLayout.setSong(song) } playbackModel.isPlaying.observe(viewLifecycleOwner) { isPlaying -> @@ -111,7 +111,7 @@ class MainFragment : Fragment(), PlaybackBarLayout.ActionCallback { ) snackbar.view.apply { - // Change the font family to our semibold color + // Change the font family to semibold findViewById