diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt
index 341219632..f9ec44705 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt
@@ -109,6 +109,14 @@ class PlaybackFragment : Fragment() {
}
}
+ playbackModel.parent.observe(viewLifecycleOwner) { parent ->
+ if (parent != null) {
+ binding.playbackToolbar.subtitle = parent.resolvedName
+ } else {
+ binding.playbackToolbar.setSubtitle(R.string.lbl_all_songs)
+ }
+ }
+
playbackModel.isShuffling.observe(viewLifecycleOwner) { isShuffling ->
binding.playbackShuffle.isActivated = isShuffling
}
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt
index 507479467..b84524ef8 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt
@@ -527,24 +527,28 @@ class PlaybackLayout @JvmOverloads constructor(
}
/**
- * Update the view transitions done when the panel slides up.
+ * Do the nice view animations that occur whenever we slide up the playback panel.
+ * The way I transition is largely inspired by Android 12's notification panel, with the
+ * compact view fading out completely before the panel view fades in. We don't fade out the
+ * content though so we have cohesion between the other sliding transitions.
*/
private fun updatePanelTransition() {
- val outAlpha = min(1 - panelOffset, 1f)
- val inAlpha = max(panelOffset, 0f)
+ val ratio = max(panelOffset, 0f)
- contentView.apply {
- alpha = outAlpha
- isInvisible = alpha == 0f
- }
+ val outRatio = 1 - ratio
+ val halfOutRatio = min(ratio / 0.5f, 1f)
+ val halfInRatio = max(ratio - 0.5f, 0f) / 0.5f
+
+ // Optimize out drawing for this view completely
+ contentView.isInvisible = outRatio == 0f
// Slowly reduce the elevation as we slide up, eventually resulting in a neutral color
// instead of an elevated one when fully expanded.
- (playbackContainerView.background as MaterialShapeDrawable).alpha = (outAlpha * 255).toInt()
+ (playbackContainerView.background as MaterialShapeDrawable).alpha = (outRatio * 255).toInt()
// Fade out our bar view as we slide up
playbackBarView.apply {
- alpha = outAlpha
+ alpha = min(1 - halfOutRatio, 1f)
isInvisible = alpha == 0f
// When edge-to-edge is enabled, the playback bar will not fade out into the
@@ -561,7 +565,7 @@ class PlaybackLayout @JvmOverloads constructor(
params.setMargins(
params.leftMargin,
- (bars.top * max(panelOffset, 0f)).toInt(),
+ (bars.top * halfOutRatio).toInt(),
params.rightMargin,
params.bottomMargin
)
@@ -575,7 +579,7 @@ class PlaybackLayout @JvmOverloads constructor(
// Fade in our panel as we slide up
playbackPanelView.apply {
- alpha = inAlpha
+ alpha = halfInRatio
isInvisible = alpha == 0f
}
}
@@ -587,10 +591,11 @@ class PlaybackLayout @JvmOverloads constructor(
(computePanelTopPosition(0f) - topPosition).toFloat() / panelRange
private fun smoothSlideTo(offset: Float) {
- // Find the new top position and animate the panel to that
- val panelTop = computePanelTopPosition(offset)
+ val okay = dragHelper.smoothSlideViewTo(
+ playbackContainerView, playbackContainerView.left, computePanelTopPosition(offset)
+ )
- if (dragHelper.smoothSlideViewTo(playbackContainerView, playbackContainerView.left, panelTop)) {
+ if (okay) {
postInvalidateOnAnimation()
}
}
diff --git a/app/src/main/res/layout-land/fragment_playback.xml b/app/src/main/res/layout-land/fragment_playback.xml
index 04d7ea9a6..af0c8be52 100644
--- a/app/src/main/res/layout-land/fragment_playback.xml
+++ b/app/src/main/res/layout-land/fragment_playback.xml
@@ -26,11 +26,12 @@
android:layout_height="match_parent"
android:clipToPadding="false">
-
-
diff --git a/app/src/main/res/layout-sw600dp/fragment_playback.xml b/app/src/main/res/layout-sw600dp/fragment_playback.xml
index d5b2b63c2..115fc4ed3 100644
--- a/app/src/main/res/layout-sw600dp/fragment_playback.xml
+++ b/app/src/main/res/layout-sw600dp/fragment_playback.xml
@@ -26,11 +26,12 @@
android:layout_height="match_parent"
android:clipToPadding="false">
-
-