Skip to content
Snippets Groups Projects
CreationOuvertureActivity.java 12.09 KiB
package com.example.myhabitat;

import android.content.Intent;
import android.graphics.*;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceView;
import android.view.View;
import android.widget.*;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import habitat.*;
import org.json.JSONObject;

import java.io.*;
import java.time.Duration;

public class CreationOuvertureActivity extends AppCompatActivity{

    private Habitat habitat;
    private ImageView imageViewDepart;
    private Piece pieceDepart;
    private Piece pieceArrivee;
    private Piece pieceEnCours;
    private Orientation orientationPieceDepart;
    private Orientation orientationPieceArrivee;
    private Paint myPaint;
    private Canvas canvasDepart;
    private Rect rectDepart;
    private Rect rectArrivee;
    private Button buttonConfirmer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_creation_ouverture);

        //On récupère Habitat
        Intent intent = getIntent();
        if (intent != null){
            Habitat habitat = intent.getParcelableExtra("Habitat");
            if (habitat != null){
                this.habitat = habitat;
                this.habitat.setCorrectly();
            }
        }

        buttonConfirmer = findViewById(R.id.buttonConfirmer);
        buttonConfirmer.setEnabled(false);

        imageViewDepart = findViewById(R.id.imageViewDepart);

        myPaint = new Paint();
        myPaint.setStrokeWidth(5);
        myPaint.setColor(Color.BLUE);
        myPaint.setStyle(Paint.Style.STROKE);

        setSurfaceForSelect();

        Spinner spinnerD = findViewById(R.id.spinnerDepart);
        Spinner spinnerDOrientation = findViewById(R.id.spinnerDOrientation);
        Spinner spinnerA = findViewById(R.id.spinnerArrivee);
        Spinner spinnerAOrientation = findViewById(R.id.spinnerAOrientation);

        String[] arrayPieces = new String[habitat.getPieces().size()];
        for(int i=0; i<habitat.getPieces().size(); i++){
            arrayPieces[i] = habitat.getPieces().get(i).getNom();
        }

        String[] arrayOrientation = new String[]{"NORD", "SUD", "EST", "OUEST"};

        ArrayAdapter arrayAdapterD = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, arrayPieces);
        spinnerD.setAdapter(arrayAdapterD);
        ArrayAdapter arrayAdapterDOrientation = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, arrayOrientation);
        spinnerDOrientation.setAdapter(arrayAdapterDOrientation);
        ArrayAdapter arrayAdapterA = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, arrayPieces);
        spinnerA.setAdapter(arrayAdapterA);
        ArrayAdapter arrayAdapterAOrientation = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, arrayOrientation);
        spinnerAOrientation.setAdapter(arrayAdapterAOrientation);


        spinnerD.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                pieceDepart = habitat.getPieces().get(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        spinnerDOrientation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                switch (position){
                    case 0:
                        orientationPieceDepart = Orientation.NORD;
                        break;
                    case 1:
                        orientationPieceDepart = Orientation.SUD;
                        break;
                    case 2:
                        orientationPieceDepart = Orientation.EST;
                        break;
                    case 3:
                        orientationPieceDepart = Orientation.OUEST;
                        break;
                    default:
                        orientationPieceDepart = Orientation.SUD;
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }

        });

        spinnerA.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                pieceArrivee = habitat.getPieces().get(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        spinnerAOrientation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                switch (position){
                    case 0:
                        orientationPieceArrivee = Orientation.NORD;
                        break;
                    case 1:
                        orientationPieceArrivee = Orientation.SUD;
                        break;
                    case 2:
                        orientationPieceArrivee = Orientation.EST;
                        break;
                    case 3:
                        orientationPieceArrivee = Orientation.OUEST;
                        break;
                    default:
                        orientationPieceArrivee = Orientation.SUD;
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    private void setSurfaceForSelect() {
        SurfaceView surfaceViewDepart = findViewById(R.id.surfaceViewDepart);
        surfaceViewDepart.setZOrderOnTop(true);
        surfaceViewDepart.getHolder().setFormat(PixelFormat.TRANSPARENT);
        canvasDepart = surfaceViewDepart.getHolder().lockCanvas();

        imageViewDepart.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (pieceEnCours != null) {
                    if (event.getPointerCount() == 2) {
                        float x1, x2, y1, y2;
                        x1 = event.getX(0);
                        y1 = event.getY(0);
                        x2 = event.getX(1);
                        y2 = event.getY(1);
                        Log.i("SelectActivity", "################################################# Coords : " + x1 + " | " + y1 + "  &  " + x2 + " | " + y2);

                        if (pieceEnCours.equals(pieceDepart)) {
                            rectDepart = new Rect((int) x1, (int) y1, (int) x2, (int) y2);
                            rectDepart.sort();

                            try {
                                canvasDepart = surfaceViewDepart.getHolder().lockCanvas();
                                synchronized (surfaceViewDepart.getHolder()) {
                                    canvasDepart.drawColor(0, PorterDuff.Mode.CLEAR);
                                    canvasDepart.drawRect(rectDepart, myPaint);
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                if (canvasDepart != null) {
                                    surfaceViewDepart.getHolder().unlockCanvasAndPost(canvasDepart);
                                }
                            }
                        } else {
                            rectArrivee = new Rect((int) x1, (int) y1, (int) x2, (int) y2);
                            rectArrivee.sort();

                            try {
                                canvasDepart = surfaceViewDepart.getHolder().lockCanvas();
                                synchronized (surfaceViewDepart.getHolder()) {
                                    canvasDepart.drawColor(0, PorterDuff.Mode.CLEAR);
                                    canvasDepart.drawRect(rectArrivee, myPaint);
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                if (canvasDepart != null) {
                                    surfaceViewDepart.getHolder().unlockCanvasAndPost(canvasDepart);
                                }
                            }
                        }
                        if(rectArrivee != null && rectDepart != null){
                            buttonConfirmer.setEnabled(true);
                        }

                        //Log.i("testCoordsRect", "Coords Rect : " + rect.left + " | " + rect.top + "  &  " + rect.right + " | " + rect.bottom);

                    }

                }
                return true;
            }
        });
    }


    public void affichePieceDepart(){
        if(pieceDepart != null && orientationPieceDepart != null){
            Mur mur = pieceDepart.getMurOrientation(orientationPieceDepart);
            FileInputStream fis = null;
            try {
                fis = openFileInput(mur.getId()+".data");
            } catch (FileNotFoundException e) {
                //throw new RuntimeException(e);
            }
            if (fis != null) {
                Bitmap bm = BitmapFactory.decodeStream(fis);

                imageViewDepart.setImageBitmap(bm);
            }else{
                imageViewDepart.setImageDrawable(getDrawable(R.drawable.imagemur));
            }
            imageViewDepart.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });
        }
    }


    public void affichePieceArrivee(){
        if(pieceArrivee != null && orientationPieceArrivee != null){
            Mur mur = pieceArrivee.getMurOrientation(orientationPieceArrivee);
            FileInputStream fis = null;
            try {
                fis = openFileInput(mur.getId()+".data");
            } catch (FileNotFoundException e) {
                //throw new RuntimeException(e);
            }
            if (fis != null) {
                Bitmap bm = BitmapFactory.decodeStream(fis);

                imageViewDepart.setImageBitmap(bm);
            }else{
                imageViewDepart.setImageDrawable(getDrawable(R.drawable.imagemur));
            }
        }
    }

    public void setSDepart(View view) {
        pieceEnCours = pieceDepart;
        affichePieceDepart();
    }

    public void setSArrivee(View view) {
        pieceEnCours = pieceArrivee;
        affichePieceArrivee();
    }

    public void confirmer(View view) {
        Ouverture ouverture = new Ouverture(pieceDepart.getMurOrientation(orientationPieceDepart), pieceArrivee.getMurOrientation(orientationPieceArrivee), rectDepart, rectArrivee);
        habitat.addOuverture(ouverture);

        Toast.makeText(getBaseContext(), "Ouverture créée !", Toast.LENGTH_SHORT).show();

        enregistrement();
        finish();

    }

    public void enregistrement(){
        JSONObject enregistrement = new JSONObject();
        enregistrement = habitat.toJSON();

        if(enregistrement != null){
            FileOutputStream fos = null;
            try {
                fos = openFileOutput("enregistrement.json", MODE_PRIVATE);
                PrintStream ps = new PrintStream(fos);
                ps.print(enregistrement);
                ps.close();
                fos.flush();
                Log.i("testEnregistrement", "enregistrement.json a bien été enregistré");
                Log.i("testEnregistrement", "json = " + enregistrement.toString());
                //ouvrirJSON();
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            Log.i("testJSON", enregistrement.toString());

        }else{
            Log.i("testJSON", "pbm");
        }
    }
}