From a933427f550c3aac82d1907bbe2879432a383e34 Mon Sep 17 00:00:00 2001 From: konifar Date: Sat, 20 Jan 2018 00:23:48 +0900 Subject: [PATCH] Created other sample --- .../java/co/kyash/vtl/example/MainActivity.kt | 31 +++++++- example/src/main/res/drawable/btn_accent.xml | 5 ++ example/src/main/res/layout/activity_main.xml | 71 +++++++++++++++++-- example/src/main/res/values/strings.xml | 3 + example/src/main/res/values/themes.xml | 5 ++ .../kyash/vtl/ValidatableTextInputLayout.kt | 8 +-- .../main/java/co/kyash/vtl/ValidatableView.kt | 3 + 7 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 example/src/main/res/drawable/btn_accent.xml diff --git a/example/src/main/java/co/kyash/vtl/example/MainActivity.kt b/example/src/main/java/co/kyash/vtl/example/MainActivity.kt index 68da110..29c2be6 100644 --- a/example/src/main/java/co/kyash/vtl/example/MainActivity.kt +++ b/example/src/main/java/co/kyash/vtl/example/MainActivity.kt @@ -19,6 +19,7 @@ import com.facebook.stetho.okhttp3.StethoInterceptor import com.squareup.moshi.Moshi import io.fabric.sdk.android.Fabric import io.reactivex.Completable +import io.reactivex.Flowable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.schedulers.Schedulers @@ -30,14 +31,14 @@ import retrofit2.converter.moshi.MoshiConverterFactory class MainActivity : AppCompatActivity() { - private val binding: ActivityMainBinding by lazy { - DataBindingUtil.setContentView(this, R.layout.activity_main) - } + private lateinit var binding: ActivityMainBinding private val validatableViewsForTriggerTextChanged: ArrayList = ArrayList() private val validatableViewsForTriggerFocusChanged: ArrayList = ArrayList() + private val validatableViewsForButtonEnable: ArrayList = ArrayList() + private val compositeDisposable = CompositeDisposable() private val api = Retrofit.Builder() @@ -52,13 +53,17 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) Fabric.with(this, Crashlytics()) + binding = DataBindingUtil.setContentView(this, R.layout.activity_main) + initValidators() binding.submit.setOnClickListener(this::onSubmitClick) binding.submit2.setOnClickListener(this::onSubmit2Click) + binding.submit3.setOnClickListener(this::onSubmit3Click) } private fun initValidators() { + // Example 1 validatableViewsForTriggerTextChanged.addAll(arrayOf( binding.firstName.register(RequiredValidator(getString(R.string.validation_error_required))), binding.lastName.register(RequiredValidator(getString(R.string.validation_error_required))), @@ -67,13 +72,29 @@ class MainActivity : AppCompatActivity() { binding.asciiOnly.register(AsciiOnlyValidator(getString(R.string.validation_error_ascii_only))) )) + // Example 2 validatableViewsForTriggerFocusChanged.addAll(arrayOf( binding.email2.register(EmailValidator(getString(R.string.validation_error_email))) )) + // Example 3 binding.colors.register(MaterialDesignColorsValidator(api, this)) + + // Example 4 + validatableViewsForButtonEnable.addAll(arrayOf( + binding.firstName2.register(RequiredValidator(getString(R.string.validation_error_required))), + binding.lastName2.register(RequiredValidator(getString(R.string.validation_error_required))) + )) + val validations: List> = validatableViewsForButtonEnable.flatMap { it.validationFlowables } + Flowable.zip(validations) { Any() } + .subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .doOnError({ binding.submit3.isEnabled = false }) + .retry() // non-terminated stream + .subscribe({ binding.submit3.isEnabled = true }, { }) } + private fun onSubmitClick(@Suppress("UNUSED_PARAMETER") view: View) { val validations: List = validatableViewsForTriggerTextChanged.map { it.validateAsCompletable() } validate(validations) @@ -84,6 +105,10 @@ class MainActivity : AppCompatActivity() { validate(validations) } + private fun onSubmit3Click(@Suppress("UNUSED_PARAMETER") view: View) { + Toast.makeText(this, R.string.validation_success, Toast.LENGTH_SHORT).show() + } + private fun validate(validations: List) { compositeDisposable.clear() diff --git a/example/src/main/res/drawable/btn_accent.xml b/example/src/main/res/drawable/btn_accent.xml new file mode 100644 index 0000000..4afc65f --- /dev/null +++ b/example/src/main/res/drawable/btn_accent.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/example/src/main/res/layout/activity_main.xml b/example/src/main/res/layout/activity_main.xml index bf8aa69..e645b30 100644 --- a/example/src/main/res/layout/activity_main.xml +++ b/example/src/main/res/layout/activity_main.xml @@ -120,9 +120,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/space_16dp" - android:background="@color/accent" android:text="@string/submit" - android:textColor="@color/white" /> + android:theme="@style/AccentButton" /> @@ -167,9 +166,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/space_16dp" - android:background="@color/accent" android:text="@string/submit" - android:textColor="@color/white" /> + android:theme="@style/AccentButton" /> @@ -219,6 +217,71 @@ + + + + + + + + + + + + + + + + + + + + + + +