This commit is contained in:
johan12345
2021-03-28 23:01:26 +02:00
parent 62e9acf9be
commit 4ca9cc68cb
4 changed files with 74 additions and 1 deletions

View File

@@ -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()
}
}
}

View File

@@ -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<ChargeLocation> {
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() {

View File

@@ -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<ChargepointList> {
override fun onFailure(call: Call<ChargepointList>, t: Throwable) {
chargerSparse.value = null
chargerDetails.value = Resource.error(t.message, null)
t.printStackTrace()
}
override fun onResponse(
call: Call<ChargepointList>,
response: Response<ChargepointList>
) {
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
}
}
})
}
}