Skip to content

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_packages table — 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).