diff options
author | Allan Wang <me@allanwang.ca> | 2020-11-07 21:16:07 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-07 21:16:07 -0800 |
commit | a6add7ed6b6a58971c5a439b81d6527d3ee196b9 (patch) | |
tree | 6de6bbd1da40fad926a15c12958e5ec808ec2367 | |
parent | 8cac4ce54358f23a30a762bbb960309914507bb8 (diff) | |
parent | be1132c6df6ca1a664bc557dd02094b36195cc76 (diff) | |
download | frost-a6add7ed6b6a58971c5a439b81d6527d3ee196b9.tar.gz frost-a6add7ed6b6a58971c5a439b81d6527d3ee196b9.tar.bz2 frost-a6add7ed6b6a58971c5a439b81d6527d3ee196b9.zip |
Merge pull request #1729 from AllanWang/feature-scrolling-aware
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt | 2 | ||||
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt | 11 | ||||
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt | 1 | ||||
-rw-r--r-- | app/src/main/res/xml/frost_changelog.xml | 7 | ||||
-rw-r--r-- | app/src/web/ts/context_a.ts | 8 | ||||
-rw-r--r-- | app/src/web/ts/scroll_stop.ts | 25 | ||||
-rw-r--r-- | app/src/web/typings/frost.d.ts | 4 |
7 files changed, 57 insertions, 1 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt index b629fb91..55eb198e 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt @@ -35,7 +35,7 @@ import kotlinx.coroutines.withContext */ enum class JsAssets(private val singleLoad: Boolean = true) : InjectorContract { MENU, CLICK_A, CONTEXT_A, MEDIA, HEADER_BADGES, TEXTAREA_LISTENER, NOTIF_MSG, - DOCUMENT_WATCHER, HORIZONTAL_SCROLLING, AUTO_RESIZE_TEXTAREA(singleLoad = false) + DOCUMENT_WATCHER, HORIZONTAL_SCROLLING, AUTO_RESIZE_TEXTAREA(singleLoad = false), SCROLL_STOP, ; @VisibleForTesting 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 e17ef99e..40a048af 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt @@ -161,4 +161,15 @@ class FrostJSI(val web: FrostWebView) { activity?.contentBinding?.viewpager?.enableSwipe = enable (context as? WebOverlayActivityBase)?.swipeBack?.disallowIntercept = !enable } + + private var isScrolling = false + + @JavascriptInterface + fun setScrolling(scrolling: Boolean) { + L.v { "Scrolling $scrolling" } + this.isScrolling = scrolling + } + + @JavascriptInterface + fun isScrolling(): Boolean = isScrolling } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt index 62115a5a..324af69b 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt @@ -125,6 +125,7 @@ open class FrostWebViewClient(val web: FrostWebView) : BaseWebViewClient() { JsAssets.CLICK_A, JsAssets.CONTEXT_A, JsAssets.MEDIA, + JsAssets.SCROLL_STOP, prefs = prefs ) } diff --git a/app/src/main/res/xml/frost_changelog.xml b/app/src/main/res/xml/frost_changelog.xml index 654f4a72..6a526ccb 100644 --- a/app/src/main/res/xml/frost_changelog.xml +++ b/app/src/main/res/xml/frost_changelog.xml @@ -6,6 +6,13 @@ <item text="" /> --> + <version title="v2.4.7" /> + <item text="Fix theme not always sticking on refresh" /> + <item text="Disable long press menu from appearing immediately after scrolling" /> + <item text="" /> + <item text="" /> + <item text="" /> + <version title="v2.4.6" /> <item text="Add option to hide likes and action bar in newsfeed" /> <item text="Fix textbox scroll position when typing multiple lines" /> diff --git a/app/src/web/ts/context_a.ts b/app/src/web/ts/context_a.ts index 9faa1e94..ad81279e 100644 --- a/app/src/web/ts/context_a.ts +++ b/app/src/web/ts/context_a.ts @@ -110,6 +110,14 @@ Frost.longClick(true); longClick = true; + /** + * Don't handle context events while scrolling + */ + if (Frost.isScrolling()) { + console.log("Skip from scrolling"); + return; + } + /* * Commonality; check for valid target */ diff --git a/app/src/web/ts/scroll_stop.ts b/app/src/web/ts/scroll_stop.ts new file mode 100644 index 00000000..1ec6d30b --- /dev/null +++ b/app/src/web/ts/scroll_stop.ts @@ -0,0 +1,25 @@ +// Listen when scrolling events stop +(function () { + let scrollTimeout: number | undefined = undefined; + let scrolling: boolean = false; + + window.addEventListener('scroll', function (event) { + + if (!scrolling) { + Frost.setScrolling(true); + scrolling = true; + } + + window.clearTimeout(scrollTimeout); + + scrollTimeout = setTimeout(function () { + if (scrolling) { + Frost.setScrolling(false); + scrolling = false; + } + }, 600); + // For our specific use case, we want to release other features pretty far after scrolling stops + // For general scrolling use cases, the delta can be much smaller + // My assumption for context menus is that the long press is 500ms + }, false); +}).call(undefined);
\ No newline at end of file diff --git a/app/src/web/typings/frost.d.ts b/app/src/web/typings/frost.d.ts index ae7c97ab..9f77ce9e 100644 --- a/app/src/web/typings/frost.d.ts +++ b/app/src/web/typings/frost.d.ts @@ -24,6 +24,10 @@ declare interface FrostJSI { handleHeader(html: string | null) allowHorizontalScrolling(enable: boolean) + + setScrolling(scrolling: boolean) + + isScrolling(): boolean } declare var Frost: FrostJSI; |