aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2020-11-07 21:16:07 -0800
committerGitHub <noreply@github.com>2020-11-07 21:16:07 -0800
commita6add7ed6b6a58971c5a439b81d6527d3ee196b9 (patch)
tree6de6bbd1da40fad926a15c12958e5ec808ec2367
parent8cac4ce54358f23a30a762bbb960309914507bb8 (diff)
parentbe1132c6df6ca1a664bc557dd02094b36195cc76 (diff)
downloadfrost-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.kt2
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt11
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt1
-rw-r--r--app/src/main/res/xml/frost_changelog.xml7
-rw-r--r--app/src/web/ts/context_a.ts8
-rw-r--r--app/src/web/ts/scroll_stop.ts25
-rw-r--r--app/src/web/typings/frost.d.ts4
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;