From be1711b51e3652c26b798da67885dde9c87896e1 Mon Sep 17 00:00:00 2001 From: ibo <41344259+sneazy-ibo@users.noreply.github.com> Date: Sun, 3 Mar 2024 18:09:07 +0100 Subject: [PATCH] feat: scanlation bulk ticker (#218) * feat: scanlation mass tick (WIP) * feat: scanlation mass tick * fix: togglebutton on scanlation scrollview * fix: fix ImageButton padding + overlay * fix: minor padding adjustment --- .../dantotsu/media/manga/MangaReadAdapter.kt | 51 ++++++++++++++++--- .../main/res/drawable/invert_all_boxes.xml | 7 +++ app/src/main/res/drawable/tick_all_boxes.xml | 5 ++ .../main/res/drawable/untick_all_boxes.xml | 5 ++ .../main/res/layout/custom_dialog_layout.xml | 28 +++++++--- 5 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 app/src/main/res/drawable/invert_all_boxes.xml create mode 100644 app/src/main/res/drawable/tick_all_boxes.xml create mode 100644 app/src/main/res/drawable/untick_all_boxes.xml diff --git a/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt b/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt index 33230325..1c73c6f0 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/MangaReadAdapter.kt @@ -13,6 +13,7 @@ import android.widget.LinearLayout import android.widget.NumberPicker import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat.startActivity +import androidx.core.view.children import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView import ani.dantotsu.* @@ -255,17 +256,41 @@ class MangaReadAdapter( if (options.count() > 1) View.VISIBLE else View.GONE dialogBinding.scanlatorNo.text = "${options.count()}" dialogBinding.animeScanlatorTop.setOnClickListener { - val dialogView2 = - LayoutInflater.from(currContext()).inflate(R.layout.custom_dialog_layout, null) - val checkboxContainer = - dialogView2.findViewById(R.id.checkboxContainer) + val dialogView2 = LayoutInflater.from(currContext()).inflate(R.layout.custom_dialog_layout, null) + val checkboxContainer = dialogView2.findViewById(R.id.checkboxContainer) + val tickAllButton = dialogView2.findViewById(R.id.toggleButton) + + // Function to get the right image resource for the toggle button + fun getToggleImageResource(container: ViewGroup): Int { + var allChecked = true + var allUnchecked = true + + for (i in 0 until container.childCount) { + val checkBox = container.getChildAt(i) as CheckBox + if (!checkBox.isChecked) { + allChecked = false + } else { + allUnchecked = false + } + } + return when { + allChecked -> R.drawable.untick_all_boxes + allUnchecked -> R.drawable.tick_all_boxes + else -> R.drawable.invert_all_boxes + } + } // Dynamically add checkboxes options.forEach { option -> val checkBox = CheckBox(currContext()).apply { text = option + setOnCheckedChangeListener { _, _ -> + // Update image resource when you change a checkbox + tickAllButton.setImageResource(getToggleImageResource(checkboxContainer)) + } } - //set checked if it's already selected + + // Set checked if its already selected if (media.selected!!.scanlators != null) { checkBox.isChecked = media.selected!!.scanlators?.contains(option) != true scanlatorSelectionListener?.onScanlatorsSelected() @@ -279,7 +304,6 @@ class MangaReadAdapter( val dialog = AlertDialog.Builder(currContext(), R.style.MyPopup) .setView(dialogView2) .setPositiveButton("OK") { _, _ -> - //add unchecked to hidden hiddenScanlators.clear() for (i in 0 until checkboxContainer.childCount) { val checkBox = checkboxContainer.getChildAt(i) as CheckBox @@ -293,6 +317,21 @@ class MangaReadAdapter( .setNegativeButton("Cancel", null) .show() dialog.window?.setDimAmount(0.8f) + + // Standard image resource + tickAllButton.setImageResource(getToggleImageResource(checkboxContainer)) + + // Listens to ticked checkboxes and changes image resource accordingly + tickAllButton.setOnClickListener { + // Toggle checkboxes + for (i in 0 until checkboxContainer.childCount) { + val checkBox = checkboxContainer.getChildAt(i) as CheckBox + checkBox.isChecked = !checkBox.isChecked + } + + // Update image resource + tickAllButton.setImageResource(getToggleImageResource(checkboxContainer)) + } } nestedDialog = AlertDialog.Builder(fragment.requireContext(), R.style.MyPopup) diff --git a/app/src/main/res/drawable/invert_all_boxes.xml b/app/src/main/res/drawable/invert_all_boxes.xml new file mode 100644 index 00000000..2a5d5763 --- /dev/null +++ b/app/src/main/res/drawable/invert_all_boxes.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/tick_all_boxes.xml b/app/src/main/res/drawable/tick_all_boxes.xml new file mode 100644 index 00000000..59eddd41 --- /dev/null +++ b/app/src/main/res/drawable/tick_all_boxes.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/untick_all_boxes.xml b/app/src/main/res/drawable/untick_all_boxes.xml new file mode 100644 index 00000000..4e86043d --- /dev/null +++ b/app/src/main/res/drawable/untick_all_boxes.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/custom_dialog_layout.xml b/app/src/main/res/layout/custom_dialog_layout.xml index 0694cbda..f5b05315 100644 --- a/app/src/main/res/layout/custom_dialog_layout.xml +++ b/app/src/main/res/layout/custom_dialog_layout.xml @@ -1,5 +1,6 @@ - - - + android:layout_height="wrap_content"> + + + + + +