mirror of https://github.com/tasks/tasks
parent
4b73aa5077
commit
7aa50bf5f9
@ -0,0 +1,13 @@
|
|||||||
|
package org.tasks.activities;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import com.google.api.services.tasks.model.TaskList;
|
||||||
|
import com.todoroo.astrid.gtasks.api.GtasksInvoker;
|
||||||
|
import org.tasks.ui.CompletableViewModel;
|
||||||
|
|
||||||
|
@SuppressWarnings("WeakerAccess")
|
||||||
|
public class CreateListViewModel extends CompletableViewModel<TaskList> {
|
||||||
|
void createList(Context context, String account, String name) {
|
||||||
|
run(() -> new GtasksInvoker(context, account).createGtaskList(name));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package org.tasks.activities;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import com.todoroo.astrid.gtasks.api.GtasksInvoker;
|
||||||
|
import org.tasks.data.GoogleTaskList;
|
||||||
|
import org.tasks.ui.ActionViewModel;
|
||||||
|
|
||||||
|
@SuppressWarnings("WeakerAccess")
|
||||||
|
public class DeleteListViewModel extends ActionViewModel {
|
||||||
|
void deleteList(Context context, GoogleTaskList list) {
|
||||||
|
run(() -> new GtasksInvoker(context, list.getAccount()).deleteGtaskList(list.getRemoteId()));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package org.tasks.activities;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import com.google.api.services.tasks.model.TaskList;
|
||||||
|
import com.todoroo.astrid.gtasks.api.GtasksInvoker;
|
||||||
|
import org.tasks.data.GoogleTaskList;
|
||||||
|
import org.tasks.ui.CompletableViewModel;
|
||||||
|
|
||||||
|
@SuppressWarnings("WeakerAccess")
|
||||||
|
public class RenameListViewModel extends CompletableViewModel<TaskList> {
|
||||||
|
void renameList(Context context, GoogleTaskList list, String name) {
|
||||||
|
run(
|
||||||
|
() ->
|
||||||
|
new GtasksInvoker(context, list.getAccount())
|
||||||
|
.renameGtaskList(list.getRemoteId(), name));
|
||||||
|
}
|
||||||
|
}
|
@ -1,104 +0,0 @@
|
|||||||
package org.tasks.gtasks;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.app.ProgressDialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import com.google.api.services.tasks.model.TaskList;
|
|
||||||
import com.todoroo.astrid.gtasks.api.GtasksInvoker;
|
|
||||||
import java.io.IOException;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.dialogs.DialogBuilder;
|
|
||||||
import org.tasks.injection.DialogFragmentComponent;
|
|
||||||
import org.tasks.injection.ForApplication;
|
|
||||||
import org.tasks.injection.InjectingDialogFragment;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
public class CreateListDialog extends InjectingDialogFragment {
|
|
||||||
|
|
||||||
private static final String EXTRA_ACCOUNT = "extra_account";
|
|
||||||
private static final String EXTRA_NAME = "extra_name";
|
|
||||||
@Inject DialogBuilder dialogBuilder;
|
|
||||||
@Inject @ForApplication Context context;
|
|
||||||
private CreateListDialogCallback callback;
|
|
||||||
private ProgressDialog dialog;
|
|
||||||
private String account;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public static CreateListDialog newCreateListDialog(String account, String name) {
|
|
||||||
CreateListDialog dialog = new CreateListDialog();
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putString(EXTRA_ACCOUNT, account);
|
|
||||||
args.putString(EXTRA_NAME, name);
|
|
||||||
dialog.setArguments(args);
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setRetainInstance(true);
|
|
||||||
Bundle arguments = getArguments();
|
|
||||||
account = arguments.getString(EXTRA_ACCOUNT);
|
|
||||||
name = arguments.getString(EXTRA_NAME);
|
|
||||||
dialog = dialogBuilder.newProgressDialog(R.string.creating_new_list);
|
|
||||||
execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
super.onAttach(activity);
|
|
||||||
|
|
||||||
callback = (CreateListDialogCallback) activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void inject(DialogFragmentComponent component) {
|
|
||||||
component.inject(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void execute() {
|
|
||||||
new AsyncTask<Void, Void, TaskList>() {
|
|
||||||
@Override
|
|
||||||
protected TaskList doInBackground(Void... voids) {
|
|
||||||
try {
|
|
||||||
return new GtasksInvoker(context, account).createGtaskList(name);
|
|
||||||
} catch (IOException e) {
|
|
||||||
Timber.e(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(TaskList taskList) {
|
|
||||||
if (dialog.isShowing()) {
|
|
||||||
dialog.dismiss();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (taskList == null) {
|
|
||||||
callback.requestFailed();
|
|
||||||
} else {
|
|
||||||
callback.onListCreated(taskList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface CreateListDialogCallback {
|
|
||||||
|
|
||||||
void onListCreated(TaskList taskList);
|
|
||||||
|
|
||||||
void requestFailed();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,102 +0,0 @@
|
|||||||
package org.tasks.gtasks;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.app.ProgressDialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import com.todoroo.astrid.gtasks.api.GtasksInvoker;
|
|
||||||
import java.io.IOException;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.data.GoogleTaskList;
|
|
||||||
import org.tasks.dialogs.DialogBuilder;
|
|
||||||
import org.tasks.injection.DialogFragmentComponent;
|
|
||||||
import org.tasks.injection.ForApplication;
|
|
||||||
import org.tasks.injection.InjectingDialogFragment;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
public class DeleteListDialog extends InjectingDialogFragment {
|
|
||||||
|
|
||||||
private static final String EXTRA_LIST = "extra_list";
|
|
||||||
@Inject @ForApplication Context context;
|
|
||||||
@Inject DialogBuilder dialogBuilder;
|
|
||||||
private DeleteListDialogCallback callback;
|
|
||||||
private GoogleTaskList googleTaskList;
|
|
||||||
private ProgressDialog dialog;
|
|
||||||
|
|
||||||
public static DeleteListDialog newDeleteListDialog(GoogleTaskList googleTaskList) {
|
|
||||||
DeleteListDialog dialog = new DeleteListDialog();
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putParcelable(EXTRA_LIST, googleTaskList);
|
|
||||||
dialog.setArguments(args);
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setRetainInstance(true);
|
|
||||||
Bundle arguments = getArguments();
|
|
||||||
googleTaskList = arguments.getParcelable(EXTRA_LIST);
|
|
||||||
dialog = dialogBuilder.newProgressDialog(R.string.deleting_list);
|
|
||||||
execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
super.onAttach(activity);
|
|
||||||
|
|
||||||
callback = (DeleteListDialogCallback) activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void inject(DialogFragmentComponent component) {
|
|
||||||
component.inject(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void execute() {
|
|
||||||
new AsyncTask<Void, Void, Boolean>() {
|
|
||||||
@Override
|
|
||||||
protected Boolean doInBackground(Void... voids) {
|
|
||||||
try {
|
|
||||||
new GtasksInvoker(context, googleTaskList.getAccount())
|
|
||||||
.deleteGtaskList(googleTaskList.getRemoteId());
|
|
||||||
return true;
|
|
||||||
} catch (IOException e) {
|
|
||||||
Timber.e(e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Boolean result) {
|
|
||||||
if (dialog.isShowing()) {
|
|
||||||
dialog.dismiss();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result) {
|
|
||||||
callback.onListDeleted();
|
|
||||||
} else {
|
|
||||||
callback.requestFailed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface DeleteListDialogCallback {
|
|
||||||
|
|
||||||
void onListDeleted();
|
|
||||||
|
|
||||||
void requestFailed();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,106 +0,0 @@
|
|||||||
package org.tasks.gtasks;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.app.ProgressDialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import com.google.api.services.tasks.model.TaskList;
|
|
||||||
import com.todoroo.astrid.gtasks.api.GtasksInvoker;
|
|
||||||
import java.io.IOException;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.data.GoogleTaskList;
|
|
||||||
import org.tasks.dialogs.DialogBuilder;
|
|
||||||
import org.tasks.injection.DialogFragmentComponent;
|
|
||||||
import org.tasks.injection.ForApplication;
|
|
||||||
import org.tasks.injection.InjectingDialogFragment;
|
|
||||||
import timber.log.Timber;
|
|
||||||
|
|
||||||
public class RenameListDialog extends InjectingDialogFragment {
|
|
||||||
|
|
||||||
private static final String EXTRA_NAME = "extra_name";
|
|
||||||
private static final String EXTRA_LIST = "extra_list";
|
|
||||||
@Inject @ForApplication Context context;
|
|
||||||
@Inject DialogBuilder dialogBuilder;
|
|
||||||
private RenameListDialogCallback callback;
|
|
||||||
private ProgressDialog dialog;
|
|
||||||
private GoogleTaskList googleTaskList;
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
public static RenameListDialog newRenameListDialog(GoogleTaskList googleTaskList, String name) {
|
|
||||||
RenameListDialog dialog = new RenameListDialog();
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putParcelable(EXTRA_LIST, googleTaskList);
|
|
||||||
args.putString(EXTRA_NAME, name);
|
|
||||||
dialog.setArguments(args);
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setRetainInstance(true);
|
|
||||||
Bundle arguments = getArguments();
|
|
||||||
googleTaskList = arguments.getParcelable(EXTRA_LIST);
|
|
||||||
name = arguments.getString(EXTRA_NAME);
|
|
||||||
dialog = dialogBuilder.newProgressDialog(R.string.renaming_list);
|
|
||||||
execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|
||||||
return dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
super.onAttach(activity);
|
|
||||||
|
|
||||||
callback = (RenameListDialogCallback) activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void inject(DialogFragmentComponent component) {
|
|
||||||
component.inject(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void execute() {
|
|
||||||
new AsyncTask<Void, Void, TaskList>() {
|
|
||||||
@Override
|
|
||||||
protected TaskList doInBackground(Void... voids) {
|
|
||||||
try {
|
|
||||||
return new GtasksInvoker(context, googleTaskList.getAccount())
|
|
||||||
.renameGtaskList(googleTaskList.getRemoteId(), name);
|
|
||||||
} catch (IOException e) {
|
|
||||||
Timber.e(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(TaskList taskList) {
|
|
||||||
if (dialog.isShowing()) {
|
|
||||||
dialog.dismiss();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (taskList == null) {
|
|
||||||
callback.requestFailed();
|
|
||||||
} else {
|
|
||||||
callback.onListRenamed(taskList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface RenameListDialogCallback {
|
|
||||||
|
|
||||||
void onListRenamed(TaskList taskList);
|
|
||||||
|
|
||||||
void requestFailed();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,47 @@
|
|||||||
|
package org.tasks.ui;
|
||||||
|
|
||||||
|
import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
import androidx.lifecycle.ViewModel;
|
||||||
|
import io.reactivex.Completable;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.functions.Action;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
|
||||||
|
public class ActionViewModel extends ViewModel {
|
||||||
|
private MutableLiveData<Boolean> completed = new MutableLiveData<>();
|
||||||
|
private MutableLiveData<Throwable> error = new MutableLiveData<>();
|
||||||
|
private boolean inProgress;
|
||||||
|
|
||||||
|
public LiveData<Boolean> getData() {
|
||||||
|
return completed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<Throwable> getError() {
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean inProgress() {
|
||||||
|
return inProgress;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void run(Action action) {
|
||||||
|
assertMainThread();
|
||||||
|
|
||||||
|
if (!inProgress) {
|
||||||
|
inProgress = true;
|
||||||
|
Completable.fromAction(action)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.doOnComplete(() -> completed.setValue(true))
|
||||||
|
.doOnError(error::setValue)
|
||||||
|
.doFinally(() -> {
|
||||||
|
assertMainThread();
|
||||||
|
inProgress = false;
|
||||||
|
})
|
||||||
|
.subscribe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package org.tasks.ui;
|
||||||
|
|
||||||
|
import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
import androidx.lifecycle.ViewModel;
|
||||||
|
import io.reactivex.Single;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
|
public abstract class CompletableViewModel<T> extends ViewModel {
|
||||||
|
private MutableLiveData<T> data = new MutableLiveData<>();
|
||||||
|
private MutableLiveData<Throwable> error = new MutableLiveData<>();
|
||||||
|
private boolean inProgress;
|
||||||
|
|
||||||
|
public LiveData<T> getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<Throwable> getError() {
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean inProgress() {
|
||||||
|
return inProgress;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void run(Callable<T> callable) {
|
||||||
|
assertMainThread();
|
||||||
|
|
||||||
|
if (!inProgress) {
|
||||||
|
inProgress = true;
|
||||||
|
Single.fromCallable(callable)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.doOnSuccess(data::setValue)
|
||||||
|
.doOnError(error::setValue)
|
||||||
|
.doFinally(() -> {
|
||||||
|
assertMainThread();
|
||||||
|
inProgress = false;
|
||||||
|
})
|
||||||
|
.subscribe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue