Implements #411: a proactive pre-auth interstitial shown when the user taps Outlook during onboarding, before the Microsoft OAuth browser launches. New personal outlook.com accounts ship with IMAP OFF by default, so OAuth succeeds while the later IMAP AUTHENTICATE step fails — a confusing dead-end. (#390 is the reactive complement.)
The screen:
Asks "Have you enabled IMAP for your Outlook account?" with a short why-we-need-it explanation.
Links Microsoft's canonical "POP, IMAP, and SMTP settings for Outlook.com" help article and the Outlook.com IMAP settings page (opened via UriHandler / Custom Tab).
Puts a "Sign in" button at the bottom that continues the existing Outlook OAuth (AppAuth) flow, unchanged.
Changes
New OutlookImapNoticeScreen (onboarding package), Material 3, reusing the picker's exact AppAuth launch wiring via AccountSetupViewModel.
AccountPickerScreen gains an optional onPickOutlook callback: onboarding routes the Outlook tap to the notice; the standalone "Add account" entry still launches auth inline (unchanged, Outlook-only scope per the issue).
New ONBOARDING_OUTLOOK_IMAP route; onboarding setup-form destinations extracted into onboardingSetupDestinations() for readability.
PII-free AppLog breadcrumbs: notice shown, help/settings link tapped, sign-in continued.
Finalized URLs
Help article: https://support.microsoft.com/en-us/office/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040 (verified 2026-07)
IMAP settings deep link: https://outlook.live.com/mail/0/options/mail/accounts/popImap (help article is the durable fallback if the options path changes)
Tests
Robolectric JVM Compose test (OutlookImapNoticeScreenJvmTest, 10 tests): renders the IMAP question + both links + Sign in; tapping Sign in invokes the auth continuation; tapping the help/settings links fires the intent; done/error/busy/open-failed branches. Plus a delegation test added to AccountPickerScreenJvmTest.
Instrumented E2E (OutlookImapNoticeScreenTest): Espresso-Intents assert the help ACTION_VIEW launch and the AppAuth sign-in launch (no real browser opens). OnboardingFlowTest gains a picker -> notice navigation test.
## Summary
Implements #411: a **proactive** pre-auth interstitial shown when the user taps **Outlook** during onboarding, *before* the Microsoft OAuth browser launches. New personal outlook.com accounts ship with **IMAP OFF by default**, so OAuth succeeds while the later IMAP `AUTHENTICATE` step fails — a confusing dead-end. (#390 is the reactive complement.)
The screen:
- Asks **"Have you enabled IMAP for your Outlook account?"** with a short why-we-need-it explanation.
- Links Microsoft's canonical **"POP, IMAP, and SMTP settings for Outlook.com"** help article and the **Outlook.com IMAP settings** page (opened via `UriHandler` / Custom Tab).
- Puts a **"Sign in"** button at the **bottom** that continues the **existing** Outlook OAuth (AppAuth) flow, unchanged.
## Changes
- **New `OutlookImapNoticeScreen`** (onboarding package), Material 3, reusing the picker's exact AppAuth launch wiring via `AccountSetupViewModel`.
- **`AccountPickerScreen`** gains an optional `onPickOutlook` callback: onboarding routes the Outlook tap to the notice; the standalone **"Add account"** entry still launches auth inline (unchanged, Outlook-only scope per the issue).
- New `ONBOARDING_OUTLOOK_IMAP` route; onboarding setup-form destinations extracted into `onboardingSetupDestinations()` for readability.
- **PII-free `AppLog` breadcrumbs**: notice shown, help/settings link tapped, sign-in continued.
## Finalized URLs
- Help article: `https://support.microsoft.com/en-us/office/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040` (verified 2026-07)
- IMAP settings deep link: `https://outlook.live.com/mail/0/options/mail/accounts/popImap` (help article is the durable fallback if the options path changes)
## Tests
- **Robolectric JVM Compose test** (`OutlookImapNoticeScreenJvmTest`, 10 tests): renders the IMAP question + both links + Sign in; tapping Sign in invokes the auth continuation; tapping the help/settings links fires the intent; done/error/busy/open-failed branches. Plus a delegation test added to `AccountPickerScreenJvmTest`.
- **Instrumented E2E** (`OutlookImapNoticeScreenTest`): Espresso-Intents assert the help `ACTION_VIEW` launch and the AppAuth sign-in launch (no real browser opens). `OnboardingFlowTest` gains a picker -> notice navigation test.
## Local gate (all green)
`assembleDebug`, `testDebugUnitTest`, `jacocoTestCoverageVerification` (0.84 floor held), `compileDebugAndroidTestKotlin`, `lintDebug`, `ktlintCheck`, `detekt`. Instrumented/E2E validated by CI's matrix (local emulators unavailable) — compiles clean.
Closes #411
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
Implements #411: a proactive pre-auth interstitial shown when the user taps Outlook during onboarding, before the Microsoft OAuth browser launches. New personal outlook.com accounts ship with IMAP OFF by default, so OAuth succeeds while the later IMAP
AUTHENTICATEstep fails — a confusing dead-end. (#390 is the reactive complement.)The screen:
UriHandler/ Custom Tab).Changes
OutlookImapNoticeScreen(onboarding package), Material 3, reusing the picker's exact AppAuth launch wiring viaAccountSetupViewModel.AccountPickerScreengains an optionalonPickOutlookcallback: onboarding routes the Outlook tap to the notice; the standalone "Add account" entry still launches auth inline (unchanged, Outlook-only scope per the issue).ONBOARDING_OUTLOOK_IMAProute; onboarding setup-form destinations extracted intoonboardingSetupDestinations()for readability.AppLogbreadcrumbs: notice shown, help/settings link tapped, sign-in continued.Finalized URLs
https://support.microsoft.com/en-us/office/pop-imap-and-smtp-settings-for-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040(verified 2026-07)https://outlook.live.com/mail/0/options/mail/accounts/popImap(help article is the durable fallback if the options path changes)Tests
OutlookImapNoticeScreenJvmTest, 10 tests): renders the IMAP question + both links + Sign in; tapping Sign in invokes the auth continuation; tapping the help/settings links fires the intent; done/error/busy/open-failed branches. Plus a delegation test added toAccountPickerScreenJvmTest.OutlookImapNoticeScreenTest): Espresso-Intents assert the helpACTION_VIEWlaunch and the AppAuth sign-in launch (no real browser opens).OnboardingFlowTestgains a picker -> notice navigation test.Local gate (all green)
assembleDebug,testDebugUnitTest,jacocoTestCoverageVerification(0.84 floor held),compileDebugAndroidTestKotlin,lintDebug,ktlintCheck,detekt. Instrumented/E2E validated by CI's matrix (local emulators unavailable) — compiles clean.Closes #411
Merge Queue Status
2026-07-08 04:09 UTC· Rule:default· triggered by merge protections2026-07-08 04:28 UTC· at410e742b2019d7cc7590bb0571c93a9ade2808d6· mergeThis pull request spent 19 minutes 24 seconds in the queue, including 19 minutes 14 seconds running CI.
Required conditions to merge
-conflict-draftbase = maincheck-success = CI passedgithub-review-approved[🛡 GitHub repository ruleset rulemain]label != brokencheck-success = Debug buildcheck-neutral = Debug buildcheck-skipped = Debug buildcheck-success = Unit testscheck-neutral = Unit testscheck-skipped = Unit testscheck-success = CI passedcheck-neutral = CI passedcheck-skipped = CI passedmain]:check-success = @github-actions/CI passedcheck-neutral = @github-actions/CI passedcheck-skipped = @github-actions/CI passed