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:
parent
7d4b953019
commit
6f625da125
12 changed files with 33 additions and 35 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue