Delete caldav collections

pull/699/head
Alex Baker 8 years ago
parent 5bd2aedea1
commit 26a4dd952c

@ -11,7 +11,9 @@ import android.support.design.widget.TextInputEditText;
import android.support.design.widget.TextInputLayout; import android.support.design.widget.TextInputLayout;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.support.v7.widget.Toolbar.OnMenuItemClickListener;
import android.text.InputType; import android.text.InputType;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -23,6 +25,7 @@ import butterknife.OnFocusChange;
import butterknife.OnTextChanged; import butterknife.OnTextChanged;
import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.api.CaldavFilter; import com.todoroo.astrid.api.CaldavFilter;
import com.todoroo.astrid.service.TaskDeleter;
import java.net.ConnectException; import java.net.ConnectException;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
@ -43,7 +46,8 @@ import org.tasks.themes.ThemeColor;
import org.tasks.ui.DisplayableException; import org.tasks.ui.DisplayableException;
import org.tasks.ui.MenuColorizer; import org.tasks.ui.MenuColorizer;
public class CaldavCalendarSettingsActivity extends ThemedInjectingAppCompatActivity { public class CaldavCalendarSettingsActivity extends ThemedInjectingAppCompatActivity
implements OnMenuItemClickListener {
public static final String EXTRA_CALDAV_CALENDAR = "extra_caldav_calendar"; public static final String EXTRA_CALDAV_CALENDAR = "extra_caldav_calendar";
public static final String EXTRA_CALDAV_ACCOUNT = "extra_caldav_account"; public static final String EXTRA_CALDAV_ACCOUNT = "extra_caldav_account";
@ -59,6 +63,7 @@ public class CaldavCalendarSettingsActivity extends ThemedInjectingAppCompatActi
@Inject CaldavDao caldavDao; @Inject CaldavDao caldavDao;
@Inject SyncAdapters syncAdapters; @Inject SyncAdapters syncAdapters;
@Inject Encryption encryption; @Inject Encryption encryption;
@Inject TaskDeleter taskDeleter;
@BindView(R.id.root_layout) @BindView(R.id.root_layout)
LinearLayout root; LinearLayout root;
@ -125,6 +130,8 @@ public class CaldavCalendarSettingsActivity extends ThemedInjectingAppCompatActi
save(); save();
} }
}); });
toolbar.inflateMenu(R.menu.menu_caldav_calendar_settings);
toolbar.setOnMenuItemClickListener(this);
MenuColorizer.colorToolbar(this, toolbar); MenuColorizer.colorToolbar(this, toolbar);
color.setInputType(InputType.TYPE_NULL); color.setInputType(InputType.TYPE_NULL);
@ -194,7 +201,7 @@ public class CaldavCalendarSettingsActivity extends ThemedInjectingAppCompatActi
if (caldavCalendar == null) { if (caldavCalendar == null) {
CaldavClient client = new CaldavClient(caldavAccount, encryption); CaldavClient client = new CaldavClient(caldavAccount, encryption);
ProgressDialog dialog = dialogBuilder.newProgressDialog(R.string.creating_new_list); ProgressDialog dialog = dialogBuilder.newProgressDialog(R.string.contacting_server);
dialog.show(); dialog.show();
client client
.makeCollection(name) .makeCollection(name)
@ -327,4 +334,44 @@ public class CaldavCalendarSettingsActivity extends ThemedInjectingAppCompatActi
themeColor.apply(toolbar); themeColor.apply(toolbar);
themeColor.applyToStatusBar(this); themeColor.applyToStatusBar(this);
} }
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.remove:
deleteCollection();
break;
}
return onOptionsItemSelected(item);
}
private void deleteCollection() {
dialogBuilder
.newMessageDialog(R.string.delete_tag_confirmation, caldavCalendar.getName())
.setPositiveButton(
R.string.delete,
(dialog, which) -> {
CaldavClient caldavClient =
new CaldavClient(
caldavCalendar.getUrl(),
caldavAccount.getUsername(),
encryption.decrypt(caldavAccount.getPassword()));
ProgressDialog progressDialog = dialogBuilder.newProgressDialog(R.string.contacting_server);
progressDialog.show();
caldavClient
.deleteCollection()
.doAfterTerminate(progressDialog::dismiss)
.subscribe(this::onDeleted, this::requestFailed);
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
private void onDeleted() {
taskDeleter.markDeleted(caldavDao.getTasksByCalendar(caldavCalendar.getUuid()));
caldavDao.deleteTasksForCalendar(caldavCalendar.getUuid());
caldavDao.delete(caldavCalendar);
setResult(RESULT_OK, new Intent(ACTION_DELETED));
finish();
}
} }

@ -19,6 +19,7 @@ import at.bitfire.dav4android.property.GetCTag;
import at.bitfire.dav4android.property.ResourceType; import at.bitfire.dav4android.property.ResourceType;
import at.bitfire.dav4android.property.SupportedCalendarComponentSet; import at.bitfire.dav4android.property.SupportedCalendarComponentSet;
import com.todoroo.astrid.helper.UUIDHelper; import com.todoroo.astrid.helper.UUIDHelper;
import io.reactivex.Completable;
import io.reactivex.Single; import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
@ -158,6 +159,13 @@ class CaldavClient {
return urls; return urls;
} }
public Completable deleteCollection() {
return Completable.fromAction(() ->
davResource.delete(null))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
public Single<String> makeCollection(String displayName) { public Single<String> makeCollection(String displayName) {
return Single.fromCallable( return Single.fromCallable(
() -> { () -> {

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/remove"
android:icon="@drawable/ic_delete_24dp"
android:title="@string/remove"
app:showAsAction="ifRoom"/>
</menu>
Loading…
Cancel
Save