From 76855f191ff728217619282e33737d397d2f23b5 Mon Sep 17 00:00:00 2001 From: bastien ollier Date: Sun, 9 Apr 2023 17:29:06 +0200 Subject: [PATCH] add button like mais crash car dans le thread principal --- app/src/main/java/fr/iut/mapping/MapFrag.kt | 59 ++++++++++++++++--- .../fr/iut/mapping/RestaurantViewModel.kt | 6 +- app/src/main/res/layout/fragment_map_page.xml | 45 +++++++++++--- 3 files changed, 93 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/fr/iut/mapping/MapFrag.kt b/app/src/main/java/fr/iut/mapping/MapFrag.kt index 79d21e1..712338c 100644 --- a/app/src/main/java/fr/iut/mapping/MapFrag.kt +++ b/app/src/main/java/fr/iut/mapping/MapFrag.kt @@ -5,10 +5,13 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.LinearLayout import android.widget.Toast import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.gson.JsonParser import com.mapbox.mapboxsdk.Mapbox @@ -22,6 +25,10 @@ import com.mapbox.mapboxsdk.utils.BitmapUtils import fr.iut.mapping.Model.RestaurantData import fr.iut.mapping.API.getRestaurants import kotlinx.android.synthetic.main.fragment_map_page.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class FirstFragment: Fragment(R.layout.fragment_map_page) { @@ -37,6 +44,8 @@ class FirstFragment: Fragment(R.layout.fragment_map_page) { private lateinit var locationListener: fr.iut.mapping.LocationListener private lateinit var listRestaurant: List + private lateinit var currentRestaurant: RestaurantData + private fun makeStyleUrl(): String { return getString(R.string.mapbox_style_url); } @@ -52,7 +61,7 @@ class FirstFragment: Fragment(R.layout.fragment_map_page) { val button: FloatingActionButton = rootView.findViewById(R.id.findRestaurant) button.setOnClickListener { - findAndPutRestaurant() + findAndPutRestaurant(rootView) } @@ -68,7 +77,7 @@ class FirstFragment: Fragment(R.layout.fragment_map_page) { return rootView } - private fun findAndPutRestaurant(){ + private fun findAndPutRestaurant(rootView: View){ if(locationListener.asPermission()){ Log.e("Debug","${locationListener.latitude},${locationListener.longitude}") listRestaurant = emptyList() @@ -96,13 +105,38 @@ class FirstFragment: Fragment(R.layout.fragment_map_page) { this.symbolManager?.iconIgnorePlacement = true listRestaurant.forEach { restaurant -> - val description = "${restaurant.adress}\n${restaurant.phone ?: "Pas de numéro disponible"}\n${restaurant.lat},${restaurant.lon}" - insertIconOnMap(LatLng(restaurant.lat, restaurant.lon), restaurant.name, description) + restaurant.adress?.let { + insertIconOnMap(LatLng(restaurant.lat, restaurant.lon), restaurant.name, + it,restaurant.phone ?: "Pas de numéro disponible") + } } this.symbolManager?.addClickListener { - titleView.text = it.data?.asJsonObject?.get("title")?.asString - descriptionView.text = it.data?.asJsonObject?.get("description")?.asString + val clickedData = it.data?.asJsonObject + titleView.text = clickedData?.get("title")?.asString + addressRestaurant.text = clickedData?.get("address")?.asString + telephoneRestaurant.text = clickedData?.get("phone")?.asString + GPSRestaurant.text = clickedData?.get("GPS")?.asString + + val button: Button = rootView.findViewById(R.id.addToFav) + button.setOnClickListener { + Log.d("debug button","click") + Log.d("debug button",clickedData.toString()) + val gps = (clickedData?.get("GPS")?.asString ?: "").split(",") + val lat = gps[0] + val lon = gps[1] + + val name = clickedData?.get("title")?.asString ?: "" + val address = clickedData?.get("address")?.asString ?: "" + val phone = clickedData?.get("phone")?.asString ?: "" + val restaurant = RestaurantData(lat.toDouble(), lon.toDouble(), name,address,phone) + + viewLifecycleOwner.lifecycleScope.launch { + withContext(Dispatchers.IO) { + restaurantViewModel.insert(restaurant) + } + } + } setSelectedIcon(it) toggleLayout() @@ -116,6 +150,10 @@ class FirstFragment: Fragment(R.layout.fragment_map_page) { } } + private val restaurantViewModel: RestaurantViewModel by viewModels { + RestaurantViewModelFactory((requireActivity().application as MappingApplication).repository) + } + private fun toggleLayout() { mapLayout?.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 2f) descriptionLayout?.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f) @@ -138,11 +176,16 @@ class FirstFragment: Fragment(R.layout.fragment_map_page) { this.lastSymbol = symbol } - private fun insertIconOnMap(point: LatLng, title: String, description: String) { + private fun insertIconOnMap(point: LatLng, title: String, address: String,phone: String) { + val lat = point.latitude + val lon = point.longitude + val jsonData = """ { "title" : "$title", - "description" : "$description" + "address" : "$address", + "phone" : "$phone", + "GPS": "$lat,$lon" } """ diff --git a/app/src/main/java/fr/iut/mapping/RestaurantViewModel.kt b/app/src/main/java/fr/iut/mapping/RestaurantViewModel.kt index 1bf1357..b359a5e 100644 --- a/app/src/main/java/fr/iut/mapping/RestaurantViewModel.kt +++ b/app/src/main/java/fr/iut/mapping/RestaurantViewModel.kt @@ -1,6 +1,7 @@ package fr.iut.mapping import androidx.lifecycle.* +import fr.iut.mapping.Model.RestaurantData import fr.iut.mapping.database.Entity.RestaurantEntity import fr.iut.mapping.database.RestaurantRepository import kotlinx.coroutines.launch @@ -8,8 +9,9 @@ import kotlinx.coroutines.launch class RestaurantViewModel(private val repository: RestaurantRepository): ViewModel() { val restaurantLikes: LiveData> = repository.restaurantLikes.asLiveData() - fun insert(restaurant: RestaurantEntity) = viewModelScope.launch { - repository.insert(restaurant) + fun insert(restaurant: RestaurantData) = viewModelScope.launch { + val resto = RestaurantEntity(0,restaurant.lat,restaurant.lon,restaurant.name,restaurant.phone,restaurant.adress) + repository.insert(resto) } } diff --git a/app/src/main/res/layout/fragment_map_page.xml b/app/src/main/res/layout/fragment_map_page.xml index b7afeea..c42c9cd 100644 --- a/app/src/main/res/layout/fragment_map_page.xml +++ b/app/src/main/res/layout/fragment_map_page.xml @@ -55,31 +55,62 @@ android:layout_height="0dp" android:layout_weight="0" android:orientation="vertical" - android:weightSum="3"> + android:weightSum="5"> + + + + +