Jelajahi Sumber

Apply elevation overlay to colored navbar (#6308)

Ivan Iskandar 3 tahun lalu
induk
melakukan
458a0e608a

+ 10 - 0
app/src/main/java/com/google/android/material/bottomsheet/BottomSheetBehaviorExtensions.kt

@@ -0,0 +1,10 @@
+package com.google.android.material.bottomsheet
+
+import android.view.View
+
+/**
+ * Returns package-private elevation value
+ */
+fun <T : View> BottomSheetBehavior<T>.getElevation(): Float {
+    return elevation.takeIf { it >= 0F } ?: 0F
+}

+ 2 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt

@@ -279,7 +279,8 @@ class MainActivity : BaseViewBindingActivity<MainActivityBinding>() {
             // Make sure navigation bar is on bottom before we modify it
             ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, insets ->
                 if (insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom > 0) {
-                    window.setNavigationBarTransparentCompat(this@MainActivity)
+                    val elevation = binding.bottomNav?.elevation ?: 0F
+                    window.setNavigationBarTransparentCompat(this@MainActivity, elevation)
                 }
                 insets
             }

+ 6 - 2
app/src/main/java/eu/kanade/tachiyomi/util/view/WindowExtensions.kt

@@ -5,6 +5,7 @@ import android.graphics.Color
 import android.os.Build
 import android.view.Window
 import android.view.WindowManager
+import com.google.android.material.elevation.ElevationOverlayProvider
 import eu.kanade.tachiyomi.util.system.InternalResourceHelper
 import eu.kanade.tachiyomi.util.system.getResourceColor
 
@@ -12,14 +13,17 @@ import eu.kanade.tachiyomi.util.system.getResourceColor
  * Sets navigation bar color to transparent if system's config_navBarNeedsScrim is false,
  * otherwise it will use the theme navigationBarColor with 70% opacity.
  */
-fun Window.setNavigationBarTransparentCompat(context: Context) {
+fun Window.setNavigationBarTransparentCompat(context: Context, elevation: Float = 0F) {
     navigationBarColor = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&
         !InternalResourceHelper.getBoolean(context, "config_navBarNeedsScrim", true)
     ) {
         Color.TRANSPARENT
     } else {
         // Set navbar scrim 70% of navigationBarColor
-        context.getResourceColor(android.R.attr.navigationBarColor, 0.7F)
+        ElevationOverlayProvider(context).compositeOverlayIfNeeded(
+            context.getResourceColor(android.R.attr.navigationBarColor, 0.7F),
+            elevation
+        )
     }
 }
 

+ 2 - 1
app/src/main/java/eu/kanade/tachiyomi/widget/sheet/BaseBottomSheetDialog.kt

@@ -8,6 +8,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.google.android.material.bottomsheet.getElevation
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.util.system.displayCompat
 import eu.kanade.tachiyomi.util.system.isNightMode
@@ -40,7 +41,7 @@ abstract class BaseBottomSheetDialog(context: Context) : BottomSheetDialog(conte
         // TODO Replace deprecated systemUiVisibility when material-components uses new API to modify status bar icons
         @Suppress("DEPRECATION")
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-            window?.setNavigationBarTransparentCompat(context)
+            window?.setNavigationBarTransparentCompat(context, behavior.getElevation())
             val bottomSheet = rootView.parent as ViewGroup
             var flags = bottomSheet.systemUiVisibility
             flags = if (context.isNightMode()) {