diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 72a2c40..9faed80 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ android:theme="@style/Theme.Ouaff" tools:targetApi="31"> diff --git a/app/src/main/java/fr/iut/ouaff/data/chargeur/Chargeur.kt b/app/src/main/java/fr/iut/ouaff/data/chargeur/Chargeur.kt new file mode 100644 index 0000000..1ab25b5 --- /dev/null +++ b/app/src/main/java/fr/iut/ouaff/data/chargeur/Chargeur.kt @@ -0,0 +1,8 @@ +package fr.iut.ouaff.data.chargeur + +import fr.iut.ouaff.modele.metier.Chien + +interface Chargeur { + + public fun charger(nomFichier : String) : MutableList +} \ No newline at end of file diff --git a/app/src/main/java/fr/iut/ouaff/data/chargeur/Stub.kt b/app/src/main/java/fr/iut/ouaff/data/chargeur/Stub.kt new file mode 100644 index 0000000..5d14e83 --- /dev/null +++ b/app/src/main/java/fr/iut/ouaff/data/chargeur/Stub.kt @@ -0,0 +1,17 @@ +package fr.iut.ouaff.data.chargeur + +import fr.iut.ouaff.modele.metier.Chien +import fr.iut.ouaff.modele.metier.Genre + +class Stub : Chargeur { + override fun charger(nomFichier: String): MutableList { + var listeChien: MutableList = ArrayList() + listeChien.add(Chien("Louis", "Golden Retriever", Genre.Male, 40, 0)) + listeChien.add(Chien("Elfe", "Dalmatien", Genre.Inconnu, 30, 1)) + listeChien.add(Chien("Dexter", "Pitbull allemand", Genre.Male, 50, 3)) + listeChien.add(Chien("Daisy", "Chihuahua", Genre.Femele, 20, 2)) + listeChien.add(Chien("Deku", "Labrador", Genre.Femele, 35,1)) + + return listeChien + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/iut/ouaff/modele/metier/Chenil.kt b/app/src/main/java/fr/iut/ouaff/modele/metier/Chenil.kt new file mode 100644 index 0000000..c17da6b --- /dev/null +++ b/app/src/main/java/fr/iut/ouaff/modele/metier/Chenil.kt @@ -0,0 +1,21 @@ +package fr.iut.ouaff.modele.metier + +import fr.iut.ouaff.data.chargeur.Stub + +class Chenil { + + var listeChiens: MutableList = ArrayList() + get() = listeChiens + + constructor(){ + listeChiens = Stub().charger("") + } + + public fun ajouterChien(chien: Chien){ + listeChiens.add(chien) + } + + public fun ajouterChien(nom: String, race: String, genre: Genre, poids: Int, agressivite: Int){ + listeChiens.add(Chien(nom, race, genre, poids, agressivite)) + } +} \ 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 new file mode 100644 index 0000000..d917abb --- /dev/null +++ b/app/src/main/java/fr/iut/ouaff/modele/metier/Chien.kt @@ -0,0 +1,39 @@ +package fr.iut.ouaff.modele.metier + +class Chien { + + var nom:String + public get() = field + private set + + var race:String + public get() = field + private set + + var genre:Genre + public get() = field + private set + + var poids:Int + public get() = field + private set(value) { + if(value > 0) field = value + } + + var agressivite:Int + public get() = field + private set(value){ + if(value >= 0 && value <= 3){ + field = value + } + } + + constructor(nom: String, race: String, genre: Genre, poids: Int, agressivite: Int) { + this.nom = nom + this.race = race + this.genre = genre + this.poids = poids + this.agressivite = agressivite + } + +} \ No newline at end of file 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 new file mode 100644 index 0000000..0f9397c --- /dev/null +++ b/app/src/main/java/fr/iut/ouaff/modele/metier/Genre.kt @@ -0,0 +1,7 @@ +package fr.iut.ouaff.modele.metier + +enum class Genre { + Male, + Femele, + Inconnu +} \ No newline at end of file diff --git a/app/src/main/java/fr/iut/ouaff/MainActivity.kt b/app/src/main/java/fr/iut/ouaff/vues/MainActivity.kt similarity index 54% rename from app/src/main/java/fr/iut/ouaff/MainActivity.kt rename to app/src/main/java/fr/iut/ouaff/vues/MainActivity.kt index 5470a79..e418215 100644 --- a/app/src/main/java/fr/iut/ouaff/MainActivity.kt +++ b/app/src/main/java/fr/iut/ouaff/vues/MainActivity.kt @@ -1,17 +1,24 @@ -package fr.iut.ouaff +package fr.iut.ouaff.vues import androidx.appcompat.app.AppCompatActivity import android.os.Bundle -import fr.iut.ouaff.fragment.FragmentDetail +import fr.iut.ouaff.R +import fr.iut.ouaff.data.chargeur.Stub +import fr.iut.ouaff.modele.metier.Chien +import fr.iut.ouaff.vues.fragment.FragmentDetail +import fr.iut.ouaff.vues.fragment.FragmentMaster class MainActivity : AppCompatActivity() { + + private var listeChiens: MutableList = Stub().charger("") + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if(supportFragmentManager.findFragmentById(R.id.id_fragment) == null){ supportFragmentManager.beginTransaction() - .add(R.id.id_fragment, FragmentDetail()) + .add(R.id.id_fragment, FragmentMaster(listeChiens)) .commit() } } 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 new file mode 100644 index 0000000..ca6352d --- /dev/null +++ b/app/src/main/java/fr/iut/ouaff/vues/adapter/AdapterChien.kt @@ -0,0 +1,57 @@ +package fr.iut.ouaff.vues.adapter + +import android.content.res.Resources +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import fr.iut.ouaff.R +import fr.iut.ouaff.modele.metier.Chien + +/** + * Gère l'affichage de la liste de mes chiens -> équivalent de la ListView en javafx + */ +class AdapterChien(private var listeChiens:MutableList): RecyclerView.Adapter() { + + private lateinit var ressources: Resources; + + /** + * Créer la ViewHolder qui va contenir un chien + */ + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + ressources = parent.resources // pour pouvoir accéder au R. plus tard + var 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 + } + + /** + * On ajoute les données du chien à afficher dans la ViewHolder créée + * holder -> représente ma ViewHolderChien + * position -> position du chien à afficher dans ma listeChien + */ + 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.setText(chienAAfficher.nom) // afficher le nom + holder.textRaceChien.setText(chienAAfficher.race) + + /// setter la couleur à afficher suivant son aggressivité + // when équivalent du switch case en Java ou en C# + var color = R.color.colorNice + when(chienAAfficher.agressivite){ + 1 -> color = R.color.colorNormal + 2 -> color = R.color.colorBad + 3 -> color = R.color.colorAggressive + } + + holder.cardViewChien.setCardBackgroundColor(ressources.getColor(color)) + } + } + + /** + * Renvoie le nombre total d'élément de la liste à afficher + */ + override fun getItemCount(): Int = listeChiens.size + +} \ No newline at end of file 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 new file mode 100644 index 0000000..3f5fdfc --- /dev/null +++ b/app/src/main/java/fr/iut/ouaff/vues/adapter/ViewHolderChien.kt @@ -0,0 +1,32 @@ +package fr.iut.ouaff.vues.adapter + +import android.view.View +import android.widget.TextView +import androidx.cardview.widget.CardView +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import fr.iut.ouaff.R + +/** + * Affichera un de mes chiens -> équivalent des cellules en javafx + */ +class ViewHolderChien(itemView: View) : ViewHolder(itemView) { + + var textNomChien: TextView + get() = field + private set + + var textRaceChien: TextView + get() = field + private set + + var cardViewChien: CardView + get()= field + private set + + /// Initialise mes propriétés + init { + textNomChien = itemView.findViewById(R.id.nomChien) + textRaceChien = itemView.findViewById(R.id.raceChien) + cardViewChien = itemView.findViewById(R.id.cardViewChien) + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/iut/ouaff/fragment/FragmentDetail.kt b/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentDetail.kt similarity index 87% rename from app/src/main/java/fr/iut/ouaff/fragment/FragmentDetail.kt rename to app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentDetail.kt index dd76541..ce89012 100644 --- a/app/src/main/java/fr/iut/ouaff/fragment/FragmentDetail.kt +++ b/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentDetail.kt @@ -1,9 +1,10 @@ -package fr.iut.ouaff.fragment +package fr.iut.ouaff.vues.fragment import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toolbar import androidx.fragment.app.Fragment import fr.iut.ouaff.R 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 new file mode 100644 index 0000000..fc52c96 --- /dev/null +++ b/app/src/main/java/fr/iut/ouaff/vues/fragment/FragmentMaster.kt @@ -0,0 +1,28 @@ +package fr.iut.ouaff.vues.fragment + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import fr.iut.ouaff.R +import fr.iut.ouaff.modele.metier.Chien +import fr.iut.ouaff.vues.adapter.AdapterChien + +class FragmentMaster(private var listeChiens: MutableList) : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + val view = inflater.inflate(R.layout.fragment_master, container); + val recyclerView = view.findViewById(R.id.recyclerViewChien); + //recyclerView.layoutManager = GridLayoutManager(context, 2, GridLayoutManager.VERTICAL, false) + recyclerView.adapter = AdapterChien(listeChiens) + return super.onCreateView(inflater, container, savedInstanceState) + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/cellule_chien.xml b/app/src/main/res/layout/cellule_chien.xml new file mode 100644 index 0000000..6929fa7 --- /dev/null +++ b/app/src/main/res/layout/cellule_chien.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_master.xml b/app/src/main/res/layout/fragment_master.xml new file mode 100644 index 0000000..10d9e78 --- /dev/null +++ b/app/src/main/res/layout/fragment_master.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 3c5031e..6657ee3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,7 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +org.gradle.daemon=true + +org.gradle.parallel=true \ No newline at end of file