# Next ## Introduction Do one thing, ask if unsure first! Then implement. Then run `task deploy-android`. Fix, if there are errors. Then move task which you implementeed to done.md. Keep tasks you did not work in the file. Check if all files are staged. Git repo should not contain unknown files. Then commit. ## Tasks Override `accountConnectionStatusProvider` in the Android E2E test so `CircularProgressIndicator` never appears. `_AccountTile` in `lib/ui/screens/account_list_screen.dart` watches `accountConnectionStatusProvider(account.id)` (defined at `lib/di.dart:118`). It is a `FutureProvider.autoDispose.family` that connects to the real IMAP server. While loading, it shows a `CircularProgressIndicator` in the tile's trailing widget. That continuously-running animation prevents `pumpAndSettle()` from ever settling in Flutter integration tests on Android, causing frame-pump storms that can drop the `StreamBuilder`'s data state and make `tap(aliceTile)` find 0 widgets. The current workaround in `integration_test/app_e2e_test.dart` is to replace `pumpAndSettle()` with `pump(300ms)` inside `pumpUntil`. The real fix is to override the provider so it completes immediately — no spinner ever enters the tree. 1. In `integration_test/app_e2e_test.dart`, add `accountConnectionStatusProvider` to the `overrides` list passed to `app.main(...)`: ```dart app.main( overrides: [ secureStorageProvider.overrideWithValue(_InMemorySecureStorage()), imapConnectProvider.overrideWithValue(_connectImapPlaintext), smtpConnectProvider.overrideWithValue(_connectSmtpPlaintext), // Override so _AccountTile never shows a CircularProgressIndicator: // pumpAndSettle() cannot settle while a continuously-running animation is in the tree. accountConnectionStatusProvider.overrideWith((ref, _) async {}), ], ); ``` 1. After adding the override, revert `pumpUntil` back to using `pumpAndSettle()` instead of `pump(const Duration(milliseconds: 300))` — the original comment about `CircularProgressIndicator` and the bounded-pump workaround can both be removed. 1. Verify the Linux UI E2E test still passes (`task integration-ui`) and the Android E2E test passes (`task integration-android`). Constraints: only `integration_test/app_e2e_test.dart` should be modified. No production code changes. --- When I download and install the apk, then the app starts, but closes again immediatly. I want an automated test, which ensures the apk is functional. If that test fails, then the upload should not be done. --- I opened an account. How to get back to the list of accounts? I saw no way to do that. --- I opened a mailbox. I search for "foo bar". I want to see all mails containing foo and bar. Not mails containing "foo bar" exactly. --- I search for "foo". Now I see all mails containing "foo". I want to easily do the common actions on the selected mails: Delete, Archive, Move to Folder, Move to Junk, ... --- How can I edit the Sieve Filter? --- When adding a new account, and no well-known file was found, not exact hint in DNS, then SMTP/IMAP/JMAP should use the mx record as fallback. --- How can I edit Sieve Scripts? Afaik this feature was added. --- Replace the custom TextField-in-AppBar search implementation in lib/ui/screens/email_list_screen.dart with Flutter's built-in SearchBar / SearchAnchor widget (Flutter 3.x). Goals: Remove the _isSearching bool, the _searchController, the slide animation, and the manual Timer debounce Use SearchAnchor + SearchBar to drive the _searchQuery state that filters the email list Keep the existing filter logic untouched — just replace the input mechanism The search bar should live in the AppBar area; if SearchAnchor doesn't fit cleanly there, use SearchBar standalone with onChanged (no debounce needed — let the user control submit, or accept instant filter) Preserve all existing AppBar actions (compose, sync, settings) when search is not active Update or remove any tests in integration_test/ that relied on the old search widget tree ---