diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java index f4639e3a3..f4d8a8149 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitDialog.java @@ -24,6 +24,7 @@ import android.os.*; import android.support.annotation.*; import android.support.v7.app.*; import android.text.format.*; +import android.util.Log; import android.view.*; import com.android.datetimepicker.time.*; @@ -63,6 +64,9 @@ public class EditHabitDialog extends AppCompatDialogFragment @BindView(R.id.namePanel) NameDescriptionPanel namePanel; + @BindView(R.id.typePanel) + TypePanel typePanel; + @BindView(R.id.reminderPanel) ReminderPanel reminderPanel; @@ -112,6 +116,7 @@ public class EditHabitDialog extends AppCompatDialogFragment populateForm(); setupReminderController(); + setupTypeController(); setupNameController(); return view; @@ -138,11 +143,6 @@ public class EditHabitDialog extends AppCompatDialogFragment } } - private int getTypeFromArguments() - { - return Habit.YES_NO_HABIT; - } - private void initDependencies() { Context appContext = getContext().getApplicationContext(); @@ -164,9 +164,9 @@ public class EditHabitDialog extends AppCompatDialogFragment @OnClick(R.id.buttonSave) void onSaveButtonClick() { - int type = getTypeFromArguments(); - if (!namePanel.validate()) return; + + int type = typePanel.getType(); if (type == Habit.YES_NO_HABIT && !frequencyPanel.validate()) return; if (type == Habit.NUMBER_HABIT && !targetPanel.validate()) return; @@ -204,16 +204,24 @@ public class EditHabitDialog extends AppCompatDialogFragment private void populateForm() { Habit habit = modelFactory.buildHabit(); - habit.setFrequency(Frequency.DAILY); habit.setColor(prefs.getDefaultHabitColor(habit.getColor())); - habit.setType(getTypeFromArguments()); + habit.setType(Habit.YES_NO_HABIT); + habit.setFrequency(Frequency.DAILY); if (originalHabit != null) habit.copyFrom(originalHabit); - if (habit.isNumerical()) frequencyPanel.setVisibility(GONE); - else targetPanel.setVisibility(GONE); + if (habit.isNumerical()) + { + frequencyPanel.setVisibility(GONE); + } + else + { + targetPanel.setVisibility(GONE); + } namePanel.populateFrom(habit); + typePanel.setType(habit.getType()); + typePanel.setEnabled(originalHabit == null); frequencyPanel.setFrequency(habit.getFrequency()); targetPanel.setTargetValue(habit.getTargetValue()); targetPanel.setUnit(habit.getUnit()); @@ -241,6 +249,18 @@ public class EditHabitDialog extends AppCompatDialogFragment }); } + private void setupTypeController() + { + typePanel.setController(new TypePanel.Controller() + { + @Override + public void onTypeSelected(Integer previousType) + { + Log.d("YOUREIT", "Prev: " + previousType.toString() + " Sel: " + typePanel.getType().toString()); + } + }); + } + private void setupReminderController() { reminderPanel.setController(new ReminderPanel.Controller() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TypePanel.java b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TypePanel.java index cdcd18661..dfbe11524 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TypePanel.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/views/TypePanel.java @@ -47,6 +47,11 @@ public class TypePanel extends FrameLayout @BindView(R.id.spinner) Spinner spinner; + private Integer type; + + @NonNull + private Controller controller; + public TypePanel(@NonNull Context context, @Nullable AttributeSet attrs) { @@ -55,19 +60,20 @@ public class TypePanel extends FrameLayout View view = inflate(context, R.layout.edit_habit_type, null); ButterKnife.bind(this, view); addView(view); + + setType(Habit.YES_NO_HABIT); + controller = new Controller() {}; } @NonNull public Integer getType() { - Integer type = spinner.getSelectedItemPosition(); - if (type.equals(0)) return Habit.YES_NO_HABIT; - if (type.equals(0)) return Habit.NUMBER_HABIT; - return -1; + return type; } public void setType(@NonNull Integer type) { + this.type = type; int position = getQuickSelectPosition(type); spinner.setSelection(position); } @@ -76,7 +82,28 @@ public class TypePanel extends FrameLayout public void onTypeSelected(int position) { if (position < 0 || position > 1) throw new IllegalArgumentException(); - // TODO: A callback? + Integer previousType = type; + type = getTypeFromQuickSelect(position); + controller.onTypeSelected(previousType); + } + + public void setEnabled(boolean enabled) + { + spinner.setEnabled(enabled); + } + + public void setController(@NonNull Controller controller) { this.controller = controller; } + + public interface Controller + { + default void onTypeSelected(Integer previousType) {} + } + + private Integer getTypeFromQuickSelect(@NonNull Integer position) + { + if (position.equals(0)) return Habit.YES_NO_HABIT; + if (position.equals(1)) return Habit.NUMBER_HABIT; + return -1; } private int getQuickSelectPosition(@NonNull Integer type)