Adds a per-account settings area (tap an account in Settings), starting with signatures and notifications.
Storage: new Room account_settings table (schema v9, MIGRATION_8_9) with a cascading foreign key to accounts; AccountSettings model + AccountSettingsRepository (a missing row resolves to defaults; ensureDefaults on account add).
Signatures: plain-text per-account signature (RFC 3676 -- delimiter) auto-inserted below new messages and reply/forward drafts, and swapped when the From-account changes.
Notifications: one notification channel + channel group per account (Android owns sound/vibration/importance, deep-linked from the app; the shade bundles per account) plus an in-app per-account on/off gate. minSdk 29 ≥ API 26, so channels are always available — no pre-channel fallback needed.
## Summary
Adds a per-account settings area (tap an account in Settings), starting with **signatures** and **notifications**.
- **Storage:** new Room `account_settings` table (schema **v9**, `MIGRATION_8_9`) with a cascading foreign key to `accounts`; `AccountSettings` model + `AccountSettingsRepository` (a missing row resolves to defaults; `ensureDefaults` on account add).
- **Signatures:** plain-text per-account signature (RFC 3676 `-- ` delimiter) auto-inserted below new messages and reply/forward drafts, and swapped when the From-account changes.
- **Notifications:** one notification channel + channel group per account (Android owns sound/vibration/importance, deep-linked from the app; the shade bundles per account) plus an in-app per-account on/off gate. `minSdk 29 ≥ API 26`, so channels are always available — no pre-channel fallback needed.
- **UI:** per-account settings screen (signature field/toggle, notification toggle, "Sound & vibration" system deep-link, remove account); extracted shared settings row components.
## Testing
- ✅ JVM unit tests (`testDebugUnitTest`) — signature append/swap/draft-skip, repository defaulting, notification gating ×3.
- ✅ `lintVitalRelease` (NewApi fatal) — channel/group + deep-link APIs safe on minSdk 29.
- ✅ Room v9 schema matches the migration DDL exactly (fresh == migrated).
- ✅ Full instrumented suite on the API 37 emulator — **30/30**, incl. the FK cascade test and per-account settings screen round-trips.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Adds a per-account settings area (tap an account in Settings), starting with signatures and notifications.
account_settingstable (schema v9,MIGRATION_8_9) with a cascading foreign key toaccounts;AccountSettingsmodel +AccountSettingsRepository(a missing row resolves to defaults;ensureDefaultson account add).--delimiter) auto-inserted below new messages and reply/forward drafts, and swapped when the From-account changes.minSdk 29 ≥ API 26, so channels are always available — no pre-channel fallback needed.Testing
testDebugUnitTest) — signature append/swap/draft-skip, repository defaulting, notification gating ×3.lintVitalRelease(NewApi fatal) — channel/group + deep-link APIs safe on minSdk 29.🤖 Generated with Claude Code