feat(location): implement location search provider toggle
Add config properties for locationSearchProvider (osm/google_maps) and googleMapsApiKey to BetterLocationConfig. Modify ChooseLocationDialog to switch between OpenStreetMap (MAPNIK) and Google Maps tile sources based on user preference. - Add locationSearchProvider unique config property - Add googleMapsApiKey string config property (SENSITIVE flag) - Add XYTileSource for Google Maps tiles in AlertDialogs - Pass locationSearchProvider from BetterLocationRoot to dialog Translation keys already existed in all 28 language files.
This commit is contained in:
@@ -337,9 +337,15 @@ class BetterLocationRoot : Routes.Route() {
|
|||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
Box(modifier = Modifier.background(PurrfectPalette.cardOverlay)) {
|
Box(modifier = Modifier.background(PurrfectPalette.cardOverlay)) {
|
||||||
alertDialogs.ChooseLocationDialog(property = coordinatesProperty, marker, mapView, saveCoordinates = {
|
alertDialogs.ChooseLocationDialog(
|
||||||
addSavedCoordinateDialog = true
|
property = coordinatesProperty,
|
||||||
}) {
|
marker = marker,
|
||||||
|
mapView = mapView,
|
||||||
|
locationSearchProvider = context.config.root.global.betterLocation.locationSearchProvider.get(),
|
||||||
|
saveCoordinates = {
|
||||||
|
addSavedCoordinateDialog = true
|
||||||
|
}
|
||||||
|
) {
|
||||||
showMap = false
|
showMap = false
|
||||||
context.config.writeConfig()
|
context.config.writeConfig()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ import okhttp3.OkHttpClient
|
|||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import org.osmdroid.config.Configuration
|
import org.osmdroid.config.Configuration
|
||||||
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
|
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
|
||||||
|
import org.osmdroid.tileprovider.tilesource.XYTileSource
|
||||||
import org.osmdroid.util.GeoPoint
|
import org.osmdroid.util.GeoPoint
|
||||||
import org.osmdroid.views.CustomZoomButtonsController
|
import org.osmdroid.views.CustomZoomButtonsController
|
||||||
import org.osmdroid.views.MapView
|
import org.osmdroid.views.MapView
|
||||||
@@ -592,6 +593,7 @@ class AlertDialogs(
|
|||||||
property: PropertyPair<*>,
|
property: PropertyPair<*>,
|
||||||
marker: MutableState<Marker?> = remember { mutableStateOf(null) },
|
marker: MutableState<Marker?> = remember { mutableStateOf(null) },
|
||||||
mapView: MutableState<MapView?> = remember { mutableStateOf(null) },
|
mapView: MutableState<MapView?> = remember { mutableStateOf(null) },
|
||||||
|
locationSearchProvider: String = "osm",
|
||||||
saveCoordinates: (() -> Unit)? = null,
|
saveCoordinates: (() -> Unit)? = null,
|
||||||
dismiss: () -> Unit = {}
|
dismiss: () -> Unit = {}
|
||||||
) {
|
) {
|
||||||
@@ -611,7 +613,16 @@ class AlertDialogs(
|
|||||||
MapView(context).apply {
|
MapView(context).apply {
|
||||||
setMultiTouchControls(true)
|
setMultiTouchControls(true)
|
||||||
zoomController.setVisibility(CustomZoomButtonsController.Visibility.NEVER)
|
zoomController.setVisibility(CustomZoomButtonsController.Visibility.NEVER)
|
||||||
setTileSource(TileSourceFactory.MAPNIK)
|
val tileSource = if (locationSearchProvider == "google_maps") {
|
||||||
|
XYTileSource(
|
||||||
|
"GoogleMaps",
|
||||||
|
0, 19, 256, ".png",
|
||||||
|
arrayOf("https://mt0.google.com/vt/lyrs=m&x=", "https://mt1.google.com/vt/lyrs=m&x=")
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
TileSourceFactory.MAPNIK
|
||||||
|
}
|
||||||
|
setTileSource(tileSource)
|
||||||
|
|
||||||
val startPoint = GeoPoint(coordinates.first, coordinates.second)
|
val startPoint = GeoPoint(coordinates.first, coordinates.second)
|
||||||
controller.setZoom(10.0)
|
controller.setZoom(10.0)
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ class Global : ConfigContainer() {
|
|||||||
val spoofBatteryLevel = string("spoof_battery_level") { requireRestart(); inputCheck = { it.isEmpty() || it.toIntOrNull() in 0..100 } }
|
val spoofBatteryLevel = string("spoof_battery_level") { requireRestart(); inputCheck = { it.isEmpty() || it.toIntOrNull() in 0..100 } }
|
||||||
val spoofHeadphones = boolean("spoof_headphones") { requireRestart() }
|
val spoofHeadphones = boolean("spoof_headphones") { requireRestart() }
|
||||||
val showBatteryLevel = boolean("show_battery_level") { requireRestart() }
|
val showBatteryLevel = boolean("show_battery_level") { requireRestart() }
|
||||||
|
val locationSearchProvider = unique("location_search_provider", "osm", "google_maps")
|
||||||
|
val googleMapsApiKey = string("google_maps_api_key") { addFlags(ConfigFlag.SENSITIVE) }
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class MediaUploadQualityConfig : ConfigContainer() {
|
inner class MediaUploadQualityConfig : ConfigContainer() {
|
||||||
|
|||||||
Reference in New Issue
Block a user