From 154fb97298a813e76755295c4164a830ca8ca8b2 Mon Sep 17 00:00:00 2001
From: FurWaz <fur.waz06@gmail.com>
Date: Fri, 11 Nov 2022 23:12:17 +0100
Subject: [PATCH] Cleaned code, switched to class popups

---
 .../main/java/Structures/BuildingInfo.java    |  3 +
 .../src/main/java/Structures/RoomInfo.java    |  1 +
 .../com/furwaz/roomview/MainActivity.java     | 72 ++++++-------------
 .../main/res/drawable/ic_baseline_edit_24.xml |  5 ++
 .../app/src/main/res/layout/building_tile.xml | 11 ++-
 .../app/src/main/res/layout/pathway_tile.xml  |  6 +-
 .../app/src/main/res/values-fr/strings.xml    |  3 +
 Sources/app/src/main/res/values/strings.xml   |  3 +
 8 files changed, 50 insertions(+), 54 deletions(-)
 create mode 100644 Sources/app/src/main/res/drawable/ic_baseline_edit_24.xml

diff --git a/Sources/app/src/main/java/Structures/BuildingInfo.java b/Sources/app/src/main/java/Structures/BuildingInfo.java
index cff2e23..e449cd2 100644
--- a/Sources/app/src/main/java/Structures/BuildingInfo.java
+++ b/Sources/app/src/main/java/Structures/BuildingInfo.java
@@ -55,6 +55,7 @@ public class BuildingInfo implements Serializable {
 
     public void setDate(Date date) {
         this.date = date;
+        BuildingManager.saveBuilding(this);
     }
 
     public String getName() {
@@ -62,7 +63,9 @@ public class BuildingInfo implements Serializable {
     }
 
     public void setName(String name) {
+        BuildingManager.removeBuilding(this);
         this.name = name;
+        BuildingManager.saveBuilding(this);
     }
 
     public int getNbRooms() {
diff --git a/Sources/app/src/main/java/Structures/RoomInfo.java b/Sources/app/src/main/java/Structures/RoomInfo.java
index cf85fc2..5d52b18 100644
--- a/Sources/app/src/main/java/Structures/RoomInfo.java
+++ b/Sources/app/src/main/java/Structures/RoomInfo.java
@@ -92,6 +92,7 @@ public class RoomInfo implements Serializable {
 
     public void setName(String name) {
         this.name = name;
+        if (this.building != null) this.building.save();
     }
 
     public void setBuilding(BuildingInfo building) { this.building = building; }
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 fa296d2..8df82b2 100644
--- a/Sources/app/src/main/java/com/furwaz/roomview/MainActivity.java
+++ b/Sources/app/src/main/java/com/furwaz/roomview/MainActivity.java
@@ -4,6 +4,7 @@ import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.TextWatcher;
@@ -29,11 +30,12 @@ import java.util.List;
 
 import Common.BuildingManager;
 import Common.InfoBinding;
+import Popups.BuildingPopup;
 import Structures.BuildingInfo;
 import Views.InfoAdapter;
 
 public class MainActivity extends AppCompatActivity {
-    InfoAdapter building_adapter = null;
+    InfoAdapter<BuildingInfo> building_adapter = null;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -45,7 +47,7 @@ public class MainActivity extends AppCompatActivity {
         ListView building_lv = findViewById(R.id.building_list);
         LinearLayout noDataLayout = findViewById(R.id.no_building_layout);
 
-        building_adapter = new InfoAdapter(this, BuildingManager.getBuildings(), noDataLayout, R.layout.building_tile);
+        building_adapter = new InfoAdapter<BuildingInfo>(this, BuildingManager.getBuildings(), noDataLayout, R.layout.building_tile);
         building_lv.setAdapter(building_adapter);
 
         building_adapter.setOnRemoveListener(param -> {
@@ -86,9 +88,7 @@ public class MainActivity extends AppCompatActivity {
         });
 
         ImageButton add_btn = findViewById(R.id.add_building_btn);
-        add_btn.setOnClickListener(view -> {
-            showAddBuildingPopup(view);
-        });
+        add_btn.setOnClickListener(this::showAddBuildingPopup);
     }
 
     @Override
@@ -98,50 +98,24 @@ public class MainActivity extends AppCompatActivity {
     }
 
     protected void showAddBuildingPopup(View v) {
-        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
-        AlertDialog dialog = builder.create();
-        LayoutInflater factory = LayoutInflater.from(MainActivity.this);
-        View popup = factory.inflate(R.layout.add_building_popup, null);
-        dialog.setView(popup);
-
-        dialog.setOnShowListener(dialogInterface -> {
-            TextView b_err = popup.findViewById(R.id.building_input_error_msg);
-            EditText b_name = popup.findViewById(R.id.input_building_name);
-            Button validate_btn = popup.findViewById(R.id.btn_validate_building);
-            Button cancel_btn = popup.findViewById(R.id.btn_cancel_building);
-
-            validate_btn.setEnabled(false);
-            b_err.setText("");
-            b_name.addTextChangedListener(new TextWatcher() {
-                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
-                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
-                public void afterTextChanged(Editable editable) {
-                    validate_btn.setEnabled(false);
-                    b_err.setText("");
-                    String input = editable.toString();
-                    if (input.length() == 0) {
-                        b_err.setText(getResources().getString(R.string.specify_building_name));
-                        return;
-                    }
-                    if (BuildingManager.getBuilding(input) != null) {
-                        b_err.setText(getResources().getString(R.string.building_exists));
-                        return;
-                    }
-                    // everything is correct, display the button
-                    validate_btn.setEnabled(true);
-                }
-            });
-
-            cancel_btn.setOnClickListener(view -> {
-                dialog.dismiss();
-            });
-
-            validate_btn.setOnClickListener(view -> {
-                BuildingManager.addBuilding(new BuildingInfo(b_name.getText().toString(), new Date()));
+        new BuildingPopup(
+            MainActivity.this,
+            param -> {
+                ((BuildingPopup) param).getInput().setText("");
+                return null;
+            },
+            param -> {
+                ((BuildingPopup) param).dismiss();
+                return null;
+            },
+            param -> {
+                BuildingPopup popup = ((BuildingPopup) param);
+                BuildingManager.addBuilding(new BuildingInfo(popup.getInput().getText().toString(), new Date()));
                 building_adapter.setData(BuildingManager.getBuildings());
-                dialog.dismiss();
-            });
-        });
-        dialog.show();
+                popup.dismiss();
+                return null;
+            },
+            BuildingPopup.MODE_NEW
+        ).show();
     }
 }
\ No newline at end of file
diff --git a/Sources/app/src/main/res/drawable/ic_baseline_edit_24.xml b/Sources/app/src/main/res/drawable/ic_baseline_edit_24.xml
new file mode 100644
index 0000000..afb9aac
--- /dev/null
+++ b/Sources/app/src/main/res/drawable/ic_baseline_edit_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="40dp" android:tint="@color/blue_500"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
+</vector>
diff --git a/Sources/app/src/main/res/layout/building_tile.xml b/Sources/app/src/main/res/layout/building_tile.xml
index 7d7bb4f..a3be8ca 100644
--- a/Sources/app/src/main/res/layout/building_tile.xml
+++ b/Sources/app/src/main/res/layout/building_tile.xml
@@ -18,7 +18,8 @@
             android:orientation="horizontal">
             <TextView
                 android:id="@+id/building_name"
-                android:layout_width="wrap_content"
+                android:layout_width="0dp"
+                android:layout_weight="2"
                 android:layout_height="wrap_content"
                 android:textStyle="bold"
                 android:text=""
@@ -28,7 +29,8 @@
                 android:textSize="20sp"
                 android:textColor="@color/blue_500" />
             <LinearLayout
-                android:layout_width="match_parent"
+                android:layout_width="0dp"
+                android:layout_weight="1"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
                 android:layout_gravity="center"
@@ -38,7 +40,10 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:textStyle="normal"
-                    android:text=""
+                    android:text="XX / XX / XXXX"
+                    android:maxLines="1"
+                    android:ellipsize="none"
+                    android:scrollHorizontally="false"
                     android:textSize="16sp"
                     android:textColor="@color/slate_500" />
             </LinearLayout>
diff --git a/Sources/app/src/main/res/layout/pathway_tile.xml b/Sources/app/src/main/res/layout/pathway_tile.xml
index 09230c6..a542f2b 100644
--- a/Sources/app/src/main/res/layout/pathway_tile.xml
+++ b/Sources/app/src/main/res/layout/pathway_tile.xml
@@ -18,7 +18,8 @@
             android:orientation="horizontal">
             <TextView
                 android:id="@+id/pathway_name"
-                android:layout_width="wrap_content"
+                android:layout_width="0dp"
+                android:layout_weight="2"
                 android:layout_height="wrap_content"
                 android:textStyle="bold"
                 android:text=""
@@ -28,7 +29,8 @@
                 android:textSize="20sp"
                 android:textColor="@color/blue_500" />
             <LinearLayout
-                android:layout_width="match_parent"
+                android:layout_width="0dp"
+                android:layout_weight="1"
                 android:layout_height="wrap_content"
                 android:orientation="horizontal"
                 android:gravity="end">
diff --git a/Sources/app/src/main/res/values-fr/strings.xml b/Sources/app/src/main/res/values-fr/strings.xml
index c74c2cb..04a0a21 100644
--- a/Sources/app/src/main/res/values-fr/strings.xml
+++ b/Sources/app/src/main/res/values-fr/strings.xml
@@ -41,4 +41,7 @@
     <string name="zone_exists">La zone existe déjà</string>
     <string name="specify_pathway_name">Spécifiez un nom de chemin</string>
     <string name="pathway_exists">le chemin existe déjà</string>
+    <string name="edit_building">Modifier le bâtiment</string>
+    <string name="building_invalid">Nom de bâtiment invalide</string>
+    <string name="edit_room">Modifier la pièce</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 2fab35e..8f5a985 100644
--- a/Sources/app/src/main/res/values/strings.xml
+++ b/Sources/app/src/main/res/values/strings.xml
@@ -41,4 +41,7 @@
     <string name="zone_exists">Zone already exists</string>
     <string name="specify_pathway_name">Specify a pathway name</string>
     <string name="pathway_exists">Pathway already exists</string>
+    <string name="edit_building">Edit building</string>
+    <string name="building_invalid">Invalid building name</string>
+    <string name="edit_room">Edit room</string>
 </resources>
\ No newline at end of file
-- 
GitLab