diff --git a/kotlin-extensions/src/main/java/ru/touchin/extensions/TypedArray.kt b/kotlin-extensions/src/main/java/ru/touchin/extensions/TypedArray.kt index 752368a..6b013cb 100644 --- a/kotlin-extensions/src/main/java/ru/touchin/extensions/TypedArray.kt +++ b/kotlin-extensions/src/main/java/ru/touchin/extensions/TypedArray.kt @@ -3,10 +3,10 @@ package ru.touchin.extensions import android.content.res.TypedArray import androidx.annotation.StyleableRes -private const val DEFAULT_VALUE = -1 +private const val NOT_FOUND_VALUE = -1 -fun TypedArray.getResourceIdOrNull(@StyleableRes index: Int) = getResourceId(index, DEFAULT_VALUE) - .takeIf { it != DEFAULT_VALUE } +fun TypedArray.getResourceIdOrNull(@StyleableRes index: Int) = getResourceId(index, NOT_FOUND_VALUE) + .takeIf { it != NOT_FOUND_VALUE } -fun TypedArray.getColorOrNull(@StyleableRes index: Int) = getColor(index, DEFAULT_VALUE) - .takeIf { it != DEFAULT_VALUE } +fun TypedArray.getColorOrNull(@StyleableRes index: Int) = getColor(index, NOT_FOUND_VALUE) + .takeIf { it != NOT_FOUND_VALUE } diff --git a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebView.kt b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebView.kt index fe93454..0d94a58 100644 --- a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebView.kt +++ b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebView.kt @@ -55,16 +55,16 @@ open class BaseWebView @JvmOverloads constructor( } } - override fun onStateChanged(newState: WebViewLoadingState) { + override fun onStateChanged(newState: WebViewState) { when { - newState == WebViewLoadingState.LOADED -> { + newState == WebViewState.SUCCESS -> { binding.pullToRefresh.isRefreshing = false showChild(R.id.pull_to_refresh) } - newState == WebViewLoadingState.LOADING && !binding.pullToRefresh.isRefreshing -> { + newState == WebViewState.LOADING && !binding.pullToRefresh.isRefreshing -> { showChild(if (isCircleProgressBar) R.id.progress_bar else R.id.linear_progress_bar) } - newState == WebViewLoadingState.ERROR -> { + newState == WebViewState.ERROR -> { showChild(R.id.error_layout) } } @@ -186,7 +186,7 @@ open class BaseWebView @JvmOverloads constructor( isCircleProgressBar = getBoolean(R.styleable.BaseWebView_isCircleProgressBar, true) isPullToRefreshEnabled = getBoolean(R.styleable.BaseWebView_isPullToRefreshEnabled, false) - onStateChanged(WebViewLoadingState.LOADING) + onStateChanged(WebViewState.LOADING) } } diff --git a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebViewClient.kt b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebViewClient.kt index 2cdb949..b3fccae 100644 --- a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebViewClient.kt +++ b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebViewClient.kt @@ -29,7 +29,7 @@ open class BaseWebViewClient( override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) isError = false - callback.onStateChanged(WebViewLoadingState.LOADING) + callback.onStateChanged(WebViewState.LOADING) Looper.myLooper()?.let { looper -> val handler = Handler(looper) @@ -73,7 +73,7 @@ open class BaseWebViewClient( if (isSslPinningEnable) { super.onReceivedSslError(view, handler, error) isError = true - callback.onStateChanged(WebViewLoadingState.ERROR) + callback.onStateChanged(WebViewState.ERROR) } else { handler.proceed() } @@ -88,7 +88,7 @@ open class BaseWebViewClient( } private fun pageFinished() { - callback.onStateChanged(if (isError) WebViewLoadingState.ERROR else WebViewLoadingState.LOADED) + callback.onStateChanged(if (isError) WebViewState.ERROR else WebViewState.SUCCESS) } private fun String?.processCookies(): Map { diff --git a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewCallback.kt b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewCallback.kt index 9f5df58..3c8ce42 100644 --- a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewCallback.kt +++ b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewCallback.kt @@ -5,7 +5,7 @@ import android.webkit.WebView interface WebViewCallback { - fun onStateChanged(newState: WebViewLoadingState) + fun onStateChanged(newState: WebViewState) fun onOverrideUrlLoading(url: String?): Boolean @@ -27,9 +27,3 @@ interface WebViewCallback { fun onProgressChanged(progress: Int) = Unit } - -enum class WebViewLoadingState { - LOADING, - ERROR, - LOADED -} diff --git a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewState.kt b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewState.kt new file mode 100644 index 0000000..c9ba641 --- /dev/null +++ b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewState.kt @@ -0,0 +1,7 @@ +package ru.touchin.roboswag.webview.web_view + +enum class WebViewState { + LOADING, + SUCCESS, + ERROR +} diff --git a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/redirection/RedirectionController.kt b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/redirection/RedirectionController.kt index fce22ce..e573bc3 100644 --- a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/redirection/RedirectionController.kt +++ b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/redirection/RedirectionController.kt @@ -11,7 +11,7 @@ import java.net.URL * * webView.redirectionController = RedirectionController( * CompositeCondition(ByHost("www.petshop.ru") + ByPath("catalog")), - * ByPredicate { url -> checkUrl(url) } + * RedirectionCondition { url -> checkUrl(url) } * ) */ class RedirectionController(private val conditions: List = emptyList()) { @@ -29,36 +29,32 @@ class RedirectionController(private val conditions: List = /** * Class with base redirection conditions */ -sealed class RedirectionCondition { +fun interface RedirectionCondition { + + fun shouldRedirect(url: URL): Boolean operator fun plus(other: RedirectionCondition) = listOf(this, other) - abstract fun shouldRedirect(url: URL): Boolean - - class ByRegex(private val regex: Regex) : RedirectionCondition() { + class ByRegex(private val regex: Regex) : RedirectionCondition { override fun shouldRedirect(url: URL) = url.toString().matches(regex) } - class ByHost(private val host: String) : RedirectionCondition() { + class ByHost(private val host: String) : RedirectionCondition { override fun shouldRedirect(url: URL) = url.host == host } - class ByPath(private val path: String) : RedirectionCondition() { + class ByPath(private val path: String) : RedirectionCondition { override fun shouldRedirect(url: URL) = path in url.path } - class ByQuery(private val query: String) : RedirectionCondition() { + class ByQuery(private val query: String) : RedirectionCondition { override fun shouldRedirect(url: URL) = query in url.query } - class ByPredicate(private val predicate: (URL) -> Boolean) : RedirectionCondition() { - override fun shouldRedirect(url: URL) = predicate.invoke(url) - } - /** * All of the conditions should be matched to perform redirect */ - class CompositeCondition(private val conditions: List) : RedirectionCondition() { + class CompositeCondition(private val conditions: List) : RedirectionCondition { override fun shouldRedirect(url: URL): Boolean = conditions.all { it.shouldRedirect(url) } } }