diff options
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt | 43 |
1 files changed, 7 insertions, 36 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt index 8ae3a2f4..00c7bcfc 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt @@ -17,12 +17,7 @@ package com.pitchedapps.frost.injectors import android.webkit.WebView -import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.web.FrostWebViewClient -import io.reactivex.Single -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.Disposable -import io.reactivex.subjects.SingleSubject import org.apache.commons.text.StringEscapeUtils import java.util.Locale @@ -81,8 +76,7 @@ class JsBuilder { * Contract for all injectors to allow it to interact properly with a webview */ interface InjectorContract { - fun inject(webView: WebView) = inject(webView, null) - fun inject(webView: WebView, callback: (() -> Unit)?) + fun inject(webView: WebView) /** * Toggle the injector (usually through Prefs * If false, will fallback to an empty action @@ -93,41 +87,18 @@ interface InjectorContract { /** * Helper method to inject multiple functions simultaneously with a single callback */ -fun WebView.jsInject(vararg injectors: InjectorContract, callback: ((Int) -> Unit)? = null): Disposable? { - val validInjectors = injectors.filter { it != JsActions.EMPTY } - if (validInjectors.isEmpty()) { - callback?.invoke(0) - return null +fun WebView.jsInject(vararg injectors: InjectorContract) { + injectors.filter { it != JsActions.EMPTY }.forEach { + it.inject(this) } - L.d { "Injecting ${validInjectors.size} items" } - if (callback == null) { - validInjectors.forEach { it.inject(this) } - return null - } - val observables = Array(validInjectors.size) { SingleSubject.create<Unit>() } - val disposable = Single.zip<Unit, Int>(observables.asList()) { it.size } - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { res, _ -> - callback(res) - } - (0 until validInjectors.size).forEach { i -> - validInjectors[i].inject(this) { - observables[i].onSuccess(Unit) - } - } - return disposable } -fun FrostWebViewClient.jsInject( - vararg injectors: InjectorContract, - callback: ((Int) -> Unit)? = null -) = web.jsInject(*injectors, callback = callback) +fun FrostWebViewClient.jsInject(vararg injectors: InjectorContract) = web.jsInject(*injectors) /** * Wrapper class to convert a function into an injector */ class JsInjector(val function: String) : InjectorContract { - override fun inject(webView: WebView, callback: (() -> Unit)?) { - webView.evaluateJavascript(function) { callback?.invoke() } - } + override fun inject(webView: WebView) = + webView.evaluateJavascript(function, null) } |