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