From bd96905dbfa6c1d4bde4257d61f381d4ee8e1fd0 Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Fri, 22 Dec 2017 01:51:43 -0500 Subject: Update webview components (#571) * Add volume binding * Remove key override * Add pause timers to webview --- .../frost/activities/BaseMainActivity.kt | 11 +++++++++ .../frost/activities/WebOverlayActivity.kt | 12 ++++++++++ .../com/pitchedapps/frost/views/FrostWebView.kt | 26 +++++++++++++--------- .../pitchedapps/frost/web/HeadlessHtmlExtractor.kt | 9 +++++--- .../com/pitchedapps/frost/web/LoginWebView.kt | 2 +- 5 files changed, 46 insertions(+), 14 deletions(-) (limited to 'app') diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt index 4a9cbb55..80d248bc 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt @@ -23,6 +23,7 @@ import android.view.Menu import android.view.MenuItem import android.webkit.ValueCallback import android.webkit.WebChromeClient +import android.webkit.WebView import android.widget.FrameLayout import ca.allanwang.kau.searchview.SearchItem import ca.allanwang.kau.searchview.SearchView @@ -92,6 +93,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, override var searchView: SearchView? = null private val searchViewCache = mutableMapOf>() + private lateinit var controlWebview: WebView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -108,6 +110,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, "Frost id" to Prefs.frostId) } } + controlWebview = WebView(this) setFrameContentView(Prefs.mainActivityLayout.layoutRes) setSupportActionBar(toolbar) adapter = SectionsPagerAdapter(supportFragmentManager, loadFbTabs()) @@ -333,6 +336,13 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, override fun onResume() { super.onResume() FbCookie.switchBackUser { } + controlWebview.resumeTimers() + } + + override fun onPause() { + controlWebview.pauseTimers() + L.v("Pause main web timers") + super.onPause() } override fun onStart() { @@ -345,6 +355,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, override fun onDestroy() { onDestroyBilling() + controlWebview.destroy() super.onDestroy() } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt index 0dbbacbc..5b565d96 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt @@ -208,7 +208,19 @@ open class WebOverlayActivityBase(private val forceBasicAgent: Boolean) : BaseAc toolbar.overflowIcon?.setTint(Prefs.iconColor) } + override fun onResume() { + super.onResume() + web.resumeTimers() + } + + override fun onPause() { + web.pauseTimers() + L.v("Pause overlay web timers") + super.onPause() + } + override fun onDestroy() { + web.destroy() super.onDestroy() kauSwipeOnDestroy() } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/views/FrostWebView.kt b/app/src/main/kotlin/com/pitchedapps/frost/views/FrostWebView.kt index e6e1f0e2..0d04fcd9 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/views/FrostWebView.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/views/FrostWebView.kt @@ -6,7 +6,7 @@ import android.content.Context import android.graphics.Color import android.util.AttributeSet import android.view.View -import android.view.animation.DecelerateInterpolator +import ca.allanwang.kau.utils.AnimHolder import com.pitchedapps.frost.contracts.FrostContentContainer import com.pitchedapps.frost.contracts.FrostContentCore import com.pitchedapps.frost.contracts.FrostContentParent @@ -106,23 +106,29 @@ class FrostWebView @JvmOverloads constructor( private fun scrollToTop() { flingScroll(0, 0) // stop fling - if (scrollY > 10000) { + if (scrollY > 10000) scrollTo(0, 0) - } else { - ValueAnimator.ofInt(scrollY, 0).apply { - duration = Math.min(scrollY, 500).toLong() - interpolator = DecelerateInterpolator() - addUpdateListener { scrollY = it.animatedValue as Int } - start() - } + else + smoothScrollTo(0) + } + + private fun smoothScrollTo(y: Int) { + ValueAnimator.ofInt(scrollY, y).apply { + duration = Math.min(Math.abs(scrollY - y), 500).toLong() + interpolator = AnimHolder.fastOutSlowInInterpolator(context) + addUpdateListener { scrollY = it.animatedValue as Int } + start() } } + private fun smoothScrollBy(y: Int) = smoothScrollTo(Math.max(0, scrollY + y)) + override var active: Boolean = true set(value) { if (field == value) return field = value - // todo + if (field) onResume() + else onPause() } override fun reloadTheme() { diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/HeadlessHtmlExtractor.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/HeadlessHtmlExtractor.kt index 471731dd..2c7735a4 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/HeadlessHtmlExtractor.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/HeadlessHtmlExtractor.kt @@ -29,8 +29,12 @@ import java.util.concurrent.TimeUnit fun Context.launchHeadlessHtmlExtractor(url: String, injector: InjectorContract, action: (Single>) -> Unit) { val single = Single.create> { e: SingleEmitter> -> val extractor = HeadlessHtmlExtractor(this, url, injector, e) + extractor.resumeTimers() e.setCancellable { - runOnUiThread { extractor.destroy() } + runOnUiThread { + extractor.pauseTimers() + extractor.destroy() + } e.onSuccess("" to R.string.html_extraction_cancelled) } }.subscribeOn(AndroidSchedulers.mainThread()) @@ -74,14 +78,13 @@ private class HeadlessHtmlExtractor( emitter.onSuccess((html ?: "") to -1) post { L.d("HeadlessHtmlExtractor fetched $url in $time ms") - settings.javaScriptEnabled = false - settings.blockNetworkLoads = true destroy() } } } override fun destroy() { + pauseTimers() super.destroy() L.d("HeadlessHtmlExtractor destroyed") } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/LoginWebView.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/LoginWebView.kt index 3a10ed32..f8b487a2 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/LoginWebView.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/LoginWebView.kt @@ -9,9 +9,9 @@ import android.webkit.* import ca.allanwang.kau.utils.fadeIn import ca.allanwang.kau.utils.isVisible import com.pitchedapps.frost.dbflow.CookieModel +import com.pitchedapps.frost.facebook.FB_LOGIN_URL import com.pitchedapps.frost.facebook.FB_USER_MATCHER import com.pitchedapps.frost.facebook.FbCookie -import com.pitchedapps.frost.facebook.FB_LOGIN_URL import com.pitchedapps.frost.injectors.CssHider import com.pitchedapps.frost.injectors.jsInject import com.pitchedapps.frost.utils.L -- cgit v1.2.3