From 52505482cfb2a80f525e4d4c49c2defe72d44184 Mon Sep 17 00:00:00 2001 From: Joshua Rogers Date: Tue, 3 Feb 2026 20:15:42 +0800 Subject: [PATCH] onActivityResult can hang forever if OK but data == null, and pending promise is not cleared (cherry picked from commit a330c1ee2261f192103ac4e7a2fa5d86e2c59b7f) --- .../java/com/expensify/wallet/WalletModule.kt | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/android/src/main/java/com/expensify/wallet/WalletModule.kt b/android/src/main/java/com/expensify/wallet/WalletModule.kt index 368f31f..d25e038 100644 --- a/android/src/main/java/com/expensify/wallet/WalletModule.kt +++ b/android/src/main/java/com/expensify/wallet/WalletModule.kt @@ -69,23 +69,29 @@ class WalletModule internal constructor(context: ReactApplicationContext) : pendingCreateWalletPromise?.resolve(resultCode == RESULT_OK) pendingCreateWalletPromise = null } else if (requestCode == REQUEST_CODE_PUSH_TOKENIZE) { + val localPromise = pendingPushTokenizePromise + pendingPushTokenizePromise = null if (resultCode == RESULT_OK) { - data?.let { - val tokenId = it.getStringExtra(TapAndPay.EXTRA_ISSUER_TOKEN_ID).toString() - sendEvent( - context, - OnCardActivatedEvent.NAME, - OnCardActivatedEvent("active", tokenId).toMap() - ) - pendingPushTokenizePromise?.resolve(TokenizationStatus.SUCCESS.code) + if (data == null) { + localPromise?.reject(E_OPERATION_FAILED, "Tokenization returned RESULT_OK but intent data was null") + return } + val tokenId = data.getStringExtra(TapAndPay.EXTRA_ISSUER_TOKEN_ID).toString() + sendEvent( + context, + OnCardActivatedEvent.NAME, + OnCardActivatedEvent("active", tokenId).toMap() + ) + localPromise?.resolve(TokenizationStatus.SUCCESS.code) } else if (resultCode == RESULT_CANCELED) { sendEvent( context, OnCardActivatedEvent.NAME, OnCardActivatedEvent("canceled", null).toMap() ) - pendingPushTokenizePromise?.resolve(TokenizationStatus.CANCELED.code) + localPromise?.resolve(TokenizationStatus.CANCELED.code) + } else { + localPromise?.reject(E_OPERATION_FAILED, "Tokenization failed with resultCode=$resultCode") } } }