ADR-0008: Tracked-packages CSV in SettingsRepository
- Status: Accepted
- Date: 2026-08-11
- Deciders: maintainers
- Related: data-layer.md
Context
The set of notification source packages the app listens to ("tracked banks") must persist, be user-editable, and survive app updates. Several banks changed their Android package names over time (MAE, Boost, BigPay, Wise).
Decision
The tracked set is stored as a sorted, comma-separated CSV string under
KEY_TRACKED_PACKAGES, owned entirely by SettingsRepository
(trackedPackages(), setTrackedPackages, isTracked).
SettingsRepository.normalize() maps legacy package names to current
ones on every read/write:
| Legacy | Current |
|---|---|
com.maybank2u.mae |
com.maybank2u.life |
boost.mobileapp |
my.com.myboost |
my.com.bigpay.app |
com.tpaay.bigpay |
com.transferwise |
com.transferwise.android |
Normalization is idempotent: dedupe + sort + drop blanks.
Consequences
- CSV parse/serialize lives in one place; no other code touches the raw string.
- Users who enrolled the old MAE/Boost/BigPay/Wise package keep working after a bank rebrand without re-onboarding.
- Sorted CSV keeps the setting deterministic (diff-friendly).
Alternatives considered
- A separate
tracked_packagestable — rejected: single-value setting, settings KV store is sufficient. - A JSON array — rejected: CSV is compact and fine for package names (no commas/escapes in package IDs).