From 7c29b619a5fcdda18e230695dac77982a75d7e2b Mon Sep 17 00:00:00 2001 From: Johan von Forstner Date: Sun, 9 Aug 2020 13:09:48 +0200 Subject: [PATCH] implement switching between map providers in settings Google Maps and Mapbox --- app/build.gradle | 4 +-- app/src/foss/res/values-de/values.xml | 6 ++++ app/src/foss/res/values/values.xml | 10 +++++++ app/src/google/res/values-de/values.xml | 7 +++++ app/src/google/res/values/values.xml | 12 ++++++++ .../vonforst/evmap/fragment/MapFragment.kt | 30 +++++++++++++++---- .../evmap/storage/PreferenceDataSource.kt | 9 +++++- app/src/main/res/layout/fragment_map.xml | 3 +- app/src/main/res/values-de/strings.xml | 3 ++ app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/xml/settings.xml | 27 ++++++++++++----- 11 files changed, 96 insertions(+), 18 deletions(-) create mode 100644 app/src/foss/res/values-de/values.xml create mode 100644 app/src/foss/res/values/values.xml create mode 100644 app/src/google/res/values-de/values.xml create mode 100644 app/src/google/res/values/values.xml diff --git a/app/build.gradle b/app/build.gradle index 94bacbdd..a2e8288d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,10 +116,10 @@ dependencies { implementation 'com.mapzen.android:lost:3.0.2' // AnyMaps - def anyMapsVersion = '3298564e93' + def anyMapsVersion = 'cc613d7a29' implementation "com.github.johan12345.AnyMaps:anymaps-base:$anyMapsVersion" googleImplementation "com.github.johan12345.AnyMaps:anymaps-google:$anyMapsVersion" - fossImplementation "com.github.johan12345.AnyMaps:anymaps-mapbox:$anyMapsVersion" + implementation "com.github.johan12345.AnyMaps:anymaps-mapbox:$anyMapsVersion" // Google Maps v3 Beta googleImplementation 'com.google.android.libraries.maps:maps:3.1.0-beta' diff --git a/app/src/foss/res/values-de/values.xml b/app/src/foss/res/values-de/values.xml new file mode 100644 index 00000000..a0303520 --- /dev/null +++ b/app/src/foss/res/values-de/values.xml @@ -0,0 +1,6 @@ + + + + OpenStreetMap (Mapbox) + + \ No newline at end of file diff --git a/app/src/foss/res/values/values.xml b/app/src/foss/res/values/values.xml new file mode 100644 index 00000000..aa21f60e --- /dev/null +++ b/app/src/foss/res/values/values.xml @@ -0,0 +1,10 @@ + + + + OpenStreetMap (Mapbox) + + + mapbox + + mapbox + \ No newline at end of file diff --git a/app/src/google/res/values-de/values.xml b/app/src/google/res/values-de/values.xml new file mode 100644 index 00000000..615a802a --- /dev/null +++ b/app/src/google/res/values-de/values.xml @@ -0,0 +1,7 @@ + + + + Google Maps + OpenStreetMap (Mapbox) + + \ No newline at end of file diff --git a/app/src/google/res/values/values.xml b/app/src/google/res/values/values.xml new file mode 100644 index 00000000..4a0c75b1 --- /dev/null +++ b/app/src/google/res/values/values.xml @@ -0,0 +1,12 @@ + + + + Google Maps + OpenStreetMap (Mapbox) + + + google + mapbox + + mapbox + \ No newline at end of file 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 bc747904..6d04d3b5 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt @@ -61,6 +61,7 @@ import net.vonforst.evmap.api.goingelectric.ChargepointListItem import net.vonforst.evmap.autocomplete.handleAutocompleteResult import net.vonforst.evmap.autocomplete.launchAutocomplete import net.vonforst.evmap.databinding.FragmentMapBinding +import net.vonforst.evmap.storage.PreferenceDataSource import net.vonforst.evmap.ui.ChargerIconGenerator import net.vonforst.evmap.ui.ClusterIconGenerator import net.vonforst.evmap.ui.MarkerAnimator @@ -84,6 +85,7 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac } }) private val galleryVm: GalleryViewModel by activityViewModels() + private lateinit var mapFragment: MapFragment private var map: AnyMap? = null private lateinit var locationClient: LostApiClient private lateinit var bottomSheetBehavior: BottomSheetBehaviorGoogleMapsLike @@ -117,10 +119,6 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac } } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -130,6 +128,29 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac binding.lifecycleOwner = this binding.vm = vm + mapFragment = MapFragment() + val provider = PreferenceDataSource(requireContext()).mapProvider + mapFragment.setPriority( + arrayOf( + when (provider) { + "mapbox" -> MapFragment.MAPBOX + "google" -> MapFragment.GOOGLE + else -> null + } + ) + ) + requireActivity().supportFragmentManager + .beginTransaction() + .replace(R.id.map, mapFragment) + .commit() + + // reset map-related stuff (map provider may have changed) + map = null + markers.clear() + clusterMarkers = emptyList() + searchResultMarker = null + + locationClient = LostApiClient.Builder(requireContext()) .addConnectionCallbacks(this) .build() @@ -159,7 +180,6 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - val mapFragment = childFragmentManager.findFragmentById(R.id.map) as MapFragment mapFragment.getMapAsync(this) bottomSheetBehavior = BottomSheetBehaviorGoogleMapsLike.from(binding.bottomSheet) detailAppBarBehavior = MergedAppBarLayoutBehavior.from(binding.detailAppBar) diff --git a/app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt b/app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt index 6c560599..375e089b 100644 --- a/app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt +++ b/app/src/main/java/net/vonforst/evmap/storage/PreferenceDataSource.kt @@ -2,9 +2,10 @@ package net.vonforst.evmap.storage import android.content.Context import androidx.preference.PreferenceManager +import net.vonforst.evmap.R import java.time.Instant -class PreferenceDataSource(context: Context) { +class PreferenceDataSource(val context: Context) { val sp = PreferenceManager.getDefaultSharedPreferences(context) var navigateUseMaps: Boolean @@ -42,4 +43,10 @@ class PreferenceDataSource(context: Context) { val darkmode: String get() = sp.getString("darkmode", "default")!! + + val mapProvider: String + get() = sp.getString( + "map_provider", + context.getString(R.string.pref_map_provider_default) + )!! } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_map.xml b/app/src/main/res/layout/fragment_map.xml index 20f03c91..933b6273 100644 --- a/app/src/main/res/layout/fragment_map.xml +++ b/app/src/main/res/layout/fragment_map.xml @@ -19,9 +19,8 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 5549f7bc..38127715 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -34,6 +34,8 @@ Quellcode Open Source-Lizenzen Einstellungen + Oberfläche + Karte Copyright ©2020 Johan von Forstner Sonstiges @@ -101,6 +103,7 @@ Ladesäulen mit Störung ausschließen Ladetarife und %d weitere + Kartenanbieter %d kompatibler Ladetarif %d kompatible Ladetarife diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0688c242..cb9ff968 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -33,6 +33,8 @@ Source code Open Source Licenses Settings + User Interface + Map Copyright ©2020 Johan von Forstner Other @@ -100,6 +102,7 @@ Exclude chargers with reported faults Payment methods and %d others + Map provider %d compatible payment method %d compatible payment methods diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index ea0a28ee..83e5038f 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -1,14 +1,7 @@ - - - + + + + + + + + \ No newline at end of file