From 590888db59a9210e59e2e4d16632eec5077e8117 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 29 May 2024 15:22:52 +0100 Subject: [PATCH] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 26 +++++++++++++++++-- .../features/intentHandler/IntentHandler.kt | 2 +- .../features/intentHandler/IntentProcessor.kt | 4 +-- .../handlers/BackgroundScanIntentHandler.kt | 3 ++- .../WalletConnectLinkIntentHandler.kt | 2 +- .../welcome/redux/WelcomeMiddleware.kt | 6 ++--- 6 files changed, 33 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 78b55f9ecb..982967b3ea 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -2,10 +2,13 @@ package com.tangem.tap import android.Manifest import android.annotation.SuppressLint +import android.app.PendingIntent import android.content.Intent +import android.content.IntentFilter import android.content.pm.ActivityInfo import android.content.pm.PackageManager import android.content.res.Configuration +import android.nfc.NfcAdapter import android.os.Build import android.os.Bundle import android.view.View @@ -290,12 +293,31 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac override fun onResume() { super.onResume() + val nfcAdapter = NfcAdapter.getDefaultAdapter(this) + val pendingIntent = PendingIntent.getActivity( + this, + 0, + Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), + PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE, + ) + val intentFilters = arrayOf( + IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED), + IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED), + IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED), + ) + nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilters, null) // TODO: RESEARCH! NotificationsHandler is created in onResume and destroyed in onStop notificationsHandler = NotificationsHandler(binding.fragmentContainer) navigateToInitialScreenIfNeeded(intent) } + override fun onPause() { + super.onPause() + val nfcAdapter = NfcAdapter.getDefaultAdapter(this) + nfcAdapter.disableForegroundDispatch(this) + } + override fun onStop() { notificationsHandler = null dialogManager.onStop() @@ -348,7 +370,7 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac cardSdkLifecycleObserver.onCreate(context = this) lifecycleScope.launch { - intentProcessor.handleIntent(intent) + intentProcessor.handleIntent(intent, true) } if (intent != null) { @@ -456,7 +478,7 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac } else { store.dispatch(NavigationAction.NavigateTo(AppScreen.Home)) lifecycleScope.launch { - intentProcessor.handleIntent(intentWhichStartedActivity) + intentProcessor.handleIntent(intentWhichStartedActivity, false) } } diff --git a/app/src/main/java/com/tangem/tap/features/intentHandler/IntentHandler.kt b/app/src/main/java/com/tangem/tap/features/intentHandler/IntentHandler.kt index 7458f759ba..c420052753 100644 --- a/app/src/main/java/com/tangem/tap/features/intentHandler/IntentHandler.kt +++ b/app/src/main/java/com/tangem/tap/features/intentHandler/IntentHandler.kt @@ -7,5 +7,5 @@ import android.content.Intent */ interface IntentHandler { - fun handleIntent(intent: Intent?): Boolean + fun handleIntent(intent: Intent?, isFromForeground: Boolean): Boolean } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/intentHandler/IntentProcessor.kt b/app/src/main/java/com/tangem/tap/features/intentHandler/IntentProcessor.kt index 696827a0e3..8ca7a84a1b 100644 --- a/app/src/main/java/com/tangem/tap/features/intentHandler/IntentProcessor.kt +++ b/app/src/main/java/com/tangem/tap/features/intentHandler/IntentProcessor.kt @@ -19,9 +19,9 @@ class IntentProcessor { intentHandlers.clear() } - fun handleIntent(intent: Intent?) { + fun handleIntent(intent: Intent?, isFromForeground: Boolean) { intentHandlers.forEach { - it.handleIntent(intent) + it.handleIntent(intent, isFromForeground) } } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/intentHandler/handlers/BackgroundScanIntentHandler.kt b/app/src/main/java/com/tangem/tap/features/intentHandler/handlers/BackgroundScanIntentHandler.kt index cd46a39fad..14c831cc90 100644 --- a/app/src/main/java/com/tangem/tap/features/intentHandler/handlers/BackgroundScanIntentHandler.kt +++ b/app/src/main/java/com/tangem/tap/features/intentHandler/handlers/BackgroundScanIntentHandler.kt @@ -25,7 +25,8 @@ class BackgroundScanIntentHandler( NfcAdapter.ACTION_TAG_DISCOVERED, ) - override fun handleIntent(intent: Intent?): Boolean { + override fun handleIntent(intent: Intent?, isFromForeground: Boolean): Boolean { + if (isFromForeground) return true if (intent == null || intent.action !in nfcActions) return false val tag: Tag? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { diff --git a/app/src/main/java/com/tangem/tap/features/intentHandler/handlers/WalletConnectLinkIntentHandler.kt b/app/src/main/java/com/tangem/tap/features/intentHandler/handlers/WalletConnectLinkIntentHandler.kt index 46f7d2d07d..273ca6d3b2 100644 --- a/app/src/main/java/com/tangem/tap/features/intentHandler/handlers/WalletConnectLinkIntentHandler.kt +++ b/app/src/main/java/com/tangem/tap/features/intentHandler/handlers/WalletConnectLinkIntentHandler.kt @@ -14,7 +14,7 @@ import java.net.URLDecoder */ class WalletConnectLinkIntentHandler : IntentHandler { - override fun handleIntent(intent: Intent?): Boolean { + override fun handleIntent(intent: Intent?, isFromForeground: Boolean): Boolean { val intentData = intent?.data ?: return false val scheme = intent.scheme ?: return false diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt index 1f1c3132a0..abfc205397 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt @@ -70,7 +70,7 @@ internal class WelcomeMiddleware { scope = scope, hasSavedUserWalletsProvider = { true }, ) - val isBackgroundScanHandled = handler.handleIntent(initialIntent) + val isBackgroundScanHandled = handler.handleIntent(initialIntent, isFromForeground = false) val hasUncompletedBackup = backupService.hasIncompletedBackup if (!isBackgroundScanHandled && !hasUncompletedBackup) { @@ -103,7 +103,7 @@ internal class WelcomeMiddleware { store.onUserWalletSelected(userWallet = selectedUserWallet) afterUnlockIntent?.let { - WalletConnectLinkIntentHandler().handleIntent(it) + WalletConnectLinkIntentHandler().handleIntent(it, false) } } } @@ -135,7 +135,7 @@ internal class WelcomeMiddleware { store.onUserWalletSelected(userWallet = userWallet) afterScanIntent?.let { - WalletConnectLinkIntentHandler().handleIntent(it) + WalletConnectLinkIntentHandler().handleIntent(it, false) } } }