Roaming: Caller ID hidden on home-country calls, CLIR override codes non-functional

Bug: Caller ID always hidden on calls to home-country (France) numbers while roaming, no way to override

DEVICE / FIRMWARE

  • Model: Mudita Kompakt
  • OS: MuditaOS K 1.6.0
  • Build fingerprint: Mudita/Kompakt/Kompakt:12/SP1A.210812.016/20260731:user/dev-keys
  • Android base: 12, security patch 2026-07-31
  • SIM: Free Mobile (France), physically roaming in Spain

SUMMARY
When roaming in Spain on a Free Mobile (France) SIM, outbound calls to French numbers always show as “Number withheld/Private” on the called party’s caller ID, with no way to override it. Calls placed at the same time, in the same location, on the same SIM, to Spanish numbers show the caller ID correctly. The same SIM in another Android phone does NOT reproduce the fault - calls to French numbers show caller ID correctly from that device, under the same roaming conditions. This points to a Kompakt-side telephony/dialer defect, not a SIM or carrier provisioning issue.

STEPS TO REPRODUCE

  1. Insert a Free Mobile (France) SIM into the Kompakt.
  2. Physically roam into Spain (SIM registers on a Spanish network - tested on Orange Espana automatically, and manually on Movistar; MCC 214).
  3. Place a voice call to any French mobile/landline number.
  4. Ask the called party (or check via a second line) whether caller ID was shown.

Expected: Caller ID shows the calling number (as it does for calls to Spanish numbers under identical conditions, and as it does from another Android phone using the same SIM).

Actual: Caller ID always shows as withheld/private for calls to French numbers. This is consistent across every network path tested.

ISOLATION TESTING ALREADY PERFORMED

  • Default state (VoLTE on, automatic network selection, Orange Espana): Hidden
  • VoLTE (“Enhanced 4G Calling”) and Wi-Fi Calling both disabled, forcing 3G circuit-switched voice (confirmed via getRilVoiceRadioTechnology=3(UMTS)): Still hidden - rules out this being an IMS/VoLTE-specific bug
  • Manual network selection to Movistar (instead of automatic/Orange Espana): Still hidden - rules out an Orange Espana-specific roaming interconnect issue
  • SIM moved from physical slot 2 to slot 1: Still hidden - rules out a slot/radio-specific cause
  • Kompakt Settings > Additional Settings > Caller ID (set to show number): No effect
  • Dialing #31# before the call: No effect (this code requests CLIR invocation - hides ID - so no effect was expected here)
  • Dialing *31#+33XXXXXXXXX before the call (the correct GSM code to force-suppress CLIR / show ID for a single call): No effect - see log evidence below
  • Same SIM, same location, calling the same French number from another Android phone: Caller ID shown correctly - confirms the SIM/network subscription is not permanently restricted

ROOT-CAUSE EVIDENCE: THE DIALER DOES NOT PARSE THE GSM MMI/CLIR CONTROL CODE
When dialing *31#+33XXXXXXXXX, adb logcat shows the Telecom framework treating the entire string - MMI prefix included - as a single literal number, rather than recognizing *31# as a supplementary-service control code (per 3GPP TS 22.030) and stripping it into a separate CLIR-suppression flag, which is what AOSP’s GsmMmiCode handling normally does:

CallRedirectionProcessorHelper: formatNumberToE164, original number: ***
CallRedirectionProcessorHelper: formatNumberToE164, formatted E164 number: null

The formatNumberToE164 call fails (returns null) because the string still contains the 31# prefix - it was never separated out. The masked handle=tel:*************** field in the Telecom call log is also the same length as the full *31#+33XXXXXXXXX string, not just the bare phone number, confirming the prefix rode along into the dialed handle instead of being consumed as an MMI code.

No Mmi, Clir, or Suppl-tagged log lines appear anywhere in logcat (system, main, or radio buffers) around this call - on stock AOSP, recognizing and processing an MMI/SS control string produces distinct log output from GsmMmiCode/ImsPhoneMmiCode. Its total absence here indicates this parsing path is either missing or not reached in MuditaOS K’s dialer/telephony stack (com.mudita.dial / com.android.services.telephony.TelephonyConnectionService).

HYPOTHESIS
Free Mobile’s home network appears to apply caller-ID presentation restriction by default for calls it routes back to France while the subscriber is roaming (a legitimate network-side default many operators use - normally overridden per-call via *31#, or permanently via the device’s “Show my Caller ID” setting). The Kompakt has no working mechanism to send that override - neither the MMI code path nor (apparently) the permanent Settings toggle results in a CLIR-suppression request reaching the network - so the network’s restrictive default is never countermanded. This is consistent with the network-side default being unaffected by which Spanish visited network is used (Orange vs. Movistar), and unaffected by which physical SIM slot is used, since CLIR presentation is a subscriber/home-network-level behavior, not something the visited network or radio slot decides independently.

SUGGESTED FIX
Verify/implement standard GSM/3GPP TS 22.030 supplementary-service control-string parsing in the dialer’s outgoing-call path (AOSP reference: GsmMmiCode.java / ImsPhoneMmiCode.java in frameworks/opt/telephony), so that *31#/#31# prefixes are recognized and translated into the correct CLIR flag on the outgoing call request (CS SETUP CLIR IE, or the IMS equivalent), instead of being passed through as part of the literal dial string. Separately, please verify that the Settings > Additional Settings > Caller ID toggle actually results in a CLIR-suppression request being sent for both circuit-switched and VoLTE/IMS call paths - it currently appears to have no effect either.

Happy to provide the full logcat capture or run further tests if useful.

1 Like

@fede Welcome to the Mudita Forum! We are glad you’re here :slight_smile:
I’m not familiar with those networks, but your report is quite impressive. However, before I escalate this, can you show me the settings you have on your sim card?

Also please check what the network uses as a default while roaming. If Free Mobile’s default while roaming happens to result in CLIR being applied on France-bound calls, then the behavior they’re observing is exactly what you’d expect.