diff --git a/app/src/main/java/com/afollestad/nocknock/ui/addsite/AddSiteActivity.kt b/app/src/main/java/com/afollestad/nocknock/ui/addsite/AddSiteActivity.kt index 9713b99..e15a29f 100644 --- a/app/src/main/java/com/afollestad/nocknock/ui/addsite/AddSiteActivity.kt +++ b/app/src/main/java/com/afollestad/nocknock/ui/addsite/AddSiteActivity.kt @@ -117,26 +117,6 @@ class AddSiteActivity : DarkModeSwitchActivity() { viewModel.onValidationSearchTermVisibility() .toViewVisibility(this, responseValidationSearchTerm) - // Validation script - scriptInputLayout.attach( - codeData = viewModel.validationScript, - visibility = viewModel.onValidationScriptVisibility(), - form = validationForm - ) - - // Check interval - checkIntervalLayout.attach( - valueData = viewModel.checkIntervalValue, - multiplierData = viewModel.checkIntervalUnit, - form = validationForm - ) - - // Retry Policy - retryPolicyLayout.attach( - timesData = viewModel.retryPolicyTimes, - minutesData = viewModel.retryPolicyMinutes - ) - // SSL certificate sslCertificateInput.onTextChanged { viewModel.certificateUri.value = it } viewModel.certificateUri.distinct() @@ -198,7 +178,7 @@ class AddSiteActivity : DarkModeSwitchActivity() { isNotEmpty().description(R.string.please_enter_search_term) } } - input(sslCertificateInput, name = "Certificate Path") { + input(sslCertificateInput, name = "Certificate Path", optional = true) { isUri().hasScheme("file", "content") .that { it.host != null } .description(R.string.please_enter_validCertUri) @@ -210,6 +190,27 @@ class AddSiteActivity : DarkModeSwitchActivity() { } } } + + // Validation script + scriptInputLayout.attach( + codeData = viewModel.validationScript, + visibility = viewModel.onValidationScriptVisibility(), + form = validationForm + ) + + // Check interval + checkIntervalLayout.attach( + valueData = viewModel.checkIntervalValue, + multiplierData = viewModel.checkIntervalUnit, + form = validationForm + ) + + // Retry Policy + retryPolicyLayout.attach( + timesData = viewModel.retryPolicyTimes, + minutesData = viewModel.retryPolicyMinutes, + form = validationForm + ) } override fun onResume() { diff --git a/app/src/main/java/com/afollestad/nocknock/ui/viewsite/ViewSiteActivity.kt b/app/src/main/java/com/afollestad/nocknock/ui/viewsite/ViewSiteActivity.kt index f5f4dcc..6d131ad 100644 --- a/app/src/main/java/com/afollestad/nocknock/ui/viewsite/ViewSiteActivity.kt +++ b/app/src/main/java/com/afollestad/nocknock/ui/viewsite/ViewSiteActivity.kt @@ -134,26 +134,6 @@ class ViewSiteActivity : DarkModeSwitchActivity() { viewModel.onValidationSearchTermVisibility() .toViewVisibility(this, responseValidationSearchTerm) - // Validation script - scriptInputLayout.attach( - codeData = viewModel.validationScript, - visibility = viewModel.onValidationScriptVisibility(), - form = validationForm - ) - - // Check interval - checkIntervalLayout.attach( - valueData = viewModel.checkIntervalValue, - multiplierData = viewModel.checkIntervalUnit, - form = validationForm - ) - - // Retry Policy - retryPolicyLayout.attach( - timesData = viewModel.retryPolicyTimes, - minutesData = viewModel.retryPolicyMinutes - ) - // SSL certificate sslCertificateInput.onTextChanged { viewModel.certificateUri.value = it } viewModel.certificateUri.distinct() @@ -240,16 +220,16 @@ class ViewSiteActivity : DarkModeSwitchActivity() { isNotEmpty().description(R.string.please_enter_url) isUrl().description(R.string.please_enter_valid_url) } - input(responseTimeoutInput, name = "Timeout", optional = true) { - isNumber().greaterThan(0) - .description(R.string.please_enter_networkTimeout) - } input(responseValidationSearchTerm, name = "Search term") { conditional(responseValidationSearchTerm.isVisibleCondition()) { isNotEmpty().description(R.string.please_enter_search_term) } } - input(sslCertificateInput, name = "Certificate Path") { + input(responseTimeoutInput, name = "Timeout", optional = true) { + isNumber().greaterThan(0) + .description(R.string.please_enter_networkTimeout) + } + input(sslCertificateInput, name = "Certificate Path", optional = true) { isUri().hasScheme("file", "content") .that { it.host != null } .description(R.string.please_enter_validCertUri) @@ -258,6 +238,27 @@ class ViewSiteActivity : DarkModeSwitchActivity() { viewModel.commit { finish() } } } + + // Validation script + scriptInputLayout.attach( + codeData = viewModel.validationScript, + visibility = viewModel.onValidationScriptVisibility(), + form = validationForm + ) + + // Check interval + checkIntervalLayout.attach( + valueData = viewModel.checkIntervalValue, + multiplierData = viewModel.checkIntervalUnit, + form = validationForm + ) + + // Retry Policy + retryPolicyLayout.attach( + timesData = viewModel.retryPolicyTimes, + minutesData = viewModel.retryPolicyMinutes, + form = validationForm + ) } override fun onResume() { diff --git a/viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents/retrypolicy/RetryPolicyLayout.kt b/viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents/retrypolicy/RetryPolicyLayout.kt index 95e84d0..5a9375d 100644 --- a/viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents/retrypolicy/RetryPolicyLayout.kt +++ b/viewcomponents/src/main/java/com/afollestad/nocknock/viewcomponents/retrypolicy/RetryPolicyLayout.kt @@ -24,6 +24,7 @@ import com.afollestad.nocknock.viewcomponents.R import com.afollestad.nocknock.viewcomponents.ext.asSafeInt import com.afollestad.nocknock.viewcomponents.livedata.attachLiveData import com.afollestad.nocknock.viewcomponents.livedata.lifecycleOwner +import com.afollestad.vvalidator.form.Form import kotlinx.android.synthetic.main.retry_policy_layout.view.minutes import kotlinx.android.synthetic.main.retry_policy_layout.view.times import kotlinx.android.synthetic.main.retry_policy_layout.view.retry_policy_desc as description @@ -41,7 +42,8 @@ class RetryPolicyLayout( fun attach( timesData: MutableLiveData, - minutesData: MutableLiveData + minutesData: MutableLiveData, + form: Form ) { times.attachLiveData(lifecycleOwner(), timesData) minutes.attachLiveData(lifecycleOwner(), minutesData) @@ -50,6 +52,13 @@ class RetryPolicyLayout( minutes.onTextChanged { invalidateDescriptionText() } invalidateDescriptionText() + + form.input(times, optional = true) { + isNumber().greaterThan(0) + } + form.input(minutes, optional = true) { + isNumber().greaterThan(0) + } } private fun invalidateDescriptionText() {