Modification d'un chien fonctionnel

master
LouisPerret 3 years ago
parent 22b2ef62cf
commit b2eaa114e1

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="bef6b6e5" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2022-12-30T13:52:32.533062600Z" />
</component>
</project>

@ -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
}

@ -1,6 +1,6 @@
package fr.iut.ouaff.modele.metier
enum class Genre {
enum class Genre : java.io.Serializable {
Male,
Femele,
Inconnu

@ -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)
}

@ -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)

@ -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<Chien> = 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
}
}
}

@ -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<Chien>): RecyclerView.Adapter<ViewHolder>() {
class AdapterChien(private var listeChiens:MutableList<Chien>, private var listener: DogSelectedCallback): RecyclerView.Adapter<ViewHolder>() {
private lateinit var ressources: Resources;
@ -22,7 +23,7 @@ class AdapterChien(private var listeChiens:MutableList<Chien>): 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<Chien>): 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() { }
}

@ -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
}
)
)
}
}

@ -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()
}
}

@ -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<Chien>) : Fragment() {
class FragmentMaster(private var listeChiens: MutableList<Chien>, private var listener:DogSelectedCallback) : Fragment() {
private lateinit var boutonAjouterChien: FloatingActionButton
@ -30,7 +31,7 @@ class FragmentMaster(private var listeChiens: MutableList<Chien>) : Fragment() {
val view = inflater.inflate(R.layout.fragment_master, container, false);
val recyclerView = view.findViewById<RecyclerView>(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<Chien>) : Fragment() {
public fun getBoutonAjouterChien() = boutonAjouterChien
public fun newDogAdded(){
public fun listDogsChanged(){
adapter.notifyDataSetChanged()
}

Loading…
Cancel
Save