From 6f12563fc4c1bd090b9136ac17fe23be0469d595 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 13 Oct 2020 14:23:30 -0500 Subject: [PATCH] Use onActivityResult for recurrence dialogs --- .../astrid/repeats/RepeatControlSet.kt | 20 +++++++++++++++---- .../tasks/repeats/BasicRecurrenceDialog.java | 20 ++++++++++--------- .../tasks/repeats/CustomRecurrenceDialog.java | 18 ++++++++--------- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt index e2a6161a6..b80276536 100644 --- a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt @@ -6,6 +6,8 @@ package com.todoroo.astrid.repeats import android.app.Activity +import android.app.Activity.RESULT_OK +import android.content.Intent import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -58,9 +60,17 @@ class RepeatControlSet : TaskEditControlFragment() { private lateinit var typeAdapter: HiddenTopArrayAdapter - fun onSelected(rrule: RRule?) { - viewModel.rrule = rrule - refreshDisplayView() + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == REQUEST_RECURRENCE) { + if (resultCode == RESULT_OK) { + viewModel.rrule = data + ?.getStringExtra(BasicRecurrenceDialog.EXTRA_RRULE) + ?.let { RRule(it) } + refreshDisplayView() + } + } else { + super.onActivityResult(requestCode, resultCode, data) + } } fun onDueDateChanged() { @@ -116,7 +126,8 @@ class RepeatControlSet : TaskEditControlFragment() { get() = viewModel.dueDate!!.let { if (it > 0) it else currentTimeMillis() } override fun onRowClick() { - BasicRecurrenceDialog.newBasicRecurrenceDialog(this, viewModel.rrule, dueDate) + BasicRecurrenceDialog.newBasicRecurrenceDialog( + this, REQUEST_RECURRENCE, viewModel.rrule, dueDate) .show(parentFragmentManager, FRAG_TAG_BASIC_RECURRENCE) } @@ -145,5 +156,6 @@ class RepeatControlSet : TaskEditControlFragment() { private const val TYPE_DUE_DATE = 1 private const val TYPE_COMPLETION_DATE = 2 private const val FRAG_TAG_BASIC_RECURRENCE = "frag_tag_basic_recurrence" + private const val REQUEST_RECURRENCE = 10000 } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.java b/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.java index 42801d597..8b54921bc 100644 --- a/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.java +++ b/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.java @@ -1,5 +1,6 @@ package org.tasks.repeats; +import static android.app.Activity.RESULT_OK; import static com.google.common.collect.Lists.newArrayList; import static com.google.ical.values.Frequency.DAILY; import static com.google.ical.values.Frequency.HOURLY; @@ -13,13 +14,14 @@ import static org.tasks.time.DateTimeUtils.currentTimeMillis; import android.app.Activity; import android.app.Dialog; +import android.content.Intent; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import com.google.ical.values.Frequency; import com.google.ical.values.RRule; -import com.todoroo.astrid.repeats.RepeatControlSet; import dagger.hilt.android.AndroidEntryPoint; import java.util.List; import javax.inject.Inject; @@ -31,7 +33,7 @@ import timber.log.Timber; @AndroidEntryPoint public class BasicRecurrenceDialog extends DialogFragment { - private static final String EXTRA_RRULE = "extra_rrule"; + public static final String EXTRA_RRULE = "extra_rrule"; private static final String EXTRA_DATE = "extra_date"; private static final String FRAG_TAG_CUSTOM_RECURRENCE = "frag_tag_custom_recurrence"; @@ -40,9 +42,9 @@ public class BasicRecurrenceDialog extends DialogFragment { @Inject RepeatRuleToString repeatRuleToString; public static BasicRecurrenceDialog newBasicRecurrenceDialog( - RepeatControlSet target, RRule rrule, long dueDate) { + Fragment target, int rc, RRule rrule, long dueDate) { BasicRecurrenceDialog dialog = new BasicRecurrenceDialog(); - dialog.setTargetFragment(target, 0); + dialog.setTargetFragment(target, rc); Bundle arguments = new Bundle(); if (rrule != null) { arguments.putString(EXTRA_RRULE, rrule.toIcal()); @@ -112,7 +114,8 @@ public class BasicRecurrenceDialog extends DialogFragment { if (i == 0) { result = null; } else if (i == 5) { - newCustomRecurrenceDialog((RepeatControlSet) getTargetFragment(), rrule, dueDate) + newCustomRecurrenceDialog( + getTargetFragment(), getTargetRequestCode(), rrule, dueDate) .show(getParentFragmentManager(), FRAG_TAG_CUSTOM_RECURRENCE); dialogInterface.dismiss(); return; @@ -136,10 +139,9 @@ public class BasicRecurrenceDialog extends DialogFragment { } } - RepeatControlSet target = (RepeatControlSet) getTargetFragment(); - if (target != null) { - target.onSelected(result); - } + Intent intent = new Intent(); + intent.putExtra(EXTRA_RRULE, result == null ? null : result.toIcal()); + getTargetFragment().onActivityResult(getTargetRequestCode(), RESULT_OK, intent); dialogInterface.dismiss(); }) .setOnCancelListener(null) diff --git a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java index 6f0e5f380..83dad21e3 100644 --- a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java +++ b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java @@ -1,5 +1,6 @@ package org.tasks.repeats; +import static android.app.Activity.RESULT_OK; import static com.google.common.collect.Lists.newArrayList; import static com.google.ical.values.Frequency.DAILY; import static com.google.ical.values.Frequency.HOURLY; @@ -10,6 +11,7 @@ import static com.google.ical.values.Frequency.YEARLY; import static java.util.Arrays.asList; import static org.tasks.Strings.isNullOrEmpty; import static org.tasks.dialogs.MyDatePickerDialog.newDatePicker; +import static org.tasks.repeats.BasicRecurrenceDialog.EXTRA_RRULE; import static org.tasks.time.DateTimeUtils.currentTimeMillis; import android.app.Activity; @@ -39,6 +41,7 @@ import android.widget.ToggleButton; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnItemSelected; @@ -48,7 +51,6 @@ import com.google.ical.values.RRule; import com.google.ical.values.Weekday; import com.google.ical.values.WeekdayNum; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.repeats.RepeatControlSet; import dagger.hilt.android.AndroidEntryPoint; import java.text.DateFormatSymbols; import java.time.format.FormatStyle; @@ -70,7 +72,6 @@ public class CustomRecurrenceDialog extends DialogFragment { private static final List FREQUENCIES = asList(MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY); - private static final String EXTRA_RRULE = "extra_rrule"; private static final String EXTRA_DATE = "extra_date"; private static final String FRAG_TAG_DATE_PICKER = "frag_tag_date_picker"; private static final int REQUEST_PICK_DATE = 505; @@ -142,9 +143,9 @@ public class CustomRecurrenceDialog extends DialogFragment { private RRule rrule; public static CustomRecurrenceDialog newCustomRecurrenceDialog( - RepeatControlSet target, RRule rrule, long dueDate) { + Fragment target, int rc, RRule rrule, long dueDate) { CustomRecurrenceDialog dialog = new CustomRecurrenceDialog(); - dialog.setTargetFragment(target, 0); + dialog.setTargetFragment(target, rc); Bundle arguments = new Bundle(); if (rrule != null) { arguments.putString(EXTRA_RRULE, rrule.toIcal()); @@ -364,10 +365,9 @@ public class CustomRecurrenceDialog extends DialogFragment { } else { rrule.setByDay(Collections.emptyList()); } - RepeatControlSet target = (RepeatControlSet) getTargetFragment(); - if (target != null) { - target.onSelected(rrule); - } + Intent intent = new Intent(); + intent.putExtra(EXTRA_RRULE, rrule.toIcal()); + getTargetFragment().onActivityResult(getTargetRequestCode(), RESULT_OK, intent); dismiss(); } @@ -541,7 +541,7 @@ public class CustomRecurrenceDialog extends DialogFragment { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_PICK_DATE) { - if (resultCode == Activity.RESULT_OK) { + if (resultCode == RESULT_OK) { rrule.setUntil( new DateTime(data.getLongExtra(MyDatePickerDialog.EXTRA_TIMESTAMP, 0L)).toDateValue()); rrule.setCount(0);