diff --git a/app/src/main/java/org/oxycblt/auxio/home/AdaptiveFloatingActionButton.kt b/app/src/main/java/org/oxycblt/auxio/home/AdaptiveFloatingActionButton.kt deleted file mode 100644 index f6b405332..000000000 --- a/app/src/main/java/org/oxycblt/auxio/home/AdaptiveFloatingActionButton.kt +++ /dev/null @@ -1,40 +0,0 @@ -package org.oxycblt.auxio.home - -import android.content.Context -import android.util.AttributeSet -import com.google.android.material.floatingactionbutton.FloatingActionButton -import org.oxycblt.auxio.util.getDimenSizeSafe -import org.oxycblt.auxio.util.logD -import com.google.android.material.R as MaterialR - -/** - * A FloatingActionButton that automatically switches to a normal or large FAB depending on the - * screen size. - */ -@Suppress("PrivateResource") -class AdaptiveFloatingActionButton @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = MaterialR.style.Widget_Material3_FloatingActionButton_Primary -) : FloatingActionButton(context, attrs, defStyleAttr) { - - init { - size = SIZE_NORMAL - - // Use a large FAB on large screens, as it makes it easier to touch. - if (resources.configuration.smallestScreenWidthDp >= 640) { - logD("Using large FAB configuration") - - val largeFabSize = context.getDimenSizeSafe( - MaterialR.dimen.m3_large_fab_size - ) - - val largeImageSize = context.getDimenSizeSafe( - MaterialR.dimen.m3_large_fab_max_image_size - ) - - customSize = largeFabSize - setMaxImageSize(largeImageSize) - } - } -} diff --git a/app/src/main/java/org/oxycblt/auxio/home/FloatingActionButtonContainer.kt b/app/src/main/java/org/oxycblt/auxio/home/EdgeFabContainer.kt similarity index 96% rename from app/src/main/java/org/oxycblt/auxio/home/FloatingActionButtonContainer.kt rename to app/src/main/java/org/oxycblt/auxio/home/EdgeFabContainer.kt index 9f38464dd..8828c62f6 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/FloatingActionButtonContainer.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/EdgeFabContainer.kt @@ -30,7 +30,7 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat * A container for a FloatingActionButton that enables edge-to-edge support. * @author OxygenCobalt */ -class FloatingActionButtonContainer @JvmOverloads constructor( +class EdgeFabContainer @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0 @@ -45,7 +45,6 @@ class FloatingActionButtonContainer @JvmOverloads constructor( override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets { updatePadding(bottom = insets.systemBarInsetsCompat.bottom) - return insets } } 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 b5b447ad4..f5fe3f216 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -159,11 +159,9 @@ class HomeFragment : Fragment() { ).attach() } - binding.homeFab.setOnClickListener { - playbackModel.shuffleAll() - } + binding.homeShuffleFab.setup(playbackModel) - // --- VIEWMODEL SETUP --- +// --- VIEWMODEL SETUP --- // There is no way a fast scrolling event can continue across a re-create. Reset it. homeModel.updateFastScrolling(false) @@ -171,12 +169,12 @@ class HomeFragment : Fragment() { musicModel.loaderResponse.observe(viewLifecycleOwner) { response -> // Handle the loader response. when (response) { - is MusicStore.Response.Ok -> binding.homeFab.show() + is MusicStore.Response.Ok -> binding.homeShuffleFab.show() // While loading or during an error, make sure we keep the shuffle fab hidden so // that any kind of playback is impossible. PlaybackStateManager also relies on this // invariant, so please don't change it. - else -> binding.homeFab.hide() + else -> binding.homeShuffleFab.hide() } } @@ -188,9 +186,9 @@ class HomeFragment : Fragment() { } if (scrolling) { - binding.homeFab.hide() + binding.homeShuffleFab.hide() } else { - binding.homeFab.show() + binding.homeShuffleFab.show() } } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 4bb06bb87..2bab4386f 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -40,24 +40,23 @@ app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" tools:layout="@layout/fragment_home_list" /> - - + android:src="@drawable/ic_shuffle" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/view_shuffle_button.xml b/app/src/main/res/layout/view_shuffle_button.xml new file mode 100644 index 000000000..2065d961c --- /dev/null +++ b/app/src/main/res/layout/view_shuffle_button.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/app/src/main/res/values-sw640dp/styles_ui.xml b/app/src/main/res/values-sw640dp/styles_ui.xml new file mode 100644 index 000000000..f72e10d34 --- /dev/null +++ b/app/src/main/res/values-sw640dp/styles_ui.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles_ui.xml b/app/src/main/res/values/styles_ui.xml index 95c53941b..ae84084c5 100644 --- a/app/src/main/res/values/styles_ui.xml +++ b/app/src/main/res/values/styles_ui.xml @@ -167,9 +167,14 @@ compensate. 2. For some reason elevation behaves strangely in the playback panel, so we disable it. --> - @dimen/size_playback_icon + normal @dimen/size_btn_large + @dimen/size_playback_icon 0dp 0dp + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7436375ca..773a522aa 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.1.1' + classpath 'com.android.tools.build:gradle:7.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version"