Make save button asynchronous

gtask_related_email
Alex Baker 6 years ago
parent 8e05fab61b
commit 6585bec89b

@ -6,6 +6,9 @@
package com.todoroo.astrid.activity; package com.todoroo.astrid.activity;
import static com.google.common.base.Predicates.not;
import static com.google.common.collect.Iterables.filter;
import static com.todoroo.andlib.utility.AndroidUtilities.assertNotMainThread;
import static org.tasks.date.DateTimeUtils.newDateTime; import static org.tasks.date.DateTimeUtils.newDateTime;
import static org.tasks.files.FileHelper.copyToUri; import static org.tasks.files.FileHelper.copyToUri;
@ -36,6 +39,9 @@ import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskDeleter;
import com.todoroo.astrid.timers.TimerPlugin; import com.todoroo.astrid.timers.TimerPlugin;
import com.todoroo.astrid.ui.EditTitleControlSet; import com.todoroo.astrid.ui.EditTitleControlSet;
import io.reactivex.Completable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
@ -56,7 +62,7 @@ import org.tasks.ui.TaskEditControlFragment;
public final class TaskEditFragment extends InjectingFragment public final class TaskEditFragment extends InjectingFragment
implements Toolbar.OnMenuItemClickListener { implements Toolbar.OnMenuItemClickListener {
public static final String TAG_TASKEDIT_FRAGMENT = "taskedit_fragment"; static final String TAG_TASKEDIT_FRAGMENT = "taskedit_fragment";
private static final String EXTRA_TASK = "extra_task"; private static final String EXTRA_TASK = "extra_task";
@Inject TaskDao taskDao; @Inject TaskDao taskDao;
@Inject UserActivityDao userActivityDao; @Inject UserActivityDao userActivityDao;
@ -82,7 +88,7 @@ public final class TaskEditFragment extends InjectingFragment
Task model = null; Task model = null;
private TaskEditFragmentCallbackHandler callback; private TaskEditFragmentCallbackHandler callback;
public static TaskEditFragment newTaskEditFragment(Task task) { static TaskEditFragment newTaskEditFragment(Task task) {
TaskEditFragment taskEditFragment = new TaskEditFragment(); TaskEditFragment taskEditFragment = new TaskEditFragment();
Bundle arguments = new Bundle(); Bundle arguments = new Bundle();
arguments.putParcelable(EXTRA_TASK, task); arguments.putParcelable(EXTRA_TASK, task);
@ -165,16 +171,15 @@ public final class TaskEditFragment extends InjectingFragment
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
AndroidUtilities.hideKeyboard(getActivity()); AndroidUtilities.hideKeyboard(getActivity());
switch (item.getItemId()) { if (item.getItemId() == R.id.menu_delete) {
case R.id.menu_delete: deleteButtonClick();
deleteButtonClick(); return true;
return true;
} }
return false; return false;
} }
public Task stopTimer() { Task stopTimer() {
timerPlugin.stopTimer(model); timerPlugin.stopTimer(model);
String elapsedTime = DateUtils.formatElapsedTime(model.getElapsedSeconds()); String elapsedTime = DateUtils.formatElapsedTime(model.getElapsedSeconds());
addComment( addComment(
@ -188,7 +193,7 @@ public final class TaskEditFragment extends InjectingFragment
return model; return model;
} }
public Task startTimer() { Task startTimer() {
timerPlugin.startTimer(model); timerPlugin.startTimer(model);
addComment( addComment(
String.format( String.format(
@ -205,19 +210,34 @@ public final class TaskEditFragment extends InjectingFragment
taskEditControlSetFragmentManager.getFragmentsInPersistOrder(getChildFragmentManager()); taskEditControlSetFragmentManager.getFragmentsInPersistOrder(getChildFragmentManager());
if (hasChanges(fragments)) { if (hasChanges(fragments)) {
boolean isNewTask = model.isNew(); boolean isNewTask = model.isNew();
if (isNewTask) { TaskListFragment taskListFragment = ((MainActivity) getActivity()).getTaskListFragment();
taskDao.createNew(model); for (TaskEditControlFragment fragment :
} filter(fragments, not(TaskEditControlFragment::requiresId))) {
for (TaskEditControlFragment fragment : fragments) {
fragment.apply(model); fragment.apply(model);
} }
taskDao.save(model, null);
if (isNewTask) { Completable.fromAction(
((MainActivity) getActivity()).getTaskListFragment().onTaskCreated(model.getUuid()); () -> {
} else { assertNotMainThread();
((MainActivity) getActivity()).getTaskListFragment().loadTaskListContent();
} if (isNewTask) {
taskDao.createNew(model);
}
for (TaskEditControlFragment fragment :
filter(fragments, TaskEditControlFragment::requiresId)) {
fragment.apply(model);
}
taskDao.save(model, null);
if (isNewTask) {
taskListFragment.onTaskCreated(model.getUuid());
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
callback.removeTaskEditFragment(); callback.removeTaskEditFragment();
} else { } else {
discard(); discard();
@ -266,7 +286,7 @@ public final class TaskEditFragment extends InjectingFragment
* ====================================================================== * ======================================================================
*/ */
public void discardButtonClick() { void discardButtonClick() {
if (hasChanges( if (hasChanges(
taskEditControlSetFragmentManager.getFragmentsInPersistOrder(getChildFragmentManager()))) { taskEditControlSetFragmentManager.getFragmentsInPersistOrder(getChildFragmentManager()))) {
dialogBuilder dialogBuilder

@ -518,19 +518,19 @@ public final class TaskListFragment extends InjectingFragment
return getArguments().getParcelable(EXTRA_FILTER); return getArguments().getParcelable(EXTRA_FILTER);
} }
public void onTaskCreated(List<Task> tasks) { private void onTaskCreated(List<Task> tasks) {
for (Task task : tasks) { for (Task task : tasks) {
onTaskCreated(task.getUuid()); onTaskCreated(task.getUuid());
} }
syncAdapters.sync(); syncAdapters.sync();
loadTaskListContent();
} }
void onTaskCreated(String uuid) { void onTaskCreated(String uuid) {
taskAdapter.onTaskCreated(uuid); taskAdapter.onTaskCreated(uuid);
loadTaskListContent();
} }
public void onTaskDelete(Task task) { private void onTaskDelete(Task task) {
MainActivity activity = (MainActivity) getActivity(); MainActivity activity = (MainActivity) getActivity();
if (activity != null) { if (activity != null) {
TaskEditFragment tef = activity.getTaskEditFragment(); TaskEditFragment tef = activity.getTaskEditFragment();

@ -193,6 +193,11 @@ public class ReminderControlSet extends TaskEditControlFragment {
|| !newHashSet(currentAlarms()).equals(alarms); || !newHashSet(currentAlarms()).equals(alarms);
} }
@Override
public boolean requiresId() {
return true;
}
@Override @Override
public void apply(Task task) { public void apply(Task task) {
task.setReminderFlags(getFlags()); task.setReminderFlags(getFlags());

@ -250,6 +250,11 @@ public class LocationControlSet extends TaskEditControlFragment {
|| original.getRadius() != location.getRadius(); || original.getRadius() != location.getRadius();
} }
@Override
public boolean requiresId() {
return true;
}
@Override @Override
public void apply(Task task) { public void apply(Task task) {
if (original != null) { if (original != null) {

@ -156,6 +156,11 @@ public class RemoteListFragment extends TaskEditControlFragment {
.show(getFragmentManager(), FRAG_TAG_GOOGLE_TASK_LIST_SELECTION); .show(getFragmentManager(), FRAG_TAG_GOOGLE_TASK_LIST_SELECTION);
} }
@Override
public boolean requiresId() {
return true;
}
@Override @Override
public void apply(Task task) { public void apply(Task task) {
taskMover.move(task.getId(), selectedList); taskMover.move(task.getId(), selectedList);

@ -158,6 +158,11 @@ public class SubtaskControlSet extends TaskEditControlFragment implements Callba
return TAG; return TAG;
} }
@Override
public boolean requiresId() {
return true;
}
@Override @Override
public void apply(Task task) { public void apply(Task task) {
for (Task subtask: getNewSubtasks()) { for (Task subtask: getNewSubtasks()) {

@ -48,6 +48,10 @@ public abstract class TaskEditControlFragment extends InjectingFragment {
public abstract int controlId(); public abstract int controlId();
public boolean requiresId() {
return false;
}
public abstract void apply(Task task); public abstract void apply(Task task);
public boolean hasChanges(Task original) { public boolean hasChanges(Task original) {

Loading…
Cancel
Save