🥄
One Library
  • 🤖onelib
  • 🏡Home
    • Overview
    • Setup Project
    • What's New
  • ☀️Fundamental
    • Basic Android
    • Data Flow
    • Dependency Injection
      • Hilt
      • Koin
  • 📿Layers
    • Data Layer
    • Domain Layer
    • Presentation Layer
  • 🪶Features
    • Views
      • Activity
      • Fragment
      • Bottom Sheet
      • Dialog
    • Adapters
      • Recycler Adapter
      • Filterable Adapter
      • Paging Adapter
      • Selectable Adapter
      • ViewPager Adapter
    • Firebase
      • One Firebase Auth
      • One Firebase Firestore
      • One Firebase Realtime
      • One Firebase Storage
    • Extension Functions
      • Any
      • Common
      • Context
      • Edittext
      • Image View
      • LiveData
      • OneMap
      • State Flow (Jetpack Compose)
      • View
    • Notification
    • One State View
    • Local Database
    • Permission
    • Validation
      • Passive Validator
      • Reactive Validator
      • Extension Validation
Powered by GitBook
On this page
  • Example Usage
  • Result
  1. Features
  2. Validation

Passive Validator

Passive Validator is one of the features contained in onelib, Passive Validator was created with the aim of handling a single input process or one that must be validated with several rules. The way Passive Validator works is by being extended to an Activity, then you can add a validation listener and what message you want to display if the validation does not match by triggering validation checks.

Example Usage

The first step is to create an Activity then edit the xml as needed. For example

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="16dp">

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/tilEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Email"
                app:boxBackgroundColor="@color/white"
                android:textColorHint="@color/colorGray">

                <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textEmailAddress"
                    android:textColorHint="@color/colorGray" />
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/tilPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Password"
                app:boxBackgroundColor="@color/white"
                android:textColorHint="@color/colorGray"
                app:passwordToggleEnabled="true">

                <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textPassword"
                    android:textColorHint="@color/colorGray" />
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/tilPhone"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Phone"
                app:boxBackgroundColor="@color/white"
                android:textColorHint="@color/colorGray">

                <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="phone"
                    android:textColorHint="@color/colorGray" />
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/tilName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Name"
                app:boxBackgroundColor="@color/white"
                android:textColorHint="@color/colorGray">

                <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textPersonName"
                    android:textColorHint="@color/colorGray" />
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/tilLongName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Long Name"
                app:boxBackgroundColor="@color/white"
                android:textColorHint="@color/colorGray">

                <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textPersonName"
                    android:textColorHint="@color/colorGray" />
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/tilNotEmpty"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Not Empty"
                app:boxBackgroundColor="@color/white"
                android:textColorHint="@color/colorGray">

                <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textColorHint="@color/colorGray" />
            </com.google.android.material.textfield.TextInputLayout>

            <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/btnValidation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:text="Validate" />
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
</LinearLayout>

Then, implement PassiveFormActivity<binding> inside the activity that was created earlier. For example

class PassiveValidationActivity : PassiveFormActivity<ActivityPassiveValidationBinding>() {

    override fun getViewBinding(): ActivityPassiveValidationBinding =
        ActivityPassiveValidationBinding.inflate(layoutInflater)


    override fun initUI() {}

    override fun initAction() {
        binding.btnValidation.onClick {
            validate()
        }
    }

    override fun initProcess() {}

    override fun initObservers() {}

    override fun onValidationSuccess() {
        // Do something when validation success
    }

    override fun onValidationFailed() {
        // Do something when validation failed
    }

    override fun setupValidation() {
        with(binding) {
            addValidation(
                Validation(
                    tilEmail,
                    listOf(
                        notEmptyRule(getString(R.string.error_field_required)),
                        emailRule(getString(R.string.error_email_invalid))
                    )
                ),
                Validation(
                    tilPassword, listOf(
                        notEmptyRule(getString(R.string.error_field_required)),
                        passwordRule(getString(R.string.error_password))
                    )
                ),
                Validation(
                    tilPhone, listOf(
                        notEmptyRule(getString(R.string.error_field_required)),
                        minMaxLengthRule(
                            getString(R.string.error_phone_number),
                            MIN_LENGTH,
                            MAX_LENGTH
                        )
                    )
                ),
                Validation(
                    tilName, listOf(
                        notEmptyRule(getString(R.string.error_field_required)),
                        alphabetOnlyRule(getString(R.string.error_alphabet))
                    )
                ),
                Validation(
                    tilLongName, listOf(
                        alphabetSpaceOnly(getString(R.string.error_field_required))
                    )
                ),
                Validation(
                    tilNotEmpty, listOf(
                        notEmptyRule(getString(R.string.error_empty))
                    )
                )
            )
        }
    }
}

Result

Last updated 11 months ago

🪶