From ca428a7dd5db9829ee998f4894eefb7393784c3c Mon Sep 17 00:00:00 2001 From: Peketr Date: Mon, 18 Mar 2024 14:42:31 +0100 Subject: [PATCH] add increment to Edit UI and Habit --- .../habits/edit/EditHabitActivity.kt | 36 ++++++++++++++++ .../main/res/layout/activity_edit_habit.xml | 41 +++++++++++++++++++ .../src/main/res/values/strings.xml | 4 ++ .../org/isoron/uhabits/core/models/Habit.kt | 4 +- 4 files changed, 84 insertions(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt index a2f329d71..d1dc0dfb5 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt @@ -85,6 +85,7 @@ class EditHabitActivity : AppCompatActivity() { var reminderMin = -1 var reminderDays: WeekdayList = WeekdayList.EVERY_DAY var targetType = NumericalHabitType.AT_LEAST + var increment = 0.0 override fun onCreate(state: Bundle?) { super.onCreate(state) @@ -105,6 +106,7 @@ class EditHabitActivity : AppCompatActivity() { freqNum = habit.frequency.numerator freqDen = habit.frequency.denominator targetType = habit.targetType + increment = habit.increment habit.reminder?.let { reminderHour = it.hour reminderMin = it.minute @@ -115,6 +117,7 @@ class EditHabitActivity : AppCompatActivity() { binding.notesInput.setText(habit.description) binding.unitInput.setText(habit.unit) binding.targetInput.setText(habit.targetValue.toString()) + } else { habitType = HabitType.fromInt(intent.getIntExtra("habitType", HabitType.YES_NO.value)) } @@ -128,6 +131,7 @@ class EditHabitActivity : AppCompatActivity() { reminderHour = state.getInt("reminderHour") reminderMin = state.getInt("reminderMin") reminderDays = WeekdayList(state.getInt("reminderDays")) + increment = state.getDouble("increment") } updateColors() @@ -254,6 +258,23 @@ class EditHabitActivity : AppCompatActivity() { for (fragment in supportFragmentManager.fragments) { (fragment as DialogFragment).dismiss() } + + populateWidgetAction() + binding.widgetActionPicker.setOnClickListener { + val builder = AlertDialog.Builder(this) + val arrayAdapter = ArrayAdapter(this, android.R.layout.select_dialog_item) + arrayAdapter.add(getString(R.string.widget_action_dialog)) + arrayAdapter.add(getString(R.string.widget_action_increment)) + builder.setAdapter(arrayAdapter) { dialog, which -> + increment = when (which) { + 1 -> 1.0 + else -> 0.0 + } + populateWidgetAction() + dialog.dismiss() + } + builder.show() + } } private fun save() { @@ -281,6 +302,7 @@ class EditHabitActivity : AppCompatActivity() { habit.targetValue = binding.targetInput.text.toString().toDouble() habit.targetType = targetType habit.unit = binding.unitInput.text.trim().toString() + habit.increment = binding.incrementInput.text.toString().toDouble() } habit.type = habitType @@ -341,6 +363,19 @@ class EditHabitActivity : AppCompatActivity() { } } + @SuppressLint("StringFormatMatches") + private fun populateWidgetAction() { + binding.widgetActionPicker.text = when (increment){ + 0.0 -> getString(R.string.widget_action_dialog) + else -> getString(R.string.widget_action_increment) + } + binding.incrementInput.setText(increment.toString()) + if (increment != 0.0) + binding.incrementRightBox.visibility = View.VISIBLE + else + binding.incrementRightBox.visibility = View.GONE + } + private fun populateTargetType() { binding.targetTypePicker.text = when (targetType) { NumericalHabitType.AT_MOST -> getString(R.string.target_type_at_most) @@ -375,6 +410,7 @@ class EditHabitActivity : AppCompatActivity() { putInt("reminderHour", reminderHour) putInt("reminderMin", reminderMin) putInt("reminderDays", reminderDays.toInteger()) + putDouble("increment",increment) } } } diff --git a/uhabits-android/src/main/res/layout/activity_edit_habit.xml b/uhabits-android/src/main/res/layout/activity_edit_habit.xml index 75dddb551..acf06dee1 100644 --- a/uhabits-android/src/main/res/layout/activity_edit_habit.xml +++ b/uhabits-android/src/main/res/layout/activity_edit_habit.xml @@ -208,6 +208,47 @@ + + + + + + + + + + + + + + + diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml index 9fec1cbca..34b47e281 100644 --- a/uhabits-android/src/main/res/values/strings.xml +++ b/uhabits-android/src/main/res/values/strings.xml @@ -118,6 +118,9 @@ Developers Version %s Frequency + Widget Click Action + Open Dialog + Increment Checkmark Checkmark Stack Widget Frequency Stack Widget @@ -212,6 +215,7 @@ e.g. Exercise Color e.g. 15 + e.g. 2.0 e.g. Run e.g. How many miles did you run today? e.g. miles diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/Habit.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/Habit.kt index a06d01ec9..c7bc1a510 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/Habit.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/models/Habit.kt @@ -39,7 +39,8 @@ data class Habit( val computedEntries: EntryList, val originalEntries: EntryList, val scores: ScoreList, - val streaks: StreakList + val streaks: StreakList, + var increment: Double = 0.0 ) { init { if (uuid == null) this.uuid = UUID.randomUUID().toString().replace("-", "") @@ -119,6 +120,7 @@ data class Habit( this.type = other.type this.unit = other.unit this.uuid = other.uuid + this.increment = other.increment } override fun equals(other: Any?): Boolean {