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;
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.files.FileHelper.copyToUri;
@ -36,6 +39,9 @@ import com.todoroo.astrid.repeats.RepeatControlSet;
import com.todoroo.astrid.service.TaskDeleter;
import com.todoroo.astrid.timers.TimerPlugin;
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 javax.inject.Inject;
import org.tasks.R;
@ -56,7 +62,7 @@ import org.tasks.ui.TaskEditControlFragment;
public final class TaskEditFragment extends InjectingFragment
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";
@Inject TaskDao taskDao;
@Inject UserActivityDao userActivityDao;
@ -82,7 +88,7 @@ public final class TaskEditFragment extends InjectingFragment
Task model = null;
private TaskEditFragmentCallbackHandler callback;
public static TaskEditFragment newTaskEditFragment(Task task) {
static TaskEditFragment newTaskEditFragment(Task task) {
TaskEditFragment taskEditFragment = new TaskEditFragment();
Bundle arguments = new Bundle();
arguments.putParcelable(EXTRA_TASK, task);
@ -165,16 +171,15 @@ public final class TaskEditFragment extends InjectingFragment
public boolean onMenuItemClick(MenuItem item) {
AndroidUtilities.hideKeyboard(getActivity());
switch (item.getItemId()) {
case R.id.menu_delete:
deleteButtonClick();
return true;
if (item.getItemId() == R.id.menu_delete) {
deleteButtonClick();
return true;
}
return false;
}
public Task stopTimer() {
Task stopTimer() {
timerPlugin.stopTimer(model);
String elapsedTime = DateUtils.formatElapsedTime(model.getElapsedSeconds());
addComment(
@ -188,7 +193,7 @@ public final class TaskEditFragment extends InjectingFragment
return model;
}
public Task startTimer() {
Task startTimer() {
timerPlugin.startTimer(model);
addComment(
String.format(
@ -205,19 +210,34 @@ public final class TaskEditFragment extends InjectingFragment
taskEditControlSetFragmentManager.getFragmentsInPersistOrder(getChildFragmentManager());
if (hasChanges(fragments)) {
boolean isNewTask = model.isNew();
if (isNewTask) {
taskDao.createNew(model);
}
for (TaskEditControlFragment fragment : fragments) {
TaskListFragment taskListFragment = ((MainActivity) getActivity()).getTaskListFragment();
for (TaskEditControlFragment fragment :
filter(fragments, not(TaskEditControlFragment::requiresId))) {
fragment.apply(model);
}
taskDao.save(model, null);
if (isNewTask) {
((MainActivity) getActivity()).getTaskListFragment().onTaskCreated(model.getUuid());
} else {
((MainActivity) getActivity()).getTaskListFragment().loadTaskListContent();
}
Completable.fromAction(
() -> {
assertNotMainThread();
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();
} else {
discard();
@ -266,7 +286,7 @@ public final class TaskEditFragment extends InjectingFragment
* ======================================================================
*/
public void discardButtonClick() {
void discardButtonClick() {
if (hasChanges(
taskEditControlSetFragmentManager.getFragmentsInPersistOrder(getChildFragmentManager()))) {
dialogBuilder

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

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

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

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

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

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

Loading…
Cancel
Save