Commit 04c476e
chore(runway): cherry-pick fix: Android ANR bug (#25596)
- fix: Android ANR bug cp-7.64.0 (#25551)
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
Fix: Prevent crash caused by Notifee BlockStateBroadcastReceiver during
cold start
## Summary
Fixes a crash that occurs when notification permission changes trigger
Notifee's `BlockStateBroadcastReceiver` before React Native is fully
initialized during app cold start.
## Solution
Disable Notifee's `BlockStateBroadcastReceiver` by adding an override in
`AndroidManifest.xml`. This is the most light weight solution.
Changes (Background Tracking Only):
User Changes Settings OUTSIDE the App
Before (with receiver enabled):
1. User closes MetaMask
2. User goes to Android Settings → Apps → MetaMask → Notifications
3. User toggles "Allow notifications" OFF
4. BlockStateBroadcastReceiver fires immediately
**5. MetaMask knows about the change (while app is closed)**
After (with receiver disabled):
1. User closes MetaMask
2. User goes to Android Settings → Apps → MetaMask → Notifications
3. User toggles "Allow notifications" OFF
4. Nothing happens in the background
**5. MetaMask detects the change next time app opens**
Builds to test:
Crash version:
https://app.bitrise.io/build/f78866d9-cb88-4789-8be0-dec2d7c18e20
Fixed version:
https://app.bitrise.io/build/cd177e81-6545-44ff-a20f-6c5ed11936b5?tab=artifacts
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry:Fix: Prevent crash caused by Notifee
BlockStateBroadcastReceiver during cold start
## **Related issues**
Fixes: [Fix: Prevent crash caused by Notifee BlockStateBroadcastReceiver
during cold start
](#25524)
## **Manual testing steps**
```gherkin
Scenario: App launches successfully when notification permission is disabled in Android Settings during cold start (After Fix)
Given the MetaMask app is completely closed
When I open Android Settings
And I navigate to "Apps" → "MetaMask" → "Notifications"
And I toggle "Allow notifications" to OFF
And I return to the home screen
And I tap the MetaMask app icon to launch it
Then the app should launch successfully
And I should not see any crash dialogs
And I should see the wallet home screen
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**

### **After**

<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Low risk manifest-only change; main impact is disabling Notifee’s
background receiver so notification permission toggles won’t be detected
until next app launch.
>
> **Overview**
> Prevents a cold-start crash/ANR by disabling Notifee’s
`app.notifee.core.BlockStateBroadcastReceiver` via an
`AndroidManifest.xml` override.
>
> This removes the receiver from the merged manifest (and marks it
`enabled="false"`), trading off background detection of Android
notification permission changes while the app is closed for startup
stability.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e00915c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>
[b566864](b566864)
Co-authored-by: Wei Sun <wei.sun@consensys.net>
Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>1 parent 90eeb96 commit 04c476e
1 file changed
Lines changed: 7 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
184 | 184 | | |
185 | 185 | | |
186 | 186 | | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
187 | 194 | | |
188 | 195 | | |
0 commit comments