fixing bugs and adding toasts for more informations

master
Baptiiiiste 2 years ago
parent 3552beba2f
commit fa2a580c63

@ -44,7 +44,7 @@ class Converters {
fun Date.toFrenchFormat(): String {
val day: String = if(this.date < 10) "0${this.date}" else "${this.date}"
val month: String = if(this.month < 10) "0${this.month}" else "${this.month}"
val month: String = if(this.month < 10) "0${this.month+1}" else "${this.month+1}"
val year = "${this.year + 1900}"
val hours: String = if(this.hours < 10) "0${this.hours}" else "${this.hours}"
val minutes: String = if(this.minutes < 10) "0${this.minutes}" else "${this.minutes}"

@ -17,8 +17,8 @@ class PlacesAdapter (val places: List<Place>) : RecyclerView.Adapter<PlacesViewH
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: PlacesViewHolder, position: Int) {
holder.placeAddress.text = places[position].address.displayName
holder.placeCoordinates.text = "(${places[position].longitude}, ${places[position].latitude}), ${places[position].address.country}"
holder.placeAddress.text = "${places[position].address.displayName}, ${places[position].address.country}"
holder.placeCoordinates.text = "(${places[position].longitude}, ${places[position].latitude})"
}
override fun getItemCount(): Int = places.size

@ -17,7 +17,8 @@ class RoadTripAdapter(val voyages: List<RoadTripEntity>, val navController: NavC
@SuppressLint("SetTextI18n", "ClickableViewAccessibility")
override fun onBindViewHolder(holder: RoadTripViewHolder, position: Int) {
holder.roadTripAccessButton.text = "> " + voyages[position].name
holder.roadTripAccessButton.text = "> " + if (voyages[position].name.length > 20) voyages[position].name.substring(0, 20) + "..." else voyages[position].name
holder.clickedRoadTrip = voyages[position]
}
override fun getItemCount(): Int = voyages.size

@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
@ -25,19 +26,20 @@ class RoadTripFragment : Fragment() {
RoadTripViewModelFactory((requireActivity().application as RTApplication).db.roadTripDAO())
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
roadTripViewModel.insertRoadTrip(RoadTripEntity(0, "Test", Date(),
listOf(Place(0.15, 45.2)) as MutableList<Place>
))
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_roadtrip, container, false)
roadTripRecyclerView = view?.findViewById(R.id.recyclerViewRoadTripList)
roadTripViewModel.getAllRoadTrips().observe(viewLifecycleOwner, { roadTrips ->
roadTripRecyclerView?.adapter = RoadTripAdapter(roadTrips, findNavController())
if(roadTrips.isEmpty()){
Toast.makeText(
context,
R.string.noRoadTripFound,
Toast.LENGTH_SHORT
).show()
}else roadTripRecyclerView?.adapter = RoadTripAdapter(roadTrips, findNavController())
})
roadTripRecyclerView?.layoutManager = LinearLayoutManager(context)

@ -10,6 +10,7 @@ import androidx.fragment.app.Fragment
import android.util.Log
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.fragment.app.viewModels
import androidx.navigation.findNavController
@ -46,12 +47,30 @@ class RoadtripDetail : Fragment() {
placesRecyclerView?.adapter = PlacesAdapter(roadTrip.places)
placesRecyclerView?.layoutManager = LinearLayoutManager(context)
view?.findViewById<TextView>(R.id.roadTripDetailTitle)?.text = roadTrip.name
view?.findViewById<TextView>(R.id.roadTripDetailDate)?.text = roadTrip.date.toFrenchFormat()
view?.findViewById<Button>(R.id.btnDeleteRoadTrip)?.setOnClickListener {
roadTripViewModel.deleteRoadTrip(roadTrip)
findNavController().popBackStack()
try{
roadTripViewModel.deleteRoadTrip(roadTrip)
}catch (e: Exception){
Toast.makeText(
context,
R.string.roadTripDeleteError,
Toast.LENGTH_SHORT
).show()
}finally {
findNavController().popBackStack()
Toast.makeText(
context,
R.string.roadTripDeleteConfirmation,
Toast.LENGTH_SHORT
).show()
}
}
return view

@ -11,7 +11,11 @@ import android.util.Log
import android.view.MotionEvent
import android.widget.EditText
import android.widget.Toast
import androidx.core.content.ContentProviderCompat.requireContext
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@ -20,9 +24,12 @@ import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.Overlay
import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.application.RTApplication
import uca.baptistearthur.geocaching.model.Address
import uca.baptistearthur.geocaching.model.Place
import uca.baptistearthur.geocaching.model.RoadTripEntity
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModel
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModelFactory
import java.util.*
@ -30,6 +37,12 @@ class NewRoadtripOverlay(val points: Collection<PlaceMarker>) : Overlay() {
private var circleRectF=RectF()
fun getRoadTripViewModelFromOverlay(overlayContext: Context): RoadTripViewModel {
val roadTripDao = (overlayContext.applicationContext as RTApplication).db.roadTripDAO()
val viewModelFactory = RoadTripViewModelFactory(roadTripDao)
return ViewModelProvider(overlayContext as ViewModelStoreOwner, viewModelFactory).get(RoadTripViewModel::class.java)
}
override fun draw(canvas: Canvas, mapView: MapView, shadow: Boolean) {
val circleSize = 300f
@ -80,6 +93,7 @@ class NewRoadtripOverlay(val points: Collection<PlaceMarker>) : Overlay() {
.setPositiveButton(R.string.confirm) { _, _ ->
val userInput = input.text.toString()
if (userInput.isNotBlank()) {
val places: MutableList<Place> = points.map { Place(it.position.latitude, it.position.longitude) }.toMutableList()
CoroutineScope(Dispatchers.Main).launch {
places.forEach{
@ -89,11 +103,12 @@ class NewRoadtripOverlay(val points: Collection<PlaceMarker>) : Overlay() {
}
val newRoadTrip = RoadTripEntity(
id = 0, // auto-generated ID
name = input.text.toString(),
name = input.text.trim().toString(),
date = Date(),
places = places
)
// TODO: Persister le RoadTrip
getRoadTripViewModelFromOverlay(context).insertRoadTrip(newRoadTrip);
} else {
Toast.makeText(

@ -10,4 +10,7 @@
<string name="cancel">Annuler</string>
<string name="emptyTextError">Le texte ne peux pas être vide</string>
<string name="newRoadtripDialog">Entrez le nom de votre voyage</string>
<string name="roadTripDeleteConfirmation">Le voyage a bien été supprimé</string>
<string name="roadTripDeleteError">Une erreur est survenue lors de la suppresion du voyage</string>
<string name="noRoadTripFound">Aucun voyage n\'a été trouvé, utilisez la carte</string>
</resources>

@ -10,4 +10,7 @@
<string name="cancel">Cancel</string>
<string name="emptyTextError">The text cannot be empty</string>
<string name="newRoadtripDialog">Enter the name of your travel</string>
<string name="roadTripDeleteConfirmation">The road trip has been successfully deleted</string>
<string name="roadTripDeleteError">An error occurred while deleting the road trip.</string>
<string name="noRoadTripFound">No trip was found, add one with the map.</string>
</resources>
Loading…
Cancel
Save