Allow user to change values in calendar chart for numerical habits

pull/627/head
Nam Nguyen 5 years ago
parent e1368777ab
commit 603dca97ac

@ -87,7 +87,7 @@ dependencies {
implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "com.github.paolorotolo:appintro:3.4.0" implementation "com.github.paolorotolo:appintro:3.4.0"
implementation "com.google.dagger:dagger:$DAGGER_VERSION" 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 "org.apmem.tools:layouts:1.10"
implementation "com.google.code.gson:gson:2.8.5" implementation "com.google.code.gson:gson:2.8.5"
implementation "com.google.code.findbugs:jsr305:3.0.2" implementation "com.google.code.findbugs:jsr305:3.0.2"

@ -26,9 +26,9 @@ import androidx.annotation.NonNull;
import org.isoron.androidbase.activities.*; import org.isoron.androidbase.activities.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.common.dialogs.*; 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.models.*;
import org.isoron.uhabits.core.ui.callbacks.*; 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.core.ui.screens.habits.show.*;
import org.isoron.uhabits.intents.*; import org.isoron.uhabits.intents.*;
@ -54,6 +54,9 @@ public class ShowHabitScreen extends BaseScreen
@NonNull @NonNull
private final IntentFactory intentFactory; private final IntentFactory intentFactory;
@NonNull
private final NumberPickerFactory numberPickerFactory;
@Inject @Inject
public ShowHabitScreen(@NonNull BaseActivity activity, public ShowHabitScreen(@NonNull BaseActivity activity,
@NonNull Habit habit, @NonNull Habit habit,
@ -61,6 +64,7 @@ public class ShowHabitScreen extends BaseScreen
@NonNull ShowHabitsMenu menu, @NonNull ShowHabitsMenu menu,
@NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory,
@NonNull IntentFactory intentFactory, @NonNull IntentFactory intentFactory,
@NonNull NumberPickerFactory numberPickerFactory,
@NonNull Lazy<ShowHabitBehavior> behavior) @NonNull Lazy<ShowHabitBehavior> behavior)
{ {
super(activity); super(activity);
@ -71,6 +75,7 @@ public class ShowHabitScreen extends BaseScreen
this.habit = habit; this.habit = habit;
this.behavior = behavior; this.behavior = behavior;
this.confirmDeleteDialogFactory = confirmDeleteDialogFactory; this.confirmDeleteDialogFactory = confirmDeleteDialogFactory;
this.numberPickerFactory = numberPickerFactory;
view.setController(this); view.setController(this);
} }
@ -80,6 +85,14 @@ public class ShowHabitScreen extends BaseScreen
behavior.get().onEditHistory(); behavior.get().onEditHistory();
} }
@Override
public void showNumberPicker(double value,
@NonNull String unit,
@NonNull ListHabitsBehavior.NumberPickerCallback callback)
{
numberPickerFactory.create(value, unit, callback).show();
}
@Override @Override
public void onToggleCheckmark(Timestamp timestamp, int value) public void onToggleCheckmark(Timestamp timestamp, int value)
{ {

@ -23,6 +23,7 @@ import androidx.annotation.*;
import org.isoron.uhabits.core.commands.*; import org.isoron.uhabits.core.commands.*;
import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior;
import javax.inject.*; import javax.inject.*;
@ -58,12 +59,29 @@ public class ShowHabitBehavior
public void onToggleCheckmark(Timestamp timestamp, int value) public void onToggleCheckmark(Timestamp timestamp, int value)
{ {
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( commandRunner.execute(
new CreateRepetitionCommand(habitList, habit, timestamp, value), null); new CreateRepetitionCommand(habitList, habit, timestamp, value), null);
} }
}
public interface Screen public interface Screen
{ {
void showEditHistoryScreen(); void showEditHistoryScreen();
void showNumberPicker(double value,
@NonNull String unit,
@NonNull ListHabitsBehavior.NumberPickerCallback callback);
} }
} }

Loading…
Cancel
Save