diff --git a/Sources/app/src/main/java/Popups/RemovePopup.java b/Sources/app/src/main/java/Popups/RemovePopup.java index f856b7ec429fbbdaf9324cfe18f9e7671ba3e3ba..cb252c714d4966da60d2d32de48b4fb9801d150c 100644 --- a/Sources/app/src/main/java/Popups/RemovePopup.java +++ b/Sources/app/src/main/java/Popups/RemovePopup.java @@ -1,4 +1,72 @@ package Popups; +import android.content.Context; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.appcompat.app.AlertDialog; + +import com.furwaz.roomview.R; + +import Common.Callback; +import Structures.BuildingInfo; + public class RemovePopup { + public static final int MODE_NEW = 1; + public static final int MODE_EDIT = 2; + + Context context = null; + AlertDialog dialog = null; + TextView remove_title = null; + TextView remove_msg = null; + Button validate_btn = null; + Button cancel_btn = null; + + public RemovePopup(Context context, Callback onCreate, Callback onCancel, Callback onValidate) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + dialog = builder.create(); + LayoutInflater factory = LayoutInflater.from(context); + View popup = factory.inflate(R.layout.remove_popup, null); + dialog.setView(popup); + + this.context = context; + + dialog.setOnShowListener(dialogInterface -> { + remove_title = popup.findViewById(R.id.remove_title); + remove_msg = popup.findViewById(R.id.remove_msg); + validate_btn = popup.findViewById(R.id.btn_validate_room); + cancel_btn = popup.findViewById(R.id.btn_cancel_room); + + onCreate.call(this); + + cancel_btn.setOnClickListener(view -> onCancel.call(this)); + validate_btn.setOnClickListener(view -> onValidate.call(this)); + }); + dialog.show(); + } + + public void dismiss() { + dialog.dismiss(); + } + + public void setTitleValue(String value) { + remove_title.setText( + context.getResources().getString(R.string.remove_title).replace("{{value}}", value) + ); + } + + public void setMessageValue(String value) { + remove_msg.setText( + context.getResources().getString(R.string.remove_msg).replace("{{value}}", value) + ); + } + + public void show() { + dialog.show(); + } } diff --git a/Sources/app/src/main/java/com/furwaz/roomview/BuildingActivity.java b/Sources/app/src/main/java/com/furwaz/roomview/BuildingActivity.java index 0a12b2cbe593d422f6124d0324944026da170c76..b352572727684237f6794cfbac7906ef0761b4af 100644 --- a/Sources/app/src/main/java/com/furwaz/roomview/BuildingActivity.java +++ b/Sources/app/src/main/java/com/furwaz/roomview/BuildingActivity.java @@ -25,6 +25,7 @@ import java.util.Date; import Common.BuildingManager; import Common.InfoBinding; import Popups.BuildingPopup; +import Popups.RemovePopup; import Popups.RoomPopup; import Structures.BuildingInfo; import Structures.RoomInfo; @@ -53,7 +54,26 @@ public class BuildingActivity extends AppCompatActivity { room_lv.setAdapter(room_adapter); room_adapter.setOnRemoveListener(param -> { - building.removeRoom((RoomInfo) param); + new RemovePopup( + this, + param2 -> { + RemovePopup popup = (RemovePopup) param2; + String value = ((RoomInfo) param).getName(); + popup.setTitleValue(value); + popup.setMessageValue(value); + return null; + }, + param2 -> { + ((RemovePopup) param2).dismiss(); + return null; + }, + param2 -> { + building.removeRoom((RoomInfo) param); + room_adapter.setData(building.getRooms()); + ((RemovePopup) param2).dismiss(); + return null; + } + ).show(); return null; }); diff --git a/Sources/app/src/main/java/com/furwaz/roomview/MainActivity.java b/Sources/app/src/main/java/com/furwaz/roomview/MainActivity.java index aaecc6417fbc21f15b14e7b8ecef7ed780f55bf4..3d5db8a05bd8fb341707fa2f08be008a1c9ce942 100644 --- a/Sources/app/src/main/java/com/furwaz/roomview/MainActivity.java +++ b/Sources/app/src/main/java/com/furwaz/roomview/MainActivity.java @@ -32,7 +32,9 @@ import Common.BuildingManager; import Common.ImageManager; import Common.InfoBinding; import Popups.BuildingPopup; +import Popups.RemovePopup; import Structures.BuildingInfo; +import Structures.RoomInfo; import Views.InfoAdapter; public class MainActivity extends AppCompatActivity { @@ -53,7 +55,26 @@ public class MainActivity extends AppCompatActivity { building_lv.setAdapter(building_adapter); building_adapter.setOnRemoveListener(param -> { - BuildingManager.removeBuilding((BuildingInfo) param); + new RemovePopup( + this, + param2 -> { + RemovePopup popup = (RemovePopup) param2; + String value = ((BuildingInfo) param).getName(); + popup.setTitleValue(value); + popup.setMessageValue(value); + return null; + }, + param2 -> { + ((RemovePopup) param2).dismiss(); + return null; + }, + param2 -> { + BuildingManager.removeBuilding((BuildingInfo) param); + building_adapter.setData(BuildingManager.getBuildings()); + ((RemovePopup) param2).dismiss(); + return null; + } + ).show(); return null; }); diff --git a/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java b/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java index e9a71ac88932bf3ab279b90ebd65e3444ee20c31..f588a389a14f7ee07d6709e398940a95e47f1562 100644 --- a/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java +++ b/Sources/app/src/main/java/com/furwaz/roomview/RoomActivity.java @@ -30,6 +30,7 @@ import java.util.Locale; import Common.BuildingManager; import Common.InfoBinding; import Popups.PathwayPopup; +import Popups.RemovePopup; import Popups.RoomPopup; import Popups.ZonePopup; import Structures.BuildingInfo; @@ -80,7 +81,29 @@ public class RoomActivity extends AppCompatActivity { zone_adapter = new InfoAdapter<ZoneInfo>(this, room.getZones(), noDataLayout, R.layout.zone_tile); room_lv.setAdapter(zone_adapter); - zone_adapter.setOnRemoveListener(param -> { room.removeZone((ZoneInfo) param); return null; }); + zone_adapter.setOnRemoveListener(param -> { + new RemovePopup( + this, + param2 -> { + RemovePopup popup = (RemovePopup) param2; + String value = ((ZoneInfo) param).getName(); + popup.setTitleValue(value); + popup.setMessageValue(value); + return null; + }, + param2 -> { + ((RemovePopup) param2).dismiss(); + return null; + }, + param2 -> { + room.removeZone((ZoneInfo) param); + zone_adapter.setData(room.getZones()); + ((RemovePopup) param2).dismiss(); + return null; + } + ).show(); + return null; + }); zone_adapter.setOnEditListener(param -> { Intent intent = new Intent(this, ZoneActivity.class); intent.putExtra("building", BuildingManager.getBuildings().indexOf(building)); @@ -101,7 +124,29 @@ public class RoomActivity extends AppCompatActivity { pathways_adapter = new InfoAdapter<PathInfo>(this, room.getPaths(), noPathwaysLayout, R.layout.pathway_tile); pathways_lv.setAdapter(pathways_adapter); - pathways_adapter.setOnRemoveListener(param -> { room.removePath((PathInfo) param); return null; }); + pathways_adapter.setOnRemoveListener(param -> { + new RemovePopup( + this, + param2 -> { + RemovePopup popup = (RemovePopup) param2; + String value = ((PathInfo) param).getName(); + popup.setTitleValue(value); + popup.setMessageValue(value); + return null; + }, + param2 -> { + ((RemovePopup) param2).dismiss(); + return null; + }, + param2 -> { + room.removePath((PathInfo) param); + pathways_adapter.setData(room.getPaths()); + ((RemovePopup) param2).dismiss(); + return null; + } + ).show(); + return null; + }); pathways_adapter.setOnEditListener(param -> { Intent intent = new Intent(this, PathwayActivity.class); intent.putExtra("building", BuildingManager.getBuildings().indexOf(building)); diff --git a/Sources/app/src/main/java/com/furwaz/roomview/ZoneActivity.java b/Sources/app/src/main/java/com/furwaz/roomview/ZoneActivity.java index 5a934f43e096fad4dc32dafa1364641fd7a0bb36..3f1b89a84508aec26011bbe8060ca06094997f3b 100644 --- a/Sources/app/src/main/java/com/furwaz/roomview/ZoneActivity.java +++ b/Sources/app/src/main/java/com/furwaz/roomview/ZoneActivity.java @@ -15,9 +15,11 @@ import android.widget.Toast; import Common.BuildingManager; import Common.InfoBinding; import Popups.PhotoPopup; +import Popups.RemovePopup; import Popups.ZonePopup; import Structures.BuildingInfo; import Structures.Orientation; +import Structures.PathInfo; import Structures.PhotoInfo; import Structures.RoomInfo; import Structures.ZoneInfo; @@ -51,8 +53,27 @@ public class ZoneActivity extends AppCompatActivity { photo_lv.setAdapter(photo_adapter); photo_adapter.setOnRemoveListener(param -> { - zone.removePhoto((PhotoInfo) param); - checkForAddButton(); + new RemovePopup( + this, + param2 -> { + RemovePopup popup = (RemovePopup) param2; + String value = stringifyOrientation(((PhotoInfo) param).getOrientation()); + popup.setTitleValue(value); + popup.setMessageValue(value); + return null; + }, + param2 -> { + ((RemovePopup) param2).dismiss(); + return null; + }, + param2 -> { + zone.removePhoto((PhotoInfo) param); + checkForAddButton(); + photo_adapter.setData(zone.getPhotos()); + ((RemovePopup) param2).dismiss(); + return null; + } + ).show(); return null; }); photo_adapter.setOnEditListener(param -> { diff --git a/Sources/app/src/main/res/layout/remove_popup.xml b/Sources/app/src/main/res/layout/remove_popup.xml new file mode 100644 index 0000000000000000000000000000000000000000..9f8c8d00a73b3ddc82ebd70c44122ddcfdbeb393 --- /dev/null +++ b/Sources/app/src/main/res/layout/remove_popup.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:background="@color/slate_50"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:background="@color/blue_500" + android:layout_marginBottom="20dp"> + + <TextView + android:id="@+id/remove_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/slate_200" + android:text="@string/remove_title" + android:textColor="@color/blue_500" + android:textSize="20sp" + android:layout_marginBottom="4dp" + android:textStyle="bold" + android:padding="10dp" + /> + </LinearLayout> + + <TextView + android:id="@+id/remove_msg" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/remove_msg" + android:textStyle="bold" + android:textColor="@color/slate_600" + android:textSize="16sp" + android:layout_marginStart="8sp" + android:layout_marginEnd="8sp"/> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:layout_marginTop="20dp" + android:padding="8dp"> + + <Button + android:id="@+id/btn_cancel_room" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/blue_500" + style="@style/Widget.AppCompat.Button.Borderless" + android:text="@string/cancel"/> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="right"> + <Button + android:id="@+id/btn_validate_room" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/red_500" + android:text="@string/remove"/> + </LinearLayout> + </LinearLayout> + </LinearLayout> +</RelativeLayout> \ No newline at end of file diff --git a/Sources/app/src/main/res/values-fr/strings.xml b/Sources/app/src/main/res/values-fr/strings.xml index f5e5ef51b2fbcfe944b30d81179d6c28269bb9c4..00729979eb0cffae5dfa488d4ecef6b436fbb748 100644 --- a/Sources/app/src/main/res/values-fr/strings.xml +++ b/Sources/app/src/main/res/values-fr/strings.xml @@ -81,4 +81,6 @@ <string name="walk_zone">Zone correspondante</string> <string name="edit_walk">Modifier le déplacement</string> <string name="no_zones_available">Aucune zone disponible</string> + <string name="remove_title">Supprimer {{value}} ?</string> + <string name="remove_msg">"Voulez-vous supprimer {{value}} ?\nCet element sera supprimé pour toujours."</string> </resources> \ No newline at end of file diff --git a/Sources/app/src/main/res/values/strings.xml b/Sources/app/src/main/res/values/strings.xml index 4c458fa10012dd9e9d25f10164b706cfbcefbd33..60fa070dc5c03e214b61195f2c210beca11a7592 100644 --- a/Sources/app/src/main/res/values/strings.xml +++ b/Sources/app/src/main/res/values/strings.xml @@ -81,4 +81,6 @@ <string name="walk_zone">Corresponding zone</string> <string name="edit_walk">Edit movement</string> <string name="no_zones_available">No zones available</string> + <string name="remove_title">Remove {{value}} ?</string> + <string name="remove_msg">Do you want to remove {{value}} ?\nIt will be deleted for ever.</string> </resources> \ No newline at end of file