Skip to content
Snippets Groups Projects
Commit ba4c7826 authored by @potel5u's avatar @potel5u
Browse files

Persistance du modele créé à travers les pages de l'app

parent e4b56269
No related branches found
No related tags found
No related merge requests found
Showing with 408 additions and 20 deletions
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
......
......@@ -27,6 +27,9 @@
<activity
android:name=".OpenActivity"
android:exported="false"/>
<activity
android:name=".PieceActivity"
android:exported="false"/>
</application>
</manifest>
\ No newline at end of file
package fr.ul.projet;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ViewModelProvider;
import fr.ul.projet.modele.Modele;
import fr.ul.projet.modele.Piece;
public class CreateActivity extends AppCompatActivity {
private ActivityResultLauncher<Intent> launcher;
private Modele modele;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_create);
String titreModele = getIntent().getStringExtra("titreModele");
this.modele = this.getIntent().getParcelableExtra("modele");
TextView textView = findViewById(R.id.textView);
textView.setText(titreModele);
textView.setText(this.modele.getNom());
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.create), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
......@@ -28,10 +44,50 @@ public class CreateActivity extends AppCompatActivity {
return insets;
});
this.launcher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result){
int resCode = result.getResultCode(); // Code retourné par l'activité
}
}
);
}
public void nouvellePiece(View v){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Entrez un nom pour votre pièce");
final EditText input = new EditText(this);
builder.setView(input);
// Bouton de validation
builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
String userInput = input.getText().toString();
modele.ajouterPiece(userInput, "", "", "", "");
Intent intent = new Intent(CreateActivity.this, PieceActivity.class);
intent.putExtra("modele", modele);
launcher.launch(intent);
}
});
// Bouton d'annulatiopn
builder.setNegativeButton("Annuler", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
dialog.cancel();
}
});
builder.show();
}
public void home(View v){
Intent res = new Intent();
finish();
public void quit(View v){
Intent res = new Intent(CreateActivity.this, MainActivity.class);
launcher.launch(res);
}
}
......@@ -7,6 +7,7 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.OpenableColumns;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
......@@ -22,6 +23,9 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ViewModelProvider;
import fr.ul.projet.modele.Modele;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
......@@ -30,6 +34,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
......@@ -73,8 +78,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
@Override
public void onClick(DialogInterface dialog, int which){
String userInput = input.getText().toString();
Modele modele = new Modele(userInput);
Intent intent = new Intent(MainActivity.this, CreateActivity.class);
intent.putExtra("titreModele", userInput);
intent.putExtra("modele", modele);
launcher.launch(intent);
}
});
......
package fr.ul.projet;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.activity.EdgeToEdge;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import fr.ul.projet.modele.Modele;
import fr.ul.projet.modele.Piece;
public class PieceActivity extends AppCompatActivity {
private Modele modele;
private Piece piece;
private ActivityResultLauncher<Intent> launcher;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_piece);
String nomPiece = getIntent().getStringExtra("nomPiece");
this.modele = getIntent().getParcelableExtra("modele");
this.piece = this.modele.getPieceCourante();
TextView textView = findViewById(R.id.nomPiece);
textView.setText(this.modele.getNom()+ " : " + this.piece.getNom());
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.piece), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
this.launcher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result){
int resCode = result.getResultCode(); // Code retourné par l'activité
}
}
);
}
public void nouvellePiece(View v){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Entrez un nom pour votre pièce");
final EditText input = new EditText(this);
builder.setView(input);
// Bouton de validation
builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
String userInput = input.getText().toString();
Intent intent = new Intent(PieceActivity.this, PieceActivity.class);
intent.putExtra("nomPiece", userInput);
launcher.launch(intent);
}
});
// Bouton d'annulatiopn
builder.setNegativeButton("Annuler", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
dialog.cancel();
}
});
builder.show();
}
public void quit(View v){
Intent res = new Intent(PieceActivity.this, MainActivity.class);
launcher.launch(res);
}
public void backToModele(View v){
Intent res = new Intent(PieceActivity.this, CreateActivity.class);
res.putExtra("modele", this.modele);
launcher.launch(res);
}
}
package fr.ul.projet.modele;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.Map;
import fr.ul.projet.outils.FabriqueIdentifiant;
public class Acces {
public class Acces implements Parcelable {
private int id;
private int xCoinHautGauche, yCoinHautGauche;
......@@ -18,6 +23,42 @@ public class Acces {
this.id = FabriqueIdentifiant.getInstance().getCptAcces();
}
public Acces(Parcel in){
this.id = in.readInt();
this.xCoinHautGauche = in.readInt();
this.yCoinHautGauche = in.readInt();
this.xCoinBasDroite = in.readInt();
this.yCoinBasDroite = in.readInt();
this.destination = in.readParcelable(Piece.class.getClassLoader());
}
public static final Creator<Acces> CREATOR = new Creator<Acces>() {
@Override
public Acces createFromParcel(Parcel parcel) {
return new Acces(parcel);
}
@Override
public Acces[] newArray(int i) {
return new Acces[i];
}
};
@Override
public void writeToParcel(Parcel dest, int flags){
dest.writeInt(this.id);
dest.writeInt(this.xCoinHautGauche);
dest.writeInt(this.yCoinHautGauche);
dest.writeInt(this.xCoinBasDroite);
dest.writeInt(this.yCoinBasDroite);
dest.writeParcelable(this.destination, flags);
}
@Override
public int describeContents(){
return 0;
}
public int getId() {
return this.id;
}
......
package fr.ul.projet.modele;
import android.os.Parcel;
import android.os.Parcelable;
import org.json.JSONObject;
import java.io.BufferedWriter;
......@@ -10,13 +13,15 @@ import java.io.PrintWriter;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import fr.ul.projet.outils.FabriqueIdentifiant;
public class Modele {
public class Modele implements Parcelable{
private boolean pieceAffichee;
private String fichierJson;
private String nom;
private String orientationCourante;
HashMap<Integer, Piece> pieces;
Piece pieceCourante;
......@@ -25,10 +30,58 @@ public class Modele {
* Constructeur d'un Modèle
*
*/
public Modele(){
public Modele(String nom){
this.pieceAffichee = false;
this.pieceCourante = null;
this.fichierJson = new File("").getAbsolutePath() + "/modele" + FabriqueIdentifiant.getInstance().getCptJson() + ".json";
this.nom = nom;
this.pieces = new HashMap<Integer, Piece>();
this.fichierJson = new File("").getAbsolutePath() + "/" + this.getNom() + FabriqueIdentifiant.getInstance().getCptJson() + ".json";
}
protected Modele(Parcel in){
this.pieceAffichee = in.readByte() != 0;
this.fichierJson = in.readString();
this.nom = in.readString();
this.orientationCourante = in.readString();
this.pieces = new HashMap<Integer, Piece>();
int size = in.readInt();
for (int i = 0; i < size; i++){
int key = in.readInt();
Piece piece = in.readParcelable(Piece.class.getClassLoader());
this.pieces.put(key, piece);
}
this.pieceCourante = in.readParcelable(Piece.class.getClassLoader());
}
public static final Creator<Modele> CREATOR = new Creator<Modele>() {
@Override
public Modele createFromParcel(Parcel parcel) {
return new Modele(parcel);
}
@Override
public Modele[] newArray(int i) {
return new Modele[i];
}
};
@Override
public void writeToParcel(Parcel dest, int flags){
dest.writeByte((byte) (this.pieceAffichee ? 1 : 0));
dest.writeString(this.fichierJson);
dest.writeString(this.nom);
dest.writeString(this.orientationCourante);
dest.writeInt(this.pieces.size());
for (Map.Entry<Integer, Piece> entry : this.pieces.entrySet()){
dest.writeInt(entry.getKey());
dest.writeParcelable(entry.getValue(), flags);
}
dest.writeParcelable(this.pieceCourante, flags);
}
@Override
public int describeContents(){
return 0;
}
public void nouveau(){
......@@ -39,10 +92,20 @@ public class Modele {
FabriqueIdentifiant.reset();
}
/**
* Getters et Setters ------------------------------------------------------------------------------------------------------------------------
*/
public String getNom() {
return this.nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public Piece getPieceCourante() {
return this.pieceCourante;
}
......
package fr.ul.projet.modele;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import fr.ul.projet.outils.FabriqueIdentifiant;
public class Piece {
public class Piece implements Parcelable {
private int id;
String nom;
String photoNord, photoSud, photoEst, photoOuest;
HashMap<Integer, Acces> acces = new HashMap<>();
HashMap<Integer, Acces> acces;
public Piece(String nom, String photoNord, String photoSud, String photoEst, String photoOuest){
......@@ -21,7 +24,57 @@ public class Piece {
this.photoEst = photoEst;
this.photoOuest = photoOuest;
this.nom = nom;
this.acces = new HashMap<Integer, Acces>();
}
protected Piece(Parcel in){
this.id = in.readInt();
this.nom = in.readString();
this.photoNord = in.readString();
this.photoSud = in.readString();
this.photoEst = in.readString();
this.photoOuest = in.readString();
this.acces = new HashMap<Integer, Acces>();
int size = in.readInt();
for (int i = 0; i < size; i++){
int key = in.readInt();
Acces acces = in.readParcelable(Acces.class.getClassLoader());
this.acces.put(key, acces);
}
}
public static final Creator<Piece> CREATOR = new Creator<Piece>() {
@Override
public Piece createFromParcel(Parcel parcel) {
return new Piece(parcel);
}
@Override
public Piece[] newArray(int i) {
return new Piece[i];
}
};
@Override
public void writeToParcel(Parcel dest, int flags){
dest.writeInt(this.id);
dest.writeString(this.nom);
dest.writeString(this.photoNord);
dest.writeString(this.photoSud);
dest.writeString(this.photoEst);
dest.writeString(this.photoOuest);
dest.writeInt(this.acces.size());
for (Map.Entry<Integer, Acces> entry : this.acces.entrySet()){
dest.writeInt(entry.getKey());
dest.writeParcelable(entry.getValue(), flags);
}
}
@Override
public int describeContents(){
return 0;
}
public int getId(){
return this.id;
}
......
......@@ -7,24 +7,41 @@
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="302dp"
android:layout_height="53dp"
android:text="@string/creer_mess"
android:textAlignment="center"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.077" />
<Button
android:id="@+id/home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="home"
android:text="@string/home"
android:onClick="quit"
android:text="@string/quitter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.931" />
<Button
android:id="@+id/boutonCreerPiece"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="nouvellePiece"
android:text="@string/creer_piece"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.929" />
app:layout_constraintVertical_bias="0.836" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -20,7 +20,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="home"
android:text="@string/home"
android:text="@string/quitter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/piece"
android:layout_height="match_parent">
<TextView
android:id="@+id/nomPiece"
android:layout_width="312dp"
android:layout_height="122dp"
android:textAlignment="center"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.375" />
<Button
android:id="@+id/boutonRetour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="backToModele"
android:text="@string/accueil"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.866" />
<Button
android:id="@+id/boutonAccueil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="quit"
android:text="@string/quitter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.951" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -4,5 +4,7 @@
<string name="ouvrir">Ouvrir un modèle existant</string>
<string name="creer_mess">Nouveau modèle créé</string>
<string name="ouvrir_mess">Modèle correctement importé</string>
<string name="home">Retour à l\'accueil</string>
<string name="quitter">Retour à l\'accueil</string>
<string name="accueil">Retour au modèle</string>
<string name="creer_piece">Ajouter un pièce</string>
</resources>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment