Skip to content
Snippets Groups Projects
Commit 123529b6 authored by CHAPUSOT Alexis's avatar CHAPUSOT Alexis
Browse files

ajout des acces et début modification

parent 3acc6bab
Branches
No related tags found
No related merge requests found
Showing
with 254 additions and 182 deletions
...@@ -89,7 +89,9 @@ public class CameraWithAccelererometre extends AppCompatActivity { ...@@ -89,7 +89,9 @@ public class CameraWithAccelererometre extends AppCompatActivity {
}); });
addWayLauncher= registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),(result)->{ addWayLauncher= registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),(result)->{
if(result.getResultCode()==RESULT_OK){ if(result.getResultCode()==RESULT_OK){
setResult(RESULT_OK); Intent intent1 = new Intent();
intent1.putExtra("position",position);
setResult(RESULT_OK,intent1);
finish(); finish();
} }
if(result.getResultCode()==RESULT_CANCELED){ if(result.getResultCode()==RESULT_CANCELED){
...@@ -106,14 +108,9 @@ public class CameraWithAccelererometre extends AppCompatActivity { ...@@ -106,14 +108,9 @@ public class CameraWithAccelererometre extends AppCompatActivity {
} }
} }
photoFile = new File(photoDirectory.getAbsolutePath(), "mur" + position); photoFile = new File(photoDirectory.getAbsolutePath(), "mur" + position);
if(updateMode){
Room room = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom();
Log.i("Camera","je cree un mur en update");
}
else{
Log.i("CAMERA","JE CREE UN NOUVEAU MUR"); Log.i("CAMERA","JE CREE UN NOUVEAU MUR");
BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().addWorkingWall(new Wall()); BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().addWorkingWall(new Wall());
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PERMISSION_GRANTED) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
1000); 1000);
...@@ -146,6 +143,9 @@ public class CameraWithAccelererometre extends AppCompatActivity { ...@@ -146,6 +143,9 @@ public class CameraWithAccelererometre extends AppCompatActivity {
addWay.setOnClickListener((view)->{ addWay.setOnClickListener((view)->{
FileOutputStream fos = null; FileOutputStream fos = null;
try { try {
if(updateMode) {
photoFile = new File(photoDirectory.getAbsolutePath(), "mur" + position + "_copy");
}
fos = new FileOutputStream(photoFile); fos = new FileOutputStream(photoFile);
bitmap.compress(Bitmap.CompressFormat.PNG,100,fos); bitmap.compress(Bitmap.CompressFormat.PNG,100,fos);
Log.i("camera",bitmap.getWidth() + "" + bitmap.getHeight()); Log.i("camera",bitmap.getWidth() + "" + bitmap.getHeight());
...@@ -153,8 +153,8 @@ public class CameraWithAccelererometre extends AppCompatActivity { ...@@ -153,8 +153,8 @@ public class CameraWithAccelererometre extends AppCompatActivity {
fos.flush(); fos.flush();
fos.close(); fos.close();
BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall().setLocation(photoFile.getAbsolutePath()); BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall().setLocation(photoFile.getAbsolutePath());
Intent intentWay = new Intent(this, WayActivity.class); Intent intentWay = new Intent(this, WayActivity.class);
intent.putExtra("position",position);
addWayLauncher.launch(intentWay); addWayLauncher.launch(intentWay);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
...@@ -180,12 +180,6 @@ public class CameraWithAccelererometre extends AppCompatActivity { ...@@ -180,12 +180,6 @@ public class CameraWithAccelererometre extends AppCompatActivity {
} }
bindPreview(cameraProvider); bindPreview(cameraProvider);
captureButton.setOnClickListener(view -> { captureButton.setOnClickListener(view -> {
if (updateMode) {
//appeler la photo avec copy en plus pour pouvoir remplacer par la suite sans
} else {
}
bitmap = previewView.getBitmap(); bitmap = previewView.getBitmap();
if(bitmap!=null){ if(bitmap!=null){
......
...@@ -16,8 +16,7 @@ public class Building implements IterableItem,Iterable<Room> { ...@@ -16,8 +16,7 @@ public class Building implements IterableItem,Iterable<Room> {
private String uuid; private String uuid;
private ArrayList<Room> workingRoom; private ArrayList<Room> workingRoom;
private String location; private String location;
private boolean selected;
private boolean selectionMode;
public Building(String Name){ public Building(String Name){
...@@ -26,9 +25,8 @@ public class Building implements IterableItem,Iterable<Room> { ...@@ -26,9 +25,8 @@ public class Building implements IterableItem,Iterable<Room> {
this.name = Name; this.name = Name;
this.rooms = new ArrayList<>(); this.rooms = new ArrayList<>();
this.valid =false;
this.workingRoom = new ArrayList<>(); this.workingRoom = new ArrayList<>();
this.selectionMode = false;
} }
public Building(){ public Building(){
this.uuid = UUID.randomUUID().toString(); this.uuid = UUID.randomUUID().toString();
...@@ -37,7 +35,15 @@ public class Building implements IterableItem,Iterable<Room> { ...@@ -37,7 +35,15 @@ public class Building implements IterableItem,Iterable<Room> {
this.rooms = new ArrayList<>(); this.rooms = new ArrayList<>();
this.valid =false; this.valid =false;
this.workingRoom = new ArrayList<>(); this.workingRoom = new ArrayList<>();
this.selectionMode = false;
}
public Building(Building building) {
this.uuid = building.uuid;
this.name = name;
this.rooms = new ArrayList<>(building.rooms);
this.workingRoom = new ArrayList<>(building.workingRoom);
this.location = building.location;
} }
public String getName() { public String getName() {
...@@ -83,17 +89,23 @@ public class Building implements IterableItem,Iterable<Room> { ...@@ -83,17 +89,23 @@ public class Building implements IterableItem,Iterable<Room> {
return uuid; return uuid;
} }
public boolean getValid(){ public boolean getValid(){
return valid;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) { if(rooms.isEmpty()){
this.selected = selected; return false;
}
for(Room r:rooms){
if(!r.getValid()){
return false;
}
}
return true;
} }
public void cancelRoom(){ public void cancelRoom(){
workingRoom.remove(workingRoom.get(workingRoom.size()-1)); workingRoom.remove(workingRoom.get(workingRoom.size()-1));
} }
......
...@@ -57,24 +57,17 @@ public class BuildingManager implements Iterable<Building>{ ...@@ -57,24 +57,17 @@ public class BuildingManager implements Iterable<Building>{
return buildingsList.iterator(); return buildingsList.iterator();
} }
public boolean isSelectedMode() {
return selectedMode;
}
public void setSelectedMode(boolean selectedMode) {
this.selectedMode = selectedMode;
}
public void unSelectAllBuilding(){
for(Building b:this.buildingsList){
b.setSelected(false);
}
}
public void validBuilding() { public void validBuilding() {
buildingsList.add(currentBuilding); buildingsList.add(currentBuilding);
currentBuilding=null;
} }
public void validBuilding(int position){ public void validBuilding(int position){
buildingsList.set(position,currentBuilding); buildingsList.set(position,currentBuilding);
currentBuilding=null;
} }
} }
...@@ -2,11 +2,15 @@ package com.example.buildingbuilder.Data; ...@@ -2,11 +2,15 @@ package com.example.buildingbuilder.Data;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull;
import com.example.buildingbuilder.IterableItem; import com.example.buildingbuilder.IterableItem;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Iterator;
import java.util.UUID; import java.util.UUID;
public class Room implements IterableItem { public class Room implements IterableItem,Iterable<Wall> {
private String location; private String location;
private String uuid; private String uuid;
private String name; private String name;
...@@ -68,9 +72,14 @@ public class Room implements IterableItem { ...@@ -68,9 +72,14 @@ public class Room implements IterableItem {
@Override @Override
public boolean getValid() { public boolean getValid() {
return false;
}
for (Wall w : walls) {
if (w == null) {
return false;
}
}
return true;
}
...@@ -133,4 +142,11 @@ public class Room implements IterableItem { ...@@ -133,4 +142,11 @@ public class Room implements IterableItem {
this.name = validRoom.getName(); this.name = validRoom.getName();
this.walls = validRoom.walls; this.walls = validRoom.walls;
} }
@NonNull
@NotNull
@Override
public Iterator<Wall> iterator() {
return Arrays.stream(walls).iterator();
}
} }
...@@ -59,10 +59,10 @@ public class ItemAdapter extends ArrayAdapter<IterableItem> { ...@@ -59,10 +59,10 @@ public class ItemAdapter extends ArrayAdapter<IterableItem> {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
if(getItem(position).getValid()){ if(getItem(position).getValid()){
valid.setBackground(ContextCompat.getDrawable(getContext(),R.drawable.check)); valid.setImageDrawable(ContextCompat.getDrawable(getContext(),R.drawable.check));
} }
else{ else{
valid.setBackground(ContextCompat.getDrawable(getContext(),android.R.drawable.ic_delete)); valid.setImageDrawable(ContextCompat.getDrawable(getContext(),android.R.drawable.ic_delete));
} }
text.setText(getItem(position).getName()); text.setText(getItem(position).getName());
return view; return view;
......
package com.example.buildingbuilder; package com.example.buildingbuilder;
import android.app.Application;
import android.content.Intent; import android.content.Intent;
import android.util.Log; import android.util.Log;
import android.view.View;
import android.widget.*; import android.widget.*;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
...@@ -10,6 +12,8 @@ import android.os.Bundle; ...@@ -10,6 +12,8 @@ import android.os.Bundle;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.example.buildingbuilder.Data.Building; import com.example.buildingbuilder.Data.Building;
import com.example.buildingbuilder.Data.BuildingManager; import com.example.buildingbuilder.Data.BuildingManager;
import com.example.buildingbuilder.Data.Room;
import com.example.buildingbuilder.Data.Wall;
import java.util.*; import java.util.*;
...@@ -27,19 +31,21 @@ public class MainActivity extends AppCompatActivity { ...@@ -27,19 +31,21 @@ public class MainActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
buildingList = new ArrayList<>(); buildingList = new ArrayList<>();
cancelSelectedMode = findViewById(R.id.BuildingSelectedModeCancel);
cancelSelectedMode.setOnClickListener(v->{
BuildingManager instance = BuildingManager.getInstance();
instance.setSelectedMode(false);
instance.unSelectAllBuilding();
adapter.notifyDataSetChanged();
});
save = findViewById(R.id.BuildingSave);
addLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { addLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if(result.getResultCode()==RESULT_OK){ if(result.getResultCode()==RESULT_OK){
for(Room r :BuildingManager.getInstance().getCurrentBuilding()){
for(Wall w:r){
if(w!=null) {
if (w.islocated()) {
String location = w.getLocation();
}
}
}
}
Intent data = result.getData(); Intent data = result.getData();
Bundle extras = null; Bundle extras = null;
if (data != null) { if (data != null) {
...@@ -51,15 +57,14 @@ public class MainActivity extends AppCompatActivity { ...@@ -51,15 +57,14 @@ public class MainActivity extends AppCompatActivity {
} }
if (position!=null){ if (position!=null){
//on fera la mise à jour du monde ajoutant les nouvelles qui ne sont pas dans celle de base plus mettre à jours les info des salles concernés BuildingManager.getInstance().validBuilding(Integer.parseInt(position));
//parcours tous les murs du monde et si la location est XXX_copy déplacer le fichier en XXX et changer la localisation
} }
else{ else{
Building building = BuildingManager.getInstance().getCurrentBuilding(); Building building = BuildingManager.getInstance().getCurrentBuilding();
buildingList.add(0,building); buildingList.add(0,building);
BuildingManager.getInstance().validBuilding(); BuildingManager.getInstance().validBuilding();
adapter.notifyDataSetChanged();
} }
adapter.notifyDataSetChanged();
} }
if(result.getResultCode()==RESULT_CANCELED){ if(result.getResultCode()==RESULT_CANCELED){
//supprimer photo prise //supprimer photo prise
...@@ -92,31 +97,31 @@ public class MainActivity extends AppCompatActivity { ...@@ -92,31 +97,31 @@ public class MainActivity extends AppCompatActivity {
}); });
buildingList.add(new Building("dummy")); buildingList.add(new Building("dummy"));
// /!\ je modifie un monde A FAIRE! // /!\ je modifie un monde A FAIRE!
/*grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { MainActivity context = this;
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position!=parent.getCount()-1){ if(! (view instanceof Button)){
intent.putExtra("position",position+"");
addLauncher.launch(intent); launchUpdate(position);
} }
} }
});*/ });
//quand j'appuie longtmps sur un monde je passe en mode de sélection A FAIRE!
/* grid.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
BuildingManager instance = BuildingManager.getInstance();
Building building = instance.getBuilding(position);
building.setSelected(true);
adapter.notifyDataSetChanged();
return true;
}
});*/
//je cree un nouveau monde
grid.setAdapter(adapter); grid.setAdapter(adapter);
} }
private void launchUpdate(int position) {
Intent intent1 = new Intent(this, WorldCreator.class);
intent1.putExtra("position",position);
addLauncher.launch(intent1);
}
} }
\ No newline at end of file
...@@ -44,6 +44,12 @@ public class WayActivity extends AppCompatActivity { ...@@ -44,6 +44,12 @@ public class WayActivity extends AppCompatActivity {
private ArrayAdapter<Room> adapter; private ArrayAdapter<Room> adapter;
private AlertDialog dialog; private AlertDialog dialog;
private ActivityResultLauncher<Intent> room_creator_launcher; private ActivityResultLauncher<Intent> room_creator_launcher;
private boolean restore;
private ImageView cancelWayActivity;
private ImageView confirmWayActivity;
private ArrayList<Rect> rectArray = new ArrayList<>();
private Wall wall;
private String position;
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
@Override @Override
...@@ -51,75 +57,40 @@ public class WayActivity extends AppCompatActivity { ...@@ -51,75 +57,40 @@ public class WayActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_way); setContentView(R.layout.activity_way);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
rect = new Rect(0,0,0,0);
imageMur = findViewById(R.id.PhotoMur); imageMur = findViewById(R.id.PhotoMur);
cancelWay = findViewById(R.id.cancelWay); cancelWay = findViewById(R.id.cancelWay);
confirmWay = findViewById(R.id.confirmWay); confirmWay = findViewById(R.id.confirmWay);
Button button = new Button(this);
button.setText(R.string.ajouter_une_pi_ce);
setupList(); setupList();
adapter = new ArrayAdapter<Room>(this, android.R.layout.simple_list_item_1,android.R.id.text1,rooms){
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView view1 = view.findViewById(android.R.id.text1);
view1.setText(rooms.get(position).getName());
return view;
}
};
listView = new ListView(this);
//listView.addFooterView(button);
listView.setOnItemClickListener((parent, view, position, id) -> {
Wall actualWall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall();
Room actualRoom = rooms.get(position);
actualWall.addAccess(x1,y1,x2,y2,actualRoom);
canDraw=true;
Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR);
holder.unlockCanvasAndPost(canvas);
cancelWay.setVisibility(View.INVISIBLE);
confirmWay.setVisibility(View.INVISIBLE);
dialog.dismiss();
});
listView.setAdapter(adapter);
listView.addFooterView(button);
setupBuilder(); setupBuilder();
Intent intent = getIntent(); Intent intent = getIntent();
String position = intent.getStringExtra("position"); position = intent.getStringExtra("position");
cancelWayActivity = findViewById(R.id.cancelWayActivity);
cancelWayActivity.setOnClickListener((v)->{
if(canDraw && !drawing) {
Intent intent1 = new Intent();
intent.putExtra("position", position);
setResult(RESULT_CANCELED, intent1);
finish();
}
});
confirmWayActivity = findViewById(R.id.confirmWayActivity);
confirmWayActivity.setOnClickListener((v)->{
if(canDraw && !drawing) {
Intent intent1 = new Intent();
intent1.putExtra("position", position);
setResult(RESULT_OK, intent1);
finish();
}
});
waySurface = findViewById(R.id.waySurface); waySurface = findViewById(R.id.waySurface);
waySurface.getHolder().setFormat(PixelFormat.TRANSPARENT); waySurface.getHolder().setFormat(PixelFormat.TRANSPARENT);
holder = waySurface.getHolder(); holder = waySurface.getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(@NonNull SurfaceHolder holder) {
Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR);
Wall wall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall();
drawAccess(canvas);
holder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
}
});
cancelWay.setOnClickListener((v)->{ cancelWay.setOnClickListener((v)->{
reset(); reset();
}); });
confirmWay.setOnClickListener((view)->{ confirmWay.setOnClickListener((view)->{
reset();
dialog.show(); dialog.show();
}); });
room_creator_launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { room_creator_launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
...@@ -128,24 +99,18 @@ public class WayActivity extends AppCompatActivity { ...@@ -128,24 +99,18 @@ public class WayActivity extends AppCompatActivity {
this.rooms.add(newRoom); this.rooms.add(newRoom);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
BuildingManager.getInstance().getCurrentBuilding().validRoom(); BuildingManager.getInstance().getCurrentBuilding().validRoom();
Wall actualWall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall(); wall.addAccess(x1,y1,x2,y2,newRoom);
actualWall.addAccess(x1,y1,x2,y2,newRoom);
dialog.dismiss(); dialog.dismiss();
cancelWay.setVisibility(View.INVISIBLE);
confirmWay.setVisibility(View.INVISIBLE);
canDraw=true;
} }
else{ else{
BuildingManager.getInstance().getCurrentBuilding().cancelRoom(); BuildingManager.getInstance().getCurrentBuilding().cancelRoom();
canDraw=true;
dialog.dismiss(); dialog.dismiss();
} }
}); });
button.setOnClickListener((v)->{
Intent intentCreator = new Intent(this,RoomCreator.class);
room_creator_launcher.launch(intentCreator);
});
waySurface.setZOrderOnTop(true); waySurface.setZOrderOnTop(true);
paint = new Paint(); paint = new Paint();
paint.setColor(Color.RED); paint.setColor(Color.RED);
...@@ -154,10 +119,32 @@ public class WayActivity extends AppCompatActivity { ...@@ -154,10 +119,32 @@ public class WayActivity extends AppCompatActivity {
Boolean update = intent.getBooleanExtra("updateMode",false); Boolean update = intent.getBooleanExtra("updateMode",false);
if(update){ if(update){
Wall wall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getWall(position); Wall copyWall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getWall(position);
BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().addWorkingWall(new Wall(wall) ); BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().addWorkingWall(new Wall(copyWall) );
} }
String location = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall().getLocation(); String location = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall().getLocation();
wall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(@NonNull SurfaceHolder holder) {
Canvas canvas = holder.lockCanvas();
drawAccess(canvas);
cancelWay.setVisibility(View.INVISIBLE);
confirmWay.setVisibility(View.INVISIBLE);
holder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
}
});
try { try {
FileInputStream fis = new FileInputStream(new File(location)); FileInputStream fis = new FileInputStream(new File(location));
Bitmap coverPicture = BitmapFactory.decodeStream(fis); Bitmap coverPicture = BitmapFactory.decodeStream(fis);
...@@ -168,18 +155,34 @@ public class WayActivity extends AppCompatActivity { ...@@ -168,18 +155,34 @@ public class WayActivity extends AppCompatActivity {
int action = event.getAction(); int action = event.getAction();
int nbPoints = event.getPointerCount(); int nbPoints = event.getPointerCount();
if (nbPoints == 2 && canDraw) { if (nbPoints == 2 && canDraw) {
int new_x1 = (int) Math.max(0, Math.min(event.getX(0),coverPicture.getWidth()));
int new_y1 = (int) Math.max(0, Math.min(coverPicture.getHeight(), event.getY(0)));
int new_x2 = (int) Math.max(0, Math.min(coverPicture.getWidth(), event.getX(1)));
int new_y2 = (int) Math.max(0, Math.min(coverPicture.getHeight(), event.getY(1)));
Canvas canvas = holder.lockCanvas(); Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR); canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR);
drawAccess(canvas);
drawing = true; drawing = true;
x1 = (int) Math.max(0, Math.min(event.getX(0),coverPicture.getWidth())); Rect newRect = new Rect((int) (new_x1), (int) (new_y1), (int) (new_x2), (int) (new_y2));
y1 = (int) Math.max(0, Math.min(coverPicture.getHeight(), event.getY(0))); newRect.sort();
x2 = (int) Math.max(0, Math.min(coverPicture.getWidth(), event.getX(1))); boolean collision = false;
y2 = (int) Math.max(0, Math.min(coverPicture.getHeight(), event.getY(1))); Wall wall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall();
for(Access a:wall){
Log.i("Way",x1+"/"+y1+"/"+x2+"/"+y2); Coordonéees c = a.getCoordonéees();
rect = new Rect((int) (x1), (int) (y1), (int) (x2), (int) (y2)); Rect rect2 = new Rect(c.getX(),c.getY(),c.getWidth(),c.getHeigth());
rect.sort(); canvas.drawRect(rect2,paint);
if(Rect.intersects(rect2,newRect)){
collision = true;
}
}
if(!collision){
x1 = new_x1;
x2 = new_x2;
y1 = new_y1;
y2 = new_y2;
rect = newRect;
}
canvas.drawRect(rect, paint); canvas.drawRect(rect, paint);
waySurface.getHolder().unlockCanvasAndPost(canvas); waySurface.getHolder().unlockCanvasAndPost(canvas);
} }
...@@ -191,22 +194,17 @@ public class WayActivity extends AppCompatActivity { ...@@ -191,22 +194,17 @@ public class WayActivity extends AppCompatActivity {
drawing=false; drawing=false;
} }
} }
return true; return true;
}); });
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
private void reset() { private void reset() {
canDraw=true; canDraw=true;
Canvas canvas = holder.lockCanvas(); Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR); drawAccess(canvas);
holder.unlockCanvasAndPost(canvas); holder.unlockCanvasAndPost(canvas);
cancelWay.setVisibility(View.INVISIBLE); cancelWay.setVisibility(View.INVISIBLE);
confirmWay.setVisibility(View.INVISIBLE); confirmWay.setVisibility(View.INVISIBLE);
...@@ -221,9 +219,7 @@ public class WayActivity extends AppCompatActivity { ...@@ -221,9 +219,7 @@ public class WayActivity extends AppCompatActivity {
builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() { builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialogInterface, int i) { public void onClick(DialogInterface dialogInterface, int i) {
canDraw = true; reset();
confirmWay.setVisibility(View.INVISIBLE);
cancelWay.setVisibility(View.INVISIBLE);
dialogInterface.dismiss(); dialogInterface.dismiss();
} }
}); });
...@@ -232,18 +228,49 @@ public class WayActivity extends AppCompatActivity { ...@@ -232,18 +228,49 @@ public class WayActivity extends AppCompatActivity {
dialog.setCanceledOnTouchOutside(false); dialog.setCanceledOnTouchOutside(false);
} }
private void setupList(){ private void setupList(){
Button button = new Button(this);
button.setText(R.string.ajouter_une_pi_ce);
button.setOnClickListener((v)->{
Intent intentCreator = new Intent(this,RoomCreator.class);
room_creator_launcher.launch(intentCreator);
});
rooms = new ArrayList<>(); rooms = new ArrayList<>();
for(Room r:BuildingManager.getInstance().getCurrentBuilding()){ for(Room r:BuildingManager.getInstance().getCurrentBuilding()){
rooms.add(r); rooms.add(r);
} }
adapter = new ArrayAdapter<Room>(this, android.R.layout.simple_list_item_1,android.R.id.text1,rooms){
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView view1 = view.findViewById(android.R.id.text1);
view1.setText(rooms.get(position).getName());
return view;
}
};
listView = new ListView(this);
listView.setOnItemClickListener((parent, view, position, id) -> {
Room accessedRoom = rooms.get(position);
wall.addAccess(x1,y1,x2,y2,accessedRoom);
dialog.dismiss();
reset();
});
listView.setAdapter(adapter);
listView.addFooterView(button);
} }
private void drawAccess(Canvas canvas){ private void drawAccess(Canvas canvas){
Wall wall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall(); Wall wall = BuildingManager.getInstance().getCurrentBuilding().getLastWorkingRoom().getCurrentWall();
canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR);
for(Access a:wall){ for(Access a:wall){
Coordonéees c = a.getCoordonéees(); Coordonéees c = a.getCoordonéees();
Rect rect = new Rect(c.getX(),c.getY(),c.getWidth(),c.getHeigth()); Rect rect = new Rect(c.getX(),c.getY(),c.getWidth(),c.getHeigth());
canvas.drawRect(rect,paint); canvas.drawRect(rect,paint);
} }
}
private boolean isRectanglesOverlap(Rect rect1, Rect rect2) {
return rect1.left < rect2.left + rect2.width() &&
rect1.left + rect1.width() > rect2.left &&
rect1.top < rect2.top + rect2.height() &&
rect1.height() + rect1.top > rect2.top;
} }
......
...@@ -28,7 +28,7 @@ import java.util.Iterator; ...@@ -28,7 +28,7 @@ import java.util.Iterator;
public class WorldCreator extends AppCompatActivity { public class WorldCreator extends AppCompatActivity {
boolean updateMode = false; boolean updateMode = false;
String position; int position;
ActivityResultLauncher<Intent> launcherCoverPicture; ActivityResultLauncher<Intent> launcherCoverPicture;
ActivityResultLauncher<Intent> launcherRoom; ActivityResultLauncher<Intent> launcherRoom;
private ArrayList<IterableItem> rooms; private ArrayList<IterableItem> rooms;
...@@ -41,7 +41,7 @@ public class WorldCreator extends AppCompatActivity { ...@@ -41,7 +41,7 @@ public class WorldCreator extends AppCompatActivity {
Intent intent = getIntent(); Intent intent = getIntent();
Bundle extra = intent.getExtras(); Bundle extra = intent.getExtras();
if(extra!=null) { if(extra!=null) {
position = extra.getString("position"); position = extra.getInt("position");
updateMode = true; updateMode = true;
} }
GridView gridRoom = findViewById(R.id.GridRoom); GridView gridRoom = findViewById(R.id.GridRoom);
...@@ -49,13 +49,12 @@ public class WorldCreator extends AppCompatActivity { ...@@ -49,13 +49,12 @@ public class WorldCreator extends AppCompatActivity {
ImageView confirm = findViewById(R.id.confirm); ImageView confirm = findViewById(R.id.confirm);
ImageView cancel = findViewById(R.id.cancel); ImageView cancel = findViewById(R.id.cancel);
EditText nomMonde = findViewById(R.id.NomMonde); EditText nomMonde = findViewById(R.id.NomMonde);
Activity activity = this;
if(updateMode){ if(updateMode){
//mise à jour BuildingManager manager = BuildingManager.getInstance();
/*BuildingManager manager = BuildingManager.getInstance(); Building building = new Building(manager.getBuilding(position));
Building building = new Building(manager.getBuilding(Integer.parseInt(position)));
manager.addCurrentBuilding(building); manager.addCurrentBuilding(building);
updateMode = true;*/ nomMonde.setText(building.getName());
Log.i("World creator","j'ai recopie le monde " + position);
}else{ }else{
BuildingManager.getInstance().addCurrentBuilding(new Building()); BuildingManager.getInstance().addCurrentBuilding(new Building());
} }
...@@ -71,25 +70,30 @@ public class WorldCreator extends AppCompatActivity { ...@@ -71,25 +70,30 @@ public class WorldCreator extends AppCompatActivity {
rooms.add(new Room("dummy")); rooms.add(new Room("dummy"));
roomAdapter = new ItemAdapter(this,R.layout.buildingitem,rooms,button,false); roomAdapter = new ItemAdapter(this,R.layout.buildingitem,rooms,button,false);
gridRoom.setAdapter(roomAdapter); gridRoom.setAdapter(roomAdapter);
gridRoom.setOnItemLongClickListener(((parent, view, position1, id) ->{
if(!(view instanceof Button)){
}
}));
launcherRoom = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),result ->{ launcherRoom = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),result ->{
if(result.getResultCode()==RESULT_OK){ if(result.getResultCode()==RESULT_OK){
if(!updateMode){ Intent data = result.getData();
BuildingManager.getInstance().getCurrentBuilding().validRoom(); if(data!=null) {
Bundle extra2 = data.getExtras();
if(extra2!=null){
int roomPosition = extra2.getInt("position");
BuildingManager.getInstance().getCurrentBuilding().validRoom(position);
}
}else{ }else{
int position = result.getData().getIntExtra("position",0); BuildingManager.getInstance().getCurrentBuilding().validRoom();
BuildingManager.getInstance().getCurrentBuilding().validRoom(position);
} }
setupList();
} }
else{ else{
if(result.getResultCode()==RESULT_CANCELED){ if(result.getResultCode()==RESULT_CANCELED){
BuildingManager.getInstance().getCurrentBuilding().cancelRoom(); BuildingManager.getInstance().getCurrentBuilding().cancelRoom();
setupList();
} }
} }
setupList();
}); });
button.setOnClickListener(view ->{ button.setOnClickListener(view ->{
Intent roomIntent = new Intent(this,RoomCreator.class); Intent roomIntent = new Intent(this,RoomCreator.class);
...@@ -132,19 +136,21 @@ public class WorldCreator extends AppCompatActivity { ...@@ -132,19 +136,21 @@ public class WorldCreator extends AppCompatActivity {
getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) { getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) {
@Override @Override
public void handleOnBackPressed() { public void handleOnBackPressed() {
activity.finishActivity(RESULT_CANCELED);
} }
}); });
cancel.setOnClickListener(view->{ cancel.setOnClickListener(view->{
setResult(RESULT_CANCELED); setResult(RESULT_CANCELED);
finish(); finish();
}); });
confirm.setOnClickListener(view->{ confirm.setOnClickListener(view->{
//A FAIRE renvoyer la position en cas de modif Intent intent1 = new Intent();
if(updateMode){
intent1.putExtra("position",String.valueOf(position));
}
BuildingManager.getInstance().getCurrentBuilding().setName(nomMonde.getText().toString() BuildingManager.getInstance().getCurrentBuilding().setName(nomMonde.getText().toString()
); );
setResult(RESULT_OK); setResult(RESULT_OK,intent1);
finish(); finish();
}); });
//prise de la photo de couverture du monde //prise de la photo de couverture du monde
......
...@@ -43,4 +43,22 @@ ...@@ -43,4 +43,22 @@
app:layout_constraintEnd_toStartOf="@+id/frameLayout" android:layout_marginEnd="30dp" app:layout_constraintEnd_toStartOf="@+id/frameLayout" android:layout_marginEnd="30dp"
app:layout_constraintBottom_toTopOf="@+id/confirmWay" android:layout_marginBottom="20dp" app:layout_constraintBottom_toTopOf="@+id/confirmWay" android:layout_marginBottom="20dp"
android:visibility="invisible"/> android:visibility="invisible"/>
<com.google.android.material.appbar.MaterialToolbar
android:layout_width="2000dp"
android:layout_height="34dp"
android:background="?attr/colorPrimary"
android:theme="?attr/actionBarTheme"
android:minHeight="?attr/actionBarSize" tools:layout_editor_absoluteX="1dp"
android:id="@+id/materialToolbar2" app:layout_constraintTop_toTopOf="parent"/>
<ImageView
android:layout_width="24dp"
android:layout_height="21dp" app:srcCompat="@drawable/check" android:id="@+id/confirmWayActivity"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="30dp" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="5dp"/>
<ImageView
android:layout_width="24dp"
android:layout_height="21dp" app:srcCompat="@android:drawable/ic_delete"
android:id="@+id/cancelWayActivity"
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="30dp"
app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="5dp"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -11,17 +11,18 @@ ...@@ -11,17 +11,18 @@
android:id="@+id/BuildingItemPicture" android:id="@+id/BuildingItemPicture"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
/> android:layout_marginTop="20dp"/>
<TextView <TextView
android:text="TextView" android:text="TextView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/BuildingItemText" android:layout_height="wrap_content" android:id="@+id/BuildingItemText"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="140dp"/> android:layout_marginBottom="160dp"/>
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" app:srcCompat="@android:drawable/ic_delete" android:id="@+id/BuildingItemValid" android:layout_height="wrap_content" app:srcCompat="@android:drawable/ic_delete"
android:id="@+id/BuildingItemValid"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="50dp" android:layout_marginEnd="70dp"/> android:layout_marginTop="80dp"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment