diff --git a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt index 2cc61c26..ec95d307 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt @@ -138,6 +138,7 @@ class MapFragment : Fragment(), OnMapReadyCallback, MenuProvider { private var connectionErrorSnackbar: Snackbar? = null private var mapTopPadding: Int = 0 private var popupMenu: PopupMenu? = null + private var insetBottom: Int = 0 private lateinit var favToggle: MenuItem private val backPressedCallback = object : OnBackPressedCallback(false) { override fun handleOnBackPressed() { @@ -248,6 +249,10 @@ class MapFragment : Fragment(), OnMapReadyCallback, MenuProvider { // and cause an infinite loop. So we rely on onMapReady being called later than // onApplyWindowInsets. + insetBottom = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom + binding.navBarScrim.layoutParams.height = insetBottom + updatePeekHeight() + insets } @@ -262,6 +267,10 @@ class MapFragment : Fragment(), OnMapReadyCallback, MenuProvider { return binding.root } + private fun updatePeekHeight() { + bottomSheetBehavior.peekHeight = binding.detailView.topPart.bottom + insetBottom + } + private fun getMapProvider(provider: String) = when (provider) { "mapbox" -> MapFactory.MAPLIBRE "google" -> MapFactory.GOOGLE @@ -291,7 +300,7 @@ class MapFragment : Fragment(), OnMapReadyCallback, MenuProvider { } binding.detailView.topPart.doOnNextLayout { - bottomSheetBehavior.peekHeight = binding.detailView.topPart.bottom + updatePeekHeight() vm.bottomSheetState.value?.let { bottomSheetBehavior.state = it } } bottomSheetBehavior.isCollapsible = bottomSheetCollapsible @@ -626,6 +635,14 @@ class MapFragment : Fragment(), OnMapReadyCallback, MenuProvider { min(bottomSheetBehavior.peekHeight, height) ) } + println(slideOffset) + if (bottomSheetBehavior.state != STATE_HIDDEN) { + binding.navBarScrim.visibility = View.VISIBLE + binding.navBarScrim.translationY = + (if (slideOffset < 0f) -slideOffset else 2 * slideOffset) * binding.navBarScrim.height + } else { + binding.navBarScrim.visibility = View.INVISIBLE + } } override fun onStateChanged(bottomSheet: View, newState: Int) { diff --git a/app/src/main/res/layout/fragment_map.xml b/app/src/main/res/layout/fragment_map.xml index 19a09b6e..a108958c 100644 --- a/app/src/main/res/layout/fragment_map.xml +++ b/app/src/main/res/layout/fragment_map.xml @@ -247,6 +247,15 @@ app:layout_behavior="@string/hide_on_scroll_fab_behavior" android:theme="@style/NoElevationOverlay" /> + +