diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index 3c8a0dd90f..fca2bf9241 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -21,6 +21,7 @@ package org.oxycblt.auxio.home import android.os.Bundle import android.view.LayoutInflater import android.view.MenuItem +import android.view.MotionEvent import android.view.View import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts @@ -77,6 +78,7 @@ import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.util.collect import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.getColorCompat +import org.oxycblt.auxio.util.isUnder import org.oxycblt.auxio.util.lazyReflectedField import org.oxycblt.auxio.util.lazyReflectedMethod import org.oxycblt.auxio.util.logD @@ -143,6 +145,21 @@ class HomeFragment : } // --- UI SETUP --- + + binding.root.rootView.apply { + // Stock bottom sheet overlay won't work with our nested UI setup, have to replicate + // it ourselves. + findViewById(R.id.main_scrim).setOnTouchListener { _, event -> + handleSpeedDialBoundaryTouch(event) + false + } + + findViewById(R.id.sheet_scrim).setOnTouchListener { _, event -> + handleSpeedDialBoundaryTouch(event) + false + } + } + binding.homeAppbar.addOnOffsetChangedListener(this) binding.homeNormalToolbar.apply { setOnMenuItemClickListener(this@HomeFragment) @@ -589,6 +606,14 @@ class HomeFragment : } } + private fun handleSpeedDialBoundaryTouch(event: MotionEvent) { + val binding = requireBinding() + if (binding.homeNewPlaylistFab.isOpen && + !binding.homeNewPlaylistFab.isUnder(event.x, event.y)) { + binding.homeNewPlaylistFab.close() + } + } + private fun handleShow(show: Show?) { when (show) { is Show.SongDetails -> { 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 af9150c6fe..ab978eed49 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/ThemedSpeedDialView.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/ThemedSpeedDialView.kt @@ -24,7 +24,6 @@ import android.animation.AnimatorSet import android.animation.ObjectAnimator import android.content.Context import android.content.res.ColorStateList -import android.graphics.Color import android.graphics.drawable.Drawable import android.graphics.drawable.RotateDrawable import android.os.Bundle @@ -41,6 +40,7 @@ import androidx.core.view.setMargins import androidx.core.view.updateLayoutParams import androidx.core.widget.TextViewCompat import androidx.interpolator.view.animation.FastOutSlowInInterpolator +import com.google.android.material.shape.MaterialShapeDrawable import com.leinardi.android.speeddial.FabWithLabelView import com.leinardi.android.speeddial.SpeedDialActionItem import com.leinardi.android.speeddial.SpeedDialView @@ -48,6 +48,7 @@ import kotlin.math.roundToInt import kotlinx.parcelize.Parcelize import org.oxycblt.auxio.R import org.oxycblt.auxio.util.getAttrColorCompat +import org.oxycblt.auxio.util.getDimen import org.oxycblt.auxio.util.getDimenPixels /** @@ -64,6 +65,7 @@ import org.oxycblt.auxio.util.getDimenPixels */ class ThemedSpeedDialView : SpeedDialView { private var mainFabAnimator: Animator? = null + private val spacingSmall = context.getDimenPixels(R.dimen.spacing_small) constructor(context: Context) : super(context) @@ -174,7 +176,13 @@ class ThemedSpeedDialView : SpeedDialView { val fabBackgroundColor = context.getAttrColorCompat(com.google.android.material.R.attr.colorSurface) val labelColor = context.getAttrColorCompat(android.R.attr.textColorSecondary) - val labelBackgroundColor = Color.TRANSPARENT + val labelBackgroundColor = + context.getAttrColorCompat(com.google.android.material.R.attr.colorSurface) + val labelStroke = + context.getAttrColorCompat(com.google.android.material.R.attr.colorOutline) + val labelElevation = + context.getDimen(com.google.android.material.R.dimen.m3_card_elevated_elevation) + val cornerRadius = context.getDimenPixels(R.dimen.spacing_medium) val actionItem = SpeedDialActionItem.Builder( actionItem.id, @@ -184,7 +192,7 @@ class ThemedSpeedDialView : SpeedDialView { .setFabImageTintColor(fabImageTintColor.defaultColor) .setFabBackgroundColor(fabBackgroundColor.defaultColor) .setLabelColor(labelColor.defaultColor) - .setLabelBackgroundColor(labelBackgroundColor) + .setLabelBackgroundColor(labelBackgroundColor.defaultColor) .setLabelClickable(actionItem.isLabelClickable) .setTheme(actionItem.theme) .create() @@ -199,7 +207,13 @@ class ThemedSpeedDialView : SpeedDialView { labelBackground.apply { useCompatPadding = false - setContentPadding(0, 0, 0, 0) + setContentPadding(spacingSmall, spacingSmall, spacingSmall, spacingSmall) + background = + MaterialShapeDrawable.createWithElevationOverlay(context).apply { + fillColor = labelBackgroundColor + elevation = labelElevation + setCornerSize(cornerRadius.toFloat()) + } foreground = null (getChildAt(0) as TextView).apply { TextViewCompat.setTextAppearance(this, R.style.TextAppearance_Auxio_LabelLarge) diff --git a/app/src/main/res/layout-w600dp-land/fragment_main.xml b/app/src/main/res/layout-w600dp-land/fragment_main.xml index f7b562988f..15beea6999 100644 --- a/app/src/main/res/layout-w600dp-land/fragment_main.xml +++ b/app/src/main/res/layout-w600dp-land/fragment_main.xml @@ -17,6 +17,8 @@ app:navGraph="@navigation/inner" tools:layout="@layout/fragment_home" /> + + + + diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 78100da628..d8344e9bb2 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -156,11 +156,6 @@ app:layout_anchor="@id/home_content"> - - + app:sdMainFabClosedSrc="@drawable/ic_add_24"/> - diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index 986aab7594..0e85a7e51e 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -18,6 +18,8 @@ app:navGraph="@navigation/inner" tools:layout="@layout/fragment_home" /> + + + +