diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index eeb11c6aa..a929d25b9 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -27,6 +27,7 @@ import org.isoron.uhabits.activities.common.dialogs.*; import org.isoron.uhabits.activities.habits.edit.*; import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.ui.screens.habits.show.*; +import org.isoron.uhabits.core.ui.callbacks.OnConfirmedCallback; import javax.inject.*; @@ -45,6 +46,9 @@ public class ShowHabitScreen extends BaseScreen @NonNull private final EditHabitDialogFactory editHabitDialogFactory; + @NonNull + private final ConfirmDeleteDialogFactory confirmDeleteDialogFactory; + private final Lazy behavior; @Inject @@ -53,10 +57,12 @@ public class ShowHabitScreen extends BaseScreen @NonNull ShowHabitRootView view, @NonNull ShowHabitsMenu menu, @NonNull - EditHabitDialogFactory editHabitDialogFactory, + EditHabitDialogFactory editHabitDialogFactory, + @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, @NonNull Lazy behavior) { super(activity); + this.confirmDeleteDialogFactory = confirmDeleteDialogFactory; setMenu(menu); setRootView(view); @@ -116,6 +122,18 @@ public class ShowHabitScreen extends BaseScreen { case COULD_NOT_EXPORT: showMessage(R.string.could_not_export); + case HABIT_DELETED: + showMessage(R.string.delete_habits_message); } } + + @Override + public void showDeleteConfirmationScreen(OnConfirmedCallback callback) { + activity.showDialog(confirmDeleteDialogFactory.create(callback)); + } + + @Override + public void endActivity() { + activity.finish(); + } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java index fe30a3e31..733db302c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitsMenu.java @@ -57,6 +57,10 @@ public class ShowHabitsMenu extends BaseMenu behavior.get().onExportCSV(); return true; + case R.id.action_delete: + behavior.get().onDeleteHabit(); + return true; + default: return false; } diff --git a/uhabits-android/src/main/res/menu/show_habit.xml b/uhabits-android/src/main/res/menu/show_habit.xml index 366a53e6c..e14ce108c 100644 --- a/uhabits-android/src/main/res/menu/show_habit.xml +++ b/uhabits-android/src/main/res/menu/show_habit.xml @@ -26,6 +26,11 @@ android:title="@string/export" app:showAsAction="never"/> + + selected = Collections.singletonList(habit); + + screen.showDeleteConfirmationScreen(() -> { + commandRunner.execute(new DeleteHabitsCommand(habitList, selected), + null); + screen.showMessage(Message.HABIT_DELETED); + screen.endActivity(); + }); + } + public enum Message { - COULD_NOT_EXPORT + COULD_NOT_EXPORT, HABIT_DELETED } public interface Screen @@ -89,6 +109,11 @@ public class ShowHabitMenuBehavior void showMessage(Message m); void showSendFileScreen(String filename); + + void showDeleteConfirmationScreen( + @NonNull OnConfirmedCallback callback); + + void endActivity(); } public interface System diff --git a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java index 08aa1a7ea..fefade28e 100644 --- a/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java +++ b/uhabits-core/src/test/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitMenuBehaviorTest.java @@ -50,7 +50,7 @@ public class ShowHabitMenuBehaviorTest extends BaseUnitTest habit = fixtures.createShortHabit(); menu = new ShowHabitMenuBehavior(habitList, habit, taskRunner, screen, - system); + system, commandRunner); } @Test