Replace progress dialog with bars

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

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

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

Loading…
Cancel
Save