diff --git a/android/uhabits-android/build.gradle b/android/uhabits-android/build.gradle index 45d2a0416..42fae060d 100644 --- a/android/uhabits-android/build.gradle +++ b/android/uhabits-android/build.gradle @@ -87,7 +87,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "com.github.paolorotolo:appintro:3.4.0" implementation "com.google.dagger:dagger:$DAGGER_VERSION" - implementation "com.jakewharton:butterknife:8.6.1-SNAPSHOT" + implementation "com.jakewharton:butterknife:10.0.0" implementation "org.apmem.tools:layouts:1.10" implementation "com.google.code.gson:gson:2.8.5" implementation "com.google.code.findbugs:jsr305:3.0.2" diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index 3e85f80b9..e34b66aec 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -26,9 +26,9 @@ import androidx.annotation.NonNull; import org.isoron.androidbase.activities.*; import org.isoron.uhabits.*; 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.callbacks.*; +import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior; import org.isoron.uhabits.core.ui.screens.habits.show.*; import org.isoron.uhabits.intents.*; @@ -54,6 +54,9 @@ public class ShowHabitScreen extends BaseScreen @NonNull private final IntentFactory intentFactory; + @NonNull + private final NumberPickerFactory numberPickerFactory; + @Inject public ShowHabitScreen(@NonNull BaseActivity activity, @NonNull Habit habit, @@ -61,6 +64,7 @@ public class ShowHabitScreen extends BaseScreen @NonNull ShowHabitsMenu menu, @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, @NonNull IntentFactory intentFactory, + @NonNull NumberPickerFactory numberPickerFactory, @NonNull Lazy behavior) { super(activity); @@ -71,6 +75,7 @@ public class ShowHabitScreen extends BaseScreen this.habit = habit; this.behavior = behavior; this.confirmDeleteDialogFactory = confirmDeleteDialogFactory; + this.numberPickerFactory = numberPickerFactory; view.setController(this); } @@ -80,6 +85,14 @@ public class ShowHabitScreen extends BaseScreen behavior.get().onEditHistory(); } + @Override + public void showNumberPicker(double value, + @NonNull String unit, + @NonNull ListHabitsBehavior.NumberPickerCallback callback) + { + numberPickerFactory.create(value, unit, callback).show(); + } + @Override public void onToggleCheckmark(Timestamp timestamp, int value) { diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java index 1f43ace7b..2834656ec 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/screens/habits/show/ShowHabitBehavior.java @@ -23,6 +23,7 @@ import androidx.annotation.*; import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.core.models.*; +import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior; import javax.inject.*; @@ -58,12 +59,29 @@ public class ShowHabitBehavior public void onToggleCheckmark(Timestamp timestamp, int value) { - commandRunner.execute( - new CreateRepetitionCommand(habitList, habit, timestamp, value), null); + if (habit.isNumerical()) { + CheckmarkList checkmarks = habit.getCheckmarks(); + double oldValue = checkmarks.getValues(timestamp, timestamp)[0]; + + screen.showNumberPicker(oldValue / 1000, habit.getUnit(), newValue -> + { + newValue = Math.round(newValue * 1000); + commandRunner.execute( + new CreateRepetitionCommand(habitList, habit, timestamp, (int) newValue), + habit.getId()); + }); + } else { + commandRunner.execute( + new CreateRepetitionCommand(habitList, habit, timestamp, value), null); + } } public interface Screen { void showEditHistoryScreen(); + + void showNumberPicker(double value, + @NonNull String unit, + @NonNull ListHabitsBehavior.NumberPickerCallback callback); } }