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()
|
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>
|
||||||
Reference in New Issue
Block a user