mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Make save button functional for numerical habits
This commit is contained in:
@@ -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>
|
||||
Reference in New Issue
Block a user