Use onActivityResult for recurrence dialogs

pull/1173/head
Alex Baker 5 years ago
parent c3dad30683
commit 6f12563fc4

@ -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,10 +60,18 @@ class RepeatControlSet : TaskEditControlFragment() {
private lateinit var typeAdapter: HiddenTopArrayAdapter<String>
fun onSelected(rrule: RRule?) {
viewModel.rrule = rrule
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() {
viewModel.rrule?.let {
@ -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
}
}

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

@ -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<Frequency> 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);

Loading…
Cancel
Save