diff --git a/app/src/main/java/uca/baptistearthur/geocaching/network/AddressNetwork.kt b/app/src/main/java/uca/baptistearthur/geocaching/network/AddressNetwork.kt index 931cd36..4fcb57a 100644 --- a/app/src/main/java/uca/baptistearthur/geocaching/network/AddressNetwork.kt +++ b/app/src/main/java/uca/baptistearthur/geocaching/network/AddressNetwork.kt @@ -1,6 +1,7 @@ package uca.baptistearthur.geocaching.network import com.google.gson.GsonBuilder +import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Converter @@ -11,33 +12,53 @@ import java.lang.reflect.Type object AddressNetwork { - private val base_url = "https://forward-reverse-geocoding.p.rapidapi.com/v1/reverse/" - private val key = "19516a9900mshce10de76f99976bp10f192jsn8c8d82222baa" - private val interceptor = HttpLoggingInterceptor().apply { - level = HttpLoggingInterceptor.Level.BODY + private val API_Info = object { + val base_url = "https://forward-reverse-geocoding.p.rapidapi.com/v1/reverse/" + val key = "19516a9900mshce10de76f99976bp10f192jsn8c8d82222baa" + } + + private val rateLimiter = object { + val maxRequestsPerSecond = 2 + val intervalInMillis = (1000.0 / maxRequestsPerSecond).toLong() + var lastRequestTime: Long = 0 + } + + val rateLimitInterceptor = Interceptor { chain -> + val now = System.currentTimeMillis() + val elapsed = now - rateLimiter.lastRequestTime + if (elapsed < rateLimiter.intervalInMillis) { + Thread.sleep(rateLimiter.intervalInMillis - elapsed) } + rateLimiter.lastRequestTime = System.currentTimeMillis() - private val gson = GsonBuilder().apply { - registerTypeAdapter(Address::class.java, AddressDeserializer()) - }.create() - - private val client = OkHttpClient.Builder() - .addInterceptor { chain -> - val request = chain.request().newBuilder() - .addHeader("X-RapidAPI-Key", key) - .build() - chain.proceed(request) - } - .addInterceptor(interceptor) - .build() + chain.proceed(chain.request()) + } + private val interceptor = HttpLoggingInterceptor().apply { + level = HttpLoggingInterceptor.Level.BODY + } + + private val gson = GsonBuilder().apply { + registerTypeAdapter(Address::class.java, AddressDeserializer()) + }.create() - val retrofit: AddressAPI by lazy { - Retrofit.Builder() - .baseUrl(base_url) - .client(client) - .addConverterFactory(GsonConverterFactory.create(gson)) + private val client = OkHttpClient.Builder() + .addInterceptor { chain -> + val request = chain.request().newBuilder() + .addHeader("X-RapidAPI-Key", API_Info.key) .build() - .create(AddressAPI::class.java) + chain.proceed(request) } + .addInterceptor(interceptor) + .addInterceptor(rateLimitInterceptor) + .build() + + val retrofit: AddressAPI by lazy { + Retrofit.Builder() + .baseUrl(API_Info.base_url) + .client(client) + .addConverterFactory(GsonConverterFactory.create(gson)) + .build() + .create(AddressAPI::class.java) } +} diff --git a/app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/AddMarkerOverlay.kt b/app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/AddMarkerOverlay.kt index 131800a..39b683e 100644 --- a/app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/AddMarkerOverlay.kt +++ b/app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/AddMarkerOverlay.kt @@ -57,7 +57,7 @@ class AddMarkerOverlay(val roadManager: RoadManager) : Overlay() { } fun computeRoad(mapView: MapView) { - mapView.overlays.remove(mapView.overlays.find { it is Polyline}) + mapView.overlays.removeAll{ it is Polyline } if (locations.size > 1) { CoroutineScope(Dispatchers.IO).launch { val road = roadManager.getRoad(ArrayList(locations.map{it.position})) @@ -78,7 +78,7 @@ class AddMarkerOverlay(val roadManager: RoadManager) : Overlay() { }else{ Log.d("GeoRoad", "TRY DELETE ROADTRIP OVERLAY" + locations.size) Log.d("GeoRoad", ""+mapView.overlays.size) - mapView.overlays.remove(mapView.overlays.find { it is NewRoadtripOverlay}) + mapView.overlays.removeAll{ it is NewRoadtripOverlay } newRoadtripOverlayVisible=false } } diff --git a/app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/NewRoadtripOverlay.kt b/app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/NewRoadtripOverlay.kt index 38bb090..b170309 100644 --- a/app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/NewRoadtripOverlay.kt +++ b/app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/NewRoadtripOverlay.kt @@ -1,11 +1,11 @@ package uca.baptistearthur.geocaching.ui.overlay import android.app.AlertDialog -import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.RectF +import android.provider.Settings.System.getString import android.text.InputFilter import android.util.Log import android.view.MotionEvent @@ -15,18 +15,17 @@ import androidx.core.content.ContextCompat import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import org.osmdroid.util.GeoPoint import org.osmdroid.views.MapView import org.osmdroid.views.overlay.Overlay +import org.osmdroid.views.overlay.Polyline import uca.baptistearthur.geocaching.R -import uca.baptistearthur.geocaching.model.Address import uca.baptistearthur.geocaching.model.Place import uca.baptistearthur.geocaching.model.RoadTripEntity import java.util.* -class NewRoadtripOverlay(val points: Collection) : Overlay() { +class NewRoadtripOverlay(val points: MutableCollection) : Overlay() { private var circleRectF=RectF() @@ -62,7 +61,7 @@ class NewRoadtripOverlay(val points: Collection) : Overlay() { override fun onSingleTapConfirmed(e: MotionEvent?, mapView: MapView?) = if (e != null && circleRectF.contains(e.x, e.y)) { mapView?.let{ - createDialog(it.context) + createDialog(it) } Log.d("GeoRoad", "CONFIRM : "+points.size) true @@ -70,7 +69,12 @@ class NewRoadtripOverlay(val points: Collection) : Overlay() { false } - private fun createDialog(context: Context){ + private fun clearMap(mapView: MapView){ + mapView.overlays.removeAll { it is PlaceMarker || it is Polyline || it is NewRoadtripOverlay } + } + + private fun createDialog(mapView: MapView){ + val context = mapView.context val input = EditText(context) input.filters = arrayOf(InputFilter.LengthFilter(50)) @@ -86,14 +90,21 @@ class NewRoadtripOverlay(val points: Collection) : Overlay() { it.initAddress() Log.d("GeoMap", it.address.displayName) } + val newRoadTrip = RoadTripEntity( + id = 0, // auto-generated ID + name = input.text.toString(), + date = Date(), + places = places + ) + // TODO: Persister le RoadTrip + Toast.makeText( + context, + R.string.roadtripAdded, + Toast.LENGTH_SHORT + ).show() + points.clear() } - val newRoadTrip = RoadTripEntity( - id = 0, // auto-generated ID - name = input.text.toString(), - date = Date(), - places = places - ) - // TODO: Persister le RoadTrip + clearMap(mapView) } else { Toast.makeText( diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index fa7d961..ad321dc 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -10,4 +10,5 @@ Annuler Le texte ne peux pas ĂȘtre vide Entrez le nom de votre voyage + Roadtrip ajoutĂ© \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b8311bf..933f6af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,4 +10,5 @@ Cancel The text cannot be empty Enter the name of your travel + Roadtrip added \ No newline at end of file