// Path: valifi/src/main/java/com/mlykotom/valifi/exceptions/ValiFiException.java
// public class ValiFiException extends RuntimeException {
// 	public ValiFiException() {
// 	}
// 
// 	public ValiFiException(String message) {
// 		super(message);
// 	}
// }
// 
// Path: valifi/src/main/java/com/mlykotom/valifi/exceptions/ValiFiValidatorException.java
// public class ValiFiValidatorException extends ValiFiException {
// 	public ValiFiValidatorException() {}
// 
// 	public ValiFiValidatorException(String message) {
// 		super(message);
// 	}
// }


import android.annotation.SuppressLint;
import android.content.Context;
import com.mlykotom.valifi.exceptions.ValiFiException;
import com.mlykotom.valifi.exceptions.ValiFiValidatorException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.StringRes;
import static androidx.annotation.RestrictTo.Scope.TESTS;
				@Override
				public boolean isValid(@Nullable String value) {
					return value != null && pattern.matcher(value).matches();
				}
			});
		}

		/**
		 * Setups error delay for either never or immediate
		 * When set, it will be used in all fields by default (if some field does not override it)
		 *
		 * @param delayType either never or immediate
		 * @return builder for chaining
		 * @see #setErrorDelay(long)  if you want to set exact time
		 */
		public Builder setErrorDelay(ValiFiErrorDelay delayType) {
			mErrorDelay = delayType.delayMillis;
			return this;
		}

		/**
		 * Setups error delay (default is {@link #DEFAULT_ERROR_DELAY_MILLIS}).
		 * When set, it will be used in all fields by default (if some field does not override it)
		 *
		 * @param millis how long till error will be shown.
		 * @return builder for chaining
		 * @see #setErrorDelay(ValiFiErrorDelay) for immediate or manual mode
		 */
		public Builder setErrorDelay(long millis) {
			if (millis <= 0) {
// Path: valifi/src/main/java/com/mlykotom/valifi/exceptions/ValiFiException.java
// public class ValiFiException extends RuntimeException {
// 	public ValiFiException() {
// 	}
// 
// 	public ValiFiException(String message) {
// 		super(message);
// 	}
// }
// 
// Path: valifi/src/main/java/com/mlykotom/valifi/exceptions/ValiFiValidatorException.java
// public class ValiFiValidatorException extends ValiFiException {
// 	public ValiFiValidatorException() {}
// 
// 	public ValiFiValidatorException(String message) {
// 		super(message);
// 	}
// }


// Path: valifi/src/main/java/com/mlykotom/valifi/ValiFi.java
import android.annotation.SuppressLint;
import android.content.Context;
import com.mlykotom.valifi.exceptions.ValiFiException;
import com.mlykotom.valifi.exceptions.ValiFiValidatorException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.StringRes;
import static androidx.annotation.RestrictTo.Scope.TESTS;

				@Override
				public boolean isValid(@Nullable String value) {
					return value != null && pattern.matcher(value).matches();
				}
			});
		}

		/**
		 * Setups error delay for either never or immediate
		 * When set, it will be used in all fields by default (if some field does not override it)
		 *
		 * @param delayType either never or immediate
		 * @return builder for chaining
		 * @see #setErrorDelay(long)  if you want to set exact time
		 */
		public Builder setErrorDelay(ValiFiErrorDelay delayType) {
			mErrorDelay = delayType.delayMillis;
			return this;
		}

		/**
		 * Setups error delay (default is {@link #DEFAULT_ERROR_DELAY_MILLIS}).
		 * When set, it will be used in all fields by default (if some field does not override it)
		 *
		 * @param millis how long till error will be shown.
		 * @return builder for chaining
		 * @see #setErrorDelay(ValiFiErrorDelay) for immediate or manual mode
		 */
		public Builder setErrorDelay(long millis) {
			if (millis <= 0) {
				throw new ValiFiValidatorException("Error delay must be positive");