diff options
author | Allan Wang <me@allanwang.ca> | 2017-06-14 17:01:13 -0700 |
---|---|---|
committer | Allan Wang <me@allanwang.ca> | 2017-06-14 17:01:13 -0700 |
commit | fbbc92e4c98a30e107fb2a63887f8b6d20bffabb (patch) | |
tree | ec603d3379ddad94df084f94132ac0c739bcb4ac /app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt | |
parent | aa01ec691ef2638da7c22bf3cbd1a9c5e213ca1f (diff) | |
download | frost-fbbc92e4c98a30e107fb2a63887f8b6d20bffabb.tar.gz frost-fbbc92e4c98a30e107fb2a63887f8b6d20bffabb.tar.bz2 frost-fbbc92e4c98a30e107fb2a63887f8b6d20bffabb.zip |
Update themes and started theme settings
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 | 28 |
1 files changed, 26 insertions, 2 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 14e0606b..0000ecf1 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt @@ -1,6 +1,11 @@ package com.pitchedapps.frost.injectors import android.webkit.WebView +import com.pitchedapps.frost.facebook.FbCookie +import com.pitchedapps.frost.utils.L +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.subjects.SingleSubject class JsBuilder { private val css = StringBuilder() @@ -30,8 +35,27 @@ class JsBuilder { } } -class JsInjector(val function: String) { - fun inject(webView: WebView, callback: ((String) -> Unit)? = null) { +interface InjectorContract { + fun inject(webView: WebView) = inject(webView, null) + fun inject(webView: WebView, callback: ((String) -> Unit)?) +} + +/** + * Helper method to inject multiple functions simultaneously with a single callback + */ +fun WebView.jsInject(vararg injectors: InjectorContract, callback: ((Array<String>) -> Unit)) { + val observables = Array(injectors.size, { SingleSubject.create<String>() }) + Observable.zip<String, Array<String>>(observables.map { it.toObservable() }, { it.map { it.toString() }.toTypedArray() }).subscribeOn(AndroidSchedulers.mainThread()).subscribe({ + callback.invoke(it) + }) + (0 until injectors.size).asSequence().forEach { + i -> + injectors[i].inject(this, { observables[i].onSuccess(it) }) + } +} + +class JsInjector(val function: String) : InjectorContract { + override fun inject(webView: WebView, callback: ((String) -> Unit)?) { webView.evaluateJavascript(function, { value -> callback?.invoke(value) }) } } |