Adds a Combined Inbox screen that shows threads from the INBOX mailbox of every configured account, sorted by latest message date
On startup the app navigates to /inbox (the combined inbox) instead of the accounts list
If no accounts exist yet, the screen immediately redirects to /accounts so the user can add one
Implementation details
EmailRepository.observeAllInboxThreads() — new stream method that JOINs the threads table with mailboxes on role = 'inbox'
allAccountsProvider — new StreamProvider<List<Account>> in di.dart
CombinedInboxScreen — thread list with swipe-to-archive/delete, pull-to-refresh, load-more pagination, account name badge per thread (when multiple accounts), FAB to compose, and a drawer for per-account mailbox navigation
router.dart — /inbox route added; initialLocation changed from /accounts to /inbox
All test fakes and generated mocks updated to implement the new abstract method
## Summary
- Adds a **Combined Inbox** screen that shows threads from the INBOX mailbox of every configured account, sorted by latest message date
- On startup the app navigates to `/inbox` (the combined inbox) instead of the accounts list
- If no accounts exist yet, the screen immediately redirects to `/accounts` so the user can add one
## Implementation details
- `EmailRepository.observeAllInboxThreads()` — new stream method that JOINs the `threads` table with `mailboxes` on `role = 'inbox'`
- `allAccountsProvider` — new `StreamProvider<List<Account>>` in `di.dart`
- `CombinedInboxScreen` — thread list with swipe-to-archive/delete, pull-to-refresh, load-more pagination, account name badge per thread (when multiple accounts), FAB to compose, and a drawer for per-account mailbox navigation
- `router.dart` — `/inbox` route added; `initialLocation` changed from `/accounts` to `/inbox`
- All test fakes and generated mocks updated to implement the new abstract method
Closes #376
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
/inbox(the combined inbox) instead of the accounts list/accountsso the user can add oneImplementation details
EmailRepository.observeAllInboxThreads()— new stream method that JOINs thethreadstable withmailboxesonrole = 'inbox'allAccountsProvider— newStreamProvider<List<Account>>indi.dartCombinedInboxScreen— thread list with swipe-to-archive/delete, pull-to-refresh, load-more pagination, account name badge per thread (when multiple accounts), FAB to compose, and a drawer for per-account mailbox navigationrouter.dart—/inboxroute added;initialLocationchanged from/accountsto/inboxCloses #376