Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f72dc1fe54 |
@@ -20,7 +20,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v5
|
||||||
with:
|
with:
|
||||||
java-version: '17'
|
java-version: '17'
|
||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v5
|
||||||
with:
|
with:
|
||||||
java-version: '17'
|
java-version: '17'
|
||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
|
|||||||
@@ -50,4 +50,3 @@ data/error_reports.log
|
|||||||
data/latest_release_cache.json
|
data/latest_release_cache.json
|
||||||
data/food_facts_cache.json
|
data/food_facts_cache.json
|
||||||
data/category_ai_cache.json
|
data/category_ai_cache.json
|
||||||
assets/img/logo/*_backup.*
|
|
||||||
|
|||||||
@@ -20,8 +20,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- **`pz`/`conf` unit labels translated** — "pz" now shows as "pcs" in English and "Stk" in German; "conf" shows as "pkg" / "Pkg". All `unitLabels` objects in JS now use `t('units.pz')` / `t('units.conf')`.
|
- **`pz`/`conf` unit labels translated** — "pz" now shows as "pcs" in English and "Stk" in German; "conf" shows as "pkg" / "Pkg". All `unitLabels` objects in JS now use `t('units.pz')` / `t('units.conf')`.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- **Camera button (📷) opened kiosk SettingsActivity on Android** — The native `btnSettings` ImageButton in the kiosk layout was positioned `top|end` with `alpha=0.12` (nearly invisible), sitting directly on top of the HTML scan button in the webapp header. Every tap on the 📷 button was intercepted by the native View and opened `SettingsActivity`. Fixed: moved `btnSettings` to `bottom|end` (above the bottom nav bar, `marginBottom=80dp`) and increased `alpha` to `0.28` so it is clearly separate from the header. Kiosk versionCode bumped to 16.
|
|
||||||
- **Camera button (📷) opened settings on Android Chrome/Brave** — `pointerleave` fired before `pointerup` when finger drifted slightly, cancelling the long-press timer and leaving the browser to dispatch a synthetic `click` that bubbled to an unintended handler. Fixed: added `setPointerCapture` (prevents `pointerleave` during touch) and `preventDefault` (blocks synthetic click); replaced `pointerleave` with `pointercancel` handler. Added `touch-action: manipulation` to `.header-scan-btn` CSS.
|
|
||||||
- **Logo white background on splash screen** — Re-processed both `logo.png` and `logo_icon.png` with fuzz 35% alpha extraction, removing the white background that was visible against the dark splash background (`#0f172a`).
|
- **Logo white background on splash screen** — Re-processed both `logo.png` and `logo_icon.png` with fuzz 35% alpha extraction, removing the white background that was visible against the dark splash background (`#0f172a`).
|
||||||
- **Recipe button label** — Shortened to "Ricetta" / "Recipe" / "Rezept" for compact display in the inventory quick-action modal.
|
- **Recipe button label** — Shortened to "Ricetta" / "Recipe" / "Rezept" for compact display in the inventory quick-action modal.
|
||||||
- **Quantity decimal precision** — `qtyNum` in recipe/cooking ingredient buttons and `conf` fallback display in inventory cards now limited to 1 decimal place (was showing 7+ decimal places from raw AI output, e.g. `0.25353223 conf`).
|
- **Quantity decimal precision** — `qtyNum` in recipe/cooking ingredient buttons and `conf` fallback display in inventory cards now limited to 1 decimal place (was showing 7+ decimal places from raw AI output, e.g. `0.25353223 conf`).
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.7 MiB |
@@ -279,7 +279,6 @@ body {
|
|||||||
height: 48px;
|
height: 48px;
|
||||||
box-shadow: 0 2px 8px rgba(0,0,0,0.18);
|
box-shadow: 0 2px 8px rgba(0,0,0,0.18);
|
||||||
animation: pulse-scan 2s ease-in-out infinite;
|
animation: pulse-scan 2s ease-in-out infinite;
|
||||||
touch-action: manipulation; /* prevent 300ms delay and double-tap zoom on mobile */
|
|
||||||
}
|
}
|
||||||
.header-scan-btn:active {
|
.header-scan-btn:active {
|
||||||
background: rgba(255,255,255,0.45);
|
background: rgba(255,255,255,0.45);
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 144 KiB |
+1
-5
@@ -14276,8 +14276,6 @@ function initSpesaMode() {
|
|||||||
if (!btn) return;
|
if (!btn) return;
|
||||||
|
|
||||||
btn.addEventListener('pointerdown', (e) => {
|
btn.addEventListener('pointerdown', (e) => {
|
||||||
e.preventDefault(); // prevent browser-generated synthetic click + 300ms delay
|
|
||||||
btn.setPointerCapture(e.pointerId); // ensure pointerup always fires on this element even if finger drifts
|
|
||||||
_longPressTimer = setTimeout(() => {
|
_longPressTimer = setTimeout(() => {
|
||||||
_longPressTimer = null;
|
_longPressTimer = null;
|
||||||
startSpesaMode();
|
startSpesaMode();
|
||||||
@@ -14291,14 +14289,12 @@ function initSpesaMode() {
|
|||||||
showPage('scan');
|
showPage('scan');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
btn.addEventListener('pointercancel', () => {
|
btn.addEventListener('pointerleave', () => {
|
||||||
// OS cancelled gesture (e.g. home swipe) — discard timer, do nothing
|
|
||||||
if (_longPressTimer) {
|
if (_longPressTimer) {
|
||||||
clearTimeout(_longPressTimer);
|
clearTimeout(_longPressTimer);
|
||||||
_longPressTimer = null;
|
_longPressTimer = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Note: no pointerleave handler needed — setPointerCapture prevents it from firing during touch
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function startSpesaMode() {
|
function startSpesaMode() {
|
||||||
|
|||||||
@@ -0,0 +1,170 @@
|
|||||||
|
{
|
||||||
|
"226887def70e33ef73290ebfe75ed4d0": {
|
||||||
|
"days": 7,
|
||||||
|
"source": "ai",
|
||||||
|
"name": "Polpa di pomodoro finissima",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1777444819
|
||||||
|
},
|
||||||
|
"0ed51c9496aa9edfe38caf41772f54ed": {
|
||||||
|
"days": 7,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Latte di Montagna",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1777444820
|
||||||
|
},
|
||||||
|
"2d63d0216a75d46b465150e925d2e7ad": {
|
||||||
|
"days": 30,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Burro",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1777444821
|
||||||
|
},
|
||||||
|
"9afdf35c4a256867ef47c32495349eb6": {
|
||||||
|
"days": 5,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Yaourt Vanille",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1777480477
|
||||||
|
},
|
||||||
|
"584f57418733a1f2acd29fe2e8816129": {
|
||||||
|
"days": 5,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Passata di pomodoro",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1778133522
|
||||||
|
},
|
||||||
|
"baeb7f2021b4bb91c368c9131a61f07c": {
|
||||||
|
"days": 10,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Formaggio Monte Maria",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1778133523
|
||||||
|
},
|
||||||
|
"063f2d534407214786d039bb2bffbb93": {
|
||||||
|
"days": 5,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Carote",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1778133524
|
||||||
|
},
|
||||||
|
"10a3d07c19bb1f889ebc9293862b4b36": {
|
||||||
|
"days": 60,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Ovomaltine",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419084
|
||||||
|
},
|
||||||
|
"0fbad7ccd8b6155c06aaa6b3c17a67d3": {
|
||||||
|
"days": 365,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Linguine pasta di Gragnano Igp",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419084
|
||||||
|
},
|
||||||
|
"b4a03e7356e7a0983b9c8af5f3cd8c57": {
|
||||||
|
"days": 60,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Polpa di pomodoro finissima",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419085
|
||||||
|
},
|
||||||
|
"b8334ff0febd5c0440c9b24c9f3132ed": {
|
||||||
|
"days": 180,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Basilico tritato surgelato",
|
||||||
|
"location": "freezer",
|
||||||
|
"ts": 1778419086
|
||||||
|
},
|
||||||
|
"0cb14384d0ba763ccf12e079d6aa8d34": {
|
||||||
|
"days": 60,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Salsa Pronta Ciliegini",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419086
|
||||||
|
},
|
||||||
|
"188634f49edb8b014a46942ee9fad689": {
|
||||||
|
"days": 180,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Farina Barilla",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419204
|
||||||
|
},
|
||||||
|
"c8db359d8709c69a95f0e6f68216d220": {
|
||||||
|
"days": 9999,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Bicarbonato",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419205
|
||||||
|
},
|
||||||
|
"a6d16a09fd9a6bfbd0a915f05dd71780": {
|
||||||
|
"days": 7,
|
||||||
|
"source": "ai",
|
||||||
|
"name": "Salsa Pronta Ciliegini",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1778419205
|
||||||
|
},
|
||||||
|
"4f8f1bb04a00e5fc62d7a9cfb21e1796": {
|
||||||
|
"days": 365,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Riso Chicchi Ricchi Gran Risparmio",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419206
|
||||||
|
},
|
||||||
|
"e116e4c11084a463f9aaac02e1749fe7": {
|
||||||
|
"days": 90,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Salsa di soia",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419207
|
||||||
|
},
|
||||||
|
"b1ad9afd4139b3f225b79af4dae256ce": {
|
||||||
|
"days": 60,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Tè Al limone",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778419504
|
||||||
|
},
|
||||||
|
"7ff2b7d326dcba52a664cebbf12f78a2": {
|
||||||
|
"days": 3,
|
||||||
|
"source": "ai",
|
||||||
|
"name": "Piselli fini 1\/2 vapore",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1778419505
|
||||||
|
},
|
||||||
|
"71062dc7ffd82b3ee4f40bad076a7c91": {
|
||||||
|
"days": 60,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Cioccolato bianco",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1778419506
|
||||||
|
},
|
||||||
|
"38a0eaea422dfe970eba125494e75981": {
|
||||||
|
"days": 180,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Zucca a pezzi",
|
||||||
|
"location": "freezer",
|
||||||
|
"ts": 1778419506
|
||||||
|
},
|
||||||
|
"cde21270e1cd50c431742e49117b225d": {
|
||||||
|
"days": 7,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Pancetta Dolce",
|
||||||
|
"location": "frigo",
|
||||||
|
"ts": 1778419507
|
||||||
|
},
|
||||||
|
"9e4189bd3f8cb1121e7389967dd4f74c": {
|
||||||
|
"days": 180,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Farina di grano tenero tipo rossa",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778427005
|
||||||
|
},
|
||||||
|
"e3472dd051ed13ae18fc96bbebedc1ba": {
|
||||||
|
"days": 60,
|
||||||
|
"source": "rule",
|
||||||
|
"name": "Lievito di birra",
|
||||||
|
"location": "dispensa",
|
||||||
|
"ts": 1778427005
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,8 +11,8 @@ android {
|
|||||||
applicationId = "it.dadaloop.evershelf.kiosk"
|
applicationId = "it.dadaloop.evershelf.kiosk"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 34
|
targetSdk = 34
|
||||||
versionCode = 16
|
versionCode = 15
|
||||||
versionName = "1.7.15"
|
versionName = "1.7.14"
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
|||||||
@@ -43,18 +43,17 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<!-- Settings gear (shown after setup, over WebView) — bottom-right corner so it never
|
<!-- Settings gear (shown after setup, over WebView) — top-right corner to avoid overlapping modals -->
|
||||||
overlaps the webapp header buttons (e.g. the 📷 scan button at top-right) -->
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/btnSettings"
|
android:id="@+id/btnSettings"
|
||||||
android:layout_width="44dp"
|
android:layout_width="44dp"
|
||||||
android:layout_height="44dp"
|
android:layout_height="44dp"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="top|end"
|
||||||
android:layout_marginBottom="80dp"
|
android:layout_marginTop="8dp"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:background="@android:color/transparent"
|
android:background="@android:color/transparent"
|
||||||
android:src="@android:drawable/ic_menu_manage"
|
android:src="@android:drawable/ic_menu_manage"
|
||||||
android:alpha="0.28"
|
android:alpha="0.12"
|
||||||
android:contentDescription="Settings"
|
android:contentDescription="Settings"
|
||||||
android:scaleType="centerInside"
|
android:scaleType="centerInside"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|||||||
Reference in New Issue
Block a user