diff --git a/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java b/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java index 0dcde87baec7d80615c159e60107cdb54c9354c0..a597362d0ff89eea69eecfb77b4bc67b56a9fa20 100644 --- a/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java +++ b/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java @@ -166,6 +166,11 @@ public class CreationOuvertureActivity extends AppCompatActivity{ } }); + + Button buttonselectD = findViewById(R.id.buttonSDepart); + buttonselectD.setBackgroundColor(Color.LTGRAY); + Button buttonselectA = findViewById(R.id.buttonSArrivee); + buttonselectA.setBackgroundColor(Color.LTGRAY); } /** @@ -243,6 +248,10 @@ public class CreationOuvertureActivity extends AppCompatActivity{ * Fonction qui affiche la piece de depart */ public void affichePieceDepart(){ + Button buttonselectD = findViewById(R.id.buttonSDepart); + buttonselectD.setBackgroundColor(Color.DKGRAY); + Button buttonselectA = findViewById(R.id.buttonSArrivee); + buttonselectA.setBackgroundColor(Color.LTGRAY); if(pieceDepart != null && orientationPieceDepart != null){ Mur mur = pieceDepart.getMurOrientation(orientationPieceDepart); FileInputStream fis = null; @@ -272,6 +281,10 @@ public class CreationOuvertureActivity extends AppCompatActivity{ * Fonction qui affiche la piece d'arrivee */ public void affichePieceArrivee(){ + Button buttonselectD = findViewById(R.id.buttonSDepart); + buttonselectD.setBackgroundColor(Color.LTGRAY); + Button buttonselectA = findViewById(R.id.buttonSArrivee); + buttonselectA.setBackgroundColor(Color.DKGRAY); if(pieceArrivee != null && orientationPieceArrivee != null){ Mur mur = pieceArrivee.getMurOrientation(orientationPieceArrivee); FileInputStream fis = null; diff --git a/app/src/main/java/com/example/myhabitat/ModeConceptionActivity.java b/app/src/main/java/com/example/myhabitat/ModeConceptionActivity.java index 0824489f7500899751421b6d88ead65a57db6513..3542c4dd0d78d293a2078d53da3e0cd2e75dbae1 100644 --- a/app/src/main/java/com/example/myhabitat/ModeConceptionActivity.java +++ b/app/src/main/java/com/example/myhabitat/ModeConceptionActivity.java @@ -3,6 +3,7 @@ package com.example.myhabitat; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.drawable.Drawable; import android.provider.MediaStore; import android.text.Editable; import android.text.TextWatcher; @@ -116,11 +117,8 @@ public class ModeConceptionActivity extends AppCompatActivity { @Override protected void onStart() { - Log.i("testOnStart", "je vais dans le OnStart"); - Log.i("testEConception", habitat.getOuvertures().toString()); //On recupere habitat quand on revient de CreationOuvertureActivity ouvrirJSON(); - Log.i("testEConception", habitat.getOuvertures().toString()); super.onStart(); } @@ -163,8 +161,6 @@ public class ModeConceptionActivity extends AppCompatActivity { LinearLayout llMur = new LinearLayout(this); //llMur.setGravity(Gravity.CENTER_HORIZONTAL); ImageButton imageButton = new ImageButton(this); - imageButton.setMaxHeight(50); - imageButton.setMaxWidth(50); //On récupère la photo FileInputStream fis = null; @@ -177,6 +173,8 @@ public class ModeConceptionActivity extends AppCompatActivity { Bitmap bm = BitmapFactory.decodeStream(fis); imageButton.setImageBitmap(bm); + }else{ + imageButton.setImageDrawable(getDrawable(R.drawable.imagemur)); } diff --git a/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java b/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java index 3232e26541dda90034e498a295a6ea3130cf9f3c..2228636b026518a26b726d13026382c631a9844c 100644 --- a/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java +++ b/app/src/main/java/com/example/myhabitat/ModeImmersionActivity.java @@ -180,7 +180,7 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv //On met à jour la piece suivante si mode "aller a une piece" if(goToPiece != null){ - goTo(); + goToSuite(); } afficheOuvertures(); @@ -330,6 +330,10 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv super.onResume(); } + /** + * Fonction appelee pour trouver chemin jusqu'a une piece + * @param view + */ public void goTo(View view) { AlertDialog.Builder alertDialog = new AlertDialog.Builder(ModeImmersionActivity.this); alertDialog.setTitle("Choisi une piece où aller"); @@ -357,13 +361,16 @@ public class ModeImmersionActivity extends AppCompatActivity implements SensorEv alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - goTo(); + goToSuite(); } }); alertDialog.show(); } - private void goTo() { + /** + * Suite de la fonction goTo, permet d'initialiser le chemin + */ + private void goToSuite() { if(!pieceEnCours.equals(goToPiece)) { ArrayList<Piece> chemin = grapheHabitat.getPlusCourtChemin(pieceEnCours, goToPiece); diff --git a/app/src/main/java/outils/GrapheHabitat.java b/app/src/main/java/outils/GrapheHabitat.java index 593566f0e5e3bfd39639b0a71151e26e89b79f58..3238d78ae4446c6d164fdcded24fde804849888b 100644 --- a/app/src/main/java/outils/GrapheHabitat.java +++ b/app/src/main/java/outils/GrapheHabitat.java @@ -1,5 +1,4 @@ package outils; -import android.util.Log; import habitat.Habitat; import habitat.Ouverture; import habitat.Piece; @@ -8,9 +7,10 @@ import java.util.*; public class GrapheHabitat { - // A class to store a graph edge - class Edge - { + /** + * Classe pour les aretes du graphe + */ + class Edge{ int source, dest, weight; public Edge(int source, int dest, int weight) @@ -21,26 +21,29 @@ public class GrapheHabitat { } } - // A class to store a heap node - class Node - { + /** + * Classe pour les noeuds + */ + class Noeud{ int vertex, weight; - public Node(int vertex, int weight) + public Noeud(int vertex, int weight) { this.vertex = vertex; this.weight = weight; } } - // A class to represent a graph object - class Graph + /** + * Classe pour un graphe + */ + class Graphe { // A list of lists to represent an adjacency list List<List<Edge>> adjList = null; // Constructor - Graph(List<Edge> edges, int n) + Graphe(List<Edge> edges, int n) { adjList = new ArrayList<>(); @@ -58,9 +61,13 @@ public class GrapheHabitat { private Habitat habitat; private HashMap<Integer, Piece> hmap; private HashMap<Piece, Integer> hmapGet; - //private HashMap<Piece, List<Piece>> res; private HashMap<Piece, HashMap<Piece, ArrayList<Piece>>> res; + + /** + * constructeur de GrapheHabitat + * @param habitat + */ public GrapheHabitat(Habitat habitat) { this.habitat = habitat; res = new HashMap<>(); @@ -71,7 +78,7 @@ public class GrapheHabitat { for(Piece piece : habitat.getPieces()){ hmap.put(i, piece); hmapGet.put(piece, i); - Log.i("testGraphe", "je mets " + piece.getNom()); + //Log.i("testGraphe", "je mets " + piece.getNom()); i++; res.put(piece, new HashMap<>()); @@ -90,22 +97,22 @@ public class GrapheHabitat { //On créé la list à partir des ouvertures List<Edge> edges = new ArrayList<>(); for(Ouverture ouverture : habitat.getOuvertures()){ - Log.i("testGraphe", "je veux " + ouverture.getMurDepart().getPiece() + " et " + ouverture.getMurArrivee().getPiece()); + //Log.i("testGraphe", "je veux " + ouverture.getMurDepart().getPiece() + " et " + ouverture.getMurArrivee().getPiece()); edges.add(new Edge(hmapGet.get(ouverture.getMurDepart().getPiece()), hmapGet.get(ouverture.getMurArrivee().getPiece()), 1)); edges.add(new Edge(hmapGet.get(ouverture.getMurArrivee().getPiece()), hmapGet.get(ouverture.getMurDepart().getPiece()), 1)); } - // total number of nodes in the graph (labelled from 0 to 4) + // nombre total d'aretes int n = habitat.getOuvertures().size()*2; - // construct graph - Graph graph = new Graph(edges, n); + // construction du graphe + Graphe graphe = new Graphe(edges, n); - // run the Dijkstra’s algorithm from every node + // on applique dijkstra sur tous les noeuds for (int source = 0; source < n; source++) { - findShortestPaths(graph, source, n); + plusCourtChemin(graphe, source, n); } //For test @@ -122,6 +129,12 @@ public class GrapheHabitat { */ } + /** + * Fonction qui donne le chemin + * @param prev + * @param i + * @param route + */ private void getRoute(int[] prev, int i, List<Piece> route) { if (i >= 0) @@ -131,19 +144,24 @@ public class GrapheHabitat { } } - // Run Dijkstra’s algorithm on a given graph - public void findShortestPaths(Graph graph, int source, int n) + + /** + * Fonction qui applique dijkstra sur tout le graphe + * @param graphe + * @param source + * @param n + */ + private void plusCourtChemin(Graphe graphe, int source, int n) { - // create a min-heap and push source node having distance 0 - PriorityQueue<Node> minHeap; - minHeap = new PriorityQueue<>(Comparator.comparingInt(node -> node.weight)); - minHeap.add(new Node(source, 0)); + // instanciation de depart pour Dijkstra + PriorityQueue<Noeud> minHeap; + minHeap = new PriorityQueue<>(Comparator.comparingInt(noeud -> noeud.weight)); + minHeap.add(new Noeud(source, 0)); - // set initial distance from the source to `v` as infinity + // initialise les distances de depart à l'infini List<Integer> dist; dist = new ArrayList<>(Collections.nCopies(n, Integer.MAX_VALUE)); - - // distance from the source to itself is zero + //Et celui de depart a 0 dist.set(source, 0); // boolean array to track vertices for which minimum @@ -159,13 +177,13 @@ public class GrapheHabitat { while (!minHeap.isEmpty()) { // Remove and return the best vertex - Node node = minHeap.poll(); + Noeud noeud = minHeap.poll(); // get the vertex number - int u = node.vertex; + int u = noeud.vertex; // do for each neighbor `v` of `u` - for (Edge edge: graph.adjList.get(u)) + for (Edge edge: graphe.adjList.get(u)) { int v = edge.dest; int weight = edge.weight; @@ -175,7 +193,7 @@ public class GrapheHabitat { { dist.set(v, dist.get(u) + weight); prev[v] = u; - minHeap.add(new Node(v, dist.get(v))); + minHeap.add(new Noeud(v, dist.get(v))); } } @@ -201,8 +219,14 @@ public class GrapheHabitat { } + /** + * Fonction permettant de retourner le chemin le + court entre 2 pieces + * @param pieceDepart + * @param pieceArrivee + * @return le chemin le + court entre pieceDepart et pieceArrivee + */ public ArrayList<Piece> getPlusCourtChemin(Piece pieceDepart, Piece pieceArrivee){ - Log.i("testGraphe", "Path (" + pieceDepart.getNom() + " -> " + pieceArrivee.getNom() + ", Route = " + res.get(pieceDepart).get(pieceArrivee)); + //Log.i("testGraphe", "Path (" + pieceDepart.getNom() + " -> " + pieceArrivee.getNom() + ", Route = " + res.get(pieceDepart).get(pieceArrivee)); return res.get(pieceDepart).get(pieceArrivee); } diff --git a/app/src/main/res/drawable/diagrammedeclasse.png b/app/src/main/res/drawable/diagrammedeclasse.png index 65dcafe2421132b033e4ff0cfeb8080c9cb07de8..a6dbffca8c94b4546f4660c01dd87ee5e3a4a569 100644 Binary files a/app/src/main/res/drawable/diagrammedeclasse.png and b/app/src/main/res/drawable/diagrammedeclasse.png differ diff --git a/app/src/main/res/layout/activity_creation_ouverture.xml b/app/src/main/res/layout/activity_creation_ouverture.xml index e5715adf428877b72dae4abfc77aea95e001b34e..0768cc549a9c9959556d9ffe2ad192da39e96c1e 100644 --- a/app/src/main/res/layout/activity_creation_ouverture.xml +++ b/app/src/main/res/layout/activity_creation_ouverture.xml @@ -27,7 +27,7 @@ android:layout_marginTop="16dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.892"/> + app:layout_constraintHorizontal_bias="0.918"/> <TextView android:text="@string/direction" @@ -49,7 +49,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@+id/spinnerDepart" - app:layout_constraintHorizontal_bias="0.137" + app:layout_constraintHorizontal_bias="0.112" app:layout_constraintVertical_bias="0.484"/> <TextView @@ -58,10 +58,10 @@ android:layout_height="wrap_content" android:id="@+id/textViewArrivee" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintHorizontal_bias="0.871" + app:layout_constraintHorizontal_bias="0.754" app:layout_constraintTop_toTopOf="parent" - android:layout_marginTop="16dp"/> + android:layout_marginTop="16dp" + app:layout_constraintStart_toEndOf="@+id/textViewDepart"/> <Spinner android:layout_width="181dp" @@ -100,10 +100,10 @@ android:layout_height="33dp" android:id="@+id/spinnerDOrientation" app:layout_constraintTop_toBottomOf="@+id/textView3" - android:layout_marginTop="20dp" + android:layout_marginTop="16dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.097"/> + app:layout_constraintHorizontal_bias="0.092"/> <SurfaceView android:layout_width="414dp" @@ -124,8 +124,8 @@ app:layout_constraintTop_toBottomOf="@+id/spinnerDOrientation" app:layout_constraintEnd_toStartOf="@+id/buttonSArrivee" app:layout_constraintStart_toStartOf="parent" - android:layout_marginTop="16dp" - app:layout_constraintHorizontal_bias="0.419"/> + android:layout_marginTop="20dp" + app:layout_constraintHorizontal_bias="0.158"/> <Button android:text="@string/selectionner" @@ -135,8 +135,8 @@ android:onClick="setSArrivee" app:layout_constraintTop_toBottomOf="@+id/spinnerAOrientation" app:layout_constraintEnd_toEndOf="parent" - android:layout_marginEnd="40dp" - android:layout_marginTop="16dp"/> + android:layout_marginEnd="16dp" + android:layout_marginTop="20dp"/> <Button android:text="@string/confirmer"