aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt
diff options
context:
space:
mode:
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.kt43
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)
}