Add option to reset habit streaks. Fixes #1039

This commit is contained in:
Phillip Thelen 2018-08-28 14:41:34 +02:00
parent e121f9aabe
commit 29227f7772
6 changed files with 56 additions and 5 deletions

View file

@ -132,6 +132,25 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/task_reset_frequency_wrapper"
android:layout_marginTop="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/reset_streak"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Spinner
android:id="@+id/task_reset_frequency_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>

View file

@ -807,4 +807,5 @@
<string name="staff">Staff</string>
<string name="expand_notes">Read More</string>
<string name="collapse_notes">Show Less</string>
<string name="reset_streak">Reset Streak</string>
</resources>

View file

@ -14,6 +14,12 @@
<item>@string/other</item>
</string-array>
<string-array name="task_reset_frequencies">
<item>@string/repeatables_frequency_daily</item>
<item>@string/repeatables_frequency_weekly</item>
<item>@string/repeatables_frequency_monthly</item>
</string-array>
<string-array name="daily_frequencies">
<item>@string/frequency_weekly</item>
<item>@string/frequency_daily</item>
@ -122,4 +128,5 @@
<item>dewinTheme</item>
<item>airuTheme</item>
</string-array>
<string name="frequency_monthly">Monthly</string>
</resources>

View file

@ -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<Task> = object : Parcelable.Creator<Task> {

View file

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

View file

@ -35,6 +35,7 @@ public class TaskSerializer implements JsonSerializer<Task> {
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());