Make save button functional for numerical habits

pull/605/head
Alinson S. Xavier 5 years ago
parent b9850fa085
commit 0b7697d172

@ -38,7 +38,7 @@ public class EditHabitSteps
public static void pickFrequency() 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()); onView(withText("SAVE")).perform(click());
} }

@ -24,6 +24,7 @@ import android.graphics.*
import android.os.* import android.os.*
import android.text.format.* import android.text.format.*
import android.view.* import android.view.*
import android.widget.*
import androidx.appcompat.app.* import androidx.appcompat.app.*
import androidx.fragment.app.* import androidx.fragment.app.*
import com.android.datetimepicker.time.* 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.core.models.*
import org.isoron.uhabits.databinding.* import org.isoron.uhabits.databinding.*
import org.isoron.uhabits.utils.* import org.isoron.uhabits.utils.*
import kotlin.math.*
class EditHabitActivity : AppCompatActivity() { class EditHabitActivity : AppCompatActivity() {
@ -45,6 +48,7 @@ class EditHabitActivity : AppCompatActivity() {
var habitId = -1L var habitId = -1L
var habitType = -1 var habitType = -1
var unit = ""
var paletteColor = 11 var paletteColor = 11
var androidColor = 0 var androidColor = 0
var freqNum = 1 var freqNum = 1
@ -76,9 +80,13 @@ class EditHabitActivity : AppCompatActivity() {
reminderMin = habit.reminder.minute reminderMin = habit.reminder.minute
reminderDays = habit.reminder.days reminderDays = habit.reminder.days
} }
var target = habit.targetValue * habit.frequency.denominator
target = (target * 100.0).roundToLong() / 100.0
binding.nameInput.setText(habit.name) binding.nameInput.setText(habit.name)
binding.questionInput.setText(habit.question) binding.questionInput.setText(habit.question)
binding.notesInput.setText(habit.description) binding.notesInput.setText(habit.description)
binding.unitInput.setText(habit.unit)
binding.targetInput.setText(target.toString())
} else { } else {
habitType = intent.getIntExtra("habitType", Habit.YES_NO_HABIT) habitType = intent.getIntExtra("habitType", Habit.YES_NO_HABIT)
} }
@ -121,7 +129,7 @@ class EditHabitActivity : AppCompatActivity() {
} }
populateFrequency() populateFrequency()
binding.frequencyPicker.setOnClickListener { binding.booleanFrequencyPicker.setOnClickListener {
val dialog = FrequencyPickerDialog(freqNum, freqDen) val dialog = FrequencyPickerDialog(freqNum, freqDen)
dialog.onFrequencyPicked = { num, den -> dialog.onFrequencyPicked = { num, den ->
freqNum = num freqNum = num
@ -131,6 +139,24 @@ class EditHabitActivity : AppCompatActivity() {
dialog.show(supportFragmentManager, "frequencyPicker") dialog.show(supportFragmentManager, "frequencyPicker")
} }
binding.numericalFrequencyPicker.setOnClickListener {
val builder = AlertDialog.Builder(this)
val arrayAdapter = ArrayAdapter<String>(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() populateReminder()
binding.reminderTimePicker.setOnClickListener { binding.reminderTimePicker.setOnClickListener {
val currentHour = if (reminderHour >= 0) reminderHour else 8 val currentHour = if (reminderHour >= 0) reminderHour else 8
@ -190,9 +216,11 @@ class EditHabitActivity : AppCompatActivity() {
habit.setReminder(Reminder(reminderHour, reminderMin, reminderDays)) habit.setReminder(Reminder(reminderHour, reminderMin, reminderDays))
} }
habit.frequency = Frequency(freqNum, freqDen) habit.frequency = Frequency(freqNum, freqDen)
habit.unit = "" val target = targetInput.text.toString().toDouble() / freqDen
habit.targetValue = 1.0 habit.targetValue = target
habit.type = Habit.YES_NO_HABIT habit.targetType = Habit.AT_LEAST
habit.unit = unitInput.text.trim().toString()
habit.type = habitType
val command = if (habitId >= 0) { val command = if (habitId >= 0) {
component.editHabitCommandFactory.create(component.habitList, original, habit) component.editHabitCommandFactory.create(component.habitList, original, habit)
@ -204,11 +232,22 @@ class EditHabitActivity : AppCompatActivity() {
} }
private fun validate(): Boolean { private fun validate(): Boolean {
var isValid = true
if (nameInput.text.isEmpty()) { if (nameInput.text.isEmpty()) {
nameInput.error = getString(R.string.validation_name_should_not_be_blank) nameInput.error = getString(R.string.validation_should_not_be_blank)
return false 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() { private fun populateReminder() {
@ -227,7 +266,7 @@ class EditHabitActivity : AppCompatActivity() {
} }
private fun populateFrequency() { private fun populateFrequency() {
val label = when { binding.booleanFrequencyPicker.text = when {
freqNum == 1 && freqDen == 1 -> getString(R.string.every_day) freqNum == 1 && freqDen == 1 -> getString(R.string.every_day)
freqNum == 1 && freqDen == 7 -> getString(R.string.every_week) freqNum == 1 && freqDen == 7 -> getString(R.string.every_week)
freqNum == 1 && freqDen > 1 -> getString(R.string.every_x_days, freqDen) 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) freqDen == 31 -> getString(R.string.x_times_per_month, freqNum)
else -> "Unknown" 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() { private fun updateColors() {

@ -127,7 +127,7 @@
android:text="@string/frequency" /> android:text="@string/frequency" />
<TextView <TextView
style="@style/FormDropdown" style="@style/FormDropdown"
android:id="@+id/frequencyPicker" android:id="@+id/boolean_frequency_picker"
android:text="@string/every_day" /> android:text="@string/every_day" />
</LinearLayout> </LinearLayout>
</FrameLayout> </FrameLayout>
@ -142,6 +142,7 @@
android:text="@string/unit" /> android:text="@string/unit" />
<EditText <EditText
style="@style/FormInput" style="@style/FormInput"
android:id="@+id/unitInput"
android:maxLines="1" android:maxLines="1"
android:ems="10" android:ems="10"
android:hint="@string/measurable_units_example"/> android:hint="@string/measurable_units_example"/>
@ -163,6 +164,7 @@
android:text="@string/target" /> android:text="@string/target" />
<EditText <EditText
style="@style/FormInput" style="@style/FormInput"
android:id="@+id/targetInput"
android:maxLines="1" android:maxLines="1"
android:inputType="number" android:inputType="number"
android:hint="@string/example_target"/> android:hint="@string/example_target"/>
@ -178,6 +180,7 @@
android:text="@string/frequency" /> android:text="@string/frequency" />
<TextView <TextView
style="@style/FormDropdown" style="@style/FormDropdown"
android:id="@+id/numericalFrequencyPicker"
android:text="@string/every_week" android:text="@string/every_week"
android:textColor="?attr/highContrastTextColor" android:textColor="?attr/highContrastTextColor"
/> />

@ -260,6 +260,8 @@
<string name="measurable_short_example">e.g. Run</string> <string name="measurable_short_example">e.g. Run</string>
<string name="measurable_question_example">e.g. How many miles did you run today?</string> <string name="measurable_question_example">e.g. How many miles did you run today?</string>
<string name="measurable_units_example">e.g. miles</string> <string name="measurable_units_example">e.g. miles</string>
<string name="every_month">Every month</string>
<string name="validation_should_not_be_blank">Cannot be blank</string>
</resources> </resources>
Loading…
Cancel
Save