summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-08-29 21:22:36 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-08-29 21:22:36 +0000
commit533d89befd1fe4b8134440e8d415d40a5fb7c04b (patch)
tree87cfa6f3d70679cc385d3c7120162c644aa0487d
parent5c659d9046add8c77bd7699961a910505dcb4bc2 (diff)
Fix web quick-add keyboard viewport bug and shopping-mode add scroll jump
DashboardActivity (the WebView-wrapped web dashboard) had no windowSoftInputMode override, unlike QuickAddActivity which already sets adjustResize|stateVisible for the same class of problem: without it, Android WebViews default to adjustPan, which shifts the whole page up behind the keyboard instead of resizing the viewport, pushing a centered `position: fixed` modal's input out of reach when the keyboard opens. shopping-mode.html's fixed-bottom quick-add bar called a plain .focus() on the item-name input right after the item list above it grew by one row. The browser's default scroll-into-view for that focus call was computed against the now-taller document and dragged the whole page to the bottom instead of leaving the always-visible fixed bar alone. preventScroll: true stops that. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B
-rw-r--r--android/app/src/main/AndroidManifest.xml3
-rw-r--r--web/templates/shopping-mode.html8
2 files changed, 9 insertions, 2 deletions
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 58a6062..6795fb6 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -41,7 +41,8 @@
<activity
android:name=".ui.DashboardActivity"
android:exported="true"
- android:theme="@style/Theme.Dashboard">
+ android:theme="@style/Theme.Dashboard"
+ android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
diff --git a/web/templates/shopping-mode.html b/web/templates/shopping-mode.html
index 3a1a3bc..ebcfea5 100644
--- a/web/templates/shopping-mode.html
+++ b/web/templates/shopping-mode.html
@@ -134,7 +134,13 @@
document.body.addEventListener('htmx:afterRequest', function(evt) {
if (evt.detail.elt.id === 'quick-add-form' && evt.detail.successful) {
evt.detail.elt.reset();
- evt.detail.elt.querySelector('input[name=name]').focus();
+ // preventScroll: this input sits in a `position: fixed` bar pinned to the
+ // bottom of the viewport. #shopping-items above it just grew by one item
+ // (the swap that landed right before this handler runs), and a plain
+ // .focus() call's default scroll-into-view -- computed against the new,
+ // taller document -- was dragging the whole page down to the bottom
+ // instead of leaving the already-visible fixed bar alone.
+ evt.detail.elt.querySelector('input[name=name]').focus({ preventScroll: true });
evt.detail.elt.classList.add('flash-success');
setTimeout(function() { evt.detail.elt.classList.remove('flash-success'); }, 300);
}