Skip to content

Conversation

@alexjba
Copy link
Contributor

@alexjba alexjba commented Dec 10, 2025

What does the PR do

Iterating
#19545
#19546
#19547
#19548

Adding a KeycardChannelDrawer that's guiding the user whenever the keycard is needed.

On IOS the system drawer is used.

Screencapture of the functionality

Screen_Recording_20251210_154214_Status.mp4
ScreenRecording_12-10-2025.17-21-13_1.MP4
Screen.Recording.2025-12-10.at.15.11.49.mov

Impact on end user

How to test

desktop:
make run USE_STATUS_KEYCARD_QT=1
iOS:
make mobile-run USE_STATUS_KEYCARD_QT=1 DEVELOPMENT_TEAM=...
android:
make mobile-run

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@alexjba alexjba marked this pull request as ready for review December 10, 2025 16:40
@alexjba alexjba requested review from a team, caybro, micieslak and noeliaSD as code owners December 10, 2025 16:40
@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

✔️ status-desktop/e2e/prspr19549 🔹 ~17 min 🔹 7515f6e 🔹 📦 tests/e2e package

@alexjba alexjba requested a review from a team as a code owner December 11, 2025 08:13
@alexjba alexjba requested review from friofry and vkjr and removed request for a team December 11, 2025 08:13
@status-im-auto
Copy link
Member

…keycard interactions

Adding a `KeycardChannelDrawer` that's guiding the user whenever the keycard is needed.

On IOS the system drawer is used
@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@glitchminer
Copy link
Contributor

glitchminer commented Dec 12, 2025

Hi @alexjba , tried on Moto G55, Android 14. During onboarding flow (create with empty keycard) it consistently ends up on "Smartcard reader service unavailable" after "reading card" is shown in the drawer.

In the logs I can see it go from tag discovered
act=android.nfc.action.TAG_DISCOVERED flg=0x20000000 cmp=app.status.mobile/.StatusQtActivity (has extras)
to
Permission Denial: Tag ( ID: 04 95 35 A2 F0 6E 80 ) is out of date\n\x09at android.nfc.tech.IsoDep.isConnected(IsoDep.java:40)

view logcat (message:nfc) and screenshot image
025-12-12 09:52:20.461 15426-19416 libnfc_nci              com.android.nfc                      E  [ERROR:nfa_dm_discover.cc(2235)] NFA_DM_RF_DEACTIVATE_NTF p_data->nfc_discover.deactivate.reason = 0
2025-12-12 09:52:20.545 15426-19416 libnfc_nci              com.android.nfc                      E  [ERROR:NativeNfcTag.cpp(1512)] nativeNfcTag_doCheckNdefResult: Check Ndef Failed (flags =0x8) , (status =0xE8)
2025-12-12 09:52:20.546 15426-19416 libnfc_nci              com.android.nfc                      E  [ERROR:NativeNfcTag.cpp(1529)] nativeNfcTag_doCheckNdefResult: no NDEF content on the tag (status =0xE8)
2025-12-12 09:52:20.569 14120-15071 ActivityTaskManager     system_server                        W  startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { act=android.nfc.action.TAG_DISCOVERED flg=0x20000000 cmp=app.status.mobile/.StatusQtActivity (has extras) }
2025-12-12 09:52:20.576 14120-15071 ActivityTaskManager     system_server                        I  START u0 {act=android.nfc.action.TAG_DISCOVERED flg=0x20000000 cmp=app.status.mobile/.StatusQtActivity (has extras)} with LAUNCH_SINGLE_TOP from uid 10382 (realCallingUid=1027) (PendingIntentRecord) (BAL_ALLOW_VISIBLE_WINDOW) result code=3
2025-12-12 09:52:20.578 15426-15426 PowerManager            com.android.nfc                      V  userActivity when=28942359 event=0 flags=0 displayId=0 by (com.android.nfc) callers=com.android.nfc.NfcService$NfcServiceHandler.dispatchTagEndpoint:3801 com.android.nfc.NfcService$NfcServiceHandler.handleMessage:3343 android.os.Handler.dispatchMessage:111 
2025-12-12 09:52:20.585 15426-2650  Checkin                 com.android.nfc                      D  publish the event [tag = MOT_NFC_L1 event name = NfcEvent]
2025-12-12 09:52:28.429 15426-19416 libnfc_nci              com.android.nfc                      E  [ERROR:nfc_ncif.cc(1389)] nfc_ncif_proc_deactivate - evt_data.deactivate.reason 0, nfc_cb.deact_reason = 0
2025-12-12 09:52:28.442 15426-19416 libnfc_nci              com.android.nfc                      E  [ERROR:nfc_ncif.cc(1389)] nfc_ncif_proc_deactivate - evt_data.deactivate.reason 0, nfc_cb.deact_reason = 0
2025-12-12 09:52:28.442 15426-19416 libnfc_nci              com.android.nfc                      E  [ERROR:nfa_dm_discover.cc(2235)] NFA_DM_RF_DEACTIVATE_NTF p_data->nfc_discover.deactivate.reason = 0
2025-12-12 09:52:28.722  2040-2076  chronicles              app.status.mobile                    W  �[33mWRN�[0m 2025-12-12 09:52:28.716Z �[1mqt warning                                �[0m �[33mtopics�[0m=�[93m"qt"�[0m �[33mtid�[0m=�[94m2076�[0m �[33mcategory�[0m=�[94mdefault�[0m �[33mfile�[0m=�[94m:0�[0m �[33mtext�[0m=�[94m"java.lang.SecurityException: Permission Denial: Tag ( ID: 04 95 35 A2 F0 6E 80 ) is out of date\n\x09at android.nfc.Tag.getTagService(Tag.java:402)\n\x09at android.nfc.tech.BasicTagTechnology.isConnected(BasicTagTechnology.java:63)\n\x09at android.nfc.tech.IsoDep.isConnected(IsoDep.java:40)\n\x09at org.qtproject.qt.android.QtNative.startQtApplication(Native Method)\n\x09at org.qtproject.qt.android.QtNative$$ExternalSyntheticLambda5.run(D8$$SyntheticClass:0)\n\x09at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25)\n\x09at java.lang.Thread.run(Thread.java:1012)\n"�[0m
2025-12-12 09:52:28.725  2040-2076  chronicles              app.status.mobile                    W  �[33mWRN�[0m 2025-12-12 09:52:28.720Z �[1mqt warning                                �[0m �[33mtopics�[0m=�[93m"qt"�[0m �[33mtid�[0m=�[94m2076�[0m �[33mcategory�[0m=�[94mdefault�[0m �[33mfile�[0m=�[94m:0�[0m �[33mtext�[0m=�[94m"java.lang.SecurityException: Permission Denial: Tag ( ID: 04 95 35 A2 F0 6E 80 ) is out of date\n\x09at android.nfc.Tag.getTagService(Tag.java:402)\n\x09at android.nfc.tech.BasicTagTechnology.isConnected(BasicTagTechnology.java:63)\n\x09at android.nfc.tech.IsoDep.isConnected(IsoDep.java:40)\n\x09at org.qtproject.qt.android.QtNative.startQtApplication(Native Method)\n\x09at org.qtproject.qt.android.QtNative$$ExternalSyntheticLambda5.run(D8$$SyntheticClass:0)\n\x09at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25)\n\x09at java.lang.Thread.run(Thread.java:1012)\n"�[0m
2025-12-12 09:52:28.730  2040-2076  chronicles              app.status.mobile                    W  �[33mWRN�[0m 2025-12-12 09:52:28.724Z �[1mqt warning                                �[0m �[33mtopics�[0m=�[93m"qt"�[0m �[33mtid�[0m=�[94m2076�[0m �[33mcategory�[0m=�[94mdefault�[0m �[33mfile�[0m=�[94m:0�[0m �[33mtext�[0m=�[94m"java.lang.SecurityException: Permission Denial: Tag ( ID: 04 95 35 A2 F0 6E 80 ) is out of date\n\x09at android.nfc.Tag.getTagService(Tag.java:402)\n\x09at android.nfc.tech.BasicTagTechnology.isConnected(BasicTagTechnology.java:63)\n\x09at android.nfc.tech.IsoDep.isConnected(IsoDep.java:40)\n\x09at org.qtproject.qt.android.QtNative.startQtApplication(Native Method)\n\x09at org.qtproject.qt.android.QtNative$$ExternalSyntheticLambda5.run(D8$$SyntheticClass:0)\n\x09at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25)\n\x09at java.lang.Thread.run(Thread.java:1012)\n"�[0m
2025-12-12 09:53:35.463 14120-20769 PackageManager          system_server                        W  Missing required system package: com.google.android.apps.walletnfcrel, but found with extended search.

@glitchminer
Copy link
Contributor

glitchminer commented Dec 12, 2025

Tried Samsung A36, Android 15. Got further than the Moto but there appears to be a regression in backup seed phrase stage of onboarding, the phrase is not revealed. Then it got stuck on "Creating key pair on Keycard" screen.

Screenshots on first attempt image image image

Attempted closing app and retrying but got stuck at the initial "insert your keycard" stage

logcat on second attempt (message:nfc)
2025-12-12 10:50:57.036  2282-2326  ActivityTaskManager     system_server                        E  Background activity launch blocked! [callingPackage: app.status.mobile; callingPackageTargetSdk: 35; callingUid: 10357; callingPid: -1; appSwitchState: 2; callingUidHasVisibleActivity: true; callingUidHasVisibleNotPinnedActivity: true; callingUidHasNonAppVisibleWindow: false; callingUidProcState: TOP; isCallingUidPersistentSystemProcess: false; forcedBalByPiSender: BSP.NONE; intent: Intent { act=android.nfc.action.TAG_DISCOVERED flg=0x20000000 cmp=app.status.mobile/.StatusQtActivity (has extras) }; callerApp: null; balAllowedByPiCreator: BSP.NONE; balAllowedByPiCreatorWithHardening: BSP.NONE; resultIfPiCreatorAllowsBal: BAL_ALLOW_VISIBLE_WINDOW; hasRealCaller: true; isCallForResult: false; isPendingIntent: true; autoOptInReason: null; realCallingPackage: com.android.nfc; realCallingPackageTargetSdk: 35; realCallingUid: 1027; realCallingPid: 3812; realCallingUidHasVisibleActivity: false; realCallingUidHasVisibleNotPinnedActivity: false; realCallingUidHasNonAppVisibleWindow: false; realCallingUidProcState: PERSISTENT; isRealCallingUidPersistentSystemProcess: true; originatingPendingIntent: PendingIntentRecord{dc46095 app.status.mobile startActivity}; realCallerApp: null; balAllowedByPiSender: BSP.ALLOW_FGS; resultIfPiSenderAllowsBal: BAL_BLOCK; balImproveRealCallerVisibilityCheck: true; balRequireOptInByPendingIntentCreator: true; balRequireOptInSameUid: false; balRespectAppSwitchStateWhenCheckBoundByForegroundUid: true; balDontBringExistingBackgroundTaskStackToFg: true]
2025-12-12 10:50:57.046  2282-2326  ActivityTaskManager     system_server                        W  startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { act=android.nfc.action.TAG_DISCOVERED flg=0x20000000 cmp=app.status.mobile/.StatusQtActivity (has extras) }
2025-12-12 10:50:57.051  2282-2326  ActivityTaskManager     system_server                        I  START u0 {act=android.nfc.action.TAG_DISCOVERED flg=0x20000000 cmp=app.status.mobile/.StatusQtActivity (has extras)} with LAUNCH_SINGLE_TOP from uid 10357 (realCallingUid=1027) (BAL_BLOCK) result code=3
2025-12-12 10:50:57.054  2282-4169  VibratorManagerService  system_server                        D  vibrate - uid: 1027, opPkg: com.android.nfc, effect: Mono{mEffect=Composed{segments=[Step{amplitude=-1.0, frequencyHz=0.0, duration=200}], repeat=-1, mMagnitudeType=TYPE_EXTRA}}, attrs: VibrationAttributes{mUsage=HARDWARE_FEEDBACK, mAudioUsage= USAGE_UNKNOWN, mCategory=UNKNOWN, mFlags=0, tags=}, reason: null, token: android.os.BinderProxy@4040db8
2025-12-12 10:50:57.058  3812-3812  [NFC_SE]Sa...gExtension com.android.nfc                      D  onOemLogEventNotified: PersistableBundle[{techList=[android.nfc.tech.IsoDep, android.nfc.tech.NfcA], action=3}]
2025-12-12 10:50:57.058  3812-3812  [NFC_SE]NfcOemLogHelper com.android.nfc                      D  reportLogEvent = PersistableBundle[{techList=[android.nfc.tech.IsoDep, android.nfc.tech.NfcA], action=3}]
2025-12-12 10:50:57.058  3812-3812  [NFC_SE]NfcLogSender    com.android.nfc                      D  NfcLogMessage : {
                                                                                                        "DE_REV": "10",
                                                                                                        "DE_VEN": "NXP",
                                                                                                        "DE_FWV": "1.1.3d",
                                                                                                        "TG_ERR": 10,
                                                                                                        "TG_TYP": 8
                                                                                                    }, TAGF
2025-12-12 10:50:57.067  3812-1619  libnfc_nci              com.android.nfc                      D  nfcManager_doSetTimeout: tech=3, timeout=3000
2025-12-12 10:50:57.067  3812-4080  libnfc_nci              com.android.nfc                      D  nativeNfcTag_doHandleReconnect: targetHandle = 0
2025-12-12 10:50:57.067  3812-4080  libnfc_nci              com.android.nfc                      D  nativeNfcTag_doConnect: targetHandle = 0
2025-12-12 10:50:57.067  3812-4080  libnfc_nci              com.android.nfc                      E  nativeNfcTag_doConnect:  doConnect sCurrentConnectedTargetProtocol 4 sCurrentConnectedTargetType 3
2025-12-12 10:50:57.067  3812-4080  libnfc_nci              com.android.nfc                      D  notifyNfcEvt: evtString : nativeNfcTag_doConnect
2025-12-12 10:50:57.067  3812-4080  libnfc_nci              com.android.nfc                      D  nativeNfcTag_doConnect: exit 0x0
2025-12-12 10:50:57.068  3812-1619  libnfc_nci              com.android.nfc                      D  nativeNfcTag_doTransceive: enter; raw=1; timeout = 3000
2025-12-12 10:50:57.099  3812-4712  libnfc_nci              com.android.nfc                      D  notifyNfcEvt: evtString : nfaConnectionCallback
2025-12-12 10:50:57.099  3812-4712  libnfc_nci              com.android.nfc                      D  Enter NfcExtnsNtfHandler::nfaConnectionCallback()
2025-12-12 10:50:57.099  3812-4712  libnfc_nci              com.android.nfc                      D  NfcExtnsNtfHandler::nfaConnectionCallback: Unknown Event
2025-12-12 10:50:57.099  3812-4712  libnfc_nci              com.android.nfc                      D  Exit NfcExtnsNtfHandler::nfaConnectionCallback()

...

2025-12-12 10:50:58.377  3812-4712  libnfc_nci              com.android.nfc                      D  Exit NfcExtnsNtfHandler::nfaConnectionCallback()
2025-12-12 10:50:58.377  3812-4712  libnfc_nci              com.android.nfc                      D  NfcTag::setDeactivationState: state=0
2025-12-12 10:50:58.377  3812-4712  libnfc_nci              com.android.nfc                      E  NfcTag::connectionEventHandler: Already deactivated
2025-12-12 10:50:58.377  3812-4712  libnfc_nci              com.android.nfc                      D  nativeNfcTag_abortWaits
2025-12-12 10:50:58.966 11226-11256 chronicles              app.status.mobile                    W  �[33mWRN�[0m 2025-12-12 10:50:58.959Z �[1mqt warning                                �[0m �[33mtopics�[0m=�[93m"qt"�[0m �[33mtid�[0m=�[94m11256�[0m �[33mcategory�[0m=�[94mdefault�[0m �[33mfile�[0m=�[94m:0�[0m �[33mtext�[0m=�[94m"java.lang.SecurityException: Permission Denial: Tag ( ID: 04 95 35 A2 F0 6E 80 ) is out of date\n\x09at android.nfc.Tag.getTagService(Tag.java:381)\n\x09at android.nfc.tech.BasicTagTechnology.isConnected(BasicTagTechnology.java:63)\n\x09at android.nfc.tech.IsoDep.isConnected(IsoDep.java:40)\n\x09at org.qtproject.qt.android.QtNative.startQtApplication(Native Method)\n\x09at org.qtproject.qt.android.QtNative$$ExternalSyntheticLambda5.run(D8$$SyntheticClass:0)\n\x09at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25)\n\x09at java.lang.Thread.run(Thread.java:1012)\n"�[0m
image

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.

4 participants