wireguard-android/ui/src/main/java/com/wireguard/android/widget/EdgeToEdge.kt
Jason A. Donenfeld 1054e54c89 widget: rewrite in kotlin
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-03-20 02:46:01 -06:00

62 lines
2.3 KiB
Kotlin

/*
* Copyright © 2020 WireGuard LLC. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
package com.wireguard.android.widget
import android.view.View
import android.view.ViewGroup
import androidx.core.view.*
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
/**
* A utility for edge-to-edge display. It provides several features needed to make the app
* displayed edge-to-edge on Android Q with gestural navigation.
*/
object EdgeToEdge {
@JvmStatic
fun setUpRoot(root: ViewGroup) {
root.systemUiVisibility =
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
}
@JvmStatic
fun setUpScrollingContent(scrollingContent: ViewGroup, fab: ExtendedFloatingActionButton?) {
val originalPaddingLeft = scrollingContent.paddingLeft
val originalPaddingRight = scrollingContent.paddingRight
val originalPaddingBottom = scrollingContent.paddingBottom
val fabPaddingBottom = fab?.height ?: 0
val originalMarginTop = scrollingContent.marginTop
scrollingContent.setOnApplyWindowInsetsListener { _, windowInsets ->
scrollingContent.updatePadding(
left = originalPaddingLeft + windowInsets.systemWindowInsetLeft,
right = originalPaddingRight + windowInsets.systemWindowInsetRight,
bottom = originalPaddingBottom + fabPaddingBottom + windowInsets.systemWindowInsetBottom
)
scrollingContent.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = originalMarginTop + windowInsets.systemWindowInsetTop
}
windowInsets
}
}
@JvmStatic
fun setUpFAB(fab: ExtendedFloatingActionButton) {
val originalMarginLeft = fab.marginLeft
val originalMarginRight = fab.marginRight
val originalMarginBottom = fab.marginBottom
fab.setOnApplyWindowInsetsListener { _, windowInsets ->
fab.updateLayoutParams<ViewGroup.MarginLayoutParams> {
leftMargin = originalMarginLeft + windowInsets.systemWindowInsetLeft
rightMargin = originalMarginRight + windowInsets.systemWindowInsetRight
bottomMargin = originalMarginBottom + windowInsets.systemWindowInsetBottom
}
windowInsets
}
}
}