Skip to content

Commit

Permalink
Merge pull request #20 from WellingtonCosta/feat/databinding
Browse files Browse the repository at this point in the history
Data binding support
  • Loading branch information
wellingtoncosta authored Apr 3, 2018
2 parents a557681 + 94b3050 commit 56d6c51
Show file tree
Hide file tree
Showing 41 changed files with 1,861 additions and 1,055 deletions.
84 changes: 10 additions & 74 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,80 +8,15 @@ Convalida is a simple, lightweight and powerful field validation library for And

## Why Convalida?

- Annotation-based;
- You can use with annotations or with data binding;
- Compile-time;
- Compatible with other annotation-based libraries and frameworks such as [ButterKnife][1], [AndroidAnnotations][2], etc;
- Compatible with other popular libraries such as [ButterKnife][1], [Android Data Binding][2], [Dagger 2][3], etc;
- Works with **Stock Android Widgets**;
- Based on [Material Design Error Patterns][4];

## Quick Start
## Documentation

**Step 1** - Annotate your fields with [Convalida Annotations][3]:

```java
@NotEmptyValidation(R.string.field_required)
EditText nameField;

@LengthValidation(min = 3, errorMessage = R.string.min_3_characters)
EditText nickNameField;

@OnlyNumberValidation(R.string.only_numbers)
EditText ageField;

@EmailValidation(R.string.invalid_email)
EditText emailField;

@ConfirmEmailValidation(R.string.emails_not_match)
EditText confirmEmailField;

@PatternValidation(errorMessage = R.string.invalid_phone, pattern = PHONE_PATTERN)
EditText phoneField;

@PasswordValidation(min = 3, pattern = MIXED_CASE_NUMERIC, errorMessage = R.string.invalid_password)
EditText passwordField;

@ConfirmPasswordValidation(R.string.passwords_not_match)
EditText confirmPasswordField;

@ValidateOnClick
Button validateButton;
```

**Step 2** - Initialize Convalida (notice that the it starts with the same name of the Activity):

```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
SampleActivityFieldsValidation.init(this);
}
```

**Step 3** - Run the validations by clicking in the button mapped with `@ValidateOnClick` and handle success or error:

```java
@OnValidationSuccess
public void onValidationSuccess() {
Toast.makeText("Yay!", Toast.LENGTH_LONG).show();
}

@OnValidationError
public void onValidationError() {
Toast.makeText("Something is wrong :(", Toast.LENGTH_LONG).show();
}
```

_Note: Only the method annotated with `@OnValidationSuccess` is required._

**Step 4** - If you want to clear the validations:

```java
@ClearValidationsOnClick
Button clearValidationsButton;
```

**Remember: You must initialize the views (e.g [ButterKnife][1]) before apply the validations.**
See the [wiki][5] for more information.

## Download

Expand All @@ -90,7 +25,6 @@ Button clearValidationsButton;
```groovy
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Expand All @@ -100,8 +34,8 @@ allprojects {

```groovy
dependencies {
 compile 'com.github.WellingtonCosta.convalida:convalida:1.3.7'
 annotationProcessor 'com.github.WellingtonCosta.convalida:convalida-compiler:1.3.7'
 implementation 'com.github.WellingtonCosta.convalida:convalida:2.0.0'
 annotationProcessor 'com.github.WellingtonCosta.convalida:convalida-compiler:2.0.0'
}
```

Expand All @@ -123,8 +57,10 @@ dependencies {

[1]: https://github.com/JakeWharton/butterknife

[2]: https://github.com/androidannotations/androidannotations
[2]: https://developer.android.com/topic/libraries/data-binding/index.html

[3]: https://github.com/WellingtonCosta/convalida/tree/master/convalida-annotations/src/main/java/convalida/annotations
[3]: https://github.com/google/dagger

[4]: https://material.io/guidelines/patterns/errors.html

[5]: https://github.com/WellingtonCosta/convalida/wiki
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
*/
@Target(FIELD)
@Retention(SOURCE)
public @interface NotEmptyValidation {
public @interface RequiredValidation {

@StringRes int errorMessage();

Expand Down
31 changes: 22 additions & 9 deletions convalida-compiler/src/main/java/convalida/compiler/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,40 @@
*/
class Constants {

static final ClassName LIST = ClassName.get("java.util", "List");
static final ClassName OVERRIDE = ClassName.get("java.lang", "Override");

static final ClassName UI_THREAD = ClassName.get("android.support.annotation", "UiThread");
static final ClassName NON_NULL = ClassName.get("android.support.annotation", "NonNull");
static final ClassName VIEW = ClassName.get("android.view", "View");
static final ClassName VIEWGROUP = ClassName.get("android.view", "ViewGroup");
static final ClassName BUTTON = ClassName.get("android.widget", "Button");
static final ClassName VIEW_ONCLICK_LISTENER = ClassName.get("android.view", "View.OnClickListener");
static final ClassName VIEW_DATA_BINDING = ClassName.get("android.databinding", "ViewDataBinding");

static final ClassName VIEW_TAG_UTILS = ClassName.get("convalida.databinding", "ViewTagUtils");
static final ClassName CONVALIDA_DATABINDING_R = ClassName.get("convalida.databinding", "R");
static final ClassName ABSTRACT_VALIDATOR = ClassName.get("convalida.validators", "AbstractValidator");
static final ClassName VALIDATOR_SET = ClassName.get("convalida.validators", "ValidatorSet");

static final String NOT_EMPTY_ANNOTATION = "convalida.annotations.NotEmptyValidation";
static final String EMAIL_ANNOTATION = "convalida.annotations.EmailValidation";
static final String CONFIRM_EMAIL_VALIDATION = "convalida.annotations.ConfirmEmailValidation";
static final String PATTERN_ANNOTATION = "convalida.annotations.PatternValidation";
static final String LENGTH_ANNOTATION = "convalida.annotations.LengthValidation";
static final String ONLY_NUMBER_ANNOTATION = "convalida.annotations.OnlyNumberValidation";
static final String PASSWORD_ANNOTATION = "convalida.annotations.PasswordValidation";
static final String CONFIRM_PASSWORD_ANNOTATION = "convalida.annotations.ConfirmPasswordValidation";
static final String EDIT_TEXT_TYPE = "android.widget.EditText";

static final String REQUIRED_ANNOTATION = "convalida.annotations.RequiredValidation";
static final String EMAIL_ANNOTATION = "convalida.annotations.EmailValidation";
static final String CONFIRM_EMAIL_VALIDATION = "convalida.annotations.ConfirmEmailValidation";
static final String PATTERN_ANNOTATION = "convalida.annotations.PatternValidation";
static final String LENGTH_ANNOTATION = "convalida.annotations.LengthValidation";
static final String ONLY_NUMBER_ANNOTATION = "convalida.annotations.OnlyNumberValidation";
static final String PASSWORD_ANNOTATION = "convalida.annotations.PasswordValidation";
static final String CONFIRM_PASSWORD_ANNOTATION = "convalida.annotations.ConfirmPasswordValidation";
static final String VALIDATE_ON_CLICK_ANNOTATION = "convalida.annotations.ConfirmPasswordValidation";
static final String CLEAR_VALIDATIONS_ON_CLICK_ANNOTATION = "convalida.annotations.ConfirmPasswordValidation";
static final String ON_VALIDATION_SUCCESS_ANNOTATION = "convalida.annotations.ConfirmPasswordValidation";
static final String ON_VALIDATION_ERROR_ANNOTATION = "convalida.annotations.ConfirmPasswordValidation";

private static final String VALIDATORS_PACKAGE = "convalida.validators";

static final ClassName NOT_EMPTY_VALIDATOR = ClassName.get(VALIDATORS_PACKAGE, "NotEmptyValidator");
static final ClassName REQUIRED_VALIDATOR = ClassName.get(VALIDATORS_PACKAGE, "RequiredValidator");
static final ClassName EMAIL_VALIDATOR = ClassName.get(VALIDATORS_PACKAGE, "EmailValidator");
static final ClassName CONFIRM_EMAIL_VALIDATOR = ClassName.get(VALIDATORS_PACKAGE, "ConfirmEmailValidator");
static final ClassName PATTERN_VALIDATOR = ClassName.get(VALIDATORS_PACKAGE, "PatternValidator");
Expand Down
Loading

0 comments on commit 56d6c51

Please sign in to comment.