Kubwa
WesleyElliott
25
Visit GitHub RepoValidation

Kubwa

An Annotation based validation library for use with Android's DataBinding library in an MVVM architecture.

  • Quick and easily add validation rules to ViewModels by annotating the class
  • Annotation Processing to eliminate reflection and generate boilerplate validation classes

Android Arsenal Download

Usage

  1. Simply annotate your ViewModel class with the validation rules need:
@Email(errorMessage = R.string.email_error)
@Password(errorMessage = R.string.password_error, scheme = PasswordRule.Scheme.ALPHA_NUMERIC_SYMBOLS)
public class LoginViewModel extends BaseObservable {

  LoginViewModelValidator validator; // Generated when project is built

  public LoginViewModel(Context contex) {
    validator = new LoginViewModelValidator(context); // Instantiate the validator with a Context
  }
}

Note: Each validation rule (@Email, @Password, etc) requires an errorMessage String resource parameter

For a list of annotation rules, check out the Annotations

  1. Make sure your layout and ViewModel are setup for DataBinding Layout.xml:
<layout>
    <data>
        <variable name="viewModel" type="com.wesleyelliott.kubwa.LoginViewModel" />
    </data>
    <LinearLayout>
        <EditText
            ...
            android:text="@={viewModel.email}"
            app:error="@{viewModel.emailError}"/>

        <EditText
            ...
            android:text="@={viewModel.password}"
            app:error="@{viewModel.passwordError}"/>

ViewModel:

public String getEmailError() {
    return validator.getEmailErrorMessage();
}

public String getPasswordError() {
    return validator.getPasswordErrorMessage();
}
  1. Validate each rule independantly, or all together (in the same order as the annotations):
private void login() {
    // Either
    validator.validateEmail(getEmail());
    validator.validatePassword(getPassword());

    // Or
    validator.validateAll(getEmail(), getPassword());
    notifyChange();

    if (validator.isValid()) {
       // Todo: Log user in
    }
}

And thats it! notifyChange() will ensure the errors (if any) are shown on the correct EditText's

Download

Make sure your project level gradle config (build.gradle) has the jcenter repository:

buildscript {
  repositories {
    mavenCentral()
    jcenter()
   }
}

Add the kubwa-compiler and kubwa-annotations dependancies and make sure Android DataBinding is setup:

android {
  ...

  dataBinding {
        enabled = true
    }
}

dependencies {
  implementation 'com.wesleyelliott:kubwa-annotations:1.2.0'
  annotationProcessor 'com.wesleyelliott:kubwa-compiler:1.2.0'
}

License

Copyright 2016 Wesley Elliott

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Become a better Android Developer
Millions of developers are learning at MindOrks

Online Training Program

Featured Blogs

Our Team

MindOrks is Certainly one of the best online blog to stay on top of all the Android development news, coding and design patterns. Finally a blog I can count on to keep myself updated with latest and greatest things happening in Android world.

Vipul Shah
Android Developer
Microsoft

Become Pro in Android by watching videos

OUR LEARNERS WORK AT