diff --git a/app/src/main/java/fr/iut/mapping/API/Restaurants.kt b/app/src/main/java/fr/iut/mapping/API/Restaurants.kt index e003340..4518b42 100644 --- a/app/src/main/java/fr/iut/mapping/API/Restaurants.kt +++ b/app/src/main/java/fr/iut/mapping/API/Restaurants.kt @@ -14,6 +14,8 @@ fun getRestaurants(lat: Double, lon: Double, radius: Int): List try { val response = apiInterface.getRestaurants(lat, lon, radius) + Log.e("Debug", "${lat},${lon}") + Log.e("Debug", response.toString()) response.results.forEach { listRestaurant += RestaurantData(it.position.lat,it.position.lon,it.poi.name,it.poi.phone,it.address.freeformAddress) } diff --git a/app/src/main/java/fr/iut/mapping/LocationListener.kt b/app/src/main/java/fr/iut/mapping/LocationListener.kt new file mode 100644 index 0000000..3a9552a --- /dev/null +++ b/app/src/main/java/fr/iut/mapping/LocationListener.kt @@ -0,0 +1,56 @@ +package fr.iut.mapping + +import android.Manifest +import android.content.Context +import android.content.pm.PackageManager +import android.location.Location +import android.location.LocationListener +import android.location.LocationManager +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat + + +class LocationListener(private val context: Context) : LocationListener { + + var latitude: Double = 0.0 + get() = field + var longitude: Double = 0.0 + get() = field + + private val locationManager: LocationManager = + context.getSystemService(Context.LOCATION_SERVICE) as LocationManager + + companion object { + const val permission = Manifest.permission.ACCESS_FINE_LOCATION + } + + override fun onLocationChanged(location: Location) { + latitude = location.latitude + longitude = location.longitude + } + + override fun onProviderEnabled(provider: String) {} + + override fun onProviderDisabled(provider: String) {} + + override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {} + + fun start() { + if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED + ) { + locationManager.requestLocationUpdates( + LocationManager.GPS_PROVIDER, + 0L, + 0f, + this + ) + } + } + + fun stop() { + locationManager.removeUpdates(this) + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/iut/mapping/MainActivity.kt b/app/src/main/java/fr/iut/mapping/MainActivity.kt index 85a29af..823172d 100644 --- a/app/src/main/java/fr/iut/mapping/MainActivity.kt +++ b/app/src/main/java/fr/iut/mapping/MainActivity.kt @@ -3,7 +3,6 @@ package fr.iut.mapping import android.Manifest.permission.ACCESS_COARSE_LOCATION import android.Manifest.permission.ACCESS_FINE_LOCATION -import android.location.Location import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle diff --git a/app/src/main/java/fr/iut/mapping/MapPage.kt b/app/src/main/java/fr/iut/mapping/MapPage.kt index 0470901..27ef80f 100644 --- a/app/src/main/java/fr/iut/mapping/MapPage.kt +++ b/app/src/main/java/fr/iut/mapping/MapPage.kt @@ -9,6 +9,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.LinearLayout +import android.widget.Toast import androidx.annotation.RequiresApi import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat @@ -21,13 +22,14 @@ import com.mapbox.mapboxsdk.plugins.annotation.Symbol import com.mapbox.mapboxsdk.plugins.annotation.SymbolManager import com.mapbox.mapboxsdk.plugins.annotation.SymbolOptions import com.mapbox.mapboxsdk.utils.BitmapUtils +import fr.iut.mapping.API.RestaurantData import fr.iut.mapping.API.getRestaurants import kotlinx.android.synthetic.main.fragment_map_page.* import kotlinx.coroutines.runBlocking //https://maplibre.org/maplibre-gl-native/android/api/index.html -class FirstFragment: Fragment(R.layout.fragment_map_page), LocationListener { +class FirstFragment: Fragment(R.layout.fragment_map_page) { companion object { private const val MARKER_SELECTED_ICON = "JAWG_ICON" private const val MARKER_ICON = "MARKER_ICON" @@ -37,6 +39,9 @@ class FirstFragment: Fragment(R.layout.fragment_map_page), LocationListener { private var symbolManager: SymbolManager? = null private var lastSymbol: Symbol? = null + private lateinit var locationListener: fr.iut.mapping.LocationListener + private lateinit var listRestaurant: List + private fun makeStyleUrl(): String { return "${getString(R.string.mapbox_style_url)}"; } @@ -45,14 +50,40 @@ class FirstFragment: Fragment(R.layout.fragment_map_page), LocationListener { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreate(savedInstanceState) - val list = getRestaurants(51.5,-0.11,1000) + locationListener = LocationListener(requireContext()) + locationListener.start() + Mapbox.getInstance(requireContext(), R.string.mapbox_access_token.toString()) val rootView = inflater.inflate(R.layout.fragment_map_page, container, false) + val button: View = rootView.findViewById(R.id.findRestaurant) + button.setOnClickListener { view -> + findAndPutRestaurant() + } + mapView = rootView.findViewById(R.id.mapView) mapView?.onCreate(savedInstanceState) + + mapView?.getMapAsync { map -> + map.setStyle(makeStyleUrl()) { style -> + map.uiSettings.setAttributionMargins(15, 0, 0, 15) + } + } + + return rootView + } + + private fun findAndPutRestaurant(){ + Log.e("Debug","${locationListener.latitude},${locationListener.latitude}") + listRestaurant = getRestaurants(locationListener.latitude,locationListener.latitude,1000000) + + if(listRestaurant.isEmpty()){ + Toast.makeText(requireContext(), "Pas de restaurants trouver", Toast.LENGTH_SHORT).show() + + } + mapView?.getMapAsync { map -> map.setStyle(makeStyleUrl()) { style -> map.uiSettings.setAttributionMargins(15, 0, 0, 15) @@ -67,12 +98,11 @@ class FirstFragment: Fragment(R.layout.fragment_map_page), LocationListener { this.symbolManager?.iconAllowOverlap = true this.symbolManager?.iconIgnorePlacement = true - list.forEach { restaurant -> - val description = "${restaurant.adress}\n${restaurant.phone ?: "Pas de numéro disponible"}\n${restaurant.lat},${restaurant.lon}" + listRestaurant.forEach { restaurant -> + val description = "${restaurant.adress}${restaurant.phone ?: "Pas de numéro disponible"}\n${restaurant.lat},${restaurant.lon}" insertIconOnMap( LatLng(restaurant.lat, restaurant.lon), restaurant.name, - R.drawable.ic_menu_likes, description ) } @@ -99,7 +129,6 @@ class FirstFragment: Fragment(R.layout.fragment_map_page), LocationListener { } } - return rootView } private fun toggleLayout() { @@ -124,7 +153,7 @@ class FirstFragment: Fragment(R.layout.fragment_map_page), LocationListener { this.lastSymbol = symbol } - private fun insertIconOnMap(point: LatLng, title: String, imageId: Int, description: String) { + private fun insertIconOnMap(point: LatLng, title: String, description: String) { Log.e("Debug",title) // Convert datas of the marker into Json object. val jsonData = """ @@ -169,11 +198,8 @@ class FirstFragment: Fragment(R.layout.fragment_map_page), LocationListener { override fun onDestroy() { super.onDestroy() mapView?.onDestroy() + locationListener.stop() } - //methode pour le GPS - override fun onLocationChanged(location: Location) { - print("Latitude: " + location.latitude + " , Longitude: " + location.longitude) - } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_map_page.xml b/app/src/main/res/layout/fragment_map_page.xml index 4d78f73..ccbe67e 100644 --- a/app/src/main/res/layout/fragment_map_page.xml +++ b/app/src/main/res/layout/fragment_map_page.xml @@ -2,63 +2,84 @@ + xmlns:mapbox="http://schemas.android.com/apk/res-auto" + xmlns:app="http://schemas.android.com/tools" + app:ignore="NamespaceTypo"> + android:weightSum="3" + app:layout_editor_absoluteX="88dp" + app:layout_editor_absoluteY="-76dp"> - - - + - + - + - - - + + + + + + + + android:layout_weight="0" + android:orientation="vertical" + android:weightSum="3"> + + + + + + + \ No newline at end of file