diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 2dac07833..849618337 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -18,17 +18,15 @@ package org.oxycblt.auxio +import android.animation.ValueAnimator import android.os.Bundle import android.view.LayoutInflater -import android.view.MotionEvent -import android.view.View import android.view.ViewTreeObserver import android.view.WindowInsets import androidx.activity.BackEventCompat import androidx.activity.OnBackPressedCallback import androidx.core.view.ViewCompat import androidx.core.view.isInvisible -import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController @@ -67,7 +65,6 @@ import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.coordinatorLayoutBehavior import org.oxycblt.auxio.util.getAttrColorCompat import org.oxycblt.auxio.util.getDimen -import org.oxycblt.auxio.util.isUnder import org.oxycblt.auxio.util.lazyReflectedMethod import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.navigateSafe @@ -232,19 +229,6 @@ class MainFragment : addCallback(viewLifecycleOwner, requireNotNull(detailBackCallback)) addCallback(viewLifecycleOwner, requireNotNull(sheetBackCallback)) } - - // Stock bottom sheet overlay won't work with our nested UI setup, have to replicate - // it ourselves. - requireBinding().root.rootView.apply { - findViewById(R.id.main_scrim).setOnTouchListener { v, event -> - v.performClick() - handleSpeedDialBoundaryTouch(event) - } - findViewById(R.id.sheet_scrim).setOnTouchListener { v, event -> - v.performClick() - handleSpeedDialBoundaryTouch(event) - } - } } override fun onStop() { @@ -522,49 +506,14 @@ class MainFragment : } } + private var scrimAnimator: ValueAnimator? = null + private fun updateSpeedDial(open: Boolean) { requireNotNull(speedDialBackCallback) { "SpeedDialBackPressedCallback was not available" } .invalidateEnabled(open) val binding = requireBinding() - logD(open) - binding.mainScrim.isVisible = open - binding.sheetScrim.isVisible = open - if (open) { - binding.homeNewPlaylistFab.open(true) - } else { - binding.homeNewPlaylistFab.close(true) - } - } - - private fun handleSpeedDialBoundaryTouch(event: MotionEvent): Boolean { - val binding = binding ?: return false - - if (binding.homeNewPlaylistFab.isOpen && - binding.homeNewPlaylistFab.isUnder(event.x, event.y)) { - // Convert absolute coordinates to relative coordinates - val offsetX = event.x - binding.homeNewPlaylistFab.x - val offsetY = event.y - binding.homeNewPlaylistFab.y - - // Create a new MotionEvent with relative coordinates - val relativeEvent = - MotionEvent.obtain( - event.downTime, - event.eventTime, - event.action, - offsetX, - offsetY, - event.metaState) - - // Dispatch the relative MotionEvent to the target child view - val handled = binding.homeNewPlaylistFab.dispatchTouchEvent(relativeEvent) - - // Recycle the relative MotionEvent - relativeEvent.recycle() - - return handled - } - - return false + binding.mainScrim.isInvisible = !open + binding.sheetScrim.isInvisible = !open } private fun handleShow(show: Show?) { @@ -793,7 +742,7 @@ class MainFragment : } } - private inner class SpeedDialBackPressedCallback() : OnBackPressedCallback(false) { + private inner class SpeedDialBackPressedCallback : OnBackPressedCallback(false) { override fun handleOnBackPressed() { val binding = requireBinding() if (binding.homeNewPlaylistFab.isOpen) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/ThemedSpeedDialView.kt b/app/src/main/java/org/oxycblt/auxio/home/ThemedSpeedDialView.kt index f0b4e32c0..2b1d0c862 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/ThemedSpeedDialView.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/ThemedSpeedDialView.kt @@ -85,7 +85,7 @@ class ThemedSpeedDialView : SpeedDialView { context, MR.attr.motionEasingStandardInterpolator, FastOutSlowInInterpolator()) private val matDuration = - MotionUtils.resolveThemeDuration(context, MR.attr.motionDurationMedium2, 300) + MotionUtils.resolveThemeDuration(context, MR.attr.motionDurationMedium2, 350) init { // Work around ripple bug on Android 12 when useCompatPadding = true. diff --git a/app/src/main/res/layout-w720dp/fragment_main.xml b/app/src/main/res/layout-w720dp/fragment_main.xml index 8685296cc..3a51e8cf6 100644 --- a/app/src/main/res/layout-w720dp/fragment_main.xml +++ b/app/src/main/res/layout-w720dp/fragment_main.xml @@ -77,17 +77,22 @@ android:focusable="true" app:layout_behavior="org.oxycblt.auxio.playback.PlaybackBottomSheetBehavior"> - + android:layout_height="match_parent"> - + + + + + - - - - + + + diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index ed20f341f..682ce60ae 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -22,6 +22,12 @@ app:navGraph="@navigation/inner" tools:layout="@layout/fragment_home" /> + + - - + android:layout_height="match_parent" + android:visibility="invisible" />