Skip to content

Commit 4c11248

Browse files
authored
Merge pull request #4 from oliveiradev/feature/add-validation-listener
Feature/add validation listener
2 parents 2cb73e2 + aca35fd commit 4c11248

File tree

4 files changed

+84
-4
lines changed

4 files changed

+84
-4
lines changed

README.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,41 @@ protected void onCreate(Bundle savedInstanceState) {
150150
}
151151
```
152152

153+
Or you can use `toValidate()` if prefer using listener to validation response:
154+
155+
```
156+
public class YourActivity extends AppCompatActivity implements Validator.ValidationListener {
157+
158+
...
159+
160+
@Override
161+
protected void onCreate(Bundle savedInstanceState) {
162+
super.onCreate(savedInstanceState);
163+
164+
MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
165+
final Validator validator = new Validator(binding);
166+
validator.setValidationListener(this);
167+
168+
binding.validate.setOnClickListener(new View.OnClickListener() {
169+
@Override
170+
public void onClick(View v) {
171+
validator.toValidate()
172+
}
173+
});
174+
}
175+
176+
@Override
177+
public void onValidationSuccess() {
178+
saveToDatabase();
179+
}
180+
181+
@Override
182+
public void onValidationError() {
183+
Toast.makeText(YourActivity.this, "Dados inválidos!", Toast.LENGTH_SHORT).show();
184+
}
185+
}
186+
```
187+
153188
### Custom Error Messages ###
154189

155190
You can add custom error messages by using the same validation rule name and adding `Message` at the end, such as `validateTypeMessage`, `validateDateMessage`, `validateRegexMessage` and so on. For example:

library/src/main/java/br/com/ilhasoft/support/validation/Validator.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class Validator {
2121
private static final int FORM_VALIDATION_MODE = 1;
2222

2323
private ViewDataBinding target;
24+
private ValidationListener validationListener;
2425

2526
private int mode = FIELD_VALIDATION_MODE;
2627
private final Set<View> disabledViews;
@@ -30,6 +31,20 @@ public Validator(ViewDataBinding target) {
3031
this.disabledViews = new HashSet<>();
3132
}
3233

34+
public void setValidationListener(ValidationListener validationListener) {
35+
this.validationListener = validationListener;
36+
}
37+
38+
public void toValidate() {
39+
if (validationListener == null) throw new IllegalArgumentException("Validation listener should not be null.");
40+
41+
if (validate()) {
42+
validationListener.onValidationSuccess();
43+
} else {
44+
validationListener.onValidationError();
45+
}
46+
}
47+
3348
public boolean validate() {
3449
List<View> viewWithValidations = getViewsWithValidation();
3550
return isAllViewsValid(viewWithValidations);
@@ -96,4 +111,11 @@ private <ViewType extends View> List<View> getViewsWithValidation(List<ViewType>
96111
private List<View> getViewsWithValidation(View view) {
97112
return ViewTagHelper.filterViewWithTag(R.id.validator_rule, view);
98113
}
114+
115+
public interface ValidationListener {
116+
117+
void onValidationSuccess();
118+
119+
void onValidationError();
120+
}
99121
}

sample/src/main/java/br/com/ilhasoft/support/validation/sample/MainActivity.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package br.com.ilhasoft.support.validation.sample;
22

33
import android.databinding.DataBindingUtil;
4-
import android.databinding.ViewDataBinding;
5-
import android.support.v7.app.AppCompatActivity;
64
import android.os.Bundle;
5+
import android.support.v7.app.AppCompatActivity;
76
import android.util.Log;
87
import android.view.View;
98
import android.widget.Toast;
@@ -13,13 +12,23 @@
1312
import br.com.ilhasoft.support.validation.Validator;
1413
import br.com.ilhasoft.support.validation.sample.databinding.ActivityMainBinding;
1514

16-
public class MainActivity extends AppCompatActivity {
15+
public class MainActivity extends AppCompatActivity implements Validator.ValidationListener {
1716

1817
private static final String TAG = "MainActivity";
1918

2019
private ActivityMainBinding binding;
2120
private Validator validator;
2221

22+
@Override
23+
public void onValidationSuccess() {
24+
saveToDatabase();
25+
}
26+
27+
@Override
28+
public void onValidationError() {
29+
Toast.makeText(MainActivity.this, "Dados inválidos!", Toast.LENGTH_SHORT).show();
30+
}
31+
2332
@Override
2433
protected void onCreate(Bundle savedInstanceState) {
2534
super.onCreate(savedInstanceState);
@@ -28,8 +37,10 @@ protected void onCreate(Bundle savedInstanceState) {
2837
binding.validateName.setOnClickListener(onValidateNameClickListener);
2938
binding.validateMultiple.setOnClickListener(onValidateMultipleClickListener);
3039
binding.validate.setOnClickListener(onValidateAllClickListener);
40+
binding.toValidate.setOnClickListener(onValidateAllWithListenerClickListener);
3141

3242
validator = new Validator(binding);
43+
validator.setValidationListener(this);
3344
validator.enableFormValidationMode();
3445
}
3546

@@ -47,7 +58,6 @@ public void onClick(View v) {
4758
}
4859
};
4960

50-
5161
private View.OnClickListener onValidateAllClickListener = new View.OnClickListener() {
5262
@Override
5363
public void onClick(View v) {
@@ -59,6 +69,13 @@ public void onClick(View v) {
5969
}
6070
};
6171

72+
private View.OnClickListener onValidateAllWithListenerClickListener = new View.OnClickListener() {
73+
@Override
74+
public void onClick(View v) {
75+
validator.toValidate();
76+
}
77+
};
78+
6279
private void saveToDatabase() {
6380
Log.i(TAG, "Salvar os dados no banco de dados");
6481
}

sample/src/main/res/layout/activity_main.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,12 @@
177177
android:layout_marginTop="10dp"
178178
android:text="Validate All"/>
179179

180+
<Button
181+
android:id="@+id/to_validate"
182+
android:layout_width="wrap_content"
183+
android:layout_height="wrap_content"
184+
android:layout_marginTop="10dp"
185+
android:text="Validate All With Listener"/>
180186
</LinearLayout>
181187
</ScrollView>
182188
</layout>

0 commit comments

Comments
 (0)