Skip to content

Commit 04c476e

Browse files
runway-github[bot]weitingsunmetamaskbot
authored
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** ![crashed](https://github.com/user-attachments/assets/5031a720-dec4-4b4a-9daa-3fc0f19a9847) ### **After** ![no crash](https://github.com/user-attachments/assets/7be5a943-e477-4379-8678-994584e116a6) <!-- [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

File tree

android/app/src/main/AndroidManifest.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,5 +184,12 @@
184184
android:resource="@xml/filepaths"
185185
/>
186186
</provider>
187+
188+
<!-- Disable Notifee's BlockStateBroadcastReceiver to prevent crash during cold start -->
189+
<!-- This receiver tries to access React Native before it's initialized -->
190+
<receiver
191+
android:name="app.notifee.core.BlockStateBroadcastReceiver"
192+
android:enabled="false"
193+
tools:node="remove" />
187194
</application>
188195
</manifest>

0 commit comments

Comments
 (0)