Skip to content

build: bump version build iteration to 1.3.1+1#351

Merged
SERDUN merged 2 commits into
release/1.3.1from
fix/wt-1730-emergency-collision-1.3.1
Jul 16, 2026
Merged

build: bump version build iteration to 1.3.1+1#351
SERDUN merged 2 commits into
release/1.3.1from
fix/wt-1730-emergency-collision-1.3.1

Conversation

@SERDUN

@SERDUN SERDUN commented Jul 16, 2026

Copy link
Copy Markdown
Member

Overview

Patch for the release/1.3.1 line (in QA, DRAFT PR #347): cherry-picks the emergency-number collision fix from develop PR #349 (WT-1730). Android classifies some ordinary PBX short numbers as emergency for certain carriers/regions; self-managed ConnectionService then rejected the outgoing call. The decoy sip: Uri passed to telecom is now built centrally in TelephonyUtils with a percent-encoded number and the portadialer.internal host, and the dead emergency-number exception path is removed.

Changes (cherry-picked from #349)

  • Self-managed outgoing calls to numbers Android classifies as emergency are allowed (no special-casing).
  • Outgoing decoy sip: Uri construction centralized in TelephonyUtils, number percent-encoded, host portadialer.internal.
  • Dead EmergencyNumberException / failure-metadata plumbing removed on Android.
  • version bumped to 1.3.1+1.

Testing

  • flutter analyze clean across packages (pre-existing pigeons deprecation infos only), Flutter tests 207 green, Android native (Kotlin) tests BUILD SUCCESSFUL on this branch.

SERDUN and others added 2 commits July 16, 2026 21:13
…ncy (WT-1730) (#349)

* fix: allow self-managed calls to numbers Android classifies as emergency

TelecomManager.placeCall() blocks a self-managed PhoneAccount from ever
placing a call to a number the OS classifies as emergency, based purely
on the tel: address matching the device/SIM-region emergency-number
list - regardless of whether the number is actually reachable as one.
This silently drops calls to legitimate internal PBX extensions that
happen to collide with that list (e.g. an extension literally named
112 or 911).

Building the outgoing Uri as a sip: address instead of tel: sidesteps
the check entirely, since it only matches tel: addresses. The real
number keeps flowing unchanged via CallMetadata into
onCreateOutgoingConnection, which never reads the Uri - so this only
affects what Telecom itself sees for its own emergency classification,
not what actually gets dialed.

* build: use portadialer.internal instead of webtrit.invalid for the decoy sip: host

Same RFC-reserved, never-resolving intent (RFC 9476 .internal instead
of RFC 2606 .invalid), just a more identifiable name for this address
in logs.

* build: remove dead emergency-number exception handling on Android

The sip: scheme change means Android's Telecom never classifies our
outgoing calls as emergency anymore, so the code path that used to
catch and report an emergency-number failure can never run:

- removed EmergencyNumberException and its throw/catch sites
- removed the now-single-case-only OutgoingFailureType.EMERGENCY_NUMBER
- removed the now-unused TelephonyUtils.isEmergencyNumber() helper

The shared PCallRequestErrorEnum.emergencyNumber /
CallkeepCallRequestError.emergencyNumber wire values are left in place
deliberately: the Kotlin side encodes this enum by explicit raw Int
values while the Dart side decodes by list index, so removing an entry
from the middle would require re-aligning every value after it by hand
on both sides to avoid a silent wire-format mismatch. Nothing on the
Android side sets this value anymore either way.

* build: centralize outgoing decoy sip: Uri construction in TelephonyUtils

* build: percent-encode the number in the outgoing sip: Uri
@SERDUN
SERDUN merged commit e49efe6 into release/1.3.1 Jul 16, 2026
7 of 8 checks passed
@SERDUN
SERDUN deleted the fix/wt-1730-emergency-collision-1.3.1 branch July 16, 2026 18:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant