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()
{
onView(withId(R.id.frequencyPicker)).perform(click());
onView(withId(R.id.boolean_frequency_picker)).perform(click());
onView(withText("SAVE")).perform(click());
}

@ -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<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()
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() {

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

@ -260,6 +260,8 @@
<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_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>
Loading…
Cancel
Save