From e142c17fcac3ed2de9dc265d70201818b91ba960 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sun, 29 Aug 2021 18:29:58 -0600 Subject: [PATCH] home: make edge-to-edge Make the home fragment span from edge-to-edge. This also adds a nice effect for the toolbar to fade out when it collapses. --- .../java/org/oxycblt/auxio/MainFragment.kt | 6 ++++++ .../org/oxycblt/auxio/home/HomeFragment.kt | 18 ++++++++++++++++++ app/src/main/res/layout/fragment_home.xml | 4 +--- app/src/main/res/layout/fragment_main.xml | 2 +- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index a0a11c346..23ff5d11a 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -22,11 +22,13 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import org.oxycblt.auxio.databinding.FragmentMainBinding import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.PlaybackViewModel +import org.oxycblt.auxio.util.applyEdge import org.oxycblt.auxio.util.isLandscape import org.oxycblt.auxio.util.logD @@ -49,6 +51,10 @@ class MainFragment : Fragment() { binding.lifecycleOwner = viewLifecycleOwner + binding.applyEdge { bars -> + binding.root.updatePadding(bottom = bars.bottom) + } + // --- VIEWMODEL SETUP --- playbackModel.setupPlayback(requireContext()) 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 2740f6a23..058baf049 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -22,12 +22,14 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.tabs.TabLayoutMediator import org.oxycblt.auxio.MainFragmentDirections import org.oxycblt.auxio.R @@ -39,6 +41,7 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.ui.DisplayMode +import org.oxycblt.auxio.util.applyEdge import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logE @@ -67,6 +70,21 @@ class HomeFragment : Fragment() { binding.lifecycleOwner = viewLifecycleOwner + binding.applyEdge { bars -> + binding.homeAppbar.updatePadding(top = bars.top) + } + + // There is basically no way to prevent the toolbar to draw under the status bar when + // it collapses, so do the next best thing and fade it out so it doesn't stick out like + // a sore thumb. As a side effect, this looks really cool. + binding.homeAppbar.addOnOffsetChangedListener( + AppBarLayout.OnOffsetChangedListener { _, verticalOffset -> + binding.homeToolbar.apply { + alpha = (height + verticalOffset) / height.toFloat() + } + } + ) + binding.homeToolbar.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.action_settings -> { diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 59292337f..3d6a6667e 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -17,6 +17,7 @@ android:layout_height="wrap_content" android:background="?attr/colorSurface" android:clickable="true" + android:clipChildren="true" android:elevation="@dimen/elevation_normal" android:focusable="true"> @@ -24,7 +25,6 @@ android:id="@+id/home_toolbar" style="@style/Widget.Toolbar" android:elevation="0dp" - android:fitsSystemWindows="true" app:layout_scrollFlags="scroll|enterAlways" app:menu="@menu/menu_home" app:title="@string/info_app_name" /> @@ -33,8 +33,6 @@ android:id="@+id/home_tabs" android:layout_width="match_parent" android:layout_height="wrap_content" - android:clickable="true" - android:focusable="true" app:tabContentStart="@dimen/spacing_medium" app:tabIndicatorColor="?attr/colorAccent" app:tabMode="scrollable" diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index 04344fd86..4435a94a6 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -9,7 +9,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" - android:fitsSystemWindows="true" android:orientation="vertical">