diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmResetDialog.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmResetDialog.java new file mode 100644 index 000000000..04444b629 --- /dev/null +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ConfirmResetDialog.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +package org.isoron.uhabits.activities.common.dialogs; + +import android.content.*; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.*; + +import com.google.auto.factory.*; + +import org.isoron.androidbase.activities.*; +import org.isoron.uhabits.R; +import org.isoron.uhabits.core.ui.callbacks.*; + +import butterknife.*; + +/** + * Dialog that asks the user confirmation before executing a delete operation. + */ +@AutoFactory(allowSubclasses = true) +public class ConfirmResetDialog extends AlertDialog +{ + @BindString(R.string.reset_habits_message) + protected String question; + + @BindString(android.R.string.yes) + protected String yes; + + @BindString(android.R.string.no) + protected String no; + + protected ConfirmResetDialog(@Provided @ActivityContext Context context, + @NonNull OnConfirmedCallback callback) + { + super(context); + ButterKnife.bind(this); + + setTitle(R.string.reset_habits); + setMessage(question); + setButton(BUTTON_POSITIVE, yes, (dialog, which) -> callback.onConfirmed()); + setButton(BUTTON_NEGATIVE, no, (dialog, which) -> {}); + } +} diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt index 770fe5748..a6ab30e41 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt @@ -60,12 +60,12 @@ class ListHabitsScreen private val commandRunner: CommandRunner, private val intentFactory: IntentFactory, private val themeSwitcher: ThemeSwitcher, - private val preferences: Preferences, private val adapter: HabitCardListAdapter, private val taskRunner: TaskRunner, private val exportDBFactory: ExportDBTaskFactory, private val importTaskFactory: ImportDataTaskFactory, private val confirmDeleteDialogFactory: ConfirmDeleteDialogFactory, + private val confirmResetDialogFactory: ConfirmResetDialogFactory, private val colorPickerFactory: ColorPickerDialogFactory, private val editHabitDialogFactory: EditHabitDialogFactory, private val numberPickerFactory: NumberPickerFactory, @@ -120,14 +120,13 @@ class ListHabitsScreen } private fun onSettingsResult(resultCode: Int) { - //val liist = habitList.getFiltered(HabitMatcher(true,true,true)) when (resultCode) { RESULT_IMPORT_DATA -> showImportScreen() RESULT_EXPORT_CSV -> behavior.get().onExportCSV() RESULT_EXPORT_DB -> onExportDB() RESULT_BUG_REPORT -> behavior.get().onSendBugReport() RESULT_REPAIR_DB -> behavior.get().onRepairDB() - RESET_HABITS -> /*ResetHabitsCommand(liist, liist.toList()).execute()*/ behavior.get().onResetHabits() + RESET_HABITS -> behavior.get().onResetHabits() } } @@ -156,6 +155,10 @@ class ListHabitsScreen activity.showDialog(confirmDeleteDialogFactory.create(callback)) } + override fun showResetConfirmationScreen(callback: OnConfirmedCallback) { + activity.showDialog(confirmResetDialogFactory.create(callback)) + } + override fun showEditHabitsScreen(habits: List) { val dialog = editHabitDialogFactory.edit(habits[0]) activity.showDialog(dialog, "editNumericalHabit") diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java index ad4f8013e..494dd946b 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.java @@ -270,7 +270,16 @@ public class HabitCardListAdapter for (Habit h : habits) cache.remove(h.getId()); } - + @Override + public void performReset(List habits) + { + for (Habit h : habits) + while(h.getRepetitions().getTotalCount() != 0) { + Repetition rep = h.getRepetitions().getOldest(); + h.getRepetitions().toggle(rep.getTimestamp()); + h.getRepetitions().remove(rep); + } + } /** * Changes the order of habits on the adapter. *

diff --git a/android/uhabits-android/src/main/res/values/strings.xml b/android/uhabits-android/src/main/res/values/strings.xml index e31a277d5..c2c1ea283 100644 --- a/android/uhabits-android/src/main/res/values/strings.xml +++ b/android/uhabits-android/src/main/res/values/strings.xml @@ -106,6 +106,8 @@ You can see more days by putting your phone in landscape mode. Delete Habits The habits will be permanently deleted. This action cannot be undone. + Reset Habits + The habits will be permanently reset. This action cannot be undone. Habit deleted / not found Weekends Monday to Friday diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java index d14a3ed77..f877108ee 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsSelectionMenuBehavior.java @@ -111,12 +111,14 @@ public class ListHabitsSelectionMenuBehavior public void onResetHabits() { - //ResetHabitsCommand command = new ResetHabitsCommand(habitList, adapter.getSelected()); - //command.execute(); List selected = adapter.getSelected(); - commandRunner.execute(new ResetHabitsCommand(habitList, selected), - null); - adapter.clearSelection(); + screen.showResetConfirmationScreen(() -> + { + adapter.performReset(selected); + commandRunner.execute(new ResetHabitsCommand(habitList, selected), + null); + adapter.clearSelection(); + }); } public void onEditHabits() @@ -138,6 +140,8 @@ public class ListHabitsSelectionMenuBehavior List getSelected(); void performRemove(List selected); + + void performReset(List selected); } public interface Screen @@ -148,6 +152,9 @@ public class ListHabitsSelectionMenuBehavior void showDeleteConfirmationScreen( @NonNull OnConfirmedCallback callback); + void showResetConfirmationScreen( + @NonNull OnConfirmedCallback callback); + void showEditHabitsScreen(@NonNull List selected); } }