diff options
author | Allan Wang <me@allanwang.ca> | 2017-06-25 14:30:49 -0700 |
---|---|---|
committer | Allan Wang <me@allanwang.ca> | 2017-06-25 14:30:49 -0700 |
commit | f35939ce42ca9244468434f93dbd705e02911623 (patch) | |
tree | f473434ce37f4844e288489452d1773c03511736 /app/src/main/kotlin/com | |
parent | e502ea8cd77357c1e9a6680d912252524f2950f0 (diff) | |
download | frost-f35939ce42ca9244468434f93dbd705e02911623.tar.gz frost-f35939ce42ca9244468434f93dbd705e02911623.tar.bz2 frost-f35939ce42ca9244468434f93dbd705e02911623.zip |
Test kau update
Diffstat (limited to 'app/src/main/kotlin/com')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/facebook/FbTab.kt | 3 | ||||
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewSearch.kt | 81 |
2 files changed, 83 insertions, 1 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbTab.kt b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbTab.kt index c91792a2..f26581df 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbTab.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/facebook/FbTab.kt @@ -29,7 +29,8 @@ enum class FbTab(@StringRes val titleId: Int, val icon: IIcon, relativeUrl: Stri SETTINGS(R.string.settings, GoogleMaterial.Icon.gmd_settings, "settings"), MENU(R.string.menu, GoogleMaterial.Icon.gmd_menu, "settings", { FrostWebViewClientMenu(it) }), NOTES(R.string.notes, CommunityMaterial.Icon.cmd_note, "notes"), - ON_THIS_DAY(R.string.on_this_day, GoogleMaterial.Icon.gmd_today, "onthisday") + ON_THIS_DAY(R.string.on_this_day, GoogleMaterial.Icon.gmd_today, "onthisday"), + SEARCH(R.string.search_menu_title, GoogleMaterial.Icon.gmd_search, "search") ; val url = "$FB_URL_BASE$relativeUrl" diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewSearch.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewSearch.kt new file mode 100644 index 00000000..0795efe2 --- /dev/null +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewSearch.kt @@ -0,0 +1,81 @@ +package com.pitchedapps.frost.web + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.support.v4.view.NestedScrollingChild +import android.util.AttributeSet +import android.view.View +import android.webkit.WebView +import ca.allanwang.kau.utils.* +import com.pitchedapps.frost.facebook.FbTab +import com.pitchedapps.frost.facebook.USER_AGENT_BASIC +import com.pitchedapps.frost.utils.Prefs +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-06-25. + * + * A bare bone search view meant solely to extract data from the web + * This should be hidden + */ +class FrostWebViewSearch (context: Context) : WebView(context) { + var baseUrl: String? = null + var baseEnum: FbTab? = null + internal var frostWebClient: FrostWebViewClient? = null + + init { + gone() + setupWebview() + } + + @SuppressLint("SetJavaScriptEnabled") + fun setupWebview(url: String, enum: FbTab? = null) { + baseUrl = url + baseEnum = enum + settings.javaScriptEnabled = true + settings.userAgentString = USER_AGENT_BASIC +// settings.domStorageEnabled = true + setLayerType(View.LAYER_TYPE_HARDWARE, null) + frostWebClient = baseEnum?.webClient?.invoke(this) ?: FrostWebViewClient(this) + webViewClient = frostWebClient + webChromeClient = FrostChromeClient(this) + addJavascriptInterface(FrostJSI(context, this), "Frost") + setBackgroundColor(Color.TRANSPARENT) + } + + fun loadUrl(url: String?, animate: Boolean) { + if (url == null) return + registerTransition(animate) + super.loadUrl(url) + } + + fun reload(animate: Boolean) { + registerTransition(animate) + super.reload() + } + + /** + * Hook onto the refresh observable for one cycle + * 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 + var loading = false + dispose = refreshObservable.subscribeOn(AndroidSchedulers.mainThread()).subscribe { + if (it) { + loading = true + if (isVisible()) fadeOut(duration = 200L) + } else if (loading) { + dispose?.dispose() + if (animate && Prefs.animate) circularReveal(offset = 150L) + else fadeIn(duration = 100L) + } + } + } + +} |