diff --git a/app/src/main/java/fr/ul/projet/AccesActivity.java b/app/src/main/java/fr/ul/projet/AccesActivity.java index ac8664f29fc63248e825baabf36b35fd22cab574..204aece9c8483debfc0c80d37023005171777e7c 100644 --- a/app/src/main/java/fr/ul/projet/AccesActivity.java +++ b/app/src/main/java/fr/ul/projet/AccesActivity.java @@ -7,6 +7,7 @@ import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; +import android.os.SystemClock; import android.provider.MediaStore; import android.util.Log; import android.view.View; @@ -42,6 +43,8 @@ public class AccesActivity extends AppCompatActivity { private Modele modele; private Piece piece; private String direction; + private String directionDest; + private int idDest; private Uri photo; private ActivityResultLauncher<Intent> launcher; @@ -58,6 +61,9 @@ public class AccesActivity extends AppCompatActivity { this.piece = this.modele.getPieceCourante(); this.photo = getIntent().getParcelableExtra("photo"); this.direction = getIntent().getExtras().getString("direction"); + this.directionDest = getIntent().getExtras().getString("directionDest"); + this.idDest = getIntent().getExtras().getInt("pieceDest"); + TextView textView = findViewById(R.id.textView2); textView.setText(getString(R.string.acces, this.modele.getNom(), this.piece.getNom(), direction)); @@ -69,14 +75,14 @@ public class AccesActivity extends AppCompatActivity { Button ajouter = findViewById(R.id.boutonAcces); ajouter.setOnClickListener(v -> { - imageView.setDrawing(); + imageView.setDrawing(this.idDest); }); imageView.setOnRectangleClickListener(new DrawableImageView.OnRectangleClickListener() { @Override public void onRectangleClick(int rectangleId) { - Toast.makeText(AccesActivity.this, "Rectangle " + rectangleId + " cliqué", Toast.LENGTH_SHORT).show(); + Toast.makeText(AccesActivity.this, "Accès à la pièce " + AccesActivity.this.modele.getPieces().get(rectangleId).getNom(), Toast.LENGTH_SHORT).show(); } }); diff --git a/app/src/main/java/fr/ul/projet/DrawableImageView.java b/app/src/main/java/fr/ul/projet/DrawableImageView.java index a7c9b65c30704cd5354d9137f534cbd0168f8b9e..f29ef99ca728194e5881bc40ecb04d5c8716225a 100644 --- a/app/src/main/java/fr/ul/projet/DrawableImageView.java +++ b/app/src/main/java/fr/ul/projet/DrawableImageView.java @@ -23,6 +23,8 @@ public class DrawableImageView extends AppCompatImageView { private boolean isDrawingFinished = false; private boolean fixed = false; private boolean drawing = false; + private int id; + private OnRectangleClickListener listener; public DrawableImageView(Context context, AttributeSet attrs) { @@ -108,7 +110,7 @@ public class DrawableImageView extends AppCompatImageView { Math.min(startX, endX), Math.min(startY, endY), Math.max(startX, endX), Math.max(startY, endY) ); - rectangles.put(rectangles.size(), rect); + rectangles.put(this.id, rect); rectanglesTemp.clear(); fixed = true; drawing=false; @@ -120,8 +122,9 @@ public class DrawableImageView extends AppCompatImageView { return false; } - public void setDrawing(){ + public void setDrawing(int idDest){ drawing = true; + id = idDest; } public void setOnRectangleClickListener(OnRectangleClickListener listener) { diff --git a/app/src/main/java/fr/ul/projet/PieceActivity.java b/app/src/main/java/fr/ul/projet/PieceActivity.java index 0480477bc04180cfaac4a3bed5a1d7fc731ddb6e..19cb813a063d132bad11604cd1fb5ea4e1cb145a 100644 --- a/app/src/main/java/fr/ul/projet/PieceActivity.java +++ b/app/src/main/java/fr/ul/projet/PieceActivity.java @@ -28,6 +28,9 @@ import androidx.core.view.WindowInsetsCompat; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import fr.ul.projet.modele.Modele; import fr.ul.projet.modele.Piece; @@ -35,6 +38,7 @@ import fr.ul.projet.modele.Piece; public class PieceActivity extends AppCompatActivity { private Modele modele; + private Uri photo; private Piece piece; private ActivityResultLauncher<Intent> launcher; private String directionSelectionne; @@ -106,7 +110,7 @@ public class PieceActivity extends AppCompatActivity { this.modele = getIntent().getParcelableExtra("modele"); this.piece = this.modele.getPieceCourante(); - Toast.makeText(this, "photo : "+this.piece.getPhotoNord(), Toast.LENGTH_LONG).show(); + @@ -186,7 +190,7 @@ public class PieceActivity extends AppCompatActivity { } else if (which == 1){ this.selectionnerPhoto(); } else if (which == 2){ - Uri photo=null; + this.photo=null; switch (directionSelectionne){ case "Nord": photo = this.piece.getPhotoNord(); @@ -204,19 +208,104 @@ public class PieceActivity extends AppCompatActivity { if (photo != null){ - Intent intent = new Intent(PieceActivity.this, AccesActivity.class); - intent.putExtra("modele", this.modele); - intent.putExtra("photo", photo); - intent.putExtra("direction", directionSelectionne); - launcher.launch(intent); + creationAcces(); + + }else{ - Toast.makeText(this, "Vous devez ajouter la photo avant d'ajouter un accés" + this.modele.getPieceCourante().getId(), Toast.LENGTH_LONG).show(); + Toast.makeText(this, "Vous devez ajouter la photo avant d'ajouter un accés", Toast.LENGTH_LONG).show(); } } }) .show(); } + private void creationAcces(){ + if (this.modele.getPieces().size() == 1){ + Toast.makeText(this, "Aucune pièce à accéder.", Toast.LENGTH_LONG).show(); + }else{ + List<String> piecesList = new ArrayList<>(); + for (Map.Entry<Integer, Piece> entry : this.modele.getPieces().entrySet()){ + if (!entry.getKey().equals(this.piece.getId())){ + piecesList.add(entry.getValue().getNom()); + } + } + + String[] piecesArray = piecesList.toArray(new String[0]); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("Choisir une pièce de destination") + .setItems(piecesArray, (dialog1, which1) -> { + String selectedPiece = piecesArray[which1]; + + String[] directions = {"Nord", "Sud", "Est", "Ouest"}; + AlertDialog.Builder builder2 = new AlertDialog.Builder(this); + builder2.setTitle("Choisir une direction") + .setItems(directions, (dialog2, which2) ->{ + switch (directions[which2]){ + case "Nord": + if (this.modele.getPieces().get(this.modele.getPieceByNom(selectedPiece)).getPhotoNord() != null){ + Intent intent = new Intent(PieceActivity.this, AccesActivity.class); + intent.putExtra("modele", this.modele); + intent.putExtra("photo", PieceActivity.this.photo); + intent.putExtra("direction", directionSelectionne); + intent.putExtra("directionDest", directions[which2]); + intent.putExtra("pieceDest", this.modele.getPieceByNom(selectedPiece)); + launcher.launch(intent); + }else{ + Toast.makeText(PieceActivity.this, "Destination incorrecte. Ajouter une photo d'arrivée", Toast.LENGTH_LONG).show(); + } + break; + case "Sud": + if (this.modele.getPieces().get(this.modele.getPieceByNom(selectedPiece)).getPhotoSud() != null){ + Intent intent = new Intent(PieceActivity.this, AccesActivity.class); + intent.putExtra("modele", this.modele); + intent.putExtra("photo", PieceActivity.this.photo); + intent.putExtra("direction", directionSelectionne); + intent.putExtra("directionDest", directions[which2]); + intent.putExtra("pieceDest", this.modele.getPieceByNom(selectedPiece)); + launcher.launch(intent); + }else{ + Toast.makeText(PieceActivity.this, "Destination incorrecte. Ajouter une photo d'arrivée", Toast.LENGTH_LONG).show(); + } + break; + case "Est": + if (this.modele.getPieces().get(this.modele.getPieceByNom(selectedPiece)).getPhotoEst() != null){ + Intent intent = new Intent(PieceActivity.this, AccesActivity.class); + intent.putExtra("modele", this.modele); + intent.putExtra("photo", PieceActivity.this.photo); + intent.putExtra("direction", directionSelectionne); + intent.putExtra("directionDest", directions[which2]); + intent.putExtra("pieceDest", this.modele.getPieceByNom(selectedPiece)); + launcher.launch(intent); + }else{ + Toast.makeText(PieceActivity.this, "Destination incorrecte. Ajouter une photo d'arrivée", Toast.LENGTH_LONG).show(); + } + break; + case "Ouest": + if (this.modele.getPieces().get(this.modele.getPieceByNom(selectedPiece)).getPhotoOuest() != null){ + Intent intent = new Intent(PieceActivity.this, AccesActivity.class); + intent.putExtra("modele", this.modele); + intent.putExtra("photo", PieceActivity.this.photo); + intent.putExtra("direction", directionSelectionne); + intent.putExtra("directionDest", directions[which2]); + intent.putExtra("pieceDest", this.modele.getPieceByNom(selectedPiece)); + launcher.launch(intent); + }else{ + Toast.makeText(PieceActivity.this, "Destination incorrecte. Ajouter une photo d'arrivée", Toast.LENGTH_LONG).show(); + } + break; + } + + + }); + builder2.show(); + }); + builder.show(); + } + + + } + private void prendrePhoto() { // Obtenir le dossier de stockage des images File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); diff --git a/app/src/main/java/fr/ul/projet/modele/Modele.java b/app/src/main/java/fr/ul/projet/modele/Modele.java index 2105b3c918f58bd161b59b7742b383399983690e..66a01d8274363b0c1bbe1efa6ec6bbab5de93caf 100644 --- a/app/src/main/java/fr/ul/projet/modele/Modele.java +++ b/app/src/main/java/fr/ul/projet/modele/Modele.java @@ -74,21 +74,21 @@ public class Modele implements Parcelable{ this.nom = in.readString(); this.orientationCourante = in.readString(); this.pieces = new HashMap<Integer, Piece>(); - int size = in.readInt(); this.pieceCourante = in.readParcelable(Piece.class.getClassLoader()); - if (pieceCourante != null){ - this.pieces.put(this.pieceCourante.getId(), this.pieceCourante); + if (pieceCourante != null && this.pieces.containsValue(this.pieceCourante)){ + this.pieces.remove(this.pieceCourante.getId()); } - + int size = in.readInt(); for (int i = 0; i < size; i++){ int key = in.readInt(); - if (key != this.pieceCourante.getId()){ - Piece piece = in.readParcelable(Piece.class.getClassLoader()); - this.pieces.put(key, piece); - } - + Piece piece = in.readParcelable(Piece.class.getClassLoader()); + this.pieces.put(key, piece); + } + if (pieceCourante != null){ + this.pieces.put(this.pieceCourante.getId(), this.pieceCourante); } + } /** @@ -115,8 +115,12 @@ public class Modele implements Parcelable{ dest.writeString(this.fichierJson); dest.writeString(this.nom); dest.writeString(this.orientationCourante); - dest.writeInt(this.pieces.size()); dest.writeParcelable(this.pieceCourante, flags); + if (this.pieceCourante != null && this.pieces.containsValue(this.pieceCourante)){ + this.pieces.remove(this.pieceCourante.getId()); + } + + dest.writeInt(this.pieces.size()); for (Map.Entry<Integer, Piece> entry : this.pieces.entrySet()){ dest.writeInt(entry.getKey()); dest.writeParcelable(entry.getValue(), flags); @@ -145,6 +149,15 @@ public class Modele implements Parcelable{ return this.nom; } + public int getPieceByNom(String nom){ + for (Piece p : this.pieces.values()){ + if (p.getNom().equals(nom)){ + return p.getId(); + } + } + return -1; + } + /** * Setter du nom du bâtiment * @param nom Nom souhaité pour le bâtiment