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());