diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 0000000..60b42b5
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/ouaff/modele/metier/Chien.kt b/app/src/main/java/fr/iut/ouaff/modele/metier/Chien.kt
index d917abb..4e3ea51 100644
--- a/app/src/main/java/fr/iut/ouaff/modele/metier/Chien.kt
+++ b/app/src/main/java/fr/iut/ouaff/modele/metier/Chien.kt
@@ -1,28 +1,28 @@
package fr.iut.ouaff.modele.metier
-class Chien {
+class Chien : java.io.Serializable{
var nom:String
public get() = field
- private set
+ set
var race:String
public get() = field
- private set
+ set
var genre:Genre
public get() = field
- private set
+ set
var poids:Int
public get() = field
- private set(value) {
+ set(value) {
if(value > 0) field = value
}
var agressivite:Int
public get() = field
- private set(value){
+ set(value){
if(value >= 0 && value <= 3){
field = value
}
diff --git a/app/src/main/java/fr/iut/ouaff/modele/metier/Genre.kt b/app/src/main/java/fr/iut/ouaff/modele/metier/Genre.kt
index 0f9397c..3ae59cc 100644
--- a/app/src/main/java/fr/iut/ouaff/modele/metier/Genre.kt
+++ b/app/src/main/java/fr/iut/ouaff/modele/metier/Genre.kt
@@ -1,6 +1,6 @@
package fr.iut.ouaff.modele.metier
-enum class Genre {
+enum class Genre : java.io.Serializable {
Male,
Femele,
Inconnu
diff --git a/app/src/main/java/fr/iut/ouaff/utils/DogSelectedCallback.kt b/app/src/main/java/fr/iut/ouaff/utils/DogSelectedCallback.kt
new file mode 100644
index 0000000..acd256b
--- /dev/null
+++ b/app/src/main/java/fr/iut/ouaff/utils/DogSelectedCallback.kt
@@ -0,0 +1,8 @@
+package fr.iut.ouaff.utils
+
+import fr.iut.ouaff.modele.metier.Chien
+
+public interface DogSelectedCallback {
+
+ fun dogSelectedCallback(selectedDog: Chien, position: Int)
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/ouaff/vues/DetailActivity.kt b/app/src/main/java/fr/iut/ouaff/vues/DetailActivity.kt
index cafb76e..94ced75 100644
--- a/app/src/main/java/fr/iut/ouaff/vues/DetailActivity.kt
+++ b/app/src/main/java/fr/iut/ouaff/vues/DetailActivity.kt
@@ -5,22 +5,28 @@ import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import fr.iut.ouaff.R
+import fr.iut.ouaff.modele.metier.Chien
import fr.iut.ouaff.modele.metier.Genre
import fr.iut.ouaff.vues.fragment.FragmentDetail
-
class DetailActivity : AppCompatActivity(), FragmentDetail.ListenerDetail {
private lateinit var fragmentDetail:FragmentDetail
+ private lateinit var chienSelected: Chien
+
+ private var position: Int = 0
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail)
+ chienSelected = intent?.getSerializableExtra(CHIEN) as Chien
+ position = intent?.getIntExtra(POSITION,0)!!
if(supportFragmentManager.findFragmentById(R.id.id_fragmentDetail) == null){
- fragmentDetail = FragmentDetail(this, null)
+ fragmentDetail = FragmentDetail(this, chienSelected, position)
supportFragmentManager.beginTransaction()
.add(R.id.id_fragmentDetail, fragmentDetail)
.commit()
@@ -29,11 +35,19 @@ class DetailActivity : AppCompatActivity(), FragmentDetail.ListenerDetail {
companion object{
- private const val NOMCHIEN:String = "nomChien"
- private const val RACECHIEN:String = "raceChien"
- private const val GENRECHIEN:String = "genreChien"
- private const val MESURECHIEN:String = "mesureChien"
- private const val AGRESSIVITECHIEN:String = "agressiviteChien"
+ const val CHIEN = "chien"
+ const val POSITION = "position"
+ const val NOMCHIEN:String = "nomChien"
+ const val RACECHIEN:String = "raceChien"
+ const val GENRECHIEN:String = "genreChien"
+ const val MESURECHIEN:String = "mesureChien"
+ const val AGRESSIVITECHIEN:String = "agressiviteChien"
+ const val AJOUTCHIEN: String = "ajoutChien"
+
+ public fun createIntent(context: Context, chien:Chien, position:Int): Intent = Intent(context, DetailActivity::class.java).apply {
+ putExtra(CHIEN, chien)
+ putExtra(POSITION, position)
+ }
public fun createIntentAjoutChien(context:Context): Intent = Intent(context, DetailActivity::class.java)
@@ -52,6 +66,28 @@ class DetailActivity : AppCompatActivity(), FragmentDetail.ListenerDetail {
agressivite: Int
) {
val data = Intent().apply {
+ putExtra(AJOUTCHIEN, true)
+ putExtra(NOMCHIEN, nom)
+ putExtra(RACECHIEN, race)
+ putExtra(GENRECHIEN, genre)
+ putExtra(MESURECHIEN, poids)
+ putExtra(AGRESSIVITECHIEN, agressivite)
+ }
+
+ setResult(RESULT_OK, data)
+ finish()
+ }
+
+ override fun saveDog(pos:Int,
+ nom: String?,
+ race: String?,
+ genre: Genre,
+ poids: Int,
+ agressivite: Int
+ ) {
+ val data = Intent().apply {
+ putExtra(AJOUTCHIEN, false)
+ putExtra(POSITION, pos)
putExtra(NOMCHIEN, nom)
putExtra(RACECHIEN, race)
putExtra(GENRECHIEN, genre)
diff --git a/app/src/main/java/fr/iut/ouaff/vues/MainActivity.kt b/app/src/main/java/fr/iut/ouaff/vues/MainActivity.kt
index 62b3c04..d6d9b1f 100644
--- a/app/src/main/java/fr/iut/ouaff/vues/MainActivity.kt
+++ b/app/src/main/java/fr/iut/ouaff/vues/MainActivity.kt
@@ -1,31 +1,42 @@
package fr.iut.ouaff.vues
-import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
-import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
-import androidx.fragment.app.Fragment
import fr.iut.ouaff.R
import fr.iut.ouaff.data.chargeur.Stub
import fr.iut.ouaff.modele.metier.Chien
import fr.iut.ouaff.modele.metier.Genre
-import fr.iut.ouaff.vues.fragment.FragmentDetail
+import fr.iut.ouaff.utils.DogSelectedCallback
import fr.iut.ouaff.vues.fragment.FragmentMaster
-class MainActivity : AppCompatActivity() {
+class MainActivity : AppCompatActivity(), DogSelectedCallback {
private var listeChiens: MutableList = Stub().charger("")
private lateinit var fragment:FragmentMaster
private var activityLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result ->
if(result.resultCode == RESULT_OK){
- result.data?.let { ajouterChien(
- DetailActivity.getNomChien(it),
- DetailActivity.getRaceChien(it),
- DetailActivity.getGenreChien(it) as Genre,
- DetailActivity.getMesureChien(it),
- DetailActivity.getAgressiviteChien(it))
+ result.data?.let {
+ if(it.getBooleanExtra(DetailActivity.AJOUTCHIEN, false)){
+ ajouterChien(
+ DetailActivity.getNomChien(it),
+ DetailActivity.getRaceChien(it),
+ DetailActivity.getGenreChien(it) as Genre,
+ DetailActivity.getMesureChien(it),
+ DetailActivity.getAgressiviteChien(it))
+ }
+ else{
+ modifierChien(
+ it.getIntExtra(DetailActivity.POSITION,-1),
+ it.getStringExtra(DetailActivity.NOMCHIEN),
+ it.getStringExtra(DetailActivity.RACECHIEN),
+ it.getSerializableExtra(DetailActivity.GENRECHIEN) as Genre,
+ it.getIntExtra(DetailActivity.MESURECHIEN,0),
+ it.getIntExtra(DetailActivity.AGRESSIVITECHIEN,0)
+ )
+ }
}
+ fragment.listDogsChanged()
}
}
@@ -34,7 +45,7 @@ class MainActivity : AppCompatActivity() {
setContentView(R.layout.activity_main)
if(supportFragmentManager.findFragmentById(R.id.id_fragment) == null){
- fragment = FragmentMaster(listeChiens)
+ fragment = FragmentMaster(listeChiens, this)
supportFragmentManager.beginTransaction()
.add(R.id.id_fragment, fragment)
.commit()
@@ -48,6 +59,20 @@ class MainActivity : AppCompatActivity() {
private fun ajouterChien(nom: String?, race: String?, genre: Genre, poids: Int, agressivite: Int) {
if(nom != null && race != null) listeChiens.add(Chien(nom, race, genre, poids, agressivite))
- fragment.newDogAdded()
+ }
+
+ override fun dogSelectedCallback(selectedDog: Chien, position: Int) {
+ activityLauncher.launch(DetailActivity.createIntent(this, selectedDog, position))
+ }
+
+ private fun modifierChien(pos:Int, nom: String?, race: String?, genre: Genre, poids: Int, agressivite: Int){
+ if(pos >= 0){
+ val chien = listeChiens.get(pos)
+ chien.nom = nom!!
+ chien.race = race!!
+ chien.genre = genre
+ chien.poids = poids
+ chien.agressivite = agressivite
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/ouaff/vues/adapter/AdapterChien.kt b/app/src/main/java/fr/iut/ouaff/vues/adapter/AdapterChien.kt
index e02855e..3143b74 100644
--- a/app/src/main/java/fr/iut/ouaff/vues/adapter/AdapterChien.kt
+++ b/app/src/main/java/fr/iut/ouaff/vues/adapter/AdapterChien.kt
@@ -8,11 +8,12 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import fr.iut.ouaff.R
import fr.iut.ouaff.modele.metier.Chien
+import fr.iut.ouaff.utils.DogSelectedCallback
/**
* Gère l'affichage de la liste de mes chiens -> équivalent de la ListView en javafx
*/
-class AdapterChien(private var listeChiens:MutableList): RecyclerView.Adapter() {
+class AdapterChien(private var listeChiens:MutableList, private var listener: DogSelectedCallback): RecyclerView.Adapter() {
private lateinit var ressources: Resources;
@@ -22,7 +23,7 @@ class AdapterChien(private var listeChiens:MutableList): RecyclerView.Ada
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
ressources = parent.resources // pour pouvoir accéder au R. plus tard
val view = LayoutInflater.from(parent.context).inflate(R.layout.cellule_chien, parent, false) // je charge la vue xml qui contiendra mon chien
- return ViewHolderChien(view) // je passe cette vue à ma ViewHolderChien
+ return ViewHolderChien(view, listener) // je passe cette vue à ma ViewHolderChien
}
/**
@@ -33,19 +34,7 @@ class AdapterChien(private var listeChiens:MutableList): RecyclerView.Ada
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val chienAAfficher = listeChiens.get(position) // on récupère le chien à afficher
if(holder is ViewHolderChien){ // si ma ViewHolder est bien une instance de ViewHolderChien
- /// Je set le text de mes propriétés pour afficher ce que je veux afficher
- holder.textNomChien.text = chienAAfficher.nom // afficher le nom
- holder.textRaceChien.text = chienAAfficher.race
-
- /// setter la couleur à afficher suivant son aggressivité
- // when équivalent du switch case en Java ou en C#
- holder.cardViewChien.setCardBackgroundColor(ContextCompat.getColor(holder.itemView.context,
- when(chienAAfficher.agressivite){
- 1 -> R.color.colorNormal
- 2 -> R.color.colorBad
- 3 -> R.color.colorAggressive
- else -> R.color.colorNice
- }))
+ holder.bindWithDog(chienAAfficher, position)
// holder.cardViewChien.setOnClickListener() { }
}
diff --git a/app/src/main/java/fr/iut/ouaff/vues/adapter/ViewHolderChien.kt b/app/src/main/java/fr/iut/ouaff/vues/adapter/ViewHolderChien.kt
index 3f5fdfc..502ea38 100644
--- a/app/src/main/java/fr/iut/ouaff/vues/adapter/ViewHolderChien.kt
+++ b/app/src/main/java/fr/iut/ouaff/vues/adapter/ViewHolderChien.kt
@@ -3,13 +3,20 @@ package fr.iut.ouaff.vues.adapter
import android.view.View
import android.widget.TextView
import androidx.cardview.widget.CardView
+import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import fr.iut.ouaff.R
+import fr.iut.ouaff.modele.metier.Chien
+import fr.iut.ouaff.utils.DogSelectedCallback
/**
* Affichera un de mes chiens -> équivalent des cellules en javafx
*/
-class ViewHolderChien(itemView: View) : ViewHolder(itemView) {
+class ViewHolderChien(itemView: View, listener: DogSelectedCallback) : ViewHolder(itemView) {
+
+ lateinit var chien: Chien
+
+ var posChien: Int = 0
var textNomChien: TextView
get() = field
@@ -28,5 +35,27 @@ class ViewHolderChien(itemView: View) : ViewHolder(itemView) {
textNomChien = itemView.findViewById(R.id.nomChien)
textRaceChien = itemView.findViewById(R.id.raceChien)
cardViewChien = itemView.findViewById(R.id.cardViewChien)
+
+ cardViewChien.setOnClickListener(){ chien?.let { listener.dogSelectedCallback(it, posChien)}}
+ }
+
+ public fun bindWithDog(chien:Chien, pos:Int){
+ this.chien = chien
+ this.posChien = pos
+ textNomChien.text = chien.nom // afficher le nom
+ textRaceChien.text = chien.race
+
+ /// setter la couleur à afficher suivant son aggressivité
+ // when équivalent du switch case en Java ou en C#
+ cardViewChien.setCardBackgroundColor(
+ ContextCompat.getColor(itemView.context,
+ when(chien.agressivite){
+ 1 -> R.color.colorNormal
+ 2 -> R.color.colorBad
+ 3 -> R.color.colorAggressive
+ else -> R.color.colorNice
+ }
+ )
+ )
}
}
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentDetail.kt b/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentDetail.kt
index 0d26710..b59d362 100644
--- a/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentDetail.kt
+++ b/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentDetail.kt
@@ -10,15 +10,14 @@ import android.widget.EditText
import android.widget.ImageButton
import android.widget.RatingBar
import android.widget.Spinner
-import android.widget.Toolbar
import androidx.fragment.app.Fragment
import fr.iut.ouaff.R
import fr.iut.ouaff.modele.metier.Chien
import fr.iut.ouaff.modele.metier.Genre
-class FragmentDetail(private var listener:ListenerDetail, private var chien: Chien?) : Fragment() {
+class FragmentDetail(private var listener:ListenerDetail, private var chien: Chien?, private var position:Int) : Fragment() {
- private lateinit var boutonAjouterChien:ImageButton
+ private lateinit var boutonQuitter:ImageButton
private lateinit var textFieldNomChien:EditText
private lateinit var textFieldRaceChien:EditText
@@ -30,6 +29,7 @@ class FragmentDetail(private var listener:ListenerDetail, private var chien: Chi
interface ListenerDetail{
fun ajouterChien(nom: String?, race: String?, genre: Genre, poids: Int, agressivite: Int)
+ fun saveDog(pos:Int, nom: String?, race: String?, genre: Genre, poids: Int, agressivite: Int)
}
override fun onCreateView(
@@ -46,14 +46,13 @@ class FragmentDetail(private var listener:ListenerDetail, private var chien: Chi
spinnerGenre = findViewById(R.id.spinnerGenre)
textFieldMesureChien = findViewById(R.id.textFieldMesureChien)
ratingBarAgressivite = findViewById(R.id.ratingBarAgressivite)
- boutonAjouterChien = findViewById(R.id.bouttonAjouter)
+ boutonQuitter = findViewById(R.id.bouttonAjouter)
}
spinnerGenre.adapter = ArrayAdapter(view.context, R.layout.cellule_spinner, arrayGenre)
-
+ boutonQuitter.visibility = Button.VISIBLE
if(chien == null){
- boutonAjouterChien.visibility = Button.VISIBLE
- boutonAjouterChien.setOnClickListener() { listener.ajouterChien(
+ boutonQuitter.setOnClickListener() { listener.ajouterChien(
textFieldNomChien.text.toString(),
textFieldRaceChien.text.toString(),
spinnerGenre.selectedItem as Genre,
@@ -63,6 +62,15 @@ class FragmentDetail(private var listener:ListenerDetail, private var chien: Chi
}
else{
setDataDog()
+ boutonQuitter.setOnClickListener() {
+ listener.saveDog(
+ position,
+ textFieldNomChien.text.toString(),
+ textFieldRaceChien.text.toString(),
+ spinnerGenre.selectedItem as Genre,
+ textFieldMesureChien.text.toString().toInt(),
+ ratingBarAgressivite.rating.toInt())
+ }
}
return view
}
@@ -71,7 +79,7 @@ class FragmentDetail(private var listener:ListenerDetail, private var chien: Chi
textFieldNomChien.setText(chien?.nom)
textFieldRaceChien.setText(chien?.race)
spinnerGenre.setSelection(arrayGenre.indexOf(chien?.genre))
- textFieldMesureChien.setText(chien?.poids!!)
+ textFieldMesureChien.setText(chien?.poids.toString())
ratingBarAgressivite.rating = chien?.agressivite!!.toFloat()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentMaster.kt b/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentMaster.kt
index ee45cb9..65503cb 100644
--- a/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentMaster.kt
+++ b/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentMaster.kt
@@ -14,9 +14,10 @@ import androidx.recyclerview.widget.RecyclerView.SimpleOnItemTouchListener
import com.google.android.material.floatingactionbutton.FloatingActionButton
import fr.iut.ouaff.R
import fr.iut.ouaff.modele.metier.Chien
+import fr.iut.ouaff.utils.DogSelectedCallback
import fr.iut.ouaff.vues.adapter.AdapterChien
-class FragmentMaster(private var listeChiens: MutableList) : Fragment() {
+class FragmentMaster(private var listeChiens: MutableList, private var listener:DogSelectedCallback) : Fragment() {
private lateinit var boutonAjouterChien: FloatingActionButton
@@ -30,7 +31,7 @@ class FragmentMaster(private var listeChiens: MutableList) : Fragment() {
val view = inflater.inflate(R.layout.fragment_master, container, false);
val recyclerView = view.findViewById(R.id.recyclerViewChien);
recyclerView.layoutManager = GridLayoutManager(context, 2, GridLayoutManager.VERTICAL, false)
- adapter = AdapterChien(listeChiens)
+ adapter = AdapterChien(listeChiens, listener)
recyclerView.adapter = adapter
boutonAjouterChien = view.findViewById(R.id.floatingActionButton)
return view
@@ -38,7 +39,7 @@ class FragmentMaster(private var listeChiens: MutableList) : Fragment() {
public fun getBoutonAjouterChien() = boutonAjouterChien
- public fun newDogAdded(){
+ public fun listDogsChanged(){
adapter.notifyDataSetChanged()
}