From ccf0b56636f6e5f04c9fcc8dc2fcaae71e36da64 Mon Sep 17 00:00:00 2001 From: Astatin3 <77305074+Astatin3@users.noreply.github.com> Date: Sat, 14 Sep 2024 14:37:05 -0600 Subject: [PATCH] Add field deletion --- .../ui/data/FieldsFragment.java | 110 ++++++++++++------ .../utility/ReorderableTableLayout.java | 14 +++ .../main/res/layout/fragment_data_fields.xml | 21 +++- 3 files changed, 107 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/FieldsFragment.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/FieldsFragment.java index a3e8b98..7fb9f96 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/FieldsFragment.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/FieldsFragment.java @@ -8,7 +8,6 @@ import android.os.Bundle; import android.text.InputType; import android.view.Gravity; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; @@ -31,7 +30,6 @@ import com.astatin3.scoutingapp2025.types.input.sliderType; import com.astatin3.scoutingapp2025.types.input.tallyType; import com.astatin3.scoutingapp2025.types.input.textType; import com.astatin3.scoutingapp2025.utility.AlertManager; -import com.astatin3.scoutingapp2025.utility.DataManager; import com.skydoves.powerspinner.IconSpinnerAdapter; import com.skydoves.powerspinner.IconSpinnerItem; import com.skydoves.powerspinner.PowerSpinnerView; @@ -64,6 +62,7 @@ public class FieldsFragment extends Fragment { binding.upButton.setVisibility(View.GONE); binding.addButton.setVisibility(View.GONE); binding.downButton.setVisibility(View.GONE); + binding.deleteButton.setVisibility(View.GONE); binding.valueEditContainer.setVisibility(View.GONE); @@ -250,38 +249,95 @@ public class FieldsFragment extends Fragment { binding.saveButton.setVisibility(View.VISIBLE); binding.saveButton.setOnClickListener(a -> { System.out.println(fe.save()); - binding.editButton.setVisibility(View.VISIBLE); - binding.addButton.setVisibility(View.VISIBLE); - binding.upButton.setVisibility(View.VISIBLE); - binding.downButton.setVisibility(View.VISIBLE); - binding.ValueEditTable.removeAllViews(); - binding.valueEditContainer.setVisibility(View.GONE); - binding.cancelEditButton.setVisibility(View.GONE); - binding.saveButton.setOnClickListener(this::buttonfunc); + defaultVisibility(); }); binding.cancelEditButton.setVisibility(View.VISIBLE); binding.cancelEditButton.setOnClickListener(a -> { - binding.editButton.setVisibility(View.VISIBLE); - binding.addButton.setVisibility(View.VISIBLE); - binding.upButton.setVisibility(View.VISIBLE); - binding.downButton.setVisibility(View.VISIBLE); - binding.ValueEditTable.removeAllViews(); - binding.valueEditContainer.setVisibility(View.GONE); - binding.cancelEditButton.setVisibility(View.GONE); - binding.saveButton.setOnClickListener(this::buttonfunc); + defaultVisibility(); }); + binding.deleteButton.setVisibility(View.VISIBLE); + binding.deleteButton.setOnClickListener(a -> { + deleteField(field); + }); }); } + private void deleteField(inputType field){ + AlertDialog.Builder alert = new AlertDialog.Builder(getContext()); + alert.setTitle("Warning!"); + alert.setMessage("Removing a value will result in data being deleted in subsequent field versions!"); + alert.setNegativeButton("Cancel", null); + alert.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + defaultVisibility(); + + int oldindex = -1; + for(int i = 0; i < values[values.length - 1].length; i++){ + if(values[values.length - 1][i].equals(field)){ + oldindex = i; + break; + } + } + + if(oldindex != -1) { + System.out.println(Arrays.toString(values[values.length - 1])); + binding.fieldsArea.removeViewAt(selindex); + binding.fieldsArea.removeElement(oldindex); + values[values.length - 1] = removeElement(values[values.length - 1], oldindex); + selindex = -1; + AlertManager.toast("Removed!"); + binding.editButton.setVisibility(View.GONE); + System.out.println(Arrays.toString(values[values.length - 1])); + //System.out.println(values[values.length-1].length); + } + + } + }); + alert.setCancelable(true); + alert.create().show(); + } + + public inputType[] removeElement(inputType[] src, int i) { + inputType[] newArray = new inputType[src.length - 1]; + if (i > 0){ + System.arraycopy(src, 0, newArray, 0, i); + } + + if (newArray.length > i){ + System.arraycopy(src, i + 1, newArray, i, newArray.length - i); + } + + return newArray; + } + + + + + private void defaultVisibility() { + binding.editButton.setVisibility(View.VISIBLE); + binding.addButton.setVisibility(View.VISIBLE); + binding.upButton.setVisibility(View.VISIBLE); + binding.downButton.setVisibility(View.VISIBLE); + binding.ValueEditTable.removeAllViews(); + binding.valueEditContainer.setVisibility(View.GONE); + binding.cancelEditButton.setVisibility(View.GONE); + binding.deleteButton.setVisibility(View.GONE); + binding.saveButton.setOnClickListener(this::buttonfunc); + } + + + + private void addField(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("Title"); @@ -430,26 +486,12 @@ public class FieldsFragment extends Fragment { addRow(field); System.out.println(fe.save()); - binding.editButton.setVisibility(View.VISIBLE); - binding.addButton.setVisibility(View.VISIBLE); - binding.upButton.setVisibility(View.VISIBLE); - binding.downButton.setVisibility(View.VISIBLE); - binding.ValueEditTable.removeAllViews(); - binding.valueEditContainer.setVisibility(View.GONE); - binding.cancelEditButton.setVisibility(View.GONE); - binding.saveButton.setOnClickListener(this::buttonfunc); + defaultVisibility(); }); binding.cancelEditButton.setVisibility(View.VISIBLE); binding.cancelEditButton.setOnClickListener(a -> { - binding.editButton.setVisibility(View.VISIBLE); - binding.addButton.setVisibility(View.VISIBLE); - binding.upButton.setVisibility(View.VISIBLE); - binding.downButton.setVisibility(View.VISIBLE); - binding.ValueEditTable.removeAllViews(); - binding.valueEditContainer.setVisibility(View.GONE); - binding.cancelEditButton.setVisibility(View.GONE); - binding.saveButton.setOnClickListener(this::buttonfunc); + defaultVisibility(); }); } diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/utility/ReorderableTableLayout.java b/app/src/main/java/com/astatin3/scoutingapp2025/utility/ReorderableTableLayout.java index fb118d6..cea8824 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/utility/ReorderableTableLayout.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/utility/ReorderableTableLayout.java @@ -5,6 +5,7 @@ import android.util.AttributeSet; import android.view.View; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -141,4 +142,17 @@ public class ReorderableTableLayout extends TableLayout { public List getReorderedIndexes() { return reorderedIndices; } + + public void removeElement(int unshuffledindex){ + System.out.println(Arrays.toString(new List[]{reorderedIndices})); + + reorderedIndices.remove(unshuffledindex); + + for (int i = 0; i < reorderedIndices.size(); i++) { + if(reorderedIndices.get(i) > unshuffledindex) + reorderedIndices.set(i, reorderedIndices.get(i) - 1); + } + + System.out.println(Arrays.toString(new List[]{reorderedIndices})); + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_data_fields.xml b/app/src/main/res/layout/fragment_data_fields.xml index c66017d..4b72aab 100644 --- a/app/src/main/res/layout/fragment_data_fields.xml +++ b/app/src/main/res/layout/fragment_data_fields.xml @@ -59,9 +59,22 @@ android:layout_height="wrap_content" android:text="Cancel" android:textSize="20sp" + android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" /> + app:layout_constraintEnd_toEndOf="parent" + tools:visibility="gone" /> +