Skip to content

Commit

Permalink
extended demo to show cross-field validation
Browse files Browse the repository at this point in the history
  • Loading branch information
tomas-vondracek committed Jul 2, 2015
1 parent 483c72c commit 757e72f
Show file tree
Hide file tree
Showing 4 changed files with 176 additions and 105 deletions.
21 changes: 21 additions & 0 deletions demo/src/main/java/eu/inmite/demo/validation/AddressValidator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package eu.inmite.demo.validation;

import java.lang.annotation.Annotation;

import eu.inmite.android.lib.validations.form.validators.BaseValidator;

/**
* @author Tomáš Vondráček (vondracek@avast.com) on 02/07/15.
*/
public class AddressValidator extends BaseValidator<String[]> {

@Override
public boolean validate(Annotation annotation, String[] input) {
for (String addressPart : input) {
if (addressPart == null || addressPart.trim().length() == 0) {
return false;
}
}
return true;
}
}
13 changes: 13 additions & 0 deletions demo/src/main/java/eu/inmite/demo/validation/DemoActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
Expand All @@ -22,6 +24,7 @@
import eu.inmite.android.lib.dialogs.SimpleDialogFragment;
import eu.inmite.android.lib.validations.form.FormValidator;
import eu.inmite.android.lib.validations.form.annotations.DateInFuture;
import eu.inmite.android.lib.validations.form.annotations.Joined;
import eu.inmite.android.lib.validations.form.annotations.MinLength;
import eu.inmite.android.lib.validations.form.annotations.MinValue;
import eu.inmite.android.lib.validations.form.annotations.NotEmpty;
Expand Down Expand Up @@ -54,6 +57,11 @@ public class DemoActivity extends ActionBarActivity implements DatePickerDialog.
@NotEmpty(messageId = R.string.validation_type)
private Spinner mSpinner;

@Joined(value = {R.id.demo_address1, R.id.demo_address2},
validator = AddressValidator.class,
messageId = R.string.validation_address)
private EditText mEditAddress1;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Expand All @@ -62,6 +70,7 @@ public void onCreate(Bundle savedInstanceState) {
mEditName = (EditText) findViewById(R.id.demo_name);
mEditNumberOfParticipants = (EditText) findViewById(R.id.demo_participants);
mEditEmail = (EditText) findViewById(R.id.demo_email);
mEditAddress1 = (EditText) findViewById(R.id.demo_address1);
mTxtDate = (TextView) findViewById(R.id.demo_date);
mSpinner = (Spinner) findViewById(R.id.demo_spinner);

Expand Down Expand Up @@ -125,7 +134,11 @@ public boolean onOptionsItemSelected(final MenuItem item) {
}

private void validate() {
long start = SystemClock.elapsedRealtime();
final boolean isValid = FormValidator.validate(this, new SimpleErrorPopupCallback(this, true));
long time = SystemClock.elapsedRealtime() - start;
Log.d(getClass().getName(), "validation finished in [ms] " + time);

if (isValid) {
SimpleDialogFragment.createBuilder(this, getSupportFragmentManager())
.setMessage(R.string.validation_success)
Expand Down
245 changes: 140 additions & 105 deletions demo/src/main/res/layout/activity_demo.xml
Original file line number Diff line number Diff line change
@@ -1,107 +1,142 @@
<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/demo_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"
android:padding="8dp"
app:columnCount="2">


<EditText
android:id="@+id/demo_name"
android:layout_width="match_parent"
android:layout_height="@dimen/row_height"
android:hint="@string/demo_name"
android:singleLine="true"
app:layout_column="0"
app:layout_columnSpan="2"
app:layout_row="0" />

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/demo_number_of_participants"
app:layout_column="0"
app:layout_row="1" />

<EditText
android:id="@+id/demo_participants"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:hint="@string/demo_participants_hint"
android:inputType="number"
android:singleLine="true"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="1" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="@dimen/row_height"
android:text="@string/demo_date"
app:layout_column="0"
app:layout_row="2" />

<TextView
android:id="@+id/demo_date"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:background="?selectableItemBackgroundBorderless"
android:gravity="left|center_vertical"
android:singleLine="true"
android:text="@string/demo_pick_date"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="2" />

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/demo_type"
app:layout_column="0"
app:layout_row="3" />

<Spinner
android:id="@+id/demo_spinner"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:spinnerMode="dropdown"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="3" />

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/demo_email"
app:layout_column="0"
app:layout_row="4" />

<EditText
android:id="@+id/demo_email"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:hint="@string/demo_email_hint"
android:inputType="textEmailAddress"
android:singleLine="true"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="4" />

<Button
android:id="@+id/demo_ok"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@android:string/ok"
app:layout_column="0"
app:layout_columnSpan="2"
app:layout_gravity="bottom"
app:layout_row="6" />
</android.support.v7.widget.GridLayout>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.GridLayout android:id="@+id/demo_container"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:padding="16dp"
app:columnCount="2"
app:useDefaultMargins="true">


<EditText
android:id="@+id/demo_name"
android:layout_width="match_parent"
android:layout_height="@dimen/row_height"
android:hint="@string/demo_name"
android:singleLine="true"
app:layout_column="0"
app:layout_columnSpan="2"
app:layout_row="0"/>

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/demo_number_of_participants"
app:layout_column="0"
app:layout_row="1"/>

<EditText
android:id="@+id/demo_participants"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:hint="@string/demo_participants_hint"
android:inputType="number"
android:singleLine="true"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="1"/>

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="@dimen/row_height"
android:text="@string/demo_date"
app:layout_column="0"
app:layout_row="2"/>

<TextView
android:id="@+id/demo_date"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:background="?selectableItemBackgroundBorderless"
android:gravity="left|center_vertical"
android:singleLine="true"
android:text="@string/demo_pick_date"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="2"/>

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/demo_type"
app:layout_column="0"
app:layout_row="3"/>

<Spinner
android:id="@+id/demo_spinner"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:spinnerMode="dropdown"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="3"/>

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/demo_email"
app:layout_column="0"
app:layout_row="4"/>

<EditText
android:id="@+id/demo_email"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:hint="@string/demo_email_hint"
android:inputType="textEmailAddress"
android:singleLine="true"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="4"/>

<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/demo_address"
app:layout_column="0"
app:layout_row="5"/>

<EditText
android:id="@+id/demo_address1"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:hint="@string/demo_address"
android:inputType="textPostalAddress"
android:singleLine="true"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="5"/>

<EditText
android:id="@+id/demo_address2"
android:layout_width="@dimen/form_width"
android:layout_height="@dimen/row_height"
android:hint="@string/demo_address"
android:inputType="textPostalAddress"
android:singleLine="true"
app:layout_column="1"
app:layout_gravity="right"
app:layout_row="6"/>

<Button
android:id="@+id/demo_ok"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@android:string/ok"
app:layout_column="0"
app:layout_columnSpan="2"
app:layout_gravity="bottom"
app:layout_row="7"/>
</android.support.v7.widget.GridLayout>
</ScrollView>
2 changes: 2 additions & 0 deletions demo/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
<string name="validation_valid_email">Please, enter valid email address</string>
<string name="validation_date">Date must be in future</string>
<string name="validation_type">Please, select type</string>
<string name="validation_address">Fill in the address</string>
<string name="validation_success">Validation succeeded! \nThat was easy, wasn\'t it?</string>

<string name="demo_menu_live_validation_enable">Enable live validation</string>
<string name="demo_menu_live_validation_disable">Disable live validation</string>
<string name="demo_email_hint">E-mail address</string>
<string name="demo_email">Email</string>
<string name="demo_address">Address</string>
<string name="demo_type">Type</string>
<string name="demo_pick_date">Pick Date</string>
<string name="demo_date">Date</string>
Expand Down

0 comments on commit 757e72f

Please sign in to comment.