From b521460335d2b356aa06d0108e09c000c6d67548 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Tue, 20 Aug 2024 12:08:47 +0300 Subject: [PATCH] Split url and domain validations #1043 --- .../utils/validation/DomainValidator.kt | 24 +++++++------------ .../settings/utils/validation/UrlValidator.kt | 24 +++++++++++++++++++ .../kotatsu/sync/ui/SyncHostDialogFragment.kt | 4 ++-- app/src/main/res/values/strings.xml | 3 ++- 4 files changed, 37 insertions(+), 18 deletions(-) create mode 100644 app/src/main/kotlin/org/koitharu/kotatsu/settings/utils/validation/UrlValidator.kt diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/settings/utils/validation/DomainValidator.kt b/app/src/main/kotlin/org/koitharu/kotatsu/settings/utils/validation/DomainValidator.kt index 507cf1850..c596a2321 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/settings/utils/validation/DomainValidator.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/settings/utils/validation/DomainValidator.kt @@ -1,6 +1,5 @@ package org.koitharu.kotatsu.settings.utils.validation -import android.webkit.URLUtil import okhttp3.HttpUrl import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.util.EditTextValidator @@ -21,20 +20,15 @@ class DomainValidator : EditTextValidator() { companion object { - fun isValidDomain(value: String): Boolean { - if ( ! URLUtil.isValidUrl(value) ) { - return runCatching { - require(value.isNotEmpty()) - val parts = value.split(':') - require(parts.size <= 2) - val urlBuilder = HttpUrl.Builder() - urlBuilder.host(parts.first()) - if (parts.size == 2) { - urlBuilder.port(parts[1].toInt()) - } - }.isSuccess + fun isValidDomain(value: String): Boolean = runCatching { + require(value.isNotEmpty()) + val parts = value.split(':') + require(parts.size <= 2) + val urlBuilder = HttpUrl.Builder() + urlBuilder.host(parts.first()) + if (parts.size == 2) { + urlBuilder.port(parts[1].toInt()) } - return true - } + }.isSuccess } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/settings/utils/validation/UrlValidator.kt b/app/src/main/kotlin/org/koitharu/kotatsu/settings/utils/validation/UrlValidator.kt new file mode 100644 index 000000000..448babeea --- /dev/null +++ b/app/src/main/kotlin/org/koitharu/kotatsu/settings/utils/validation/UrlValidator.kt @@ -0,0 +1,24 @@ +package org.koitharu.kotatsu.settings.utils.validation + +import android.webkit.URLUtil +import org.koitharu.kotatsu.R +import org.koitharu.kotatsu.core.util.EditTextValidator + +class UrlValidator : EditTextValidator() { + + override fun validate(text: String): ValidationResult { + val trimmed = text.trim() + if (trimmed.isEmpty()) { + return ValidationResult.Success + } + return if (!isValidUrl(trimmed)) { + ValidationResult.Failed(context.getString(R.string.invalid_server_address_message)) + } else { + ValidationResult.Success + } + } + + private fun isValidUrl(str: String): Boolean { + return URLUtil.isValidUrl(str) || DomainValidator.isValidDomain(str) + } +} diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/sync/ui/SyncHostDialogFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/sync/ui/SyncHostDialogFragment.kt index e9690edc0..3fa3b4506 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/sync/ui/SyncHostDialogFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/sync/ui/SyncHostDialogFragment.kt @@ -16,7 +16,7 @@ import org.koitharu.kotatsu.core.ui.AlertDialogFragment import org.koitharu.kotatsu.core.util.ext.ifNullOrEmpty import org.koitharu.kotatsu.core.util.ext.withArgs import org.koitharu.kotatsu.databinding.PreferenceDialogAutocompletetextviewBinding -import org.koitharu.kotatsu.settings.utils.validation.DomainValidator +import org.koitharu.kotatsu.settings.utils.validation.UrlValidator import org.koitharu.kotatsu.sync.data.SyncSettings import javax.inject.Inject @@ -58,7 +58,7 @@ class SyncHostDialogFragment : AlertDialogFragmentManga marked as NSFW will never be added to the history and your progress will not be saved Can help in case of some issues. All authorizations will be invalidated Show all - Invalid server address + Invalid domain + Invalid server address Select range Clear all history Last 2 hours