Add default recurrence setting

pull/1173/head
Alex Baker 4 years ago
parent 6f12563fc4
commit c46c935d0b

@ -1,5 +1,6 @@
package com.todoroo.astrid.service
import com.google.ical.values.RRule
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.Filter
@ -95,6 +96,13 @@ class TaskCreator @Inject constructor(
task.dueDate = createDueDate(
preferences.getIntegerFromString(R.string.p_default_urgency_key, Task.URGENCY_NONE),
0)
preferences.getStringValue(R.string.p_default_recurrence)
?.takeIf { it.isNotBlank() }
?.let {
task.setRecurrence(
RRule(it),
preferences.getIntegerFromString(R.string.p_default_recurrence_from, 0) == 1)
}
val setting = preferences.getIntegerFromString(R.string.p_default_hideUntil_key, Task.HIDE_UNTIL_NONE)
task.hideUntil = task.createHideUntil(setting, 0)
setDefaultReminders(preferences, task)

@ -5,6 +5,7 @@ import android.content.Intent
import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import com.google.ical.values.RRule
import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter
@ -18,6 +19,9 @@ import org.tasks.calendars.CalendarProvider
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.Preferences
import org.tasks.repeats.BasicRecurrenceDialog
import org.tasks.repeats.BasicRecurrenceDialog.EXTRA_RRULE
import org.tasks.repeats.RepeatRuleToString
import javax.inject.Inject
private const val FRAG_TAG_DEFAULT_LIST_SELECTION = "frag_tag_default_list_selection"
@ -31,6 +35,7 @@ class TaskDefaults : InjectingPreferenceFragment() {
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var preferences: Preferences
@Inject lateinit var calendarProvider: CalendarProvider
@Inject lateinit var repeatRuleToString: RepeatRuleToString
private lateinit var defaultCalendarPref: Preference
@ -58,7 +63,21 @@ class TaskDefaults : InjectingPreferenceFragment() {
}
false
}
findPreference(R.string.p_default_recurrence)
.setOnPreferenceClickListener {
val rrule: RRule? = preferences
.getStringValue(R.string.p_default_recurrence)
?.takeIf { it.isNotBlank() }
?.let { RRule(it) }
BasicRecurrenceDialog
.newBasicRecurrenceDialog(this, REQUEST_RECURRENCE, rrule, -1)
.show(parentFragmentManager, FRAG_TAG_BASIC_RECURRENCE)
false
}
updateRemoteListSummary()
updateRecurrence()
requires(device.supportsGeofences(), R.string.p_default_location_reminder_key, R.string.p_default_location_radius)
}
@ -81,11 +100,26 @@ class TaskDefaults : InjectingPreferenceFragment() {
defaultCalendarPref.summary =
data.getStringExtra(CalendarPicker.EXTRA_CALENDAR_NAME)
}
} else if (requestCode == REQUEST_RECURRENCE) {
if (resultCode == RESULT_OK) {
preferences.setString(
R.string.p_default_recurrence,
data?.getStringExtra(EXTRA_RRULE)
)
updateRecurrence()
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
override fun onResume() {
super.onResume()
updateRemoteListSummary()
updateRecurrence()
}
private fun getDefaultCalendarName(): String? {
val calendarId = preferences.getStringValue(R.string.gcal_p_default)
return calendarProvider.getCalendar(calendarId)?.name
@ -95,4 +129,25 @@ class TaskDefaults : InjectingPreferenceFragment() {
val defaultFilter = defaultFilterProvider.getDefaultList()
findPreference(R.string.p_default_list).summary = defaultFilter.listingTitle
}
private fun updateRecurrence() {
val rrule = preferences.getStringValue(R.string.p_default_recurrence)
findPreference(R.string.p_default_recurrence).summary =
rrule
?.takeIf { it.isNotBlank() }
?.let {
try {
repeatRuleToString.toString(RRule(it))
} catch (e: Exception) {
null
}
}
?: requireContext().getString(R.string.repeat_option_does_not_repeat)
findPreference(R.string.p_default_recurrence_from).isVisible = rrule?.isNotBlank() == true
}
companion object {
const val REQUEST_RECURRENCE = 10000
const val FRAG_TAG_BASIC_RECURRENCE = "frag_tag_basic_recurrence"
}
}

@ -141,6 +141,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
private ArrayAdapter<String> repeatUntilAdapter;
private ToggleButton[] weekButtons;
private RRule rrule;
private long dueDate;
public static CustomRecurrenceDialog newCustomRecurrenceDialog(
Fragment target, int rc, RRule rrule, long dueDate) {
@ -162,7 +163,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
View dialogView = inflater.inflate(R.layout.control_set_repeat, null);
Bundle arguments = getArguments();
long dueDate = arguments.getLong(EXTRA_DATE, currentTimeMillis());
dueDate = arguments.getLong(EXTRA_DATE, currentTimeMillis());
String rule =
savedInstanceState == null
? arguments.getString(EXTRA_RRULE)
@ -471,7 +472,7 @@ public class CustomRecurrenceDialog extends DialogFragment {
if (weekGroup2 != null) {
weekGroup2.setVisibility(weekVisibility);
}
monthGroup.setVisibility(frequency == MONTHLY ? View.VISIBLE : View.GONE);
monthGroup.setVisibility(frequency == MONTHLY && dueDate >= 0 ? View.VISIBLE : View.GONE);
updateIntervalTextView();
}

@ -149,6 +149,16 @@
<item>@string/repeat_type_completion</item>
</string-array>
<string-array name="repeat_type_capitalized">
<item>@string/due_date</item>
<item>@string/repeat_type_completion_capitalized</item>
</string-array>
<string-array name="repeat_type_values">
<item>0</item>
<item>1</item>
</string-array>
<string-array name="day_of_week_values">
<item>0</item>
<item>1</item>

@ -332,6 +332,8 @@
<string name="p_widget_collapsed">widget-collapsed-</string>
<string name="p_dashclock_filter">dashclock_filter</string>
<string name="p_default_list">default_remote_list</string>
<string name="p_default_recurrence">default_recurrence</string>
<string name="p_default_recurrence_from">default_recurrence_from</string>
<string name="debug">Debug</string>
<string name="p_start_of_week">start_of_week</string>

@ -268,6 +268,7 @@ File %1$s contained %2$s.\n\n
</plurals>
<string name="repeat_type_due">due date</string>
<string name="repeat_type_completion">completion date</string>
<string name="repeat_type_completion_capitalized">Completion date</string>
<string name="repeat_forever">Repeat forever</string>
<string name="repeat_until">Repeat until %s</string>
<string name="repeat_number_of_times">Repeat a number of times</string>
@ -388,6 +389,7 @@ File %1$s contained %2$s.\n\n
<string name="no_title">(No title)</string>
<string name="back_button_saves_task">Back button saves task</string>
<string name="default_list">Default list</string>
<string name="default_recurrence">Default recurrence</string>
<string name="filter">Filter</string>
<string name="opacity">Opacity</string>
<string name="opacity_header">Header opacity</string>

@ -48,6 +48,20 @@
android:summary="@string/dont_add_to_calendar"
android:title="@string/default_calendar" />
<Preference
android:icon="@drawable/ic_outline_repeat_24px"
android:key="@string/p_default_recurrence"
android:title="@string/default_recurrence"
app:allowDividerAbove="true" />
<ListPreference
android:defaultValue="0"
android:key="@string/p_default_recurrence_from"
android:title="@string/repeats_from"
android:entries="@array/repeat_type_capitalized"
android:entryValues="@array/repeat_type_values"
android:summary="%s" />
<ListPreference
android:defaultValue="6"
android:entries="@array/EPr_default_reminders"

Loading…
Cancel
Save