From b7be85221b042300a9f80231206896d181e79ddb Mon Sep 17 00:00:00 2001 From: Shinokuni Date: Tue, 30 Jul 2019 16:51:48 +0200 Subject: [PATCH] Fix update account credentials flow --- .../app/activities/AddAccountActivity.java | 68 ++++++++++++------- .../app/repositories/ARepository.java | 2 +- .../app/repositories/LocalFeedRepository.java | 2 +- .../app/repositories/NextNewsRepository.java | 5 +- .../app/viewmodels/AccountViewModel.java | 4 +- app/src/main/res/values-fr-rFR/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 53 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/readrops/app/activities/AddAccountActivity.java b/app/src/main/java/com/readrops/app/activities/AddAccountActivity.java index aad02ed0..e518b0d5 100644 --- a/app/src/main/java/com/readrops/app/activities/AddAccountActivity.java +++ b/app/src/main/java/com/readrops/app/activities/AddAccountActivity.java @@ -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() { @@ -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()); + } + }); + } } diff --git a/app/src/main/java/com/readrops/app/repositories/ARepository.java b/app/src/main/java/com/readrops/app/repositories/ARepository.java index 9a4cec80..48ba0d62 100644 --- a/app/src/main/java/com/readrops/app/repositories/ARepository.java +++ b/app/src/main/java/com/readrops/app/repositories/ARepository.java @@ -31,7 +31,7 @@ public abstract class ARepository { this.database = Database.getInstance(application); } - public abstract Single login(Account account); + public abstract Single login(Account account, boolean insert); public abstract Observable sync(List feeds, Account account); diff --git a/app/src/main/java/com/readrops/app/repositories/LocalFeedRepository.java b/app/src/main/java/com/readrops/app/repositories/LocalFeedRepository.java index 5a503150..3fefef13 100644 --- a/app/src/main/java/com/readrops/app/repositories/LocalFeedRepository.java +++ b/app/src/main/java/com/readrops/app/repositories/LocalFeedRepository.java @@ -46,7 +46,7 @@ public class LocalFeedRepository extends ARepository { } @Override - public Single login(Account account) { + public Single login(Account account, boolean insert) { return null; } diff --git a/app/src/main/java/com/readrops/app/repositories/NextNewsRepository.java b/app/src/main/java/com/readrops/app/repositories/NextNewsRepository.java index bacd866b..f324a607 100644 --- a/app/src/main/java/com/readrops/app/repositories/NextNewsRepository.java +++ b/app/src/main/java/com/readrops/app/repositories/NextNewsRepository.java @@ -45,7 +45,7 @@ public class NextNewsRepository extends ARepository { } @Override - public Single login(Account account) { + public Single 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); diff --git a/app/src/main/java/com/readrops/app/viewmodels/AccountViewModel.java b/app/src/main/java/com/readrops/app/viewmodels/AccountViewModel.java index 96e3a051..742527e7 100644 --- a/app/src/main/java/com/readrops/app/viewmodels/AccountViewModel.java +++ b/app/src/main/java/com/readrops/app/viewmodels/AccountViewModel.java @@ -25,8 +25,8 @@ public class AccountViewModel extends AndroidViewModel { database = Database.getInstance(application); } - public Single login(Account account) { - return repository.login(account); + public Single login(Account account, boolean insert) { + return repository.login(account, insert); } public Single insert(Account account) { diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index a2f3b687..fbd3e8e6 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -72,5 +72,6 @@ Identifiants Du plus récent au plus ancien Du plus ancien au plus récent + La connexion a échoué. Veuillez vérifier vos identifiants \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 19944415..7ab8c888 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -78,4 +78,5 @@ Credentials Newest to oldest Oldest to newsest + Login failed. Please check your credentials