Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/src/main/java/uca/baptistearthur/geocaching/ui/overlay/NewRoadtripOverlay.kt
#	app/src/main/res/values-fr/strings.xml
#	app/src/main/res/values/strings.xml
master
Arthur VALIN 2 years ago
commit fd33116210

@ -44,7 +44,7 @@ class Converters {
fun Date.toFrenchFormat(): String { fun Date.toFrenchFormat(): String {
val day: String = if(this.date < 10) "0${this.date}" else "${this.date}" 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 year = "${this.year + 1900}"
val hours: String = if(this.hours < 10) "0${this.hours}" else "${this.hours}" 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}" 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") @SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: PlacesViewHolder, position: Int) { override fun onBindViewHolder(holder: PlacesViewHolder, position: Int) {
holder.placeAddress.text = places[position].address.displayName holder.placeAddress.text = "${places[position].address.displayName}, ${places[position].address.country}"
holder.placeCoordinates.text = "(${places[position].longitude}, ${places[position].latitude}), ${places[position].address.country}" holder.placeCoordinates.text = "(${places[position].longitude}, ${places[position].latitude})"
} }
override fun getItemCount(): Int = places.size override fun getItemCount(): Int = places.size

@ -17,7 +17,8 @@ class RoadTripAdapter(val voyages: List<RoadTripEntity>, val navController: NavC
@SuppressLint("SetTextI18n", "ClickableViewAccessibility") @SuppressLint("SetTextI18n", "ClickableViewAccessibility")
override fun onBindViewHolder(holder: RoadTripViewHolder, position: Int) { 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] holder.clickedRoadTrip = voyages[position]
} }
override fun getItemCount(): Int = voyages.size override fun getItemCount(): Int = voyages.size

@ -1,15 +0,0 @@
package uca.baptistearthur.geocaching.services
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import uca.baptistearthur.geocaching.R
class FragmentService {
fun loadFragment(fragment: Fragment, supportFragmentManager: FragmentManager){
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragment_container, fragment)
transaction.commit()
}
}

@ -2,7 +2,6 @@ package uca.baptistearthur.geocaching.ui.activity
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI import androidx.navigation.ui.NavigationUI
@ -10,16 +9,9 @@ import androidx.navigation.ui.setupWithNavController
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.coroutines.* import kotlinx.coroutines.*
import uca.baptistearthur.geocaching.R import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.network.AddressAPI
import uca.baptistearthur.geocaching.network.AddressNetwork
class MainWindow: AppCompatActivity() { class MainWindow: AppCompatActivity() {
// private val roadTripViewModel: RoadTripViewModel by viewModels<RoadTripViewModel> {
// RoadTripViewModelFactory((this.application as RTApplication).db.roadTripDAO())
// }
@SuppressLint("MissingInflatedId") @SuppressLint("MissingInflatedId")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {

@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -25,19 +26,20 @@ class RoadTripFragment : Fragment() {
RoadTripViewModelFactory((requireActivity().application as RTApplication).db.roadTripDAO()) 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? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_roadtrip, container, false) val view = inflater.inflate(R.layout.fragment_roadtrip, container, false)
roadTripRecyclerView = view?.findViewById(R.id.recyclerViewRoadTripList) roadTripRecyclerView = view?.findViewById(R.id.recyclerViewRoadTripList)
roadTripViewModel.getAllRoadTrips().observe(viewLifecycleOwner, { roadTrips -> 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) roadTripRecyclerView?.layoutManager = LinearLayoutManager(context)

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

@ -1,17 +1,20 @@
package uca.baptistearthur.geocaching.ui.overlay package uca.baptistearthur.geocaching.ui.overlay
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Context
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Color import android.graphics.Color
import android.graphics.Paint import android.graphics.Paint
import android.graphics.RectF import android.graphics.RectF
import android.provider.Settings.System.getString
import android.text.InputFilter import android.text.InputFilter
import android.util.Log import android.util.Log
import android.view.MotionEvent import android.view.MotionEvent
import android.widget.EditText import android.widget.EditText
import android.widget.Toast import android.widget.Toast
import androidx.core.content.ContextCompat 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.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -20,8 +23,12 @@ import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.Overlay import org.osmdroid.views.overlay.Overlay
import org.osmdroid.views.overlay.Polyline import org.osmdroid.views.overlay.Polyline
import uca.baptistearthur.geocaching.R 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.Place
import uca.baptistearthur.geocaching.model.RoadTripEntity import uca.baptistearthur.geocaching.model.RoadTripEntity
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModel
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModelFactory
import java.util.* import java.util.*
@ -29,6 +36,12 @@ class NewRoadtripOverlay(val points: MutableCollection<PlaceMarker>) : Overlay()
private var circleRectF=RectF() 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) { override fun draw(canvas: Canvas, mapView: MapView, shadow: Boolean) {
val circleSize = 300f val circleSize = 300f
@ -96,7 +109,7 @@ class NewRoadtripOverlay(val points: MutableCollection<PlaceMarker>) : Overlay()
date = Date(), date = Date(),
places = places places = places
) )
// TODO: Persister le RoadTrip getRoadTripViewModelFromOverlay(context).insertRoadTrip(newRoadTrip);
Toast.makeText( Toast.makeText(
context, context,
R.string.roadtripAdded, R.string.roadtripAdded,

@ -10,5 +10,8 @@
<string name="cancel">Annuler</string> <string name="cancel">Annuler</string>
<string name="emptyTextError">Le texte ne peux pas être vide</string> <string name="emptyTextError">Le texte ne peux pas être vide</string>
<string name="newRoadtripDialog">Entrez le nom de votre voyage</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>
<string name="roadtripAdded">Roadtrip ajouté</string> <string name="roadtripAdded">Roadtrip ajouté</string>
</resources> </resources>

@ -10,5 +10,8 @@
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="emptyTextError">The text cannot be empty</string> <string name="emptyTextError">The text cannot be empty</string>
<string name="newRoadtripDialog">Enter the name of your travel</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>
<string name="roadtripAdded">Roadtrip added</string> <string name="roadtripAdded">Roadtrip added</string>
</resources> </resources>
Loading…
Cancel
Save