diff --git a/src/main/java/ru/touchin/templates/validation/ValidationFunc.java b/src/main/java/ru/touchin/templates/validation/ValidationFunc.java index ac1804c..a5ed599 100644 --- a/src/main/java/ru/touchin/templates/validation/ValidationFunc.java +++ b/src/main/java/ru/touchin/templates/validation/ValidationFunc.java @@ -4,11 +4,13 @@ import android.support.annotation.NonNull; import java.io.Serializable; +import io.reactivex.functions.Function; + /** * Created by Ilia Kurtov on 30/01/2017. * Simple interface that gets one parameter with {@link TInput} type as input and returns other type {@link TReturn} as a result. * Interface extends {@link Serializable} to survive after {@link ru.touchin.roboswag.components.navigation.AbstractState} recreation. - * Created as a replace for {@link rx.functions.Func1} because it needed to be {@link Serializable} + * Created as a replace for {@link Function} because it needed to be {@link Serializable} * * @param input type. * @param return type. diff --git a/src/main/java/ru/touchin/templates/validation/validationcontrollers/BooleanValidationController.java b/src/main/java/ru/touchin/templates/validation/validationcontrollers/BooleanValidationController.java index 24969fa..d110469 100644 --- a/src/main/java/ru/touchin/templates/validation/validationcontrollers/BooleanValidationController.java +++ b/src/main/java/ru/touchin/templates/validation/validationcontrollers/BooleanValidationController.java @@ -37,6 +37,7 @@ public class BooleanValidationController extends ValidationController validation(@NonNull final Observable activatedObservable) { return Observable.combineLatest(activatedObservable, getValidator().getWrapperModel().observe(), (activated, flag) -> { - final boolean selected = flag == null ? false : flag; + final boolean selected = flag.get() == null ? false : flag.get(); if (activated && !selected) { return ValidationState.ERROR_NO_DESCRIPTION; } else if (!activated && !selected) { diff --git a/src/main/java/ru/touchin/templates/validation/validationcontrollers/EditTextValidationController.java b/src/main/java/ru/touchin/templates/validation/validationcontrollers/EditTextValidationController.java index 90a70ff..6f14603 100644 --- a/src/main/java/ru/touchin/templates/validation/validationcontrollers/EditTextValidationController.java +++ b/src/main/java/ru/touchin/templates/validation/validationcontrollers/EditTextValidationController.java @@ -26,6 +26,7 @@ import android.text.TextUtils; import java.io.Serializable; import io.reactivex.Observable; +import ru.touchin.roboswag.core.utils.Optional; import ru.touchin.roboswag.core.utils.pairs.NonNullPair; import ru.touchin.templates.validation.ValidationState; import ru.touchin.templates.validation.validators.EditTextValidator; @@ -77,9 +78,10 @@ public class EditTextValidationController @Nullable @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.NPathComplexity"}) private NonNullPair> getValidationPair(final boolean activated, - @Nullable final String text, + @NonNull Optional optionalText, @Nullable final Boolean focusIn, final boolean showError) { + final String text = optionalText.get(); if (focusIn == null && TextUtils.isEmpty(text) && !activated && !showError) { return null; } @@ -98,8 +100,7 @@ public class EditTextValidationController /** * If we don't want to show error when focus is lost. * - * @param showErrorOnFocusOut show an error or don't show an error. - * + * @param showErrorOnFocusOut show an error or don't show an error. */ public void setShowErrorOnFocusOut(final boolean showErrorOnFocusOut) { this.showErrorOnFocusOut = showErrorOnFocusOut; diff --git a/src/main/java/ru/touchin/templates/validation/validationcontrollers/SimpleValidationController.java b/src/main/java/ru/touchin/templates/validation/validationcontrollers/SimpleValidationController.java index b47b7b9..a5c676a 100644 --- a/src/main/java/ru/touchin/templates/validation/validationcontrollers/SimpleValidationController.java +++ b/src/main/java/ru/touchin/templates/validation/validationcontrollers/SimpleValidationController.java @@ -12,7 +12,8 @@ import ru.touchin.templates.validation.validators.Validator; * Created by Ilia Kurtov on 24/01/2017. * {@link ValidationController} for models that have the same modal as wrapper model. You can use it when you simply need to be sure * that user have selected some item and it is not null. - * @param type of the model. + * + * @param type of the model. * @param corresponding {@link Validator} */ public class SimpleValidationController> @@ -24,6 +25,7 @@ public class SimpleValidationController modelAndViewUpdating(@Nullable final Observable viewStateObservable, - @NonNull final Consumer updateViewAction, + @NonNull final Consumer> updateViewAction, @NonNull final ViewWithError viewWithError) { + final Observable stateObservable = viewStateObservable != null ? viewStateObservable.doOnNext(flag -> getValidator().getWrapperModel().set(flag)) : Observable.empty(); return Observable .merge(getValidator().getWrapperModel().observe() - .observeOn(AndroidSchedulers.mainThread()) + .observeOn(AndroidSchedulers.mainThread()) .doOnNext(updateViewAction), getValidator().getValidationState().observe() .observeOn(AndroidSchedulers.mainThread()) @@ -84,6 +87,7 @@ public class ValidationController /** * Helper function to check if validation state in error state ot not + * * @param validationState the state you want to check for the errors. * @return true if validation state is in error and false otherwise. */ diff --git a/src/main/java/ru/touchin/templates/validation/validators/EditTextValidator.java b/src/main/java/ru/touchin/templates/validation/validators/EditTextValidator.java index c5414bf..9f391c2 100644 --- a/src/main/java/ru/touchin/templates/validation/validators/EditTextValidator.java +++ b/src/main/java/ru/touchin/templates/validation/validators/EditTextValidator.java @@ -25,6 +25,7 @@ import android.support.annotation.Nullable; import java.io.Serializable; import io.reactivex.Observable; +import io.reactivex.Single; import io.reactivex.schedulers.Schedulers; import ru.touchin.roboswag.core.observables.Changeable; import ru.touchin.roboswag.core.observables.NonNullChangeable; @@ -51,6 +52,7 @@ public abstract class EditTextValidator extends Val * This flag needed to force showing errors. You don't want to show final error when you start to enter data in some field at first time. * But if user leaves this view and final check not passed - you need to force to show an error till user not enters correct data and leaves * the view. + * * @return {@link NonNullChangeable} with current state of the flag - do we need to show errors from final checks while user types. */ @NonNull @@ -60,6 +62,7 @@ public abstract class EditTextValidator extends Val /** * Use this method to get or set final check. + * * @return final check. */ @NonNull @@ -69,6 +72,7 @@ public abstract class EditTextValidator extends Val /** * Use this method to get or set primary check. + * * @return primary check. */ @NonNull @@ -104,21 +108,16 @@ public abstract class EditTextValidator extends Val primaryCheck.observe().observeOn(Schedulers.computation()), (finalCheck, primaryCheck) -> { try { - return validateText(finalCheck, primaryCheck, text, fullCheck); + return validateText(finalCheck.get(), primaryCheck.get(), text, fullCheck); } catch (final Throwable exception) { return new HalfNullablePair<>(ValidationState.ERROR_CONVERSION, null); } }); } - @NonNull - private Observable processChecks(@NonNull final String text, final boolean fullCheck) { - return createValidationObservable(text, fullCheck) - .map(HalfNullablePair::getFirst); - } - /** * Validates text with primary check. + * * @param text - input text. * @return {@link Observable} with the result of the primary check. */ @@ -129,6 +128,7 @@ public abstract class EditTextValidator extends Val /** * Validates text with final check. + * * @param text - input text. * @return {@link Observable} with the result of the final check. */ @@ -140,15 +140,21 @@ public abstract class EditTextValidator extends Val /** * Validates text with primary and final check consequentially and returns {@link Observable} with {@link HalfNullablePair} of final state * and resulting model. + * * @param text - input text. * @return pair with final {@link ValidationState} that is always not null and a model that we get after converting the text. - * Model can be null if validation fails on primary or final checks. + * Model can be null if validation fails on primary or final checks. */ @NonNull @Override public Observable> fullValidateAndGetModel(@NonNull final String text) { - return createValidationObservable(text, true) - .first(); + return createValidationObservable(text, true); + } + + @NonNull + private Observable processChecks(@NonNull final String text, final boolean fullCheck) { + return createValidationObservable(text, fullCheck) + .map(HalfNullablePair::getFirst); } } \ No newline at end of file diff --git a/src/main/java/ru/touchin/templates/validation/validators/SameTypeValidator.java b/src/main/java/ru/touchin/templates/validation/validators/SameTypeValidator.java index ae2f08b..c8ed7a7 100644 --- a/src/main/java/ru/touchin/templates/validation/validators/SameTypeValidator.java +++ b/src/main/java/ru/touchin/templates/validation/validators/SameTypeValidator.java @@ -5,19 +5,21 @@ import android.support.annotation.NonNull; import java.io.Serializable; +import io.reactivex.Observable; import ru.touchin.roboswag.core.utils.pairs.HalfNullablePair; import ru.touchin.templates.validation.ValidationState; -import rx.Observable; /** * Created by Ilia Kurtov on 24/01/2017. * Class that simplifies work with {@link Validator}'s that have the same wrapper model and model type. + * * @param model that should be bounded with a view. */ public class SameTypeValidator extends Validator { /** * Simply returns the same model without any converting. + * * @param wrapperModel input model. * @return the same model as input parameter. * @throws Throwable - in this case no throwable would be thrown. @@ -31,9 +33,10 @@ public class SameTypeValidator extends Validator> fullValidateAndGetModel(@NonNull final TWrapperModel wrapperModel);