Releases: mina-android/Expensy
Releases · mina-android/Expensy
Expensy 1.0.4
[1.0.4] — 2026-05-27
Added
Gold Accounts
- Gold account type — New account type alongside Bank / Cash / Savings / Credit Card / E-Wallet. Gold accounts track a physical gold holding by karat and grams rather than a manual balance
- Karat picker — Pill cards for 24 / 22 / 21 / 18 / 14 / 10 / 9 karat, each labelled with its purity percentage
- Live gold value preview — A preview card in the add/edit sheet shows the current market value as you enter grams and karat, sourced from live XAU rates
- Auto-calculated balance — Gold account balance is computed from
grams × (karat/24) / 31.1035 × XAU_rateand refreshed every time exchange rates load or refresh; the balance can never be set manually - Gold badge on cards — Account cards show a
"Xk · Y.YY g"pill badge (e.g.21k · 10.00 g). Home screen account scroll and Accounts screen both display this sub-label in place of a converted amount - Dedicated stats row — Gold account cards in the Accounts screen show Value / Karat / Weight / Per-gram stats instead of the standard Income / Expense / Txs row
- Gold filtered from pickers — Gold accounts are excluded from the account picker in Add Transaction, Transfer, Recurring Payments, and Lent Money, since their balance is always synthetic
Live Exchange Rates
- Daily exchange rates — Rates fetched from
open.er-api.com/v6/latest/USD(free tier, no API key, USD pivot). Results cached inSharedPreferencesfor 24 hours; stale cache is served immediately while a background refresh runs - XAU / Gold price — Gold price fetched separately from the fawaz currency API (
cdn.jsdelivr.net/npm/@fawazahmed0/currency-api) with an automatic fallback URL. Injected into the rates map and persisted alongside the other rates - Multi-currency total balance —
totalBalance(Home) andtotalBalanceAll(Accounts tab) now convert each account's balance to the main currency before summing, using live rates. When rates are unavailable, native amounts are summed directly totalBalanceAll— New computed property that always includes every account regardless of the "Exclude from Total" toggle. The Accounts tab AppBar shows this value; the Home screen continues to use the filteredtotalBalance- Accounts rates banner — A thin strip below the Accounts AppBar shows the rates status: fetching spinner, last-updated timestamp, or an offline warning when rates could not be loaded
- Sync button in Accounts AppBar — A
↺icon appears whenever at least one account uses a currency different from the main currency. Tapping it triggers a forced network refresh; the icon is replaced by a spinner while fetching - Transfer cross-currency preview — When FROM and TO accounts have different currencies, the Transfer screen shows a live conversion preview card below the amount field
- GEL (Georgian Lari ₾) added — Currencies list grows from 64 to 65
Recurring Payment Reminders (Notifications)
- On-day reminder — Each recurring payment can have a daily notification at a chosen time on its due date. The reminder shows the payment name and amount
- 2-day advance reminder — An optional second notification fires at the same time 2 days before the due date, giving early notice for bills and subscriptions
- Time picker — Tapping the reminder time in the add/edit sheet opens a system time picker
- Reminder badges on cards — Active reminders are indicated by a bell icon + time label on the recurring payment card. Advance reminders show an additional
2dbadge - Permission flow — Enabling a reminder checks for
POST_NOTIFICATIONSandSCHEDULE_EXACT_ALARMpermissions at runtime and prompts if missing. The toggle stays off if the user denies - Reschedule on restore — After a backup restore, all active reminders are rescheduled automatically
- Boot persistence — A boot receiver in the manifest reschedules all reminders after device reboot
Assets Tracker
- New Assets screen — Track physical and financial assets (property, equipment, investments, collectibles) with a name, value, currency, and optional notes
- Currency-aware total — The Assets summary bar shows total value converted to the main currency using live exchange rates
- Assets in More tab — Assets is listed between Lent Money and Categories in the More tab menu
- Assets in backup — The full backup JSON includes all asset records; restoring a backup fully restores assets
Multi-currency Transactions
- Per-transaction currency — The Add Transaction screen includes a currency picker. The selected currency is stored on the transaction; if it differs from the account currency, the balance delta is converted via live exchange rates before being applied
- Currency column in export — The Excel export now includes a
Currencycolumn showing the effective currency of each transaction
Settings → About
- Developer link — New tile below the GitHub row: "Discover more projects by Mina Android" opens
https://github.com/mina-androidin the browser
Changed
- Startup flow —
main()is nowasync. It awaitsNotificationService().initialize()thenprovider.load()(DB reads) before callingrunApp(). The native launch background stays visible during startup; Flutter draws the real app as its very first frame — no intermediate loading screen - Loading screen removed — The
_LoadingScreenwidget and its!app.loadedguard are gone.ChangeNotifierProvider.valueis used instead ofcreateso the already-loaded provider is passed directly restoreBackup()returnsint— Previously returnedbool. Now returns0if the user cancelled the file picker (no message shown), or the source backup's version number on success. ThrowsFormatExceptionwith a human-readable message for invalid files- Backup screen live counts — The "what's included" section now shows live item counts for all 8 categories: Accounts, Transactions, Recurring, Wishlist, Lent & Borrowed, Assets, Categories, Settings
- Backup upgrade label — When restoring from an older backup version, the success message includes
"upgraded from vX → vY" - Accounts tab shows
totalBalanceAll— The Accounts tab AppBar total now always includes every account, matching the account cards listed below it _AccountCardwatches provider — Changed fromcontext.readtocontext.watchso each card rebuilds automatically when exchange rates arrive after the initial load- Version — Bumped to
1.0.4+5 - DB schema — Version bumped from 2 (old zip) to 7, adding:
reminder_timeon recurring,currencyon transactions,assetstable,gold_karat/gold_gramson accounts,early_reminder_enabledon recurring
Fixed
- Notification icon too small —
ic_notificationPNG assets had 32 px of transparent padding on all sides, making the graphic fill only 36 % of the canvas. All five density variants (mdpi → xxxhdpi) plus thedrawable/fallback have been regenerated with content scaled to fill the full canvas (94–100 % fill) - Themed icon oversized after notification icon fix — The adaptive icon
<monochrome>layer was pointing at@drawable/ic_notification. After the notification icon was made full-canvas, the themed icon on Android 13+ appeared too large. The<monochrome>attribute now references@drawable/ic_launcher_monochrome(the correct ~29 % fill inset asset).@drawable/ic_notificationis now used exclusively byNotificationService - Backup restore validation —
restoreBackup()now validates that the decoded JSON is aMapand contains at least one recognisable Expensy key before touching the database. Previously any valid JSON would pass - Backup normalisation —
_normaliseBackup()patches every table in every old backup so missing columns (from any version) are filled with safe defaults before the DB insert. This preventsNOT NULLconstraint failures when restoring v1 or v2 backups into the current v7 schema - Transfer multi-currency —
addTransfer()now accepts separatefromAmount/toAmount. When currencies differ, the credit amount is independently converted rather than assuming a 1:1 rate - Transaction balance conversion —
addTransactionanddeleteTransactionconvert the transaction currency to the account's currency via exchange rates before applying or reversing the balance delta
Technical
- New packages —
http ^1.2.0,url_launcher ^6.3.0,flutter_local_notifications ^18.0.0,timezone ^0.9.4 - New services —
ExchangeRateService(singleton, rate fetch + gold price + cache) andNotificationService(singleton, schedule/cancel/reschedule, exact alarms, timezone viaDateTime.now().timeZoneOffset) - New screen —
assets_screen.dart - Android permissions added —
INTERNET,ACCESS_NETWORK_STATE,POST_NOTIFICATIONS,SCHEDULE_EXACT_ALARM,USE_EXACT_ALARM,RECEIVE_BOOT_COMPLETED - Boot receiver registered —
ScheduledNotificationBootReceiverdeclared inAndroidManifest.xml - AGP — bumped to 8.9.1 (required by
url_launcher_androidwhich pulls inandroidx.browser:1.9.0andandroidx.core:1.17.0) coreLibraryDesugaringEnabled: true— added toapp/build.gradleforflutter_local_notificationscompatibility on API < 26
Expensy 1.0.5 - Pre Release
Expensy 1.0.5 Test build
Testing (Insights, per account statistics, Budgets, Currency Converter) Features.
Expensy 1.0.3 - REVAMPED
[1.0.3] — 2026-05-11
BEWARE.. THIS VERSION WILL START OVER IF YOU UPDATE, MAKE SURE TO HAVE A BACKUP AND REACH OUT IF YOU NEED HELP TO RESTORE
Added
- Recurring Income — Recurring Payments now supports both
expenseandincomepayment types. A type toggle (Expense / Income) is shown in the add/edit sheet - Tabbed Recurring screen — The Recurring tab is split into two pages: Expenses and Income, each with its own count badge in the tab label. Summary cards (Monthly / Weekly) update per active tab. The FAB label changes to "Add Expense" or "Add Income" accordingly
- 64 currencies — Currency list expanded from 8 to 64, covering Global, Middle East & North Africa, Sub-Saharan Africa, Asia, and Europe. All currencies are searchable by code or name
- Searchable currency dialog — Default currency in Settings now opens a searchable popup dialog instead of a dropdown. Account currency picker also uses this dialog
- Account type as cards — Account type selection (Bank / Cash / Savings / Credit Card / E-Wallet) in Add Account and Onboarding uses pill cards instead of a dropdown
- Exclude Account from Total Balance — New toggle in Add/Edit Account. Excluded accounts are hidden from the home screen and accounts screen total, and are labelled with an "Excluded" badge on their card
- Excel export (.xlsx) — Export Transactions now generates a proper Excel file instead of CSV, with bold header row. Exported via the file picker so you choose the save location
- Date range filter for export — Export screen now has From → To date pickers. Only transactions in the chosen range are included; a live count is shown before exporting
- File picker for backup — Create Backup now uses the file picker so you choose exactly where the
.jsonis saved, instead of the system share sheet - 4-mode theme selector — Settings now shows a 2×2 grid of pill cards: Follow System, Light Mode, Dark Mode, Black AMOLED
- Black AMOLED theme — Pure
#000000surfaces for OLED displays. Still uses your chosen accent colour for interactive elements - 29 accent colours — Added 8 new colours: Forest, Mint, Olive, Sage (greens) + Sky Blue, Navy, Cobalt, Ocean (blues). Removed Pitch Black (replaced by AMOLED mode)
- AMOLED accent colour support — Black AMOLED mode now inherits the selected accent colour for primary/secondary elements; it only forces surfaces to pure black
- Lent money accent bar — The "They Owe Me / I Owe Them / Net" summary bar now uses the app's primary accent colour as its background
Changed
- Home screen header — Reduced from a large
SliverAppBarwithexpandedHeight: 200to a compactSliverToBoxAdapterthat wraps tightly around the greeting and balance text. No empty scroll space above content - Transfer icon colour — Now uses
cs.onPrimary(adapts to theme) instead of hardcodedColors.white - Total balance — Now sums
balance.abs()for all non-excluded accounts, so stored negative balances (from overspending past initial balance) no longer subtract from the displayed total formatAmount()— Now correctly prepends a−sign for negative amounts rather than always usingabs()- Onboarding — Redesigned as a clean 3-step
PageView(Name → Currency → First Account) with a progress bar at the top. Account type selector uses pill cards. Colour picker horizontally scrollable with all 24 colours visible - Backup false positive fixed — "Backup created" message is only shown when the user confirms a save location. Cancelling the file picker shows no message
- Model names —
Categoryrenamed toAppCategoryandTransactionrenamed toAppTransactionto eliminate ambiguous import conflicts withsqfliteandflutter/foundation.dart - Version — Bumped to
1.0.3+4 - Gradle — Downgraded from 9.5.0 to 8.11.1 to fix
BuildOperationDescriptor.metadata()crash with Kotlin 2.1.0 + AGP 8.7.3
Fixed
- Multiple heroes error —
heroTag: nulladded to everyFloatingActionButtonandFloatingActionButton.extendedacross all screens, eliminating the "multiple heroes share the same tag" warning that appeared on navigation - Account / Recurring / Lent submit buttons not working — All bottom sheet
_submit()methods now usecontext.read<AppProvider>()instead of the stalewidget.appsnapshot - Currency display showing raw code — Fixed Python string-escaping corruption that caused currency picker to show
$_currency ${currencyInfo(_currency).symbol}literally as text instead of interpolating the values ambiguous_importforBorder—excelpackage imports now usehide Borderto prevent collision with Flutter'sBorderclassambiguous_importforTransaction—sqfliteimported withhide Transaction; model class renamed toAppTransactiondeprecated 'value:'in DropdownButtonFormField — Replaced withinitialValue:in Recurring sheet frequency dropdown- Curly braces in bare
ifstatements — Recurring card action buttons now wrap bodies in{} - Backup restore —
importAll()wraps all table operations in a single SQLite transaction; settings are correctly reloaded after restore - Unused import warnings — Removed
dart:convertfromdb_helper.dart,path_providerandapp_themefromapp_provider.dart,typed_data/file_picker/excel/app_themefrom the oldexport_screen.dart,shared_widgetsfromstatistics_screen.dart - Unnecessary casts —
_kTypeOptionsin accounts screen changed fromList<Object>toList<String>, removing the need foras Stringcasts
Expensy 1.0.2
[1.0.2] — 2026-05-06
Added
- Themed monochrome icon (Android 13+) — Expensy now ships an
ic_launcher_monochromelayer using a clean wallet outline silhouette. On Android 13+ with Themed Icons enabled, the launcher automatically recolours the icon to match your wallpaper palette - Adaptive icon — all density buckets — Monochrome layer generated at all 5 density sizes (mdpi → xxxhdpi) at 32/108dp fill ratio
- Account cards in Recurring Payments — Account selection in the add/edit sheet replaced with horizontal scrollable coloured cards
- Account cards in Lent Money — Card-based account picker (includes a "None" card for optional linking)
- Account cards in Transfer — FROM and TO each have their own horizontal card row; same-as-FROM account is dimmed and non-tappable
- Category chips in Recurring Payments — Coloured pill chips in a wrapping layout replace the category dropdown
- 24 account colours — Colour picker expanded from 8 to 24 colours
Changed
- App icon — New 3D wallet PNG with white background, 45/108dp fill ratio, +1px right / −1px up offset
- Splash screen — Icon shown directly on app surface, no background container
- Onboarding welcome — Icon shown without a background container, same as splash
- Navigation restructured — Bottom bar: Home · Transactions · Recurring · Accounts · More. Statistics moved to the More tab
- Recurring — Monthly/Weekly — Moved from inside the AppBar into two separate summary cards below the title bar
- Skip button — Now increments
paidPayments(advances progress bar) without touching the account balance or recording a transaction - Description field — No longer required when adding a transaction
- Colour picker scrollable — All 24 account colours now horizontally scrollable; no longer clipped on small screens
- Version — Bumped to
1.0.2+3
Fixed
- Account colour picker clipped on narrow screens — wrapped in
SingleChildScrollView - Monthly/Weekly estimates were inside the AppBar rectangle; now below it
Expensy 1.0.1
[1.0.1] — 2026-05-05
Added
- Account currency — each account now has its own independent currency setting; choose it when creating or editing an account (
Accounts → + / Edit) - 10 new theme colours — total themes expanded from 15 to 25: Sky Blue, Forest, Coral, Gold, Slate, Magenta, Turquoise, Brown, Olive, Lavender
- Account cards in Add Transaction — instead of a dropdown, accounts are now shown as horizontal scrollable cards with their colour, name, and current balance; tap a card to select it
Changed
- Dark mode on by default — new installs start in dark mode
- "Hi, [name]" greeting — font size increased from 14 to 22px (Bold) on the Home dashboard
- Recurring payment cards — larger padding (16 → 20px), bigger icon (44 → 50px), larger name font (15 → 17px) and amount font (12 → 14px)
- Recurring app bar — Monthly and Weekly estimates are now properly centred vertically in the app bar
- Version — bumped to
1.0.1+2
Fixed
- Monthly and Weekly estimates in the Recurring Payments header were slightly top-aligned; now centred
Expensy 1.0.0
[1.0.0] — 2026-05-03
Initial Release
Core features
- Multi-account management — Bank, Cash, Savings, Credit Card, E-Wallet; custom colours
- Transactions — Add, edit, delete income and expense transactions; search and filter by type/account; group by date
- Account transfers — Move money between accounts with live balance preview; auto-records debit + credit
- Statistics — 6-month side-by-side bar chart (income vs expense); monthly expense pie chart; navigate by month
- Recurring payments — Track subscriptions and instalments; set First Payment / Last Payment dates; see total payments and total cost (inclusive count); frequency: days / weeks / months / years; Skip next payment; Pay (records expense); Edit; Delete; monthly + weekly estimate in header
- Wishlist — Track items to save for with target price and priority (Low / Medium / High); mark as purchased
- Lent Money — Track money lent or borrowed; link to account (balance affected automatically); due dates; settle (reverses balance); net summary
- Categories — Custom income and expense categories with colour picker; default categories editable and deletable
- Export — CSV export via system share sheet; compatible with Excel and Google Sheets
- Backup & Restore — Full JSON backup of all data; restore from file
Settings
- Dark mode toggle
- 15 theme colour seeds: Violet, Blue, Green, Rose, Amber, Teal, Orange, Indigo, Cyan, Pink, Lime, Deep Purple, Crimson, Midnight, Pitch Black
- 8 currency options: EGP, USD, EUR, GBP, SAR, AED, JPY, CAD
- Per-account currency
- Week starts on Monday or Sunday
- Hide balance (shows •••••• in dashboard)
- Display name
Technical
- 100% offline — no internet permission
- SQLite local database (
sqflite) - Material You design system with adaptive themes
- Provider state management
- Adaptive Android launcher icon (supports circle, squircle, square, and all launcher shapes)
- Custom app icon with light-blue background
- Package:
com.ma.expensy - Min Android: 5.0 (API 21)