diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index 9d7231529..038dfae4a 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -26,20 +26,19 @@ import android.view.WindowInsets import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate +import androidx.core.view.updatePadding import androidx.databinding.DataBindingUtil import org.oxycblt.auxio.accent.Accent import org.oxycblt.auxio.databinding.ActivityMainBinding import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.system.PlaybackService import org.oxycblt.auxio.settings.SettingsManager +import org.oxycblt.auxio.util.applyEdge import org.oxycblt.auxio.util.isNight import org.oxycblt.auxio.util.logD /** * The single [AppCompatActivity] for Auxio. - * TODO: Improve edge-to-edge everywhere and phase out fitsSystemWindows. - * If you do this, then it will become trivial to merge a lot of the code [l/r padding], - * fitsSystemWindow management into this activity. */ class MainActivity : AppCompatActivity() { private val playbackModel: PlaybackViewModel by viewModels() @@ -54,7 +53,15 @@ class MainActivity : AppCompatActivity() { ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { - setupEdgeToEdge(binding) + applyEdgeToEdgeWindow(binding) + + // If there are left/right insets [signalling that we are in phone landscape mode], + // we will always apply them. + binding.applyEdge { bars -> + binding.root.updatePadding(left = bars.left, right = bars.right) + } + } else { + binding.root.fitsSystemWindows = true } logD("Activity created.") @@ -105,7 +112,7 @@ class MainActivity : AppCompatActivity() { } } - private fun setupEdgeToEdge(binding: ActivityMainBinding) { + private fun applyEdgeToEdgeWindow(binding: ActivityMainBinding) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Do modern edge to edge, which happens to be around twice the size of the // old way of doing things. Thanks android, very cool! diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 962134598..46f30259b 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -35,7 +35,6 @@ import org.oxycblt.auxio.util.logD /** * A wrapper around the home fragment that shows the playback fragment and controls * the more high-level navigation features. - * TODO: Re-add the nice playback slide in animation */ class MainFragment : Fragment() { private val playbackModel: PlaybackViewModel by activityViewModels() @@ -52,7 +51,7 @@ class MainFragment : Fragment() { binding.lifecycleOwner = viewLifecycleOwner binding.applyEdge { bars -> - binding.root.updatePadding(bottom = bars.bottom, left = bars.left, right = bars.right) + binding.root.updatePadding(bottom = bars.bottom) } // --- VIEWMODEL SETUP --- 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 27baaddeb..ef31de4f1 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackFragment.kt @@ -24,6 +24,7 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.SeekBar +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController @@ -33,6 +34,7 @@ import org.oxycblt.auxio.databinding.FragmentPlaybackBinding import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.playback.state.LoopMode import org.oxycblt.auxio.ui.memberBinding +import org.oxycblt.auxio.util.applyEdge import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.resolveDrawable import org.oxycblt.auxio.util.resolveStateList @@ -70,6 +72,13 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener { binding.playbackModel = playbackModel binding.detailModel = detailModel + binding.applyEdge { bars -> + binding.root.updatePadding( + top = bars.top, + bottom = bars.bottom + ) + } + binding.playbackToolbar.apply { setNavigationOnClickListener { findNavController().navigateUp() diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt index 9fd33286a..d7f622034 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt @@ -67,7 +67,6 @@ class QueueFragment : Fragment() { binding.lifecycleOwner = viewLifecycleOwner binding.applyEdge { bars -> - binding.root.updatePadding(left = bars.left, right = bars.right) binding.queueAppbar.updatePadding(top = bars.top) binding.queueRecycler.updatePadding(bottom = bars.bottom) } @@ -107,7 +106,6 @@ class QueueFragment : Fragment() { lastShuffle = isShuffling binding.queueRecycler.scrollToPosition(0) - // binding.queueAppbar.isLifted = false // Make sure lifted state changes. } } diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt index 1f2a880c8..609e6487b 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -76,7 +76,6 @@ class SearchFragment : Fragment() { ) val toolbarParams = binding.searchToolbar.layoutParams as AppBarLayout.LayoutParams - val defaultParams = toolbarParams.scrollFlags // --- UI SETUP -- diff --git a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt index 8d53501d6..e940817f4 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt @@ -27,6 +27,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.net.toUri +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import com.google.android.material.bottomsheet.BottomSheetDialogFragment @@ -34,6 +35,7 @@ import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentAboutBinding import org.oxycblt.auxio.music.MusicStore +import org.oxycblt.auxio.util.applyEdge import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.showToast @@ -50,6 +52,11 @@ class AboutFragment : Fragment() { val binding = FragmentAboutBinding.inflate(layoutInflater) val musicStore = MusicStore.getInstance() + binding.applyEdge { bars -> + binding.aboutAppbar.updatePadding(top = bars.top,) + binding.aboutContents.updatePadding(bottom = bars.bottom) + } + binding.aboutToolbar.setNavigationOnClickListener { findNavController().navigateUp() } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsFragment.kt index 44155a5a5..d0521892e 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsFragment.kt @@ -55,7 +55,6 @@ class SettingsFragment : Fragment() { } binding.applyEdge { bars -> - binding.root.updatePadding(left = bars.left, right = bars.right) binding.settingsAppbar.updatePadding(top = bars.top) // The padding + clipToPadding method does not seem to work with a diff --git a/app/src/main/java/org/oxycblt/auxio/ui/LiftAppBarLayout.kt b/app/src/main/java/org/oxycblt/auxio/ui/LiftAppBarLayout.kt index 02a7f9d79..c5a6c9890 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/LiftAppBarLayout.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/LiftAppBarLayout.kt @@ -1,6 +1,6 @@ /* * Copyright (c) 2021 Auxio Project - * CobaltCoordinatorLayout.kt is part of Auxio. + * LiftAppBarLayout.kt is part of Auxio. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,7 +31,8 @@ import com.google.android.material.appbar.AppBarLayout /** * An [AppBarLayout] that fixes a bug with the default implementation where the lifted state * will not properly respond to RecyclerView events. - * TODO: Find a way to get the lift animation to not animate on startup. + * FIXME: Fix issue where elevation change will always animate + * FIXME: Fix issue where expanded state does not work correctly when switching orientations */ class LiftAppBarLayout @JvmOverloads constructor( context: Context, diff --git a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt index 014b8d805..c2329d087 100644 --- a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt @@ -197,7 +197,6 @@ fun View.applyEdge(onApply: (Rect) -> Unit) { } } - // Not on a version that supports edge [yet], just don't do it. - else -> fitsSystemWindows = true + // Not on a version that supports edge-to-edge [yet], don't do anything } } diff --git a/app/src/main/res/layout-land/fragment_playback.xml b/app/src/main/res/layout-land/fragment_playback.xml index bab4c7b70..0fef899ec 100644 --- a/app/src/main/res/layout-land/fragment_playback.xml +++ b/app/src/main/res/layout-land/fragment_playback.xml @@ -24,13 +24,11 @@ android:id="@+id/playback_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface" - android:fitsSystemWindows="true"> + android:background="?attr/colorSurface"> + android:background="?attr/colorSurface"> + android:background="?attr/colorSurface"> - - + + + + + + android:layout_height="match_parent" + android:clipToPadding="false" + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 3d6a6667e..8b67313d7 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -24,7 +24,6 @@ diff --git a/app/src/main/res/layout/fragment_playback.xml b/app/src/main/res/layout/fragment_playback.xml index 2cb8f0d5a..486965ea7 100644 --- a/app/src/main/res/layout/fragment_playback.xml +++ b/app/src/main/res/layout/fragment_playback.xml @@ -23,13 +23,11 @@ android:id="@+id/playback_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorSurface" - android:fitsSystemWindows="true"> + android:background="?attr/colorSurface"> diff --git a/app/src/main/res/values/styles_ui.xml b/app/src/main/res/values/styles_ui.xml index ab5bff978..ba5a54dba 100644 --- a/app/src/main/res/values/styles_ui.xml +++ b/app/src/main/res/values/styles_ui.xml @@ -6,8 +6,6 @@