Skip to content

Releases: fanis/expense-notification

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 09 Aug 18:00
  • Add a Theme setting with Auto (follow system), Light, and Dark modes. Every screen, dialog, and the system bars switch palettes with the choice; Auto tracks the device's dark-mode setting live.

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 11 Jul 17:34
  • Fill the expense with the captured payment's original date and time, even when filling hours later: the prefill intent now carries the timestamp as an epoch-millis long extra (dateLong, configurable via the output profile's dateTimeMillisExtra), which Expense Manager reads to set both the date and the time. The previously sent string date extra was silently ignored on its widget-add path.
  • Speed up Gradle builds locally and in CI: enable the configuration cache and build cache, and make Cut Release run the tests and the signed build in a single Gradle invocation.
  • Run CI tests only on pull requests: drop the push-to-master trigger, since everything reaching master goes through a tested PR or the Cut Release workflow, which runs the tests itself.

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 03 Jul 20:26
  • Fix deleting a bundled parser/output config not actually disabling it: the parser kept a hardcoded copy of every bundled config and fell back to it even when the config was hidden. Bundled assets are now the single source of defaults, so Delete/Restore in the config UI really controls what parses.
  • Fix grouped-thousands amounts without decimals: €1.234 (and 1,234) now parse as 1234, not 1.23.
  • Fix a crash when tapping Fill or Open Expense Manager with the output app not installed; the candidate is no longer marked processed for a fill that never happened.
  • Make the dropZeroAmount global config switch actually control the zero-amount filter (it was previously always on).
  • Fix the config editor corrupting regex patterns that contain a literal backslash-u sequence when a config was opened and saved.
  • Ask for confirmation before "Clear local queue" deletes captured notifications.
  • Dedupe captures with a SHA-256 body hash instead of a 32-bit hash, removing the (tiny) chance of two different bank SMS colliding into one key and silently dropping an expense.
  • Performance: compile every parser regex once per config load instead of on each notification; re-parse stored candidates only when the parser config actually changes (and write the result back) instead of on every list read; run notification parsing/database writes and the review-queue load off the main thread; share one database connection instead of opening one per event.
  • Restrict the form-filling accessibility service to the configured output app via the system-side package filter (it previously woke up for events from every app), and expire an abandoned fill after 15 minutes.
  • Prune processed/skipped candidates older than 90 days so the queue and database stop growing forever; unreviewed candidates are kept indefinitely.
  • Skip a parser rule whose regex does not compile instead of crashing the notification listener.
  • Run the unit-test suite in CI on every push and pull request.
  • Add a "Cut Release" GitHub Actions workflow: releases can now be triggered from the Actions tab (choose patch/minor/major); it bumps the version, folds the changelog, tags, runs the tests, builds the signed APK, and publishes the GitHub Release — the server-side equivalent of scripts/release.sh --push.

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 30 Jun 10:21
  • Fix bank SMS after the first being silently dropped: messaging apps (e.g. Textra) post every SMS from one sender under a single conversation notification, so every Bank of Cyprus SMS shared one notification key and collided on the queue's unique-key constraint after the first capture. The dedupe key now folds in the message body, so each distinct SMS is queued while re-scanning the same still-active notification still dedupes. Card-app notifications (Revolut, Google Wallet) keep a unique key per transaction, so identical charges still queue separately.
  • Add a periodic listener watchdog (JobScheduler, ~15 min, persists across reboot) that re-requests a notification-listener rebind when the system has unbound it. The existing rebind only runs on an orderly disconnect; a hard process kill skipped it, leaving the listener silently dead (and payment notifications dropped) until the app was reopened or the device rebooted. When the listener is connected the job also rescans still-active notifications. Records listener connect/disconnect and watchdog activity for diagnostics.
  • Date the expense to the transaction date written in the bank SMS (e.g. ΣΤΙΣ 26/05/2026 20:17, on 23/05/26 12:55, ON 03/12/2023 13:01) instead of when the notification arrived, so a delayed or re-posted SMS no longer lands on today. Falls back to the notification post time when the message carries no date (e.g. Revolut spends, the Eurobank card alert that only shows @HH:mm).

Full Changelog: https://github.com/fanis/expense-notification/commits/v1.0.1

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 23 Jun 14:52