diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialog.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialog.java index 6a70e2815..d91ebd193 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialog.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialog.java @@ -19,6 +19,7 @@ package org.isoron.uhabits.activities.habits.edit; +import android.content.*; import android.os.*; import android.support.annotation.*; import android.support.v7.app.*; @@ -38,13 +39,11 @@ import org.isoron.uhabits.preferences.*; import butterknife.*; -public abstract class BooleanHabitDialog extends AppCompatDialogFragment +public class BooleanHabitDialog extends AppCompatDialogFragment { - protected Habit originalHabit; - - protected Habit modifiedHabit; + public static final String BUNDLE_HABIT_ID = "habitId"; - protected BooleanHabitDialogHelper helper; + protected Habit originalHabit; protected Preferences prefs; @@ -52,10 +51,19 @@ public abstract class BooleanHabitDialog extends AppCompatDialogFragment protected HabitList habitList; - protected AppComponent appComponent; + protected AppComponent component; protected ModelFactory modelFactory; + @BindView(R.id.namePanel) + NameDescriptionPanel namePanel; + + @BindView(R.id.reminderPanel) + ReminderPanel reminderPanel; + + @BindView(R.id.frequencyPanel) + FrequencyPanel frequencyPanel; + private ColorPickerDialogFactory colorPickerDialogFactory; @Override @@ -79,76 +87,54 @@ public abstract class BooleanHabitDialog extends AppCompatDialogFragment ViewGroup container, Bundle savedInstanceState) { - View view = - inflater.inflate(R.layout.edit_boolean_habit, container, false); - - HabitsApplication app = - (HabitsApplication) getContext().getApplicationContext(); - - appComponent = app.getComponent(); - prefs = appComponent.getPreferences(); - habitList = appComponent.getHabitList(); - commandRunner = appComponent.getCommandRunner(); - modelFactory = appComponent.getModelFactory(); + View view; + view = inflater.inflate(R.layout.edit_boolean_habit, container, false); + initDependencies(); ButterKnife.bind(this, view); - helper = new BooleanHabitDialogHelper(this, view); getDialog().setTitle(getTitle()); - initializeHabits(); - restoreSavedInstance(savedInstanceState); - helper.populateForm(modifiedHabit); - - helper.frequencyPanel.setFrequency(modifiedHabit.getFrequency()); - - if (modifiedHabit.hasReminder()) - helper.reminderPanel.setReminder(modifiedHabit.getReminder()); - - helper.reminderPanel.setController(new ReminderPanel.Controller() - { - @Override - public void onTimeClicked(int currentHour, int currentMin) - { - TimePickerDialog timePicker; - boolean is24HourMode = DateFormat.is24HourFormat(getContext()); - timePicker = TimePickerDialog.newInstance(helper.reminderPanel, - currentHour, currentMin, is24HourMode); - timePicker.show(getFragmentManager(), "timePicker"); - } + originalHabit = parseHabitFromArguments(); - @Override - public void onWeekdayClicked(WeekdayList currentDays) - { - WeekdayPickerDialog dialog = new WeekdayPickerDialog(); - dialog.setListener(helper.reminderPanel); - dialog.setSelectedDays(currentDays); - dialog.show(getFragmentManager(), "weekdayPicker"); - } - }); + populateForm(); + setupReminderController(); + setupNameController(); return view; } - @Override - @SuppressWarnings("ConstantConditions") - public void onSaveInstanceState(Bundle outState) + protected int getTitle() { - super.onSaveInstanceState(outState); - outState.putInt("color", modifiedHabit.getColor()); + if (originalHabit == null) return R.string.edit_habit; + else return R.string.create_habit; } - protected abstract int getTitle(); - - protected abstract void initializeHabits(); - - protected void restoreSavedInstance(@Nullable Bundle bundle) + protected void saveHabit(@NonNull Habit habit) { - if (bundle == null) return; - modifiedHabit.setColor( - bundle.getInt("color", modifiedHabit.getColor())); + if (originalHabit == null) + { + commandRunner.execute(component + .getCreateHabitCommandFactory() + .create(habitList, habit), null); + } + else + { + commandRunner.execute(component.getEditHabitCommandFactory(). + create(habitList, originalHabit, habit), originalHabit.getId()); + } } - protected abstract void saveHabit(); + private void initDependencies() + { + Context appContext = getContext().getApplicationContext(); + HabitsApplication app = (HabitsApplication) appContext; + + component = app.getComponent(); + prefs = component.getPreferences(); + habitList = component.getHabitList(); + commandRunner = component.getCommandRunner(); + modelFactory = component.getModelFactory(); + } @OnClick(R.id.buttonDiscard) void onButtonDiscardClick() @@ -159,30 +145,92 @@ public abstract class BooleanHabitDialog extends AppCompatDialogFragment @OnClick(R.id.buttonSave) void onSaveButtonClick() { - helper.parseFormIntoHabit(modifiedHabit); - modifiedHabit.setReminder(helper.reminderPanel.getReminder()); - modifiedHabit.setFrequency(helper.frequencyPanel.getFrequency()); + if (!namePanel.validate()) return; + if (!frequencyPanel.validate()) return; - if (!helper.frequencyPanel.validate()) return; - if (!helper.validate(modifiedHabit)) return; + Habit habit = modelFactory.buildHabit(); + habit.setName(namePanel.getName()); + habit.setDescription(namePanel.getDescription()); + habit.setColor(namePanel.getColor()); + habit.setReminder(reminderPanel.getReminder()); + habit.setFrequency(frequencyPanel.getFrequency()); - saveHabit(); + saveHabit(habit); dismiss(); } - @OnClick(R.id.buttonPickColor) - void showColorPicker() + @Nullable + private Habit parseHabitFromArguments() { - int color = modifiedHabit.getColor(); - ColorPickerDialog picker = colorPickerDialogFactory.create(color); + Bundle arguments = getArguments(); + if (arguments == null) return null; - picker.setListener(c -> + Long id = (Long) arguments.get(BUNDLE_HABIT_ID); + if (id == null) return null; + + Habit habit = habitList.getById(id); + if (habit == null) throw new IllegalStateException(); + + return habit; + } + + private void populateForm() + { + Habit habit = modelFactory.buildHabit(); + habit.setFrequency(Frequency.DAILY); + habit.setColor(prefs.getDefaultHabitColor(habit.getColor())); + + if (originalHabit != null) habit.copyFrom(originalHabit); + + namePanel.populateFrom(habit); + frequencyPanel.setFrequency(habit.getFrequency()); + if (habit.hasReminder()) reminderPanel.setReminder(habit.getReminder()); + } + + private void setupNameController() + { + namePanel.setController(new NameDescriptionPanel.Controller() { - prefs.setDefaultHabitColor(c); - modifiedHabit.setColor(c); - helper.populateColor(c); + @Override + public void onColorPickerClicked(int previousColor) + { + ColorPickerDialog picker = + colorPickerDialogFactory.create(previousColor); + + picker.setListener(c -> + { + prefs.setDefaultHabitColor(c); + namePanel.setColor(c); + }); + + picker.show(getFragmentManager(), "picker"); + } }); + } + + private void setupReminderController() + { + reminderPanel.setController(new ReminderPanel.Controller() + { + @Override + public void onTimeClicked(int currentHour, int currentMin) + { + TimePickerDialog timePicker; + boolean is24HourMode = DateFormat.is24HourFormat(getContext()); + timePicker = + TimePickerDialog.newInstance(reminderPanel, currentHour, + currentMin, is24HourMode); + timePicker.show(getFragmentManager(), "timePicker"); + } - picker.show(getFragmentManager(), "picker"); + @Override + public void onWeekdayClicked(WeekdayList currentDays) + { + WeekdayPickerDialog dialog = new WeekdayPickerDialog(); + dialog.setListener(reminderPanel); + dialog.setSelectedDays(currentDays); + dialog.show(getFragmentManager(), "weekdayPicker"); + } + }); } } diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditBooleanHabitDialogFactory.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialogFactory.java similarity index 73% rename from app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditBooleanHabitDialogFactory.java rename to app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialogFactory.java index 43cc27348..83ac9403b 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditBooleanHabitDialogFactory.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialogFactory.java @@ -26,21 +26,28 @@ import org.isoron.uhabits.models.*; import javax.inject.*; -public class EditBooleanHabitDialogFactory +import static org.isoron.uhabits.activities.habits.edit.BooleanHabitDialog.*; + +public class BooleanHabitDialogFactory { @Inject - public EditBooleanHabitDialogFactory() + public BooleanHabitDialogFactory() + { + } + + public BooleanHabitDialog create() { + return new BooleanHabitDialog(); } - public EditBooleanHabitDialog create(@NonNull Habit habit) + public BooleanHabitDialog edit(@NonNull Habit habit) { if (habit.getId() == null) throw new IllegalArgumentException("habit not saved"); - EditBooleanHabitDialog dialog = new EditBooleanHabitDialog(); + BooleanHabitDialog dialog = new BooleanHabitDialog(); Bundle args = new Bundle(); - args.putLong("habitId", habit.getId()); + args.putLong(BUNDLE_HABIT_ID, habit.getId()); dialog.setArguments(args); return dialog; } diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialogHelper.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialogHelper.java deleted file mode 100644 index edb8415cb..000000000 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/BooleanHabitDialogHelper.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.habits.edit; - -import android.support.v4.app.*; -import android.view.*; -import android.widget.*; - -import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.habits.edit.views.*; -import org.isoron.uhabits.models.*; -import org.isoron.uhabits.utils.*; - -import butterknife.*; - -public class BooleanHabitDialogHelper -{ - private DialogFragment frag; - - @BindView(R.id.tvName) - TextView tvName; - - @BindView(R.id.tvDescription) - TextView tvDescription; - - @BindView(R.id.reminderPanel) - ReminderPanel reminderPanel; - - @BindView(R.id.frequencyPanel) - FrequencyPanel frequencyPanel; - - public BooleanHabitDialogHelper(DialogFragment frag, View view) - { - this.frag = frag; - ButterKnife.bind(this, view); - } - - protected void populateForm(final Habit habit) - { - tvName.setText(habit.getName()); - tvDescription.setText(habit.getDescription()); - populateColor(habit.getColor()); - } - - void parseFormIntoHabit(Habit habit) - { - habit.setName(tvName.getText().toString().trim()); - habit.setDescription(tvDescription.getText().toString().trim()); - } - - void populateColor(int paletteColor) - { - tvName.setTextColor( - ColorUtils.getColor(frag.getContext(), paletteColor)); - } - - boolean validate(Habit habit) - { - Boolean valid = true; - - if (habit.getName().isEmpty()) - { - tvName.setError(frag.getString(R.string.validation_name_should_not_be_blank)); - valid = false; - } - - return valid; - } -} diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/CreateBooleanHabitDialog.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/CreateBooleanHabitDialog.java deleted file mode 100644 index 4ed21fea7..000000000 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/CreateBooleanHabitDialog.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.habits.edit; - -import com.google.auto.factory.*; - -import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; -import org.isoron.uhabits.models.*; - -@AutoFactory(allowSubclasses = true) -public class CreateBooleanHabitDialog extends BooleanHabitDialog -{ - @Override - protected int getTitle() - { - return R.string.create_habit; - } - - @Override - protected void initializeHabits() - { - modifiedHabit = modelFactory.buildHabit(); - modifiedHabit.setFrequency(Frequency.DAILY); - modifiedHabit.setColor(prefs.getDefaultHabitColor(modifiedHabit.getColor())); - } - - @Override - protected void saveHabit() - { - Command command = appComponent - .getCreateHabitCommandFactory() - .create(habitList, modifiedHabit); - commandRunner.execute(command, null); - } -} diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditBooleanHabitDialog.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditBooleanHabitDialog.java deleted file mode 100644 index ff5c33775..000000000 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/EditBooleanHabitDialog.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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.habits.edit; - -import org.isoron.uhabits.*; -import org.isoron.uhabits.commands.*; - -public class EditBooleanHabitDialog extends BooleanHabitDialog -{ - @Override - protected int getTitle() - { - return R.string.edit_habit; - } - - @Override - protected void initializeHabits() - { - Long habitId = (Long) getArguments().get("habitId"); - if (habitId == null) - throw new IllegalArgumentException("habitId must be specified"); - - originalHabit = habitList.getById(habitId); - modifiedHabit = modelFactory.buildHabit(); - modifiedHabit.copyFrom(originalHabit); - } - - @Override - protected void saveHabit() - { - Command command = appComponent.getEditHabitCommandFactory(). - create(habitList, originalHabit, modifiedHabit); - commandRunner.execute(command, originalHabit.getId()); - } -} diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/NumericalHabitDialogHelper.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/NumericalHabitDialogHelper.java index 2759bab12..270069a58 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/NumericalHabitDialogHelper.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/NumericalHabitDialogHelper.java @@ -60,8 +60,6 @@ public class NumericalHabitDialogHelper public void parseForm(Habit habit) { - tvUnit.clearFocus(); - tvDescription.clearFocus(); habit.setName(tvName.getText().toString().trim()); habit.setDescription(tvDescription.getRealText().trim()); habit.setTargetType(tvTargetType.getSelectedItemPosition()); diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java index 232b9b3f2..977d746ab 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/ExampleEditText.java @@ -64,7 +64,8 @@ public class ExampleEditText extends EditText public String getRealText() { - return realText; + if(hasFocus()) return getText().toString(); + else return realText; } @Override diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java new file mode 100644 index 000000000..5c07aab0f --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/edit/views/NameDescriptionPanel.java @@ -0,0 +1,152 @@ +/* + * 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.habits.edit.views; + +import android.content.*; +import android.content.res.*; +import android.os.*; +import android.support.annotation.*; +import android.util.*; +import android.view.*; +import android.widget.*; + +import org.isoron.uhabits.R; +import org.isoron.uhabits.activities.common.views.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.utils.*; + +import butterknife.*; + + +public class NameDescriptionPanel extends FrameLayout +{ + @BindView(R.id.tvName) + EditText tvName; + + @BindView(R.id.tvDescription) + ExampleEditText tvDescription; + + private int color; + + @NonNull + private Controller controller; + + public NameDescriptionPanel(@NonNull Context context, + @Nullable AttributeSet attrs) + { + super(context, attrs); + + View view = inflate(context, R.layout.edit_habit_name, null); + ButterKnife.bind(this, view); + addView(view); + + controller = new Controller() {}; + } + + public int getColor() + { + return color; + } + + public void setColor(int color) + { + this.color = color; + tvName.setTextColor(ColorUtils.getColor(getContext(), color)); + } + + @NonNull + public String getDescription() + { + return tvDescription.getRealText().trim(); + } + + @NonNull + public String getName() + { + return tvName.getText().toString().trim(); + } + + public void populateFrom(@NonNull Habit habit) + { + Resources res = getResources(); + + if(habit.isNumerical()) + tvDescription.setExample(res.getString(R.string.example_question_numerical)); + else + tvDescription.setExample(res.getString(R.string.example_question_boolean)); + + setColor(habit.getColor()); + tvName.setText(habit.getName()); + tvDescription.setRealText(habit.getDescription()); + } + + public boolean validate() + { + Resources res = getResources(); + + if (getName().isEmpty()) + { + tvName.setError( + res.getString(R.string.validation_name_should_not_be_blank)); + return false; + } + + return true; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) + { + BundleSavedState bss = (BundleSavedState) state; + setColor(bss.bundle.getInt("color")); + super.onRestoreInstanceState(bss.getSuperState()); + } + + @Override + protected Parcelable onSaveInstanceState() + { + Parcelable superState = super.onSaveInstanceState(); + Bundle bundle = new Bundle(); + bundle.putInt("color", color); + return new BundleSavedState(superState, bundle); + } + + @OnClick(R.id.buttonPickColor) + void showColorPicker() + { + controller.onColorPickerClicked(color); + } + + public void setController(@NonNull Controller controller) + { + this.controller = controller; + } + + public interface Controller + { + /** + * Called when the user has clicked the widget to select a new + * color for the habit. + * + * @param previousColor the color previously selected + */ + default void onColorPickerClicked(int previousColor) {} + } +} diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java index 98e981caa..2b3f30a9a 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.java @@ -82,10 +82,6 @@ public class ListHabitsScreen extends BaseScreen @NonNull private final ConfirmDeleteDialogFactory confirmDeleteDialogFactory; - @NonNull - private final CreateBooleanHabitDialogFactory - createBooleanHabitDialogFactory; - @NonNull private final FilePickerDialogFactory filePickerDialogFactory; @@ -93,7 +89,7 @@ public class ListHabitsScreen extends BaseScreen private final ColorPickerDialogFactory colorPickerFactory; @NonNull - private final EditBooleanHabitDialogFactory editBooleanHabitDialogFactory; + private final BooleanHabitDialogFactory booleanHabitDialogFactory; @NonNull private final ThemeSwitcher themeSwitcher; @@ -112,10 +108,9 @@ public class ListHabitsScreen extends BaseScreen @NonNull IntentFactory intentFactory, @NonNull ThemeSwitcher themeSwitcher, @NonNull ConfirmDeleteDialogFactory confirmDeleteDialogFactory, - @NonNull CreateBooleanHabitDialogFactory createBooleanHabitDialogFactory, @NonNull FilePickerDialogFactory filePickerDialogFactory, @NonNull ColorPickerDialogFactory colorPickerFactory, - @NonNull EditBooleanHabitDialogFactory editBooleanHabitDialogFactory, + @NonNull BooleanHabitDialogFactory booleanHabitDialogFactory, @NonNull EditNumericalHabitDialogFactory editNumericalHabitDialogFactory, @NonNull CreateNumericalHabitDialogFactory createNumericalHabitDialogFactory) { @@ -125,8 +120,7 @@ public class ListHabitsScreen extends BaseScreen this.commandRunner = commandRunner; this.confirmDeleteDialogFactory = confirmDeleteDialogFactory; this.createNumericalHabitDialogFactory = createNumericalHabitDialogFactory; - this.createBooleanHabitDialogFactory = createBooleanHabitDialogFactory; - this.editBooleanHabitDialogFactory = editBooleanHabitDialogFactory; + this.booleanHabitDialogFactory = booleanHabitDialogFactory; this.editNumericalHabitDialogFactory = editNumericalHabitDialogFactory; this.dirFinder = dirFinder; this.filePickerDialogFactory = filePickerDialogFactory; @@ -209,8 +203,8 @@ public class ListHabitsScreen extends BaseScreen public void showCreateBooleanHabitScreen() { - CreateBooleanHabitDialog dialog; - dialog = createBooleanHabitDialogFactory.create(); + BooleanHabitDialog dialog; + dialog = booleanHabitDialogFactory.create(); activity.showDialog(dialog, "editHabit"); } @@ -229,8 +223,8 @@ public class ListHabitsScreen extends BaseScreen } else { - EditBooleanHabitDialog dialog; - dialog = editBooleanHabitDialogFactory.create(habit); + BooleanHabitDialog dialog; + dialog = booleanHabitDialogFactory.edit(habit); activity.showDialog(dialog, "editHabit"); } } diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java b/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java index 9a8d7d27d..172944155 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitScreen.java @@ -38,18 +38,19 @@ public class ShowHabitScreen extends BaseScreen private ShowHabitController controller; @NonNull - private final EditBooleanHabitDialogFactory editBooleanHabitDialogFactory; + private final BooleanHabitDialogFactory booleanHabitDialogFactory; @Inject public ShowHabitScreen(@NonNull BaseActivity activity, @NonNull Habit habit, @NonNull ShowHabitRootView view, @NonNull - EditBooleanHabitDialogFactory editBooleanHabitDialogFactory) + BooleanHabitDialogFactory + booleanHabitDialogFactory) { super(activity); setRootView(view); - this.editBooleanHabitDialogFactory = editBooleanHabitDialogFactory; + this.booleanHabitDialogFactory = booleanHabitDialogFactory; this.habit = habit; } @@ -72,8 +73,9 @@ public class ShowHabitScreen extends BaseScreen public void showEditHabitDialog() { - EditBooleanHabitDialog dialog = editBooleanHabitDialogFactory.create(habit); - activity.showDialog(dialog, "editHabit"); + activity.showDialog( + booleanHabitDialogFactory.edit(habit), + "editHabit"); } public void showEditHistoryDialog() diff --git a/app/src/main/res/layout/edit_boolean_habit.xml b/app/src/main/res/layout/edit_boolean_habit.xml index d7d8215f3..2f5d2c410 100644 --- a/app/src/main/res/layout/edit_boolean_habit.xml +++ b/app/src/main/res/layout/edit_boolean_habit.xml @@ -29,29 +29,10 @@ android:id="@+id/formPanel" style="@style/dialogFormPanel"> - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/edit_habit_reminder.xml b/app/src/main/res/layout/edit_habit_reminder.xml index 0e5318c36..d6dcdb10d 100644 --- a/app/src/main/res/layout/edit_habit_reminder.xml +++ b/app/src/main/res/layout/edit_habit_reminder.xml @@ -19,12 +19,13 @@ --> + android:layout_height="match_parent" + android:orientation="vertical"> + style="@style/dialogFormRow" + android:layout_marginTop="12dp"> + style="@style/dialogFormRow" + android:layout_marginTop="12dp"> - Loop Habit Tracker Habits Settings @@ -211,4 +210,7 @@ Unit Count This field should not be blank + e.g. How many steps did you walk today? + e.g. Did you exercise today? + Question \ No newline at end of file diff --git a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java b/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java index 8a3a9f97a..a7afdeea1 100644 --- a/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java +++ b/app/src/test/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreenTest.java @@ -61,8 +61,6 @@ public class ListHabitsScreenTest extends BaseUnitTest private ConfirmDeleteDialogFactory confirmDeleteDialogFactory; - private CreateBooleanHabitDialogFactory createHabitDialogFactory; - private FilePickerDialogFactory filePickerDialogFactory; private IntentFactory intentFactory; @@ -73,7 +71,7 @@ public class ListHabitsScreenTest extends BaseUnitTest private ColorPickerDialogFactory colorPickerDialogFactory; - private EditBooleanHabitDialogFactory editHabitDialogFactory; + private BooleanHabitDialogFactory dialogFactory; private ThemeSwitcher themeSwitcher; @@ -96,10 +94,9 @@ public class ListHabitsScreenTest extends BaseUnitTest intentFactory = mock(IntentFactory.class); themeSwitcher = mock(ThemeSwitcher.class); confirmDeleteDialogFactory = mock(ConfirmDeleteDialogFactory.class); - createHabitDialogFactory = mock(CreateBooleanHabitDialogFactory.class); filePickerDialogFactory = mock(FilePickerDialogFactory.class); colorPickerDialogFactory = mock(ColorPickerDialogFactory.class); - editHabitDialogFactory = mock(EditBooleanHabitDialogFactory.class); + dialogFactory = mock(BooleanHabitDialogFactory.class); editNumericalHabitDialogFactory = mock(EditNumericalHabitDialogFactory.class); createNumericalHabitDialogFactory = @@ -107,8 +104,7 @@ public class ListHabitsScreenTest extends BaseUnitTest screen = spy(new ListHabitsScreen(activity, commandRunner, dirFinder, rootView, intentFactory, themeSwitcher, confirmDeleteDialogFactory, - createHabitDialogFactory, filePickerDialogFactory, - colorPickerDialogFactory, editHabitDialogFactory, + filePickerDialogFactory, colorPickerDialogFactory, dialogFactory, editNumericalHabitDialogFactory, createNumericalHabitDialogFactory)); @@ -222,8 +218,8 @@ public class ListHabitsScreenTest extends BaseUnitTest @Test public void testShowEditHabitScreen() { - EditBooleanHabitDialog dialog = mock(EditBooleanHabitDialog.class); - when(editHabitDialogFactory.create(habit)).thenReturn(dialog); + BooleanHabitDialog dialog = mock(BooleanHabitDialog.class); + when(dialogFactory.edit(habit)).thenReturn(dialog); screen.showEditHabitScreen(habit); verify(activity).showDialog(eq(dialog), any());