diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index dd22a7ae..0389ac06 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -43,6 +43,16 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/java/net/vonforst/evmap/MapsActivity.kt b/app/src/main/java/net/vonforst/evmap/MapsActivity.kt
index 0b846f43..72cb1ad7 100644
--- a/app/src/main/java/net/vonforst/evmap/MapsActivity.kt
+++ b/app/src/main/java/net/vonforst/evmap/MapsActivity.kt
@@ -82,6 +82,16 @@ class MapsActivity : AppCompatActivity() {
deepLink.send()
}
}
+ } else if (intent?.scheme == "https" && intent?.data?.host == "www.goingelectric.de") {
+ val id = intent.data?.pathSegments?.last()?.toLongOrNull()
+ if (id != null) {
+ val deepLink = navController.createDeepLink()
+ .setGraph(R.navigation.nav_graph)
+ .setDestination(R.id.map)
+ .setArguments(MapFragment.showChargerById(id))
+ .createPendingIntent()
+ deepLink.send()
+ }
}
}
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 a66499cd..9b20eafe 100644
--- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt
+++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt
@@ -743,19 +743,38 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac
val position = vm.mapPosition.value
val lat = arguments?.optDouble(ARG_LAT)
val lon = arguments?.optDouble(ARG_LON)
+ val chargerId = arguments?.optLong(ARG_CHARGER_ID)
+
var positionSet = false
if (position != null) {
val cameraUpdate =
map.cameraUpdateFactory.newLatLngZoom(position.bounds.center, position.zoom)
map.moveCamera(cameraUpdate)
+ positionSet = true
+ } else if (chargerId != null && (lat == null || lon == null)) {
+ // show given charger ID
+ vm.loadChargerById(chargerId)
+ vm.chargerSparse.observe(
+ viewLifecycleOwner,
+ object : Observer {
+ override fun onChanged(item: ChargeLocation?) {
+ if (item?.id == chargerId) {
+ val cameraUpdate = map.cameraUpdateFactory.newLatLngZoom(
+ LatLng(item.coordinates.lat, item.coordinates.lng), 16f
+ )
+ map.moveCamera(cameraUpdate)
+ vm.chargerSparse.removeObserver(this)
+ }
+ }
+ })
+
positionSet = true
} else if (lat != null && lon != null) {
// show given position
val cameraUpdate = map.cameraUpdateFactory.newLatLngZoom(LatLng(lat, lon), 16f)
map.moveCamera(cameraUpdate)
- val chargerId = arguments?.optLong(ARG_CHARGER_ID)
if (chargerId != null) {
// show charger detail after chargers were loaded
vm.chargepoints.observe(
@@ -1097,6 +1116,12 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac
putDouble(ARG_LON, lon)
}
}
+
+ fun showChargerById(id: Long): Bundle? {
+ return Bundle().apply {
+ putLong(ARG_CHARGER_ID, id)
+ }
+ }
}
override fun onConnected() {
diff --git a/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt b/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt
index 6aef1df7..d0b93c67 100644
--- a/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt
+++ b/app/src/main/java/net/vonforst/evmap/viewmodel/MapViewModel.kt
@@ -442,4 +442,32 @@ class MapViewModel(application: Application, geApiKey: String) : AndroidViewMode
}
})
}
+
+ fun loadChargerById(chargerId: Long) {
+ chargerDetails.value = Resource.loading(null)
+ chargerSparse.value = null
+ api.getChargepointDetail(chargerId).enqueue(object :
+ Callback {
+ override fun onFailure(call: Call, t: Throwable) {
+ chargerSparse.value = null
+ chargerDetails.value = Resource.error(t.message, null)
+ t.printStackTrace()
+ }
+
+ override fun onResponse(
+ call: Call,
+ response: Response
+ ) {
+ if (!response.isSuccessful || response.body()!!.status != "ok") {
+ chargerDetails.value = Resource.error(response.message(), null)
+ chargerSparse.value = null
+ } else {
+ val charger = response.body()!!.chargelocations[0] as ChargeLocation
+ chargerDetails.value =
+ Resource.success(charger)
+ chargerSparse.value = charger
+ }
+ }
+ })
+ }
}
\ No newline at end of file