Skip to content

Instantly share code, notes, and snippets.

@najmsheikh
Created June 17, 2018 23:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save najmsheikh/95904befc577e23e05b8e187f8615a53 to your computer and use it in GitHub Desktop.
Save najmsheikh/95904befc577e23e05b8e187f8615a53 to your computer and use it in GitHub Desktop.
rxjava observable edittext debouncing
private boolean isUsernameValid(String username) {
boolean match = username.matches("^(?=.{4,12}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$");
if (!match) showMessage(getActivity(), R.string.profile_dialog_username_hint_invalid, true);
return match;
}
private void resetUsernameChecks(Activity activity) {
searchDisposables.clear();
activity.runOnUiThread(() -> {
claimButton.setEnabled(false);
usernameInputLayout.setError(null);
});
}
private void showMessage(Activity activity, @StringRes int message, boolean error) {
showMessage(activity, getString(message), error);
}
private void showMessage(Activity activity, String message, boolean error) {
activity.runOnUiThread(() -> {
if (error) {
usernameInputLayout.setErrorTextAppearance(R.style.AppTheme_RedMessage);
} else {
usernameInputLayout.setErrorTextAppearance(R.style.AppTheme_GreenMessage);
}
usernameInputLayout.setError(message);
});
}
Observable<String> usernameObservable = RxTextView.textChanges(usernameEditText)
.filter(charSequence -> !TextUtils.isEmpty(charSequence))
.doOnNext(charSequence -> resetUsernameChecks(getActivity()))
.map(CharSequence::toString)
.filter(this::isUsernameValid)
.debounce(400, TimeUnit.MILLISECONDS);
Disposable usernameSubscription = usernameObservable
.subscribe(username -> {
searchDisposables.clear();
Disposable d = viewModel.checkUsername(username)
.subscribe(available -> {
if (available) {
claimButton.setEnabled(true);
showMessage(getActivity(), R.string.profile_dialog_username_hint_available, false);
} else {
showMessage(getActivity(), R.string.profile_dialog_username_hint_unavailable, true);
}
});
searchDisposables.add(d);
});
disposables.add(usernameSubscription);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment