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