diff --git a/app/src/main/java/com/pocket_plan/j7_003/data/shoppinglist/MultiShoppingFr.kt b/app/src/main/java/com/pocket_plan/j7_003/data/shoppinglist/MultiShoppingFr.kt index aea89761..34bcd7b1 100644 --- a/app/src/main/java/com/pocket_plan/j7_003/data/shoppinglist/MultiShoppingFr.kt +++ b/app/src/main/java/com/pocket_plan/j7_003/data/shoppinglist/MultiShoppingFr.kt @@ -367,6 +367,10 @@ class MultiShoppingFr : Fragment() { dialogRemoveCheckedItems() } + R.id.item_shopping_remove_duplicates -> { + dialogRemoveDuplicateItems() + } + R.id.item_shopping_uncheck_all -> { //uncheck all shopping items activeShoppingFr.shoppingListInstance.uncheckAll() @@ -447,7 +451,8 @@ class MultiShoppingFr : Fragment() { dialogAddItemBinding = DialogAddItemBinding.inflate(layoutInflater) //Initialize dialogBuilder and set its title - val myBuilder = myActivity.let { AlertDialog.Builder(it).setView(dialogAddItemBinding.root) } + val myBuilder = + myActivity.let { AlertDialog.Builder(it).setView(dialogAddItemBinding.root) } val titleDialogBinding = TitleDialogBinding.inflate(layoutInflater) titleDialogBinding.tvDialogTitle.text = myActivity.getString(R.string.shoppingAddItemTitle) @@ -815,6 +820,16 @@ class MultiShoppingFr : Fragment() { myActivity.dialogConfirm(titleId, action) } + private fun dialogRemoveDuplicateItems() { + val titleId = R.string.shoppingDialogRemoveCheckedDuplicates + val action: () -> Unit = { + activeShoppingFr.shoppingListInstance.removeCheckedDuplicateItems() + activeShoppingFr.myAdapter.notifyDataSetChanged() + updateShoppingMenu() + } + myActivity.dialogConfirm(titleId, action) + } + fun updateExpandAllIcon() { myMenu.findItem(R.id.item_shopping_expand_all)?.isVisible = activeShoppingFr.shoppingListInstance.somethingsCollapsed() && !(SettingsManager.getSetting( diff --git a/app/src/main/java/com/pocket_plan/j7_003/data/shoppinglist/ShoppingList.kt b/app/src/main/java/com/pocket_plan/j7_003/data/shoppinglist/ShoppingList.kt index c01705e5..58aeb26c 100644 --- a/app/src/main/java/com/pocket_plan/j7_003/data/shoppinglist/ShoppingList.kt +++ b/app/src/main/java/com/pocket_plan/j7_003/data/shoppinglist/ShoppingList.kt @@ -11,6 +11,7 @@ class ShoppingList(private var wrapper: ShoppingListWrapper?) : fun setWrapper(newWrapper: ShoppingListWrapper) { this.wrapper = newWrapper } + /** * Adds a given ShoppingElement to this list, according to its given tag. * If no element of the given tag existed before, the list generate a new sublist, @@ -212,6 +213,36 @@ class ShoppingList(private var wrapper: ShoppingListWrapper?) : save() } + /** + * Removes duplicates from checked items, either if there is + * a unchecked item with the same title or an checked item + * with the same title + */ + fun removeCheckedDuplicateItems() { + removeCheckedItemsIfAlsoUnchecked() + this.forEach { e -> + val checkedItems = + e.second.filter { item -> item.checked && e.second.indexOf(item) != 0 } + e.second.removeAll(checkedItems.toSet()) + e.second.addAll(checkedItems.distinct()) + } + save() + } + + /** + * Removes all checked items from shopping list + * if there is an uncheck item with the same name + */ + private fun removeCheckedItemsIfAlsoUnchecked() { + this.forEach { e -> + val unchecked = e.second.filter { item -> !item.checked }.map { item -> item.name } + unchecked.forEach { name -> + e.second.removeAll { item -> item.checked && item.name.equals(name) } + } + } + save() + } + /** * Tries to fetch the length of the sublist with given tag if the sublist exists. * @param tag The tag the sublist is supposed to have. diff --git a/app/src/main/res/menu/menu_shopping.xml b/app/src/main/res/menu/menu_shopping.xml index ab59c9a0..1e373950 100644 --- a/app/src/main/res/menu/menu_shopping.xml +++ b/app/src/main/res/menu/menu_shopping.xml @@ -25,6 +25,10 @@ android:id="@+id/item_shopping_remove_checked" android:title="@string/shoppingOptionDeleteChecked" app:showAsAction="never" /> + Ordner nach oben sortieren PocketPlan ist werbefrei und generiert daher keine Einnahmen. Wenn du die Entwicklung dieses Projekts unterstützen willst, kannst du dies über den folgenden Link tun. Unterstütze dieses Projekt + Abgehakte Duplikate löschen? + Abgehakte Duplikate löschen \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index de9fe78e..2df9d343 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -189,6 +189,7 @@ Clear list? Delete list? Remove checked items? + Remove duplicate checked items? Rename List Edit item %1$s%2$s %3$s @@ -197,6 +198,7 @@ Clear list Collapse all Remove checked items + Remove duplicate checked items Delete List Expand all Rename list