From 5bf97d01487dcbec205cf5e18bdd8993b378d058 Mon Sep 17 00:00:00 2001
From: JulietteSCHILLING <juliette.schilling2@etu.univ-lorraine.fr>
Date: Sun, 30 Oct 2022 11:55:10 +0100
Subject: [PATCH] prise photo mur + recup ok

---
 app/src/main/AndroidManifest.xml              |  3 +
 .../com/example/myhabitat/PiecesActivity.java | 92 ++++++++++++++++---
 .../java/habitat/GestionnaireEditHabitat.java | 41 +++++++++
 .../java/habitat/GestionnaireEditPiece.java   | 27 ------
 app/src/main/java/habitat/Habitat.java        |  7 --
 app/src/main/java/habitat/Mur.java            | 13 +++
 6 files changed, 137 insertions(+), 46 deletions(-)
 create mode 100644 app/src/main/java/habitat/GestionnaireEditHabitat.java
 delete mode 100644 app/src/main/java/habitat/GestionnaireEditPiece.java

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 608d0ed..bfeb52f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,9 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     package="com.example.myhabitat" >
+    <uses-feature
+            android:name="android.hardware.camera"
+            android:required="true"/>
 
     <application
         android:allowBackup="true"
diff --git a/app/src/main/java/com/example/myhabitat/PiecesActivity.java b/app/src/main/java/com/example/myhabitat/PiecesActivity.java
index e0837e4..7909a34 100644
--- a/app/src/main/java/com/example/myhabitat/PiecesActivity.java
+++ b/app/src/main/java/com/example/myhabitat/PiecesActivity.java
@@ -1,13 +1,18 @@
 package com.example.myhabitat;
 
 import android.content.Intent;
+import android.graphics.Bitmap;
+import android.provider.MediaStore;
 import android.text.Editable;
 import android.text.TextWatcher;
+import android.util.Log;
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.TextView;
+import android.widget.*;
+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.AppCompatActivity;
 import android.os.Bundle;
 import habitat.*;
@@ -15,14 +20,19 @@ import habitat.*;
 public class PiecesActivity extends AppCompatActivity {
     private Habitat habitat;
     private TextView textView;
-    private GestionnaireEditPiece gestionnaire;
+    private GestionnaireEditHabitat gestionnaire;
+    private ActivityResultLauncher<Intent> launcher;
+    private ImageButton photoEnCours;
+
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_pieces);
 
-        gestionnaire = new GestionnaireEditPiece();
+        gestionnaire = new GestionnaireEditHabitat();
+
+        photoEnCours = null;
 
         //On récupère Habitat
         Intent intent = getIntent();
@@ -32,13 +42,50 @@ public class PiecesActivity extends AppCompatActivity {
                 this.habitat = habitat;
                 this.habitat.setCorrectly();
                 affichePieces();
-                /*
-                textView = findViewById(R.id.textViewPieces);
-                textView.setText(habitat.toString());
-
-                 */
             }
         }
+
+        launcher = registerForActivityResult(
+                // Contrat qui détermine le type de l'interaction
+                new ActivityResultContracts.StartActivityForResult(),
+                // Callback appelé lorsque le résultat sera disponible
+                new ActivityResultCallback<ActivityResult>() {
+                    @Override
+                    public void onActivityResult(ActivityResult result) {
+                        //On récupère les données de habitat
+                        Intent intent = result.getData();
+                        if(intent != null) {
+                            Bundle extras = intent.getExtras();
+                            Bitmap photoBitmap = (Bitmap) extras.get("data");
+
+                            //On vérifie que la photo a bien été prise
+                            //Toast.makeText(PiecesActivity.this, "hauteur de l'image : " + photoBitmap.getHeight(), Toast.LENGTH_SHORT);
+                            Log.i("testPhotoBitmap", "hauteur de l'image : " + photoBitmap.getHeight());
+
+                            gestionnaire.getMur(photoEnCours).setPhoto(photoBitmap);
+                            affichePieces();
+
+                            /*
+                            //On enregistre la photo
+                            FileOutputStream fos = null;
+                            try {
+                                fos = openFileOutput("image.data", MODE_PRIVATE);
+                                photoBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
+                                fos.flush();
+                                Log.i("MainActivity", "La photo a bien été enregistrée");
+                            } catch (FileNotFoundException e) {
+                                throw new RuntimeException(e);
+                            } catch (IOException e) {
+                                throw new RuntimeException(e);
+                            }
+
+                             */
+
+                        }
+
+                    }
+                }
+        );
     }
 
     private void affichePieces() {
@@ -50,7 +97,7 @@ public class PiecesActivity extends AppCompatActivity {
             editText.setText(piece.getNom());
             editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
             editText.setSingleLine();
-            gestionnaire.add(editText, piece);
+            gestionnaire.addEditText(editText, piece);
 
             editText.addTextChangedListener(new TextWatcher() {
                 @Override
@@ -72,7 +119,28 @@ public class PiecesActivity extends AppCompatActivity {
             TextView textView1 = new TextView(this);
             textView1.setText(piece.getMurs().toString());
             ll.addView(editText);
-            ll.addView(textView1);
+            //ll.addView(textView1);
+            for(Mur mur : piece.getMurs()){
+                LinearLayout llMur = new LinearLayout(this);
+                llMur.setOrientation(LinearLayout.HORIZONTAL);
+                ImageButton imageButton = new ImageButton(this);
+                imageButton.setMaxHeight(50);
+                imageButton.setMaxWidth(50);
+                imageButton.setImageBitmap(mur.getPhoto());
+                gestionnaire.addEditMur(imageButton, mur);
+                imageButton.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        photoEnCours = imageButton;
+                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+                        if (intent.resolveActivity(getPackageManager()) != null){
+                            launcher.launch(intent);
+                        }
+                    }
+                });
+                llMur.addView(imageButton);
+                ll.addView(llMur);
+            }
         }
     }
 
diff --git a/app/src/main/java/habitat/GestionnaireEditHabitat.java b/app/src/main/java/habitat/GestionnaireEditHabitat.java
new file mode 100644
index 0000000..fc7483f
--- /dev/null
+++ b/app/src/main/java/habitat/GestionnaireEditHabitat.java
@@ -0,0 +1,41 @@
+package habitat;
+
+import android.widget.EditText;
+import android.widget.ImageButton;
+
+import java.util.HashMap;
+
+public class GestionnaireEditHabitat {
+
+    private HashMap<EditText, Piece> hmapEditText;
+    private HashMap<ImageButton, Mur> hmapEditMur;
+
+    public GestionnaireEditHabitat() {
+        hmapEditText = new HashMap<EditText, Piece>();
+        hmapEditMur = new HashMap<ImageButton, Mur>();
+    }
+
+    public void addEditText(EditText editText, Piece piece){
+        hmapEditText.put(editText, piece);
+    }
+
+    public Piece getPiece(EditText editText){
+        return hmapEditText.get(editText);
+    }
+
+    public void addEditMur(ImageButton imageButton, Mur mur){
+        hmapEditMur.put(imageButton, mur);
+    }
+
+    public Mur getMur(ImageButton imageButton){
+        return hmapEditMur.get(imageButton);
+    }
+
+
+
+    public void reset(){
+        hmapEditText.clear();
+        hmapEditMur.clear();
+    }
+
+}
diff --git a/app/src/main/java/habitat/GestionnaireEditPiece.java b/app/src/main/java/habitat/GestionnaireEditPiece.java
deleted file mode 100644
index 7d5b67c..0000000
--- a/app/src/main/java/habitat/GestionnaireEditPiece.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package habitat;
-
-import android.widget.EditText;
-
-import java.util.HashMap;
-
-public class GestionnaireEditPiece {
-
-    private HashMap<EditText, Piece> hmap;
-
-    public GestionnaireEditPiece() {
-        hmap = new HashMap<EditText, Piece>();
-    }
-
-    public void add(EditText editText, Piece piece){
-        hmap.put(editText, piece);
-    }
-
-    public Piece getPiece(EditText editText){
-        return hmap.get(editText);
-    }
-
-    public void reset(){
-        hmap.clear();
-    }
-
-}
diff --git a/app/src/main/java/habitat/Habitat.java b/app/src/main/java/habitat/Habitat.java
index 53c4355..9512983 100644
--- a/app/src/main/java/habitat/Habitat.java
+++ b/app/src/main/java/habitat/Habitat.java
@@ -40,13 +40,6 @@ public class Habitat implements Parcelable {
         Mur murO = new Mur(piece1, Orientation.OUEST, this);
         piece1.setMurs(murS, murO, murN, murE);
         pieces.add(piece1);
-        Piece piece2 = new Piece("p2", this);
-        murN = new Mur(piece1, Orientation.NORD, this);
-        murE = new Mur(piece1, Orientation.EST, this);
-        murS = new Mur(piece1, Orientation.SUD, this);
-        murO = new Mur(piece1, Orientation.OUEST, this);
-        piece2.setMurs(murS, murO, murN, murE);
-        pieces.add(piece2);
     }
 
     public Habitat(Piece... pieces) {
diff --git a/app/src/main/java/habitat/Mur.java b/app/src/main/java/habitat/Mur.java
index 27203cc..1fc29a7 100644
--- a/app/src/main/java/habitat/Mur.java
+++ b/app/src/main/java/habitat/Mur.java
@@ -1,5 +1,6 @@
 package habitat;
 
+import android.graphics.Bitmap;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -8,11 +9,21 @@ public class Mur implements Parcelable {
     private Habitat habitat;
     private Piece piece;
     private Orientation orientation;
+    private Bitmap photo;
+
+    public Bitmap getPhoto() {
+        return photo;
+    }
+
+    public void setPhoto(Bitmap photo) {
+        this.photo = photo;
+    }
 
     public Mur(Piece piece, Habitat habitat) {
         this.habitat = habitat;
         this.piece = piece;
         this.orientation = Orientation.SUD;  //Par défaut
+        photo = null;
     }
 
     public Mur(Piece piece, Orientation orientation, Habitat habitat) {
@@ -23,6 +34,7 @@ public class Mur implements Parcelable {
 
     protected Mur(Parcel in) {
         orientation = (Orientation) in.readSerializable();
+        photo = in.readParcelable(Bitmap.class.getClassLoader());
     }
 
     public static final Creator<Mur> CREATOR = new Creator<Mur>() {
@@ -88,5 +100,6 @@ public class Mur implements Parcelable {
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeSerializable(orientation);
+        dest.writeParcelable(photo, flags);
     }
 }
-- 
GitLab