diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 608d0ed7b62fe1985ea86e33915895828e2944ed..bfeb52ff89a23339edb0862ab1ebe80f5dc9c8bb 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 e0837e4a99b38a29a4ecaf9482c2d0d912fb55c0..7909a34f0ef73a0e5a0878d1f41d4c1ddda7cb74 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 0000000000000000000000000000000000000000..fc7483f82546d53ecf5c98cf541abf69215ef168 --- /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 7d5b67cdb1dc7aa926b2fbd2966695b51932bea3..0000000000000000000000000000000000000000 --- 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 53c43556bbe9860e2a011363dbcb07cae0a7d5fd..9512983c96534f97a18fd53bb2125517653a2eb1 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 27203cca86c20526d1db17107b1e63a820ca00fa..1fc29a792ddfe4d2e827b743a70750f45913e62b 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); } }