@@ -179,7 +179,30 @@ class MapFragment : Fragment() {
179179 return binding.root
180180 }
181181
182- private fun initSearchBar (binding : MapFragmentBinding ) {
182+ private suspend fun selectPlace (place : Place ? ) {
183+ if (place != null ) {
184+ getPlaceDetailsToolbar()
185+ placeFragment.setPlace(place)
186+ bottomSheetBehavior.state = BottomSheetBehavior .STATE_HALF_EXPANDED
187+ } else {
188+ bottomSheetBehavior.state = BottomSheetBehavior .STATE_HIDDEN
189+ }
190+ }
191+
192+ var statusBarController: MapStatusBarController ? = null
193+
194+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
195+ bottomSheetBehavior = BottomSheetBehavior .from(binding.elementDetails)
196+ bottomSheetBehavior.state = BottomSheetBehavior .STATE_HIDDEN
197+ bottomSheetBehavior.addSlideCallback()
198+
199+ statusBarController = MapStatusBarController (
200+ conf = resources.configuration,
201+ insetsController = insetsController!! ,
202+ bottomSheetBehavior = bottomSheetBehavior
203+ )
204+ statusBarController?.onViewCreated()
205+
183206 binding.searchBar.setOnMenuItemClickListener {
184207 when (it.itemId) {
185208 R .id.add_place -> {
@@ -199,50 +222,8 @@ class MapFragment : Fragment() {
199222
200223 true
201224 }
202- }
203225
204- private suspend fun selectPlace (place : Place ? ) {
205- if (place != null ) {
206- getPlaceDetailsToolbar()
207- placeFragment.setPlace(place)
208- bottomSheetBehavior.state = BottomSheetBehavior .STATE_HALF_EXPANDED
209- } else {
210- bottomSheetBehavior.state = BottomSheetBehavior .STATE_HIDDEN
211- }
212- }
213-
214- override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
215- val merchantLayers = createMerchantLayers(
216- markerBackgroundColor = prefs.markerBackgroundColor(requireContext()),
217- markerBadgeBackgroundColor = prefs.badgeBackgroundColor(requireContext()),
218- markerBadgeTextColor = prefs.badgeTextColor(requireContext()),
219- usingOpenFreeMap = usingOpenFreeMap(),
220- )
221- val eventLayers = createEventLayers(
222- markerBackgroundColor = prefs.markerBackgroundColor(requireContext()),
223- usingOpenFreeMap = usingOpenFreeMap(),
224- )
225- val exchangeLayers = createExchangeLayers(
226- markerBackgroundColor = prefs.markerBackgroundColor(requireContext()),
227- markerBadgeBackgroundColor = prefs.badgeBackgroundColor(requireContext()),
228- markerBadgeTextColor = prefs.badgeTextColor(requireContext()),
229- usingOpenFreeMap = usingOpenFreeMap(),
230- )
231- merchantsSource = merchantLayers.first
232- eventsSource = eventLayers.first
233- exchangesSource = exchangeLayers.first
234- binding.map.getMapAsync { map ->
235- map.getStyle { style ->
236- style.addSource(merchantLayers.first)
237- merchantLayers.second.forEach { style.addLayer(it) }
238- style.addSource(eventLayers.first)
239- eventLayers.second.forEach { style.addLayer(it) }
240- style.addSource(exchangeLayers.first)
241- exchangeLayers.second.forEach { style.addLayer(it) }
242- }
243- }
244-
245- initSearchBar(binding)
226+ addMapDatSourceAndLayersAsync()
246227
247228 launchUpdateChecker()
248229
@@ -307,10 +288,6 @@ class MapFragment : Fragment() {
307288 }
308289 }
309290
310- bottomSheetBehavior = BottomSheetBehavior .from(binding.elementDetails)
311- bottomSheetBehavior.state = BottomSheetBehavior .STATE_HIDDEN
312- bottomSheetBehavior.addSlideCallback()
313-
314291 viewLifecycleOwner.lifecycleScope.launch {
315292 val elementDetailsToolbar = getPlaceDetailsToolbar() ? : return @launch
316293 bottomSheetBehavior.peekHeight = elementDetailsToolbar.height * 3
@@ -485,16 +462,44 @@ class MapFragment : Fragment() {
485462 }
486463 }
487464 }
465+ }
488466
489- // viewLifecycleOwner.lifecycleScope.launch {
490- // val merchants =
491- // withContext(Dispatchers.IO) { PlaceQueries.selectMerchants(db).toGeoJson() }
492- // merchantsSource.setGeoJson(merchants)
493- // }
467+ private fun addMapDatSourceAndLayersAsync () {
468+ val merchantLayers = createMerchantLayers(
469+ markerBackgroundColor = prefs.markerBackgroundColor(requireContext()),
470+ markerBadgeBackgroundColor = prefs.badgeBackgroundColor(requireContext()),
471+ markerBadgeTextColor = prefs.badgeTextColor(requireContext()),
472+ usingOpenFreeMap = usingOpenFreeMap(),
473+ )
474+ val eventLayers = createEventLayers(
475+ markerBackgroundColor = prefs.markerBackgroundColor(requireContext()),
476+ usingOpenFreeMap = usingOpenFreeMap(),
477+ )
478+ val exchangeLayers = createExchangeLayers(
479+ markerBackgroundColor = prefs.markerBackgroundColor(requireContext()),
480+ markerBadgeBackgroundColor = prefs.badgeBackgroundColor(requireContext()),
481+ markerBadgeTextColor = prefs.badgeTextColor(requireContext()),
482+ usingOpenFreeMap = usingOpenFreeMap(),
483+ )
484+ merchantsSource = merchantLayers.first
485+ eventsSource = eventLayers.first
486+ exchangesSource = exchangeLayers.first
487+ binding.map.getMapAsync { map ->
488+ map.getStyle { style ->
489+ style.addSource(merchantLayers.first)
490+ merchantLayers.second.forEach { style.addLayer(it) }
491+ style.addSource(eventLayers.first)
492+ eventLayers.second.forEach { style.addLayer(it) }
493+ style.addSource(exchangeLayers.first)
494+ exchangeLayers.second.forEach { style.addLayer(it) }
495+ }
496+ }
494497 }
495498
496499 override fun onDestroyView () {
497500 super .onDestroyView()
501+ statusBarController?.onDestroyView()
502+ statusBarController = null
498503 _binding = null
499504 }
500505
@@ -581,18 +586,13 @@ class MapFragment : Fragment() {
581586 private fun BottomSheetBehavior <* >.addSlideCallback () {
582587 addBottomSheetCallback(object : BottomSheetBehavior .BottomSheetCallback () {
583588 override fun onStateChanged (bottomSheet : View , newState : Int ) {
584- if (newState == BottomSheetBehavior .STATE_EXPANDED ) {
585- styleStatusBar()
586- }
587-
588589 if (newState == BottomSheetBehavior .STATE_HIDDEN ) {
589590 viewLifecycleOwner.lifecycleScope.launch { selectPlace(null ) }
590591 }
591592 }
592593
593594 override fun onSlide (bottomSheet : View , slideOffset : Float ) {
594595 placeFragment.onSlide(slideOffset)
595- styleStatusBar()
596596 }
597597 })
598598 }
@@ -615,42 +615,6 @@ class MapFragment : Fragment() {
615615 return placeFragment.requireView().findViewById(R .id.toolbar)!!
616616 }
617617
618- override fun onResume () {
619- super .onResume()
620- styleStatusBar()
621- }
622-
623- override fun onPause () {
624- super .onPause()
625- restoreDefaultStatusBar()
626- }
627-
628- fun styleStatusBar () {
629- val nightMode =
630- requireContext().resources.configuration.uiMode and Configuration .UI_MODE_NIGHT_MASK == Configuration .UI_MODE_NIGHT_YES
631-
632- if (bottomSheetBehavior.state == BottomSheetBehavior .STATE_EXPANDED ) {
633- insetsController?.isAppearanceLightStatusBars = ! nightMode
634- } else {
635- when (prefs.mapStyle) {
636- MapStyle .Auto -> {
637- insetsController?.isAppearanceLightStatusBars = ! nightMode
638- }
639-
640- MapStyle .Dark ,
641- MapStyle .CartoDarkMatter -> insetsController?.isAppearanceLightStatusBars = false
642-
643- else -> insetsController?.isAppearanceLightStatusBars = true
644- }
645- }
646- }
647-
648- fun restoreDefaultStatusBar () {
649- val nightMode =
650- requireContext().resources.configuration.uiMode and Configuration .UI_MODE_NIGHT_MASK == Configuration .UI_MODE_NIGHT_YES
651- insetsController?.isAppearanceLightStatusBars = ! nightMode
652- }
653-
654618 private fun List<Marker>.toGeoJson (): String {
655619 val sb = StringBuilder ()
656620 sb.append(
0 commit comments