From 0b7697d17275277da470673343e4b4cd4312b4ab Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 20 Jun 2020 08:39:55 -0500 Subject: [PATCH] Make save button functional for numerical habits --- .../acceptance/steps/EditHabitSteps.java | 2 +- .../habits/edit/EditHabitActivity.kt | 62 ++++++++++++++++--- .../main/res/layout/activity_edit_habit.xml | 5 +- .../src/main/res/values/strings.xml | 2 + 4 files changed, 60 insertions(+), 11 deletions(-) diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java index e87e56483..af17ecd00 100644 --- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java +++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java @@ -38,7 +38,7 @@ public class EditHabitSteps public static void pickFrequency() { - onView(withId(R.id.frequencyPicker)).perform(click()); + onView(withId(R.id.boolean_frequency_picker)).perform(click()); onView(withText("SAVE")).perform(click()); } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt index 2ffef62e1..fb5c4e3bc 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt @@ -24,6 +24,7 @@ import android.graphics.* import android.os.* import android.text.format.* import android.view.* +import android.widget.* import androidx.appcompat.app.* import androidx.fragment.app.* import com.android.datetimepicker.time.* @@ -36,6 +37,8 @@ import org.isoron.uhabits.core.commands.* import org.isoron.uhabits.core.models.* import org.isoron.uhabits.databinding.* import org.isoron.uhabits.utils.* +import kotlin.math.* + class EditHabitActivity : AppCompatActivity() { @@ -45,6 +48,7 @@ class EditHabitActivity : AppCompatActivity() { var habitId = -1L var habitType = -1 + var unit = "" var paletteColor = 11 var androidColor = 0 var freqNum = 1 @@ -76,9 +80,13 @@ class EditHabitActivity : AppCompatActivity() { reminderMin = habit.reminder.minute reminderDays = habit.reminder.days } + var target = habit.targetValue * habit.frequency.denominator + target = (target * 100.0).roundToLong() / 100.0 binding.nameInput.setText(habit.name) binding.questionInput.setText(habit.question) binding.notesInput.setText(habit.description) + binding.unitInput.setText(habit.unit) + binding.targetInput.setText(target.toString()) } else { habitType = intent.getIntExtra("habitType", Habit.YES_NO_HABIT) } @@ -121,7 +129,7 @@ class EditHabitActivity : AppCompatActivity() { } populateFrequency() - binding.frequencyPicker.setOnClickListener { + binding.booleanFrequencyPicker.setOnClickListener { val dialog = FrequencyPickerDialog(freqNum, freqDen) dialog.onFrequencyPicked = { num, den -> freqNum = num @@ -131,6 +139,24 @@ class EditHabitActivity : AppCompatActivity() { dialog.show(supportFragmentManager, "frequencyPicker") } + binding.numericalFrequencyPicker.setOnClickListener { + val builder = AlertDialog.Builder(this) + val arrayAdapter = ArrayAdapter(this, android.R.layout.select_dialog_item) + arrayAdapter.add(getString(R.string.every_day)) + arrayAdapter.add(getString(R.string.every_week)) + arrayAdapter.add(getString(R.string.every_month)) + builder.setAdapter(arrayAdapter) { dialog, which -> + freqDen = when(which) { + 1 -> 7 + 2 -> 30 + else -> 1 + } + populateFrequency() + dialog.dismiss() + } + builder.show() + } + populateReminder() binding.reminderTimePicker.setOnClickListener { val currentHour = if (reminderHour >= 0) reminderHour else 8 @@ -190,9 +216,11 @@ class EditHabitActivity : AppCompatActivity() { habit.setReminder(Reminder(reminderHour, reminderMin, reminderDays)) } habit.frequency = Frequency(freqNum, freqDen) - habit.unit = "" - habit.targetValue = 1.0 - habit.type = Habit.YES_NO_HABIT + val target = targetInput.text.toString().toDouble() / freqDen + habit.targetValue = target + habit.targetType = Habit.AT_LEAST + habit.unit = unitInput.text.trim().toString() + habit.type = habitType val command = if (habitId >= 0) { component.editHabitCommandFactory.create(component.habitList, original, habit) @@ -204,11 +232,22 @@ class EditHabitActivity : AppCompatActivity() { } private fun validate(): Boolean { + var isValid = true if (nameInput.text.isEmpty()) { - nameInput.error = getString(R.string.validation_name_should_not_be_blank) - return false + nameInput.error = getString(R.string.validation_should_not_be_blank) + isValid = false } - return true + if (habitType == Habit.NUMBER_HABIT) { + if(unitInput.text.isEmpty()) { + unitInput.error = getString(R.string.validation_should_not_be_blank) + isValid = false + } + if(targetInput.text.isEmpty()) { + targetInput.error = getString(R.string.validation_should_not_be_blank) + isValid = false + } + } + return isValid } private fun populateReminder() { @@ -227,7 +266,7 @@ class EditHabitActivity : AppCompatActivity() { } private fun populateFrequency() { - val label = when { + binding.booleanFrequencyPicker.text = when { freqNum == 1 && freqDen == 1 -> getString(R.string.every_day) freqNum == 1 && freqDen == 7 -> getString(R.string.every_week) freqNum == 1 && freqDen > 1 -> getString(R.string.every_x_days, freqDen) @@ -235,7 +274,12 @@ class EditHabitActivity : AppCompatActivity() { freqDen == 31 -> getString(R.string.x_times_per_month, freqNum) else -> "Unknown" } - binding.frequencyPicker.text = label + binding.numericalFrequencyPicker.text = when(freqDen) { + 1 -> getString(R.string.every_day) + 7 -> getString(R.string.every_week) + 30 -> getString(R.string.every_month) + else -> "Unknown" + } } private fun updateColors() { diff --git a/android/uhabits-android/src/main/res/layout/activity_edit_habit.xml b/android/uhabits-android/src/main/res/layout/activity_edit_habit.xml index 63302cb4c..0701734e7 100644 --- a/android/uhabits-android/src/main/res/layout/activity_edit_habit.xml +++ b/android/uhabits-android/src/main/res/layout/activity_edit_habit.xml @@ -127,7 +127,7 @@ android:text="@string/frequency" /> @@ -142,6 +142,7 @@ android:text="@string/unit" /> @@ -163,6 +164,7 @@ android:text="@string/target" /> @@ -178,6 +180,7 @@ android:text="@string/frequency" /> diff --git a/android/uhabits-android/src/main/res/values/strings.xml b/android/uhabits-android/src/main/res/values/strings.xml index cf98025c7..aec954b17 100644 --- a/android/uhabits-android/src/main/res/values/strings.xml +++ b/android/uhabits-android/src/main/res/values/strings.xml @@ -260,6 +260,8 @@ e.g. Run e.g. How many miles did you run today? e.g. miles + Every month + Cannot be blank \ No newline at end of file