I have a login screen with an Observable which emits items when email and password are valid, and then, I subscribe enabling or disabling the login button.
Now, I want a way to avoid multiple clicks in the login button (avoiding multiple calls to webservice and opening multiple activities after login).
I have tried to use doOnNext() to disable the button but it conflicts with my validation (I ended up enabling the button without being possible)
my code:
InitialValueObservable<CharSequence> emailChangeObservable = RxTextView.textChanges(binding.tietLoginLogin);
InitialValueObservable<CharSequence> passwordChangeObservable = RxTextView.textChanges(binding.tietLoginPassword);
Observable<Boolean> infoValidStream = Observable.combineLatest(emailChangeObservable, passwordChangeObservable, (email, password) -> {
boolean validEmail = email.length() > 3 && email.toString().contains("@");
boolean validPass = password.length() > 1;
return validEmail && validPass;
});
infoValidStream.subscribe(validEmailAndPass -> binding.btLoginSignIn.setEnabled(validEmailAndPass));
RxView.clicks(binding.btLoginSignIn)
.subscribe(o -> login()); // do the request to the webservice and return a Single<User> if success.
How can I achieve this behavior?