diff --git a/app/src/main/java/com/example/visualisation/Acces.java b/app/src/main/java/com/example/visualisation/Acces.java index 7627a1db5753547f2cb7e5c328b1de3b9ec5f2eb..b7aaee64cb09960c1322bdc8b99c775c79f5f3e4 100644 --- a/app/src/main/java/com/example/visualisation/Acces.java +++ b/app/src/main/java/com/example/visualisation/Acces.java @@ -1,24 +1,34 @@ package com.example.visualisation; +import android.graphics.Rect; + import java.io.Serializable; public class Acces implements Serializable { - private String piece1; - private String piece2; + private String nom; + private String piece; private int[] coord; - public Acces(String piece1, int[] coord) { - this.piece1 = piece1; - this.piece2 = ""; + public Acces(String nom, String piece, int[] coord) { + this.nom = nom; + this.piece = piece; this.coord = coord; } - public void setPiece2(String piece2) { - this.piece2 = piece2; + public void setPiece(String piece) { + this.piece = piece; } public int[] getCoord() { return this.coord; } + + public String getPiece() { + return piece; + } + + public String getNom() { + return nom; + } } diff --git a/app/src/main/java/com/example/visualisation/MainActivity.java b/app/src/main/java/com/example/visualisation/MainActivity.java index eb078186177fcb1033bb36b49902ebf4445e44ca..2f16aa18c84d1ba4e5a6ec092b4296928ec134c4 100644 --- a/app/src/main/java/com/example/visualisation/MainActivity.java +++ b/app/src/main/java/com/example/visualisation/MainActivity.java @@ -8,6 +8,7 @@ import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; diff --git a/app/src/main/java/com/example/visualisation/Photo.java b/app/src/main/java/com/example/visualisation/Photo.java index 0b03d9540f2393735656a74e49745d64b0439280..c71550f7a4fda4e9a2717547270e3b415026d500 100644 --- a/app/src/main/java/com/example/visualisation/Photo.java +++ b/app/src/main/java/com/example/visualisation/Photo.java @@ -1,5 +1,7 @@ package com.example.visualisation; +import android.graphics.Rect; + import java.io.Serializable; import java.util.ArrayList; @@ -13,6 +15,13 @@ public class Photo implements Serializable { this.acces = new ArrayList<>(); } + public void setNomAcces(Acces acces, String nom) { + for (Acces a : this.acces) { + if (a.equals(acces)) { + a.setPiece(nom); + } + } + } public int getNbAcces() { return acces.size(); } @@ -29,8 +38,12 @@ public class Photo implements Serializable { return acces; } - public void ajouterAcces(String piece1, int[] coord) { - Acces nouvelAcces = new Acces(piece1, coord); + public void ajouterAcces(String nom, String piece, int[] coord) { + Acces nouvelAcces = new Acces(nom, piece, coord); this.acces.add(nouvelAcces); } + + public void ajouterAcces(Acces acces) { + this.acces.add(acces); + } } diff --git a/app/src/main/java/com/example/visualisation/Piece.java b/app/src/main/java/com/example/visualisation/Piece.java index d350df51946976f7bfc64b3baf912de1dad40df6..557606f290db75d80edcdef1f1d9c55c7d05f5c3 100644 --- a/app/src/main/java/com/example/visualisation/Piece.java +++ b/app/src/main/java/com/example/visualisation/Piece.java @@ -46,4 +46,8 @@ public class Piece implements Serializable { public void setPath(int indice, String path) { this.photos.get(indice).setPath(path); } + + public ArrayList<Photo> getPhotos() { + return photos; + } } diff --git a/app/src/main/java/com/example/visualisation/PieceDetailsActivity.java b/app/src/main/java/com/example/visualisation/PieceDetailsActivity.java index bc6579f3050822b6af5a2a717fcca29aca940585..4aa0a6bb04555e161155562687c15fd74c9e21b9 100644 --- a/app/src/main/java/com/example/visualisation/PieceDetailsActivity.java +++ b/app/src/main/java/com/example/visualisation/PieceDetailsActivity.java @@ -1,23 +1,43 @@ package com.example.visualisation; +import android.Manifest; import android.content.Intent; +import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.Rect; import android.os.Bundle; +import android.util.Log; +import android.view.SurfaceHolder; +import android.view.SurfaceView; import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; -public class PieceDetailsActivity extends AppCompatActivity { +public class PieceDetailsActivity extends AppCompatActivity implements SurfaceHolder.Callback { + private static final int REQUEST_WRITE_EXTERNAL_STORAGE = 1; private TextView nomPiece; private ImageView imageView; private Modele modele; - private Piece pieceDepart; + private Piece piece; private int indicePhoto; + private SurfaceView surfaceView; + private SurfaceHolder surfaceHolder; + private Paint paint; + private Rect rect; @Override @@ -33,10 +53,54 @@ public class PieceDetailsActivity extends AppCompatActivity { Intent intent = getIntent(); if (intent != null) { modele = (Modele) intent.getSerializableExtra("modele"); - pieceDepart = (Piece) intent.getSerializableExtra("piece"); - nomPiece.setText(pieceDepart.getNom()); + piece = (Piece) intent.getSerializableExtra("piece"); + nomPiece.setText(piece.getNom()); + } + + surfaceView = findViewById(R.id.surfaceView); + surfaceView.setZOrderOnTop(true); + surfaceHolder = surfaceView.getHolder(); + surfaceHolder.setFormat(PixelFormat.TRANSPARENT); + surfaceHolder.addCallback(this); + + paint = new Paint(); + paint.setColor(Color.RED); + paint.setStrokeWidth(5); + paint.setTextSize(40); + paint.setStyle(Paint.Style.STROKE); + + afficherPhoto(); + } - afficherPhoto(); + private void dessinerRect() { + //surfaceHolder = surfaceView.getHolder(); + if (surfaceHolder != null) { + Canvas canvas = surfaceHolder.lockCanvas(); + if (canvas != null) { + try { + canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); + Photo photo = piece.getPhoto(indicePhoto); + for (Acces acces : photo.getAcces()) { + Log.d("a", "" + acces.getPiece()); + int[] coord = acces.getCoord(); + Rect accesRect = new Rect(coord[0], coord[1], coord[2], coord[3]); + paint.setStrokeWidth(5); + canvas.drawRect(accesRect, paint); + paint.setStrokeWidth(2); + if (acces.getPiece() == "") { + canvas.drawText(acces.getNom(), accesRect.centerX(), accesRect.centerY(), paint); + } else { + canvas.drawText(acces.getPiece(), accesRect.centerX(), accesRect.centerY(), paint); + } + } + } finally { + surfaceHolder.unlockCanvasAndPost(canvas); + } + } else { + Log.d("erreur canvas", "x"); + } + } else { + Log.d("erreur holder", "x"); } } @@ -62,11 +126,44 @@ public class PieceDetailsActivity extends AppCompatActivity { imageView.setImageResource(R.drawable.ajouter_photo); imageView.setAdjustViewBounds(true); - String path = pieceDepart.getPhoto(indicePhoto).getPath(); - if (path != "") { - Bitmap bitmap = BitmapFactory.decodeFile(getFilesDir() + "/" + path); - imageView.setImageBitmap(bitmap); - imageView.setAdjustViewBounds(true); + if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE); + } else { + String path = piece.getPhoto(indicePhoto).getPath(); + if (path != "") { + Log.d("Acces", "chemin : " + path); + Bitmap bitmap = BitmapFactory.decodeFile(path); + imageView.setImageBitmap(bitmap); + imageView.setAdjustViewBounds(true); + } + } + dessinerRect(); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == REQUEST_WRITE_EXTERNAL_STORAGE) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + afficherPhoto(); + } else { + Toast.makeText(this, "Autorisation pour stockage externe refusée", Toast.LENGTH_SHORT).show(); + } } } + + @Override + public void surfaceCreated(@NonNull SurfaceHolder holder) { + dessinerRect(); + } + + @Override + public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) { + + } + + @Override + public void surfaceDestroyed(@NonNull SurfaceHolder holder) { + + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_piece_details.xml b/app/src/main/res/layout/activity_piece_details.xml index e15b51850535985378004c469e3cbce0d9d678c4..908157d15aec3ae46258fe58fda72463b8c11900 100644 --- a/app/src/main/res/layout/activity_piece_details.xml +++ b/app/src/main/res/layout/activity_piece_details.xml @@ -7,6 +7,11 @@ android:layout_height="match_parent" tools:context=".PieceDetailsActivity"> + <SurfaceView + android:id="@+id/surfaceView" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + <LinearLayout android:id="@+id/mainLayout" android:layout_width="match_parent" @@ -27,16 +32,14 @@ <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1" - android:adjustViewBounds="true" - android:onClick="choixPhoto" /> + android:layout_height="600dp" + android:layout_gravity="center_horizontal" + android:adjustViewBounds="true" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="1" android:orientation="horizontal" android:gravity="center_horizontal" >