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.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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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())
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue