Repository navigation
Conversation
…lease
Compose UI
- Drop stale refresh() results (list/mode/store switched while loading)
- Persist the last-used list; fall back if it was deleted
- Reuse the catalogue item when adding (no duplicate items), as the legacy UI
- Reload on resume (widget, legacy UI, automation, Settings changes)
- CSV import uses the KEEP policy instead of overwriting tags/prices
- Validate prices in the edit dialog instead of silently erasing them
- Keep dialogs and typed text across rotation; editor state per item
- Honor hidechecked / showprice / capitalization settings
- Translatable strings, accessibility labels, empty state, one undo snackbar
- Share list themes with the legacy UI (stored as "1"/"2"/"3")
CSV / provider / database
- Persist SAF grants; catch SecurityException and runtime errors
- Fix HandyShopper import/export crashes and non-list URIs in ConvertCsv
- Truncate on export ("wt"); close leaked cursors
- Fix SQL for containsfull/# and itemstores/#; no selection-arg concatenation
- Disable WAL so the backup agent captures all data
Legacy UI
- Move/delete items and rename/delete stores by id (rotation-safe)
- Guard against the items cursor being reloaded
- Fix the first-run layout chooser; opt out of edge-to-edge on all
full-screen legacy activities (values-v35)
Other
- Widget receiver not exported; per-widget settings PendingIntents
- Harden exported ListShareSettings/automation entry points
- Remove dead Wear module, playInternet flavor, Ant and Travis files
- GitHub Actions build (unit tests, tstore APK, play AAB, lint)
- versionName 2.3.0 / versionCode 100230, release notes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
- fastlane/metadata/android: new English and German descriptions, icon, German changelog; translated titles and short descriptions taken from the app's own translations (27 locales) - .fdroid.yml: 2.3.0 build entry (no prebuild patching needed), CurrentVersion 2.3.0, description now comes from fastlane - Remove stray quote from the Arabic app name Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
- Broken format placeholders in fa, ar and sd translations ("s%", "d%")
crashed the widget, Convert CSV, totals and the EULA/new-version
dialogs for those languages
- ShoppingActivity.onActivityResult calls super
- getColumnIndexOrThrow / guarded index instead of getColumnIndex (-1)
- Replace the obsolete ProGuard config (lint fatal) with the one rule
still needed; header_percent_complete is not a format string
Verified: assemblePlayDebug, assembleTstoreRelease, bundlePlayRelease,
71 unit tests (incl. Robolectric) pass, lint has no errors other than
MissingTranslation.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
- org.openintents.shopping.ShoppingActivity (the launcher component that home screens, list shortcuts and the widget link to) now hosts the Compose UI and opens the list given as intent data. The legacy View UI keeps only the item PICK/EDIT intents of other apps; its first-run layout chooser is gone. - ListTheme mirrors the legacy themes attribute for attribute: Classic notepad paper (9-patch) + handwriting font, Bugdroid LCD font in upper case with "... OK" suffix, per-theme text sizes for the fontsize setting, price/checked colors, strike-through, checkbox and divider. The theme picker shows a live preview of each theme. - Tap marks an item, long-press edits it (as in the legacy UI). - Rows show units and the line price (price x quantity), matching totals. - Edge-to-edge with adjustResize: the keyboard no longer pushes the app bar off screen on Android <= 14; light system-bar icons. - ScreenshotTest renders the UIs/themes via Robolectric (-Pscreenshots). - Release notes mention the new main screen. Verified: 76 unit tests pass; release APK builds; checked on an API 30 emulator (launcher, add bar with keyboard). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
Every user gets an automatic Nostr account and can switch to their own (nsec or NIP-55 signer). Events are signed by the user key and encrypted with the per-list secret shared via QR code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
With "Search/add items in action bar" (the legacy holosearch setting, same key, so earlier layout choices carry over) the add field moves into the top bar: typing filters the list (and Pick items), Enter or + adds the text as an item, suggestions show below the bar. Default stays at the bottom for new installs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
… filter - Shared text / INSERT_FROM_EXTRAS items are added by the new UI (they were dropped after the launcher switch) - With per-store prices, saving an item no longer overwrites its own price with the cheapest store price (price only written when changed) - Home-screen widgets refresh when leaving the app - singleTop main screen; the widget reuses it instead of stacking copies - Store chips keep a pending reload; removing the selected store clears it - Legacy per-list tag/store filters, which the new UI cannot show, are cleared so they no longer hide items - Lists created by a CSV import appear in the drawer - CSV export writes removed items as -1 so a re-import keeps them off the list - Save in the edit dialog waits until the note is loaded - Quick double taps toggle from the stored status - Intents can open a list created while the app was in the background - Settings screen only lists settings the app honors - resourceConfigurations: only the app's own languages (-270 KB) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
New UI now covers the legacy features:
- The 10 legacy sort orders (sort dialog), per-list sort, Pick items
sort, list order in the drawer (same settings, sorted by the provider)
- Store / tag filters ("use_filters") as chips; active filters are
always visible
- Undo for mark all, unmark all and clean up; shake to clean up
- Move to another list, copy, delete permanently, per-item stores
- Priority subtotal; show price/tags/units/quantity/priority settings
- "Use this theme for all lists"; keep screen on; orientation;
reset quantity; reset all settings
- Menu: Convert CSV (HandyShopper, encoding, policy) and About
- Settings grouped like the legacy preferences
- Priority shown as a badge
Release:
- fastlane phone screenshots (Default, Classic, Bugdroid, top bar)
- .github/workflows/release.yml: on a v* tag build + sign the APK,
GitHub release (Obtainium), publish to Zapstore (zapstore.yaml)
- README: install channels and release steps; UPGRADE: parity table
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
The legacy View UI (.ui.ShoppingActivity: item PICK/GET_CONTENT for other apps), its Pick items dialog, the legacy settings screen, the dead share-settings (GTalk) and location-alert screens and the unreachable EULA/new-version screens are no longer in the manifest, so R8 drops their code (-210 KB). Sort-mode constant and widget projection no longer come from the legacy classes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
- "Compact view" setting: denser rows (no 48dp checkbox touch padding, less vertical padding), about three times as many items on screen - "Fast scrolling" (legacy setting): draggable thumb at the right edge; tap or drag the track to jump through long lists Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
- Scan button in the add bar (bottom and top bar): scans via a scanner app (ZXing SCAN intent, e.g. Binary Eye; offers to install one). The item is found by its saved barcode, else named via Open Food Facts (API v2, HttpURLConnection + org.json, no new library), else the user names it; the barcode is stored with the item. - Setting "Look up scanned products on Open Food Facts" (default on); INTERNET permission, used only for that lookup. - Store texts no longer claim "no internet permission"; changelogs, screenshots (incl. compact view) and zapstore images updated. - UPGRADE: parity table updated; the unregistered legacy sources can be deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
"Show barcode scan button" (default on) next to the Open Food Facts lookup setting; hides the button in the bottom add bar and the top bar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
The scan button turns into a spinner while a scanned barcode is looked up. When Open Food Facts can't be reached, the name dialog says so instead of just "Unknown product". Timeouts drop from 8+8 s to 3+3 s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
On a v* tag the workflow now also builds the play app bundle and uploads it with the R8 mapping and release notes to the open testing track. It is skipped without the PLAY_SERVICE_ACCOUNT_JSON secret; an optional separate upload key can be given with PLAY_KEYSTORE_* secrets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
…lease
Compose UI
CSV / provider / database
Legacy UI
Other
Claude-Session: https://claude.ai/code/session_01BHYgQzNQ1UGJ4AM46CiAoG