ui: supply view to windowinsetdcompat calls

Supply a view to WindowInsetsCompat.toWindowInsetsCompat through all
calls in the app.

This does nothing, but it would resolve future bugs if I were to use
the most exotic window inset types.
This commit is contained in:
OxygenCobalt 2022-06-08 09:48:14 -06:00
parent 7d4b953019
commit 6f625da125
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
12 changed files with 33 additions and 35 deletions

View file

@ -34,9 +34,9 @@ import org.oxycblt.auxio.playback.system.PlaybackService
import org.oxycblt.auxio.settings.SettingsManager import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.ui.accent.Accent import org.oxycblt.auxio.ui.accent.Accent
import org.oxycblt.auxio.util.getColorSafe import org.oxycblt.auxio.util.getColorSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.isNight import org.oxycblt.auxio.util.isNight
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.systemBarInsetsCompat
/** /**
* The single [AppCompatActivity] for Auxio. * The single [AppCompatActivity] for Auxio.
@ -148,7 +148,7 @@ class MainActivity : AppCompatActivity() {
} }
contentView.setOnApplyWindowInsetsListener { view, insets -> contentView.setOnApplyWindowInsetsListener { view, insets ->
val bars = insets.systemBarInsetsCompat val bars = insets.getSystemBarInsetsCompat(view)
view.updatePadding(left = bars.left, right = bars.right) view.updatePadding(left = bars.left, right = bars.right)
insets insets
} }

View file

@ -23,7 +23,7 @@ import android.view.WindowInsets
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.annotation.AttrRes import androidx.annotation.AttrRes
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import org.oxycblt.auxio.util.systemBarInsetsCompat import org.oxycblt.auxio.util.getSystemBarInsetsCompat
/** /**
* A container for a FloatingActionButton that enables edge-to-edge support. * A container for a FloatingActionButton that enables edge-to-edge support.
@ -42,7 +42,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
} }
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets { override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
updatePadding(bottom = insets.systemBarInsetsCompat.bottom) updatePadding(bottom = insets.getSystemBarInsetsCompat(this).bottom)
return insets return insets
} }
} }

View file

@ -56,12 +56,12 @@ import org.oxycblt.auxio.ui.MainNavigationAction
import org.oxycblt.auxio.ui.NavigationViewModel import org.oxycblt.auxio.ui.NavigationViewModel
import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.ui.ViewBindingFragment
import org.oxycblt.auxio.util.getColorStateListSafe import org.oxycblt.auxio.util.getColorStateListSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.launch import org.oxycblt.auxio.util.launch
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.logE import org.oxycblt.auxio.util.logE
import org.oxycblt.auxio.util.logTraceOrThrow import org.oxycblt.auxio.util.logTraceOrThrow
import org.oxycblt.auxio.util.logW import org.oxycblt.auxio.util.logW
import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.textSafe import org.oxycblt.auxio.util.textSafe
import org.oxycblt.auxio.util.unlikelyToBeNull import org.oxycblt.auxio.util.unlikelyToBeNull
@ -108,7 +108,7 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
updateTabConfiguration() updateTabConfiguration()
binding.homeIndexingContainer.setOnApplyWindowInsetsListener { view, insets -> binding.homeIndexingContainer.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(bottom = insets.systemBarInsetsCompat.bottom) view.updatePadding(bottom = insets.getSystemBarInsetsCompat(view).bottom)
insets insets
} }

View file

@ -40,9 +40,9 @@ import org.oxycblt.auxio.util.clamp
import org.oxycblt.auxio.util.getDimenOffsetSafe import org.oxycblt.auxio.util.getDimenOffsetSafe
import org.oxycblt.auxio.util.getDimenSizeSafe import org.oxycblt.auxio.util.getDimenSizeSafe
import org.oxycblt.auxio.util.getDrawableSafe import org.oxycblt.auxio.util.getDrawableSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.isRtl import org.oxycblt.auxio.util.isRtl
import org.oxycblt.auxio.util.isUnder import org.oxycblt.auxio.util.isUnder
import org.oxycblt.auxio.util.systemBarInsetsCompat
/** /**
* A [RecyclerView] that enables better fast-scrolling. This is fundamentally a implementation of * A [RecyclerView] that enables better fast-scrolling. This is fundamentally a implementation of
@ -283,7 +283,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets { override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
super.onApplyWindowInsets(insets) super.onApplyWindowInsets(insets)
val bars = insets.systemBarInsetsCompat val bars = insets.getSystemBarInsetsCompat(this)
thumbPadding.bottom = bars.bottom thumbPadding.bottom = bars.bottom
return insets return insets
} }

View file

@ -29,9 +29,9 @@ import org.oxycblt.auxio.ui.MainNavigationAction
import org.oxycblt.auxio.ui.NavigationViewModel import org.oxycblt.auxio.ui.NavigationViewModel
import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.ui.ViewBindingFragment
import org.oxycblt.auxio.util.getColorStateListSafe import org.oxycblt.auxio.util.getColorStateListSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.getSystemGestureInsetsCompat
import org.oxycblt.auxio.util.launch import org.oxycblt.auxio.util.launch
import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.systemGestureInsetsCompat
import org.oxycblt.auxio.util.textSafe import org.oxycblt.auxio.util.textSafe
/** /**
@ -63,8 +63,8 @@ class PlaybackBarFragment : ViewBindingFragment<FragmentPlaybackBarBinding>() {
// any gesture events. So, apply the system gesture insets if present as long // any gesture events. So, apply the system gesture insets if present as long
// as they are *larger* than the bar insets. This is to resolve issues where // as they are *larger* than the bar insets. This is to resolve issues where
// the gesture insets are not sane on OEM devices. // the gesture insets are not sane on OEM devices.
val bars = insets.systemBarInsetsCompat val bars = insets.getSystemBarInsetsCompat(view)
val gestures = insets.systemGestureInsetsCompat val gestures = insets.getSystemGestureInsetsCompat(view)
view.updatePadding(bottom = max(bars.bottom, gestures.bottom)) view.updatePadding(bottom = max(bars.bottom, gestures.bottom))
insets insets
} }

View file

@ -32,9 +32,9 @@ import org.oxycblt.auxio.playback.state.RepeatMode
import org.oxycblt.auxio.ui.MainNavigationAction import org.oxycblt.auxio.ui.MainNavigationAction
import org.oxycblt.auxio.ui.NavigationViewModel import org.oxycblt.auxio.ui.NavigationViewModel
import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.ui.ViewBindingFragment
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.launch import org.oxycblt.auxio.util.launch
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.textSafe import org.oxycblt.auxio.util.textSafe
/** /**
@ -64,9 +64,9 @@ class PlaybackPanelFragment :
) { ) {
// --- UI SETUP --- // --- UI SETUP ---
binding.root.setOnApplyWindowInsetsListener { _, insets -> binding.root.setOnApplyWindowInsetsListener { view, insets ->
val bars = insets.systemBarInsetsCompat val bars = insets.getSystemBarInsetsCompat(view)
binding.root.updatePadding(top = bars.top, bottom = bars.bottom) view.updatePadding(top = bars.top, bottom = bars.bottom)
insets insets
} }

View file

@ -38,10 +38,10 @@ import org.oxycblt.auxio.music.Genre
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.ui.ViewBindingFragment
import org.oxycblt.auxio.util.formatDuration import org.oxycblt.auxio.util.formatDuration
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.launch import org.oxycblt.auxio.util.launch
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.showToast import org.oxycblt.auxio.util.showToast
import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.textSafe import org.oxycblt.auxio.util.textSafe
/** /**
@ -55,7 +55,7 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
override fun onBindingCreated(binding: FragmentAboutBinding, savedInstanceState: Bundle?) { override fun onBindingCreated(binding: FragmentAboutBinding, savedInstanceState: Bundle?) {
binding.aboutContents.setOnApplyWindowInsetsListener { view, insets -> binding.aboutContents.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(bottom = insets.systemBarInsetsCompat.bottom) view.updatePadding(bottom = insets.getSystemBarInsetsCompat(view).bottom)
insets insets
} }

View file

@ -38,11 +38,11 @@ import org.oxycblt.auxio.playback.replaygain.ReplayGainMode
import org.oxycblt.auxio.settings.pref.IntListPreference import org.oxycblt.auxio.settings.pref.IntListPreference
import org.oxycblt.auxio.settings.pref.IntListPreferenceDialog import org.oxycblt.auxio.settings.pref.IntListPreferenceDialog
import org.oxycblt.auxio.ui.accent.AccentDialog import org.oxycblt.auxio.ui.accent.AccentDialog
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.hardRestart import org.oxycblt.auxio.util.hardRestart
import org.oxycblt.auxio.util.isNight import org.oxycblt.auxio.util.isNight
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.showToast import org.oxycblt.auxio.util.showToast
import org.oxycblt.auxio.util.systemBarInsetsCompat
/** /**
* The actual fragment containing the settings menu. Inherits [PreferenceFragmentCompat]. * The actual fragment containing the settings menu. Inherits [PreferenceFragmentCompat].
@ -68,7 +68,7 @@ class SettingsListFragment : PreferenceFragmentCompat() {
clipToPadding = false clipToPadding = false
setOnApplyWindowInsetsListener { _, insets -> setOnApplyWindowInsetsListener { _, insets ->
updatePadding(bottom = insets.systemBarInsetsCompat.bottom) updatePadding(bottom = insets.getSystemBarInsetsCompat(this).bottom)
insets insets
} }
} }

View file

@ -43,12 +43,12 @@ import org.oxycblt.auxio.util.disableDropShadowCompat
import org.oxycblt.auxio.util.getAttrColorSafe import org.oxycblt.auxio.util.getAttrColorSafe
import org.oxycblt.auxio.util.getDimenSafe import org.oxycblt.auxio.util.getDimenSafe
import org.oxycblt.auxio.util.getDrawableSafe import org.oxycblt.auxio.util.getDrawableSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.isUnder import org.oxycblt.auxio.util.isUnder
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.pxOfDp import org.oxycblt.auxio.util.pxOfDp
import org.oxycblt.auxio.util.replaceSystemBarInsetsCompat import org.oxycblt.auxio.util.replaceSystemBarInsetsCompat
import org.oxycblt.auxio.util.stateList import org.oxycblt.auxio.util.stateList
import org.oxycblt.auxio.util.systemBarInsetsCompat
/** /**
* A layout that *properly* handles bottom sheet functionality. * A layout that *properly* handles bottom sheet functionality.
@ -383,7 +383,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
// not apply any window insets at all, which results in scroll desynchronization on // not apply any window insets at all, which results in scroll desynchronization on
// certain views. This is considered tolerable as the other options are to convert // certain views. This is considered tolerable as the other options are to convert
// the playback fragments to views, which is not nice. // the playback fragments to views, which is not nice.
val bars = insets.systemBarInsetsCompat val bars = insets.getSystemBarInsetsCompat(this)
val consumedByPanel = computePanelTopPosition(panelOffset) - measuredHeight val consumedByPanel = computePanelTopPosition(panelOffset) - measuredHeight
val adjustedBottomInset = (consumedByPanel + bars.bottom).coerceAtLeast(0) val adjustedBottomInset = (consumedByPanel + bars.bottom).coerceAtLeast(0)
return insets.replaceSystemBarInsetsCompat( return insets.replaceSystemBarInsetsCompat(
@ -539,7 +539,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) :
// and we can't apply padding to the whole container layout since that would adjust // and we can't apply padding to the whole container layout since that would adjust
// the size of the panel view. This seems to be the least obtrusive way to do this. // the size of the panel view. This seems to be the least obtrusive way to do this.
lastInsets?.let { insets -> lastInsets?.let { insets ->
val bars = insets.systemBarInsetsCompat val bars = insets.getSystemBarInsetsCompat(this)
val params = layoutParams as MarginLayoutParams val params = layoutParams as MarginLayoutParams
val oldTopMargin = params.topMargin val oldTopMargin = params.topMargin

View file

@ -28,8 +28,8 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.logW import org.oxycblt.auxio.util.logW
import org.oxycblt.auxio.util.systemBarInsetsCompat
/** /**
* An [AppBarLayout] that fixes a bug with the default implementation where the lifted state will * An [AppBarLayout] that fixes a bug with the default implementation where the lifted state will
@ -64,7 +64,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets { override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
super.onApplyWindowInsets(insets) super.onApplyWindowInsets(insets)
updatePadding(top = insets.systemBarInsetsCompat.top) updatePadding(top = insets.getSystemBarInsetsCompat(this).top)
return insets return insets
} }

View file

@ -24,7 +24,7 @@ import android.view.WindowInsets
import androidx.annotation.AttrRes import androidx.annotation.AttrRes
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.oxycblt.auxio.util.systemBarInsetsCompat import org.oxycblt.auxio.util.getSystemBarInsetsCompat
/** A [RecyclerView] that automatically applies insets to itself. */ /** A [RecyclerView] that automatically applies insets to itself. */
open class EdgeRecyclerView open class EdgeRecyclerView
@ -48,7 +48,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
initialPadding.left, initialPadding.left,
initialPadding.top, initialPadding.top,
initialPadding.right, initialPadding.right,
initialPadding.bottom + insets.systemBarInsetsCompat.bottom) initialPadding.bottom + insets.getSystemBarInsetsCompat(this).bottom)
return insets return insets
} }

View file

@ -191,18 +191,16 @@ fun <R> SQLiteDatabase.queryAll(tableName: String, block: (Cursor) -> R) =
* Resolve system bar insets in a version-aware manner. This can be used to apply padding to a view * Resolve system bar insets in a version-aware manner. This can be used to apply padding to a view
* that properly follows all the frustrating changes that were made between Android 8-11. * that properly follows all the frustrating changes that were made between Android 8-11.
*/ */
val WindowInsets.systemBarInsetsCompat: Insets fun WindowInsets.getSystemBarInsetsCompat(view: View) =
get() = WindowInsetsCompat.toWindowInsetsCompat(this, view)
WindowInsetsCompat.toWindowInsetsCompat(this)
.getInsets(WindowInsetsCompat.Type.systemBars()) .getInsets(WindowInsetsCompat.Type.systemBars())
/** /**
* Resolve gesture insets in a version-aware manner. This can be used to apply padding to a view * Resolve gesture insets in a version-aware manner. This can be used to apply padding to a view
* that properly follows all the frustrating changes that were made between Android 8-11. * that properly follows all the frustrating changes that were made between Android 8-11.
*/ */
val WindowInsets.systemGestureInsetsCompat: Insets fun WindowInsets.getSystemGestureInsetsCompat(view: View) =
get() = WindowInsetsCompat.toWindowInsetsCompat(this, view)
WindowInsetsCompat.toWindowInsetsCompat(this)
.getInsets(WindowInsetsCompat.Type.systemGestures()) .getInsets(WindowInsetsCompat.Type.systemGestures())
/** /**