Updated on 2026-08-14
This commit is contained in:
parent
3ec1b5c88e
commit
590888db59
6 changed files with 33 additions and 10 deletions
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,5 +7,5 @@ import android.content.Intent
|
|||
*/
|
||||
interface IntentHandler {
|
||||
|
||||
fun handleIntent(intent: Intent?): Boolean
|
||||
fun handleIntent(intent: Intent?, isFromForeground: Boolean): Boolean
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue