diff options
author | Allan Wang <me@allanwang.ca> | 2017-06-16 12:21:12 -0700 |
---|---|---|
committer | Allan Wang <me@allanwang.ca> | 2017-06-16 12:21:12 -0700 |
commit | 87e7e132a060e235d434a9ef44ae0363d7ef660b (patch) | |
tree | ba78c3240c6e4c0bf4ad43692f8625bc7f964a75 /app/src/main/kotlin | |
parent | b9ea80d5b5a06d050ce2c7ca46ed597f4cb499ff (diff) | |
download | frost-87e7e132a060e235d434a9ef44ae0363d7ef660b.tar.gz frost-87e7e132a060e235d434a9ef44ae0363d7ef660b.tar.bz2 frost-87e7e132a060e235d434a9ef44ae0363d7ef660b.zip |
Add url formatter
Diffstat (limited to 'app/src/main/kotlin')
5 files changed, 28 insertions, 15 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt index 8dfceaad..0d99d67a 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt @@ -12,6 +12,7 @@ import com.pitchedapps.frost.LoginActivity import com.pitchedapps.frost.R import com.pitchedapps.frost.WebOverlayActivity import com.pitchedapps.frost.dbflow.CookieModel +import com.pitchedapps.frost.facebook.FB_URL_BASE import com.pitchedapps.frost.facebook.FbTab /** @@ -30,10 +31,23 @@ fun Activity.cookies(): ArrayList<CookieModel> { return intent?.extras?.getParcelableArrayList<CookieModel>(EXTRA_COOKIES) ?: arrayListOf() } +val String.formattedFbUrl: String + get() { + var url = this + if (url.startsWith("#!/")) url = url.substring(2) + if (url.startsWith('/')) url = FB_URL_BASE + url.substring(1) + url = url.replace("/#!/", "/") + val ref = url.indexOf("?ref") + if (ref != -1) url = url.substring(0, ref) + return url + } + fun Context.launchWebOverlay(url: String) { + val argUrl = url.formattedFbUrl + L.i("Launch web overlay: $argUrl") val intent = Intent(this, WebOverlayActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) - intent.putExtra(ARG_URL, url) + intent.putExtra(ARG_URL, argUrl) val bundle = ActivityOptionsCompat.makeCustomAnimation(this, R.anim.slide_in_right, R.anim.slide_out_right).toBundle() ContextCompat.startActivity(this, intent, bundle) } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt index f81c6a15..36193b8b 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt @@ -19,14 +19,9 @@ class FrostJSI(val context: Context, val webView: FrostWebViewCore) { val cookies: ArrayList<CookieModel> get() = (context as? MainActivity)?.cookies() ?: arrayListOf() - var lastUrl: String = "" - @JavascriptInterface fun loadUrl(url: String) { - if (url != lastUrl) { - lastUrl = url - context.launchWebOverlay(url) - } + context.launchWebOverlay(url) } @JavascriptInterface diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt index 8cd36b86..ac2af3cb 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClient.kt @@ -45,11 +45,11 @@ open class FrostWebViewClient(val webCore: FrostWebViewCore) : WebViewClient() { override fun onPageFinished(view: WebView, url: String) { super.onPageFinished(view, url) + L.i("Page finished $url") if (!url.contains(FACEBOOK_COM)) { refreshObservable.onNext(false) return } - L.i("Page finished $url") JsActions.LOGIN_CHECK.inject(view) onPageFinishedActions(url) } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClientMenu.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClientMenu.kt index 2a1a5b74..af13c459 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClientMenu.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClientMenu.kt @@ -15,7 +15,7 @@ class FrostWebViewClientMenu(webCore: FrostWebViewCore) : FrostWebViewClient(web var content: String? = null val progressObservable: Subject<Int> = webCore.progressObservable - private val contentBaseUrl = "https://touch.facebook.com/notifications" + private val contentBaseUrl = "${FB_URL_BASE}notifications" override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) @@ -38,7 +38,10 @@ class FrostWebViewClientMenu(webCore: FrostWebViewCore) : FrostWebViewClient(web jsInject(JsAssets.MENU, callback = { jsInject(JsAssets.MENU_CLICK) //menu injection must be after or we will have a loop from the click listener }) - } else if (url == contentBaseUrl) jsInject(JsAssets.MENU_CLICK) + } else if (url == contentBaseUrl) { + L.i("Inject content") + jsInject(JsAssets.MENU_CLICK) + } } override fun emit(flag: Int) { diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt index 5ba312f4..b6353252 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewCore.kt @@ -22,6 +22,7 @@ import io.reactivex.Scheduler import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.subjects.BehaviorSubject +import io.reactivex.subjects.PublishSubject /** * Created by Allan Wang on 2017-05-29. @@ -36,8 +37,8 @@ class FrostWebViewCore @JvmOverloads constructor( private val scrollOffset = IntArray(2) private val scrollConsumed = IntArray(2) private var nestedOffsetY: Int = 0 - val progressObservable: BehaviorSubject<Int> // Keeps track of every progress change - val refreshObservable: BehaviorSubject<Boolean> // Only emits on page loads + val progressObservable: PublishSubject<Int> // Keeps track of every progress change + val refreshObservable: PublishSubject<Boolean> // Only emits on page loads val titleObservable: BehaviorSubject<String> // Only emits on different non http titles var baseUrl: String? = null @@ -46,8 +47,8 @@ class FrostWebViewCore @JvmOverloads constructor( init { isNestedScrollingEnabled = true - progressObservable = BehaviorSubject.create<Int>() - refreshObservable = BehaviorSubject.create<Boolean>() + progressObservable = PublishSubject.create<Int>() + refreshObservable = PublishSubject.create<Boolean>() titleObservable = BehaviorSubject.create<String>() } @@ -79,8 +80,8 @@ class FrostWebViewCore @JvmOverloads constructor( /** * Hook onto the refresh observable for one cycle - * Note that this is a behaviour subject so the first 'false' emission should be ignored * Animate toggles between the fancy ripple and the basic fade + * The cycle only starts on the first load since there may have been another process when this is registered */ fun registerTransition(animate: Boolean) { var dispose: Disposable? = null |