summaryrefslogtreecommitdiffhomepage
path: root/app/src/main/java
diff options
context:
space:
mode:
authorHarsh Shandilya <me@msfjarvis.dev>2020-02-23 20:00:03 +0530
committerHarsh Shandilya <me@msfjarvis.dev>2020-02-25 08:57:26 +0530
commitc889a8c8dea7db9fdf9374ff7d72537434932560 (patch)
tree7e9e5263292cf87cf860639832da0ffc57357e4b /app/src/main/java
parentcbf2ea7b48710577a432904de3b08be4acba664c (diff)
Add EdgeToEdge and coreKtx dependency
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/com/wireguard/android/ui/EdgeToEdge.kt67
1 files changed, 67 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/ui/EdgeToEdge.kt b/app/src/main/java/com/wireguard/android/ui/EdgeToEdge.kt
new file mode 100644
index 00000000..52a19657
--- /dev/null
+++ b/app/src/main/java/com/wireguard/android/ui/EdgeToEdge.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2017-2020 WireGuard LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+package com.wireguard.android.ui
+
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.view.marginBottom
+import androidx.core.view.marginLeft
+import androidx.core.view.marginRight
+import androidx.core.view.marginTop
+import androidx.core.view.updateLayoutParams
+import androidx.core.view.updatePadding
+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
+ }
+ }
+}