diff --git a/Habitica/res/layout/activity_task_form.xml b/Habitica/res/layout/activity_task_form.xml
index 766c6e4cd..98411de1e 100644
--- a/Habitica/res/layout/activity_task_form.xml
+++ b/Habitica/res/layout/activity_task_form.xml
@@ -132,6 +132,25 @@
+
+
+
+
+
+
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index b719e35d5..f840f1444 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -807,4 +807,5 @@
Staff
Read More
Show Less
+ Reset Streak
diff --git a/Habitica/res/values/values.xml b/Habitica/res/values/values.xml
index 8619ffcc2..7adf68184 100644
--- a/Habitica/res/values/values.xml
+++ b/Habitica/res/values/values.xml
@@ -14,6 +14,12 @@
- @string/other
+
+ - @string/repeatables_frequency_daily
+ - @string/repeatables_frequency_weekly
+ - @string/repeatables_frequency_monthly
+
+
- @string/frequency_weekly
- @string/frequency_daily
@@ -122,4 +128,5 @@
- dewinTheme
- airuTheme
+ Monthly
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt
index 6bca1b823..7163f22e1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt
@@ -380,6 +380,7 @@ open class Task : RealmObject, Parcelable {
const val FILTER_COMPLETED = "completed"
const val FREQUENCY_WEEKLY = "weekly"
const val FREQUENCY_DAILY = "daily"
+ const val FREQUENCY_MONTHLY = "monthly"
@JvmField
val CREATOR: Parcelable.Creator = object : Parcelable.Creator {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt
index af701ce6a..a44971b86 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt
@@ -17,10 +17,7 @@ import android.support.v7.widget.RecyclerView
import android.support.v7.widget.helper.ItemTouchHelper
import android.text.TextUtils
import android.util.TypedValue
-import android.view.KeyEvent
-import android.view.Menu
-import android.view.MenuItem
-import android.view.View
+import android.view.*
import android.view.inputmethod.InputMethodManager
import android.widget.*
import com.habitrpg.android.habitica.R
@@ -103,7 +100,8 @@ class TaskFormActivity : BaseActivity(), AdapterView.OnItemSelectedListener {
private val tagsWrapper: LinearLayout by bindView(R.id.task_tags_wrapper)
private val tagsContainerLinearLayout: LinearLayout by bindView(R.id.task_tags_checklist)
private val repeatablesFrequencySpinner: Spinner by bindView(R.id.task_repeatables_frequency_spinner)
-
+ private val taskResetFrequencyWrapper: ViewGroup by bindView(R.id.task_reset_frequency_wrapper)
+ private val taskResetFrequencySpinner: Spinner by bindView(R.id.task_reset_frequency_spinner)
@Inject
internal lateinit var taskFilterHelper: TaskFilterHelper
@@ -213,8 +211,16 @@ class TaskFormActivity : BaseActivity(), AdapterView.OnItemSelectedListener {
positiveCheckBox.isChecked = true
negativeCheckBox.isChecked = true
+
+ val resetFrequencyAdapter = ArrayAdapter.createFromResource(this,
+ R.array.task_reset_frequencies, android.R.layout.simple_spinner_item)
+ resetFrequencyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
+ taskResetFrequencySpinner.adapter = resetFrequencyAdapter
+ taskResetFrequencySpinner.setSelection(0)
+ taskResetFrequencyWrapper.visibility = View.VISIBLE
} else {
mainWrapper.removeView(actionsLayout)
+ taskResetFrequencyWrapper.visibility = View.GONE
}
if (taskType == Task.TYPE_DAILY) {
@@ -861,6 +867,15 @@ class TaskFormActivity : BaseActivity(), AdapterView.OnItemSelectedListener {
if (task.type == Task.TYPE_HABIT) {
positiveCheckBox.isChecked = task.up ?: false
negativeCheckBox.isChecked = task.down ?: false
+
+ val resetFrequency = task.frequency
+ if (resetFrequency != null) {
+ when (resetFrequency) {
+ Task.FREQUENCY_DAILY -> taskResetFrequencySpinner.setSelection(0)
+ Task.FREQUENCY_WEEKLY -> taskResetFrequencySpinner.setSelection(1)
+ Task.FREQUENCY_MONTHLY -> taskResetFrequencySpinner.setSelection(2)
+ }
+ }
}
if (task.type == Task.TYPE_DAILY) {
@@ -976,6 +991,13 @@ class TaskFormActivity : BaseActivity(), AdapterView.OnItemSelectedListener {
Task.TYPE_HABIT -> {
task.up = positiveCheckBox.isChecked
task.down = negativeCheckBox.isChecked
+
+ task.frequency = when (taskResetFrequencySpinner.selectedItemPosition) {
+ 0 -> Task.FREQUENCY_DAILY
+ 1 -> Task.FREQUENCY_WEEKLY
+ 2 -> Task.FREQUENCY_MONTHLY
+ else -> ""
+ }
}
Task.TYPE_DAILY -> {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.java b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.java
index b78f3839e..3ee418373 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.java
@@ -35,6 +35,7 @@ public class TaskSerializer implements JsonSerializer {
case "habit":
obj.addProperty("up", task.getUp());
obj.addProperty("down", task.getDown());
+ obj.addProperty("frequency", task.getFrequency());
break;
case "daily":
obj.addProperty("frequency", task.getFrequency());