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