Task/Issue URL:
https://app.asana.com/1/137249556945/project/72649045549333/task/1215861246875405?focus=true
Tech Design URL (if applicable): N/A
### Description
PR 2/5
Adds a feature flag `ntpAsDefaultAfterIdleReturn` (in
`AndroidBrowserConfigFeature`, default **off**) that controls the
default "show on app launch" option.
When enabled together with the existing `showNTPAfterIdleReturn` flag,
users who have never explicitly chosen an option default to **New Tab
Page**.
### Steps to test this PR
A bit difficult to test because you need an old build that defaulted to
“Last Opened Tab” And never touched the inactivity. New users are forced
into NTP due to `ensureNewUserDefault`. You can test it by commenting
out the call to `ensureNewUserDefault()` to avoid overriding the option
for a fresh install and test without it.
- [x] With **both** `showNTPAfterIdleReturn` and
`ntpAsDefaultAfterIdleReturn` enabled, a user who hasn't picked a "show
on app launch" option defaults to **New Tab Page**.
- [x] With **either** flag off, an un-set user still defaults to **Last
Opened Tab** (today's behaviour).
- [x] A user who has **explicitly** picked an option keeps it,
regardless of the flags.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Changes default launch behavior and which RMF messages appear on NTP
(flag-gated), plus a DB migration and automatic message dismissal logic
that could affect messaging if misconfigured remotely.
>
> **Overview**
> Extends the **after-idle return to NTP** rollout with a new remote
flag **`ntpAsDefaultAfterIdleReturn`**. When it is on together with
**`showNTPAfterIdleReturn`**, users who never chose a “show on app
launch” option now default to **New Tab Page** instead of **Last Opened
Tab**; an explicit choice is unchanged.
>
> **Remote messaging** gains **display conditions**: optional
**`after_idle`** trigger (consumer passes context at read time) and
**`dismissAfterDaysShown`**, with first-impression timestamping,
auto-dismiss when the day threshold is met, and JSON parsing that drops
messages with unknown triggers. The NTP screen resolves
**`MessageTrigger.AFTER_IDLE`** via
**`AfterIdleMessageTriggerProvider`** and threads it into
**`observeActiveMessages`**. A new RMF attribute **`ntpAfterIdleState`**
targets **`notEligible` / `eligibleCardShown` / `eligibleCardHidden`**,
gated behind the same two flags.
>
> Also adds Room **v3** migration for **`firstShownDate`** on stored
messages and sets **`screenName = "settingsGeneral"`** on general
settings activity registration.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
6856f13827bb745f00dd1566e512b38f800bbecc. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->