diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt
index 92754ca89..7cb7f3ba6 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt
@@ -21,7 +21,6 @@ package org.isoron.uhabits.activities.common.dialogs
import android.app.Dialog
import android.os.Bundle
-import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.widget.EditText
@@ -44,7 +43,7 @@ class FrequencyPickerDialog(
constructor() : this(1, 1)
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
- val inflater = LayoutInflater.from(activity!!)
+ val inflater = LayoutInflater.from(requireActivity())
contentView = inflater.inflate(R.layout.frequency_picker_dialog, null)
addBeforeAfterText(
@@ -62,6 +61,11 @@ class FrequencyPickerDialog(
contentView.xTimesPerMonthContainer,
)
+ addBeforeAfterText(
+ this.getString(R.string.x_times_per_y_days),
+ contentView.xTimesPerYDaysContainer,
+ )
+
contentView.everyDayRadioButton.setOnClickListener {
check(contentView.everyDayRadioButton)
unfocusAll()
@@ -95,7 +99,20 @@ class FrequencyPickerDialog(
if (hasFocus) check(contentView.xTimesPerMonthRadioButton)
}
- return AlertDialog.Builder(activity!!)
+ contentView.xTimesPerYDaysRadioButton.setOnClickListener {
+ check(contentView.xTimesPerYDaysRadioButton)
+ focus(contentView.xTimesPerYDaysXTextView)
+ }
+
+ contentView.xTimesPerYDaysXTextView.setOnFocusChangeListener { v, hasFocus ->
+ if (hasFocus) check(contentView.xTimesPerYDaysRadioButton)
+ }
+
+ contentView.xTimesPerYDaysYTextView.setOnFocusChangeListener { v, hasFocus ->
+ if (hasFocus) check(contentView.xTimesPerYDaysRadioButton)
+ }
+
+ return AlertDialog.Builder(requireActivity())
.setView(contentView)
.setPositiveButton(R.string.save) { _, _ -> onSaveClicked() }
.create()
@@ -106,12 +123,11 @@ class FrequencyPickerDialog(
container: LinearLayout
) {
val parts = str.split("%d")
- container.addView(
- TextView(activity).apply { text = parts[0].trim() }, 1,
- )
- container.addView(
- TextView(activity).apply { text = parts[1].trim() }, 3,
- )
+ for (i in parts.indices) {
+ container.addView(
+ TextView(activity).apply { text = parts[i].trim() }, 2 * i + 1,
+ )
+ }
}
private fun onSaveClicked() {
@@ -132,6 +148,12 @@ class FrequencyPickerDialog(
denominator = 7
}
}
+ contentView.xTimesPerYDaysRadioButton.isChecked -> {
+ if (contentView.xTimesPerYDaysXTextView.text.isNotEmpty() && contentView.xTimesPerYDaysYTextView.text.isNotEmpty()) {
+ numerator = Integer.parseInt(contentView.xTimesPerYDaysXTextView.text.toString())
+ denominator = Integer.parseInt(contentView.xTimesPerYDaysYTextView.text.toString())
+ }
+ }
else -> {
if (contentView.xTimesPerMonthTextView.text.isNotEmpty()) {
numerator = Integer.parseInt(contentView.xTimesPerMonthTextView.text.toString())
@@ -147,10 +169,10 @@ class FrequencyPickerDialog(
dismiss()
}
- private fun check(view: RadioButton?) {
+ private fun check(view: RadioButton) {
uncheckAll()
- view?.isChecked = true
- view?.requestFocus()
+ view.isChecked = true
+ view.requestFocus()
}
override fun onResume() {
@@ -179,8 +201,9 @@ class FrequencyPickerDialog(
contentView.xTimesPerWeekTextView.setText(freqNumerator.toString())
focus(contentView.xTimesPerWeekTextView)
} else {
- Log.w("FrequencyPickerDialog", "Unknown frequency: $freqNumerator/$freqDenominator")
- contentView.everyDayRadioButton.isChecked = true
+ contentView.xTimesPerYDaysRadioButton.isChecked = true
+ contentView.xTimesPerYDaysXTextView.setText(freqNumerator.toString())
+ contentView.xTimesPerYDaysYTextView.setText(freqDenominator.toString())
}
}
}
@@ -196,6 +219,7 @@ class FrequencyPickerDialog(
contentView.everyXDaysRadioButton.isChecked = false
contentView.xTimesPerWeekRadioButton.isChecked = false
contentView.xTimesPerMonthRadioButton.isChecked = false
+ contentView.xTimesPerYDaysRadioButton.isChecked = false
}
private fun unfocusAll() {
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 09acc4049..1a02d8845 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
@@ -69,7 +69,7 @@ fun formatFrequency(freqNum: Int, freqDen: Int, resources: Resources) = when {
freqNum == 1 && freqDen == 7 -> resources.getString(R.string.every_week)
freqNum == 1 && freqDen > 1 -> resources.getString(R.string.every_x_days, freqDen)
freqDen == 7 -> resources.getString(R.string.x_times_per_week, freqNum)
- else -> "$freqNum/$freqDen"
+ else -> resources.getString(R.string.x_times_per_y_days, freqNum, freqDen)
}
class EditHabitActivity : AppCompatActivity() {
diff --git a/uhabits-android/src/main/res/layout/frequency_picker_dialog.xml b/uhabits-android/src/main/res/layout/frequency_picker_dialog.xml
index 1056ca2ae..f2fb6441e 100644
--- a/uhabits-android/src/main/res/layout/frequency_picker_dialog.xml
+++ b/uhabits-android/src/main/res/layout/frequency_picker_dialog.xml
@@ -120,4 +120,42 @@
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml
index 9d5778e6e..3aec3b72d 100644
--- a/uhabits-android/src/main/res/values/strings.xml
+++ b/uhabits-android/src/main/res/values/strings.xml
@@ -205,6 +205,7 @@
e.g. How many miles did you run today? How many pages did you read?
%d times per week
%d times per month
+ %d times in %d days
e.g. Exercise
Color
e.g. 15