Fix FaceTime notification tap intents#3080
Draft
franklinho wants to merge 4 commits into
Draft
Conversation
Member
|
Hey @franklinho thank you for contributing! The one thing I'll request is that you rebase from the |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes incoming FaceTime notification tap intents so the notification body opens the current call overlay instead of potentially reusing a stale
PendingIntent.Also includes narrow Android build fixes needed to validate this branch from the current 1.15 app source.
Problem
CreateIncomingFaceTimeNotificationcurrently creates the body tapPendingIntentwith:0for every callFLAG_IMMUTABLEFLAG_UPDATE_CURRENTAndroid compares
PendingIntents using the wrapped intent identity and request code, not extras. That means a priorOpenSummaryintent can be reused and keep stale/missing extras such ascallUuid. When the user taps an incoming FaceTime notification, the app may launch/clear the notification without the Dart intent handler seeing the currentcallUuid, so it never shows the FaceTime overlay or answer option.What changed
notificationIdas the body tap request code instead of0.FLAG_IMMUTABLE | FLAG_UPDATE_CURRENTfor the FaceTime body, answer, and ignore intents.chipweinberger/flutter_isolateGit dependency with the hostedflutter_isolate: ^2.1.0package, matching newer app branches.video_playerto^2.9.1and overridevideo_player_androidto2.7.16, avoiding the older Android plugin's Java 8-Werrorfailure on modern JDKs while staying Dart 3.5-compatible.Local evidence
Observed on an Android BlueBubbles 1.15.0 client with server FaceTime calling enabled:
Incoming FaceTime call ... (Call UUID: 189796D2-3653-49F1-9710-A7AA565B3519)Incoming FaceTime call ... (Call UUID: 199ACD00-D7D3-44A6-B9B6-8DFA6C05A85D)NEW_FACETIME_NOTIFICATIONnotifications oncom.bluebubbles.incoming_facetimes.AnswerFaceTime,showFaceTimeOverlay, or equivalent handling ofcallUuidafter the tap.This points to the notification click intent losing/not carrying the current call extras rather than a server/helper detection regression.
Verification
Validated locally with Flutter 3.24.5 / Dart 3.5.4:
Results:
Installed the
betadebug flavor side-by-side on the same Android device ascom.bluebubbles.messaging.beta, seeded it with the same server URL/password, and confirmed it connected to the server.Runtime tap-path validation:
Android delivered the intent to the running app:
The app then opened the incoming FaceTime overlay with
CodexCaller,Incoming FaceTime Video Call, and Accept/Ignore actions. This verifies that once the notification body tap delivers the currentcallUuid, the Dart side opens the FaceTime option correctly.Device install limitation:
The connected phone has the Play-signed production package installed. Android correctly rejected replacing it with a debug-signed
prodAPK:So the patched production package was built, but not installed over the user's configured production app.