aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2017-06-14 17:01:13 -0700
committerAllan Wang <me@allanwang.ca>2017-06-14 17:01:13 -0700
commitfbbc92e4c98a30e107fb2a63887f8b6d20bffabb (patch)
treeec603d3379ddad94df084f94132ac0c739bcb4ac /app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt
parentaa01ec691ef2638da7c22bf3cbd1a9c5e213ca1f (diff)
downloadfrost-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.kt28
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) })
}
}