Replace progress dialog with bars

For CaldavAccountSettingsActivity
pull/795/head
Alex Baker 5 years ago
parent dbddc6dea7
commit 538d346e97

@ -0,0 +1,10 @@
package org.tasks.activities;
import org.tasks.caldav.CaldavClient;
import org.tasks.ui.CompletableViewModel;
public class AddCaldavAccountViewModel extends CompletableViewModel<String> {
public void addAccount(String url, String username, String password) {
run(() -> new CaldavClient(url, username, password).getHomeSet());
}
}

@ -0,0 +1,10 @@
package org.tasks.activities;
import org.tasks.caldav.CaldavClient;
import org.tasks.ui.CompletableViewModel;
public class UpdateCaldavAccountViewModel extends CompletableViewModel<String> {
public void updateCaldavAccount(String url, String username, String password) {
run(() -> new CaldavClient(url, username, password).getHomeSet());
}
}

@ -2,16 +2,17 @@ package org.tasks.caldav;
import static android.text.TextUtils.isEmpty;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.ViewModelProviders;
import at.bitfire.dav4android.exception.HttpException;
import butterknife.BindView;
import butterknife.ButterKnife;
@ -20,6 +21,7 @@ import butterknife.OnTextChanged;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import com.rey.material.widget.ProgressView;
import com.todoroo.astrid.helper.UUIDHelper;
import com.todoroo.astrid.service.TaskDeleter;
import java.net.ConnectException;
@ -28,6 +30,8 @@ import java.net.URI;
import java.net.URISyntaxException;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.activities.AddCaldavAccountViewModel;
import org.tasks.activities.UpdateCaldavAccountViewModel;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking.Events;
import org.tasks.data.CaldavAccount;
@ -85,7 +89,12 @@ public class CaldavAccountSettingsActivity extends ThemedInjectingAppCompatActiv
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.progress_bar)
ProgressView progressView;
private CaldavAccount caldavAccount;
private AddCaldavAccountViewModel addCaldavAccountViewModel;
private UpdateCaldavAccountViewModel updateCaldavAccountViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -95,6 +104,10 @@ public class CaldavAccountSettingsActivity extends ThemedInjectingAppCompatActiv
ButterKnife.bind(this);
addCaldavAccountViewModel = ViewModelProviders.of(this).get(AddCaldavAccountViewModel.class);
updateCaldavAccountViewModel =
ViewModelProviders.of(this).get(UpdateCaldavAccountViewModel.class);
caldavAccount = getIntent().getParcelableExtra(EXTRA_CALDAV_DATA);
if (savedInstanceState == null) {
@ -136,6 +149,23 @@ public class CaldavAccountSettingsActivity extends ThemedInjectingAppCompatActiv
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(name, InputMethodManager.SHOW_IMPLICIT);
}
addCaldavAccountViewModel.getData().observe(this, this::addAccount);
updateCaldavAccountViewModel.getData().observe(this, this::updateAccount);
addCaldavAccountViewModel.getError().observe(this, this::requestFailed);
updateCaldavAccountViewModel.getError().observe(this, this::requestFailed);
}
private void showProgressIndicator() {
progressView.setVisibility(View.VISIBLE);
}
private void hideProgressIndicator() {
progressView.setVisibility(View.GONE);
}
private boolean requestInProgress() {
return progressView.getVisibility() == View.VISIBLE;
}
@OnTextChanged(R.id.name)
@ -198,6 +228,10 @@ public class CaldavAccountSettingsActivity extends ThemedInjectingAppCompatActiv
}
private void save() {
if (requestInProgress()) {
return;
}
String name = getNewName();
String username = getNewUsername();
String url = getNewURL();
@ -263,21 +297,11 @@ public class CaldavAccountSettingsActivity extends ThemedInjectingAppCompatActiv
}
if (caldavAccount == null) {
CaldavClient client = new CaldavClient(url, username, password);
ProgressDialog dialog = dialogBuilder.newProgressDialog(R.string.contacting_server);
dialog.show();
client
.getHomeSet()
.doAfterTerminate(dialog::dismiss)
.subscribe(this::addAccount, this::requestFailed);
showProgressIndicator();
addCaldavAccountViewModel.addAccount(url, username, password);
} else if (needsValidation()) {
CaldavClient client = new CaldavClient(url, username, password);
ProgressDialog dialog = dialogBuilder.newProgressDialog(R.string.contacting_server);
dialog.show();
client
.getHomeSet()
.doAfterTerminate(dialog::dismiss)
.subscribe(this::updateAccount, this::requestFailed);
showProgressIndicator();
updateCaldavAccountViewModel.updateCaldavAccount(url, username, password);
} else if (hasChanges()) {
updateAccount(caldavAccount.getUrl());
} else {
@ -317,6 +341,8 @@ public class CaldavAccountSettingsActivity extends ThemedInjectingAppCompatActiv
}
private void requestFailed(Throwable t) {
hideProgressIndicator();
if (t instanceof HttpException) {
showSnackbar(t.getMessage());
} else if (t instanceof DisplayableException) {
@ -376,6 +402,10 @@ public class CaldavAccountSettingsActivity extends ThemedInjectingAppCompatActiv
}
private void removeAccount() {
if (requestInProgress()) {
return;
}
dialogBuilder
.newMessageDialog(R.string.logout_warning, caldavAccount.getName())
.setPositiveButton(
@ -391,6 +421,10 @@ public class CaldavAccountSettingsActivity extends ThemedInjectingAppCompatActiv
}
private void discard() {
if (requestInProgress()) {
return;
}
if (!hasChanges()) {
finish();
} else {

@ -19,9 +19,6 @@ import at.bitfire.dav4android.property.GetCTag;
import at.bitfire.dav4android.property.ResourceType;
import at.bitfire.dav4android.property.SupportedCalendarComponentSet;
import com.todoroo.astrid.helper.UUIDHelper;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
@ -59,7 +56,7 @@ public class CaldavClient {
encryption.decrypt(caldavAccount.getPassword()));
}
CaldavClient(String url, String username, String password) {
public CaldavClient(String url, String username, String password) {
BasicDigestAuthHandler basicDigestAuthHandler =
new BasicDigestAuthHandler(null, username, password);
httpClient =
@ -123,14 +120,9 @@ public class CaldavClient {
return davResource.getLocation().resolve(homeSet).toString();
}
Single<String> getHomeSet() {
return Single.fromCallable(
() -> {
String principal = tryFindPrincipal();
return findHomeset(isEmpty(principal) ? httpUrl : httpUrl.resolve(principal));
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
public String getHomeSet() throws IOException, DavException {
String principal = tryFindPrincipal();
return findHomeset(isEmpty(principal) ? httpUrl : httpUrl.resolve(principal));
}
public List<DavResponse> getCalendars() throws IOException, DavException {

@ -9,6 +9,8 @@
<include layout="@layout/toolbar"/>
<include layout="@layout/progress_view"/>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">

Loading…
Cancel
Save