Fix update account credentials flow

This commit is contained in:
Shinokuni 2019-07-30 16:51:48 +02:00
parent 01e55ff78f
commit b7be85221b
7 changed files with 53 additions and 30 deletions

View File

@ -17,6 +17,7 @@ import com.readrops.app.utils.SharedPreferencesManager;
import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.AccountViewModel;
import io.reactivex.Completable;
import io.reactivex.CompletableObserver;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
@ -74,35 +75,13 @@ public class AddAccountActivity extends AppCompatActivity {
accountToEdit.setLogin(login);
accountToEdit.setPassword(password);
viewModel.update(accountToEdit)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
binding.addAccountLoading.setVisibility(View.VISIBLE);
binding.addAccountValidate.setEnabled(false);
}
@Override
public void onComplete() {
finish();
}
@Override
public void onError(Throwable e) {
binding.addAccountLoading.setVisibility(View.GONE);
binding.addAccountValidate.setEnabled(true);
Utils.showSnackbar(binding.addAccountRoot, e.getMessage());
}
});
updateAccount();
} else {
Account account = new Account(url, name, accountType);
account.setLogin(login);
account.setPassword(password);
viewModel.login(account)
viewModel.login(account, true)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<Boolean>() {
@ -199,4 +178,45 @@ public class AddAccountActivity extends AppCompatActivity {
binding.addAccountLogin.setText(SharedPreferencesManager.readString(this, accountToEdit.getLoginKey()));
binding.addAccountPassword.setText(SharedPreferencesManager.readString(this, accountToEdit.getPasswordKey()));
}
private void updateAccount() {
viewModel.login(accountToEdit, false)
.doOnError(throwable -> Utils.showSnackbar(binding.addAccountRoot, throwable.getMessage()))
.flatMapCompletable(b -> {
if (b) {
saveLoginPassword(accountToEdit);
return viewModel.update(accountToEdit);
} else {
runOnUiThread(() -> {
binding.addAccountLoading.setVisibility(View.GONE);
binding.addAccountValidate.setEnabled(true);
Utils.showSnackbar(binding.addAccountRoot, getString(R.string.login_failed));
});
return Completable.never();
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(Disposable d) {
binding.addAccountLoading.setVisibility(View.VISIBLE);
binding.addAccountValidate.setEnabled(false);
}
@Override
public void onComplete() {
finish();
}
@Override
public void onError(Throwable e) {
binding.addAccountLoading.setVisibility(View.GONE);
binding.addAccountValidate.setEnabled(true);
Utils.showSnackbar(binding.addAccountRoot, e.getMessage());
}
});
}
}

View File

@ -31,7 +31,7 @@ public abstract class ARepository {
this.database = Database.getInstance(application);
}
public abstract Single<Boolean> login(Account account);
public abstract Single<Boolean> login(Account account, boolean insert);
public abstract Observable<Feed> sync(List<Feed> feeds, Account account);

View File

@ -46,7 +46,7 @@ public class LocalFeedRepository extends ARepository {
}
@Override
public Single<Boolean> login(Account account) {
public Single<Boolean> login(Account account, boolean insert) {
return null;
}

View File

@ -45,7 +45,7 @@ public class NextNewsRepository extends ARepository {
}
@Override
public Single<Boolean> login(Account account) {
public Single<Boolean> login(Account account, boolean insert) {
return Single.create(emitter -> {
NextNewsAPI newsAPI = new NextNewsAPI();
NextNewsUser user = newsAPI.login(account.toCredentials());
@ -54,7 +54,8 @@ public class NextNewsRepository extends ARepository {
account.setDisplayedName(user.getDisplayName());
account.setCurrentAccount(true);
account.setId((int) database.accountDao().insert(account));
if (insert)
account.setId((int) database.accountDao().insert(account));
emitter.onSuccess(true);
} else
emitter.onSuccess(false);

View File

@ -25,8 +25,8 @@ public class AccountViewModel extends AndroidViewModel {
database = Database.getInstance(application);
}
public Single<Boolean> login(Account account) {
return repository.login(account);
public Single<Boolean> login(Account account, boolean insert) {
return repository.login(account, insert);
}
public Single<Long> insert(Account account) {

View File

@ -72,5 +72,6 @@
<string name="credentials">Identifiants</string>
<string name="filter_newest">Du plus récent au plus ancien</string>
<string name="filter_oldest">Du plus ancien au plus récent</string>
<string name="login_failed">La connexion a échoué. Veuillez vérifier vos identifiants</string>
</resources>

View File

@ -78,4 +78,5 @@
<string name="credentials">Credentials</string>
<string name="filter_newest">Newest to oldest</string>
<string name="filter_oldest">Oldest to newsest</string>
<string name="login_failed">Login failed. Please check your credentials</string>
</resources>