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.ui.accent.Accent
import org.oxycblt.auxio.util.getColorSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.isNight
import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.systemBarInsetsCompat
/**
* The single [AppCompatActivity] for Auxio.
@ -148,7 +148,7 @@ class MainActivity : AppCompatActivity() {
}
contentView.setOnApplyWindowInsetsListener { view, insets ->
val bars = insets.systemBarInsetsCompat
val bars = insets.getSystemBarInsetsCompat(view)
view.updatePadding(left = bars.left, right = bars.right)
insets
}

View file

@ -23,7 +23,7 @@ import android.view.WindowInsets
import android.widget.FrameLayout
import androidx.annotation.AttrRes
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.
@ -42,7 +42,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
}
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
updatePadding(bottom = insets.systemBarInsetsCompat.bottom)
updatePadding(bottom = insets.getSystemBarInsetsCompat(this).bottom)
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.ViewBindingFragment
import org.oxycblt.auxio.util.getColorStateListSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.launch
import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.logE
import org.oxycblt.auxio.util.logTraceOrThrow
import org.oxycblt.auxio.util.logW
import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.textSafe
import org.oxycblt.auxio.util.unlikelyToBeNull
@ -108,7 +108,7 @@ class HomeFragment : ViewBindingFragment<FragmentHomeBinding>(), Toolbar.OnMenuI
updateTabConfiguration()
binding.homeIndexingContainer.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(bottom = insets.systemBarInsetsCompat.bottom)
view.updatePadding(bottom = insets.getSystemBarInsetsCompat(view).bottom)
insets
}

View file

@ -40,9 +40,9 @@ import org.oxycblt.auxio.util.clamp
import org.oxycblt.auxio.util.getDimenOffsetSafe
import org.oxycblt.auxio.util.getDimenSizeSafe
import org.oxycblt.auxio.util.getDrawableSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.isRtl
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
@ -283,7 +283,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
super.onApplyWindowInsets(insets)
val bars = insets.systemBarInsetsCompat
val bars = insets.getSystemBarInsetsCompat(this)
thumbPadding.bottom = bars.bottom
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.ViewBindingFragment
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.systemBarInsetsCompat
import org.oxycblt.auxio.util.systemGestureInsetsCompat
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
// as they are *larger* than the bar insets. This is to resolve issues where
// the gesture insets are not sane on OEM devices.
val bars = insets.systemBarInsetsCompat
val gestures = insets.systemGestureInsetsCompat
val bars = insets.getSystemBarInsetsCompat(view)
val gestures = insets.getSystemGestureInsetsCompat(view)
view.updatePadding(bottom = max(bars.bottom, gestures.bottom))
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.NavigationViewModel
import org.oxycblt.auxio.ui.ViewBindingFragment
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.launch
import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.textSafe
/**
@ -64,9 +64,9 @@ class PlaybackPanelFragment :
) {
// --- UI SETUP ---
binding.root.setOnApplyWindowInsetsListener { _, insets ->
val bars = insets.systemBarInsetsCompat
binding.root.updatePadding(top = bars.top, bottom = bars.bottom)
binding.root.setOnApplyWindowInsetsListener { view, insets ->
val bars = insets.getSystemBarInsetsCompat(view)
view.updatePadding(top = bars.top, bottom = bars.bottom)
insets
}

View file

@ -38,10 +38,10 @@ import org.oxycblt.auxio.music.Genre
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.ui.ViewBindingFragment
import org.oxycblt.auxio.util.formatDuration
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.launch
import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.showToast
import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.textSafe
/**
@ -55,7 +55,7 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
override fun onBindingCreated(binding: FragmentAboutBinding, savedInstanceState: Bundle?) {
binding.aboutContents.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(bottom = insets.systemBarInsetsCompat.bottom)
view.updatePadding(bottom = insets.getSystemBarInsetsCompat(view).bottom)
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.IntListPreferenceDialog
import org.oxycblt.auxio.ui.accent.AccentDialog
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.hardRestart
import org.oxycblt.auxio.util.isNight
import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.showToast
import org.oxycblt.auxio.util.systemBarInsetsCompat
/**
* The actual fragment containing the settings menu. Inherits [PreferenceFragmentCompat].
@ -68,7 +68,7 @@ class SettingsListFragment : PreferenceFragmentCompat() {
clipToPadding = false
setOnApplyWindowInsetsListener { _, insets ->
updatePadding(bottom = insets.systemBarInsetsCompat.bottom)
updatePadding(bottom = insets.getSystemBarInsetsCompat(this).bottom)
insets
}
}

View file

@ -43,12 +43,12 @@ import org.oxycblt.auxio.util.disableDropShadowCompat
import org.oxycblt.auxio.util.getAttrColorSafe
import org.oxycblt.auxio.util.getDimenSafe
import org.oxycblt.auxio.util.getDrawableSafe
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
import org.oxycblt.auxio.util.isUnder
import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.pxOfDp
import org.oxycblt.auxio.util.replaceSystemBarInsetsCompat
import org.oxycblt.auxio.util.stateList
import org.oxycblt.auxio.util.systemBarInsetsCompat
/**
* 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
// certain views. This is considered tolerable as the other options are to convert
// the playback fragments to views, which is not nice.
val bars = insets.systemBarInsetsCompat
val bars = insets.getSystemBarInsetsCompat(this)
val consumedByPanel = computePanelTopPosition(panelOffset) - measuredHeight
val adjustedBottomInset = (consumedByPanel + bars.bottom).coerceAtLeast(0)
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
// the size of the panel view. This seems to be the least obtrusive way to do this.
lastInsets?.let { insets ->
val bars = insets.systemBarInsetsCompat
val bars = insets.getSystemBarInsetsCompat(this)
val params = layoutParams as MarginLayoutParams
val oldTopMargin = params.topMargin

View file

@ -28,8 +28,8 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.updatePadding
import com.google.android.material.appbar.AppBarLayout
import org.oxycblt.auxio.util.getSystemBarInsetsCompat
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
@ -64,7 +64,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
super.onApplyWindowInsets(insets)
updatePadding(top = insets.systemBarInsetsCompat.top)
updatePadding(top = insets.getSystemBarInsetsCompat(this).top)
return insets
}

View file

@ -24,7 +24,7 @@ import android.view.WindowInsets
import androidx.annotation.AttrRes
import androidx.core.view.updatePadding
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. */
open class EdgeRecyclerView
@ -48,7 +48,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
initialPadding.left,
initialPadding.top,
initialPadding.right,
initialPadding.bottom + insets.systemBarInsetsCompat.bottom)
initialPadding.bottom + insets.getSystemBarInsetsCompat(this).bottom)
return insets
}

View file

@ -191,19 +191,17 @@ 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
* that properly follows all the frustrating changes that were made between Android 8-11.
*/
val WindowInsets.systemBarInsetsCompat: Insets
get() =
WindowInsetsCompat.toWindowInsetsCompat(this)
.getInsets(WindowInsetsCompat.Type.systemBars())
fun WindowInsets.getSystemBarInsetsCompat(view: View) =
WindowInsetsCompat.toWindowInsetsCompat(this, view)
.getInsets(WindowInsetsCompat.Type.systemBars())
/**
* 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.
*/
val WindowInsets.systemGestureInsetsCompat: Insets
get() =
WindowInsetsCompat.toWindowInsetsCompat(this)
.getInsets(WindowInsetsCompat.Type.systemGestures())
fun WindowInsets.getSystemGestureInsetsCompat(view: View) =
WindowInsetsCompat.toWindowInsetsCompat(this, view)
.getInsets(WindowInsetsCompat.Type.systemGestures())
/**
* Replaces the system bar insets in a version-aware manner. This can be used to modify the insets