diff --git a/android/app/build.gradle b/android/app/build.gradle index bc3817dd6..8679bbc9e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -14,8 +14,8 @@ android { // - Meta Wearables DAT SDK (mwdat-*) targets API 34+ minSdk 34 targetSdk 34 - versionCode 20 - versionName "1.6.0" + versionCode 21 + versionName "1.6.1" } // VERSION_NAME is exposed via BuildConfig so the WebView UA + appVersion() diff --git a/android/app/src/main/java/press/maestro/crow/MainActivity.java b/android/app/src/main/java/press/maestro/crow/MainActivity.java index 71a9c0588..d25290931 100644 --- a/android/app/src/main/java/press/maestro/crow/MainActivity.java +++ b/android/app/src/main/java/press/maestro/crow/MainActivity.java @@ -216,8 +216,19 @@ protected void onCreate(Bundle savedInstanceState) { return false; } lastScrollProbeMs = now; + // First the scroll containers under the finger, wherever they are on the page (the + // side menu is outside .content-body: a downward swipe in a scrolled menu used to + // pull to refresh instead of scrolling it back up). Touch coordinates are device + // pixels; elementFromPoint takes CSS pixels. webView.evaluateJavascript( - "(function() {" + + "(function(x, y) {" + + " var d = window.devicePixelRatio || 1;" + + " for (var el = document.elementFromPoint(x / d, y / d); el && el !== document.documentElement; el = el.parentElement) {" + + " if (el.scrollHeight > el.clientHeight && el.scrollTop > 5) {" + + " var oy = window.getComputedStyle(el).overflowY;" + + " if (oy === 'auto' || oy === 'scroll') return el.scrollTop;" + + " }" + + " }" + " var all = document.querySelectorAll('.content-body, .content-body *');" + " for (var i = 0; i < all.length; i++) {" + " var el = all[i];" + @@ -230,7 +241,7 @@ protected void onCreate(Bundle savedInstanceState) { " }" + " }" + " return window.scrollY || document.documentElement.scrollTop || 0;" + - "})()", + "})(" + event.getX() + ", " + event.getY() + ")", value -> { try { double scrollTop = Double.parseDouble(value);