From 9a8dd21d258b07fb48c66aca820782d6b840aad0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 12 Jan 2025 12:09:00 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/ActivityResultCaller.kt | 32 ---------------- .../com/tangem/tap/ApplicationEntryPoint.kt | 3 ++ .../tangem/tap/ForegroundActivityObserver.kt | 15 +------- .../java/com/tangem/tap/TangemApplication.kt | 7 +++- .../common/settings/IntentSettingsManager.kt | 38 ++++++++++++++++--- .../details/redux/DetailsMiddleware.kt | 6 ++- .../saveWallet/redux/SaveWalletMiddleware.kt | 7 +++- .../tap/proxy/redux/DaggerGraphState.kt | 2 + .../settings/DummySettingsManager.kt | 3 +- .../navigation/settings/SettingsManager.kt | 5 ++- .../viewmodel/QrScanningClickIntents.kt | 2 +- 11 files changed, 60 insertions(+), 60 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/ActivityResultCaller.kt diff --git a/app/src/main/java/com/tangem/tap/ActivityResultCaller.kt b/app/src/main/java/com/tangem/tap/ActivityResultCaller.kt deleted file mode 100644 index 3ef77ac909..0000000000 --- a/app/src/main/java/com/tangem/tap/ActivityResultCaller.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.tangem.tap - -import android.content.Intent -import android.hardware.biometrics.BiometricManager -import android.os.Build -import android.provider.Settings -import androidx.activity.result.ActivityResultLauncher - -interface ActivityResultCaller { - val activityResultLauncher: ActivityResultLauncher? -} - -internal fun ActivityResultCaller.openSystemBiometrySettings() { - val settingsAction = when { - Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> { - Settings.ACTION_BIOMETRIC_ENROLL - } - else -> { - Settings.ACTION_SECURITY_SETTINGS - } - } - val intent = Intent(settingsAction).apply { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - putExtra( - Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, - BiometricManager.Authenticators.BIOMETRIC_STRONG, - ) - } - } - - activityResultLauncher?.launch(intent) -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt b/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt index 80eac8dc24..0fb3d07ef0 100644 --- a/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt +++ b/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt @@ -8,6 +8,7 @@ import com.tangem.common.routing.AppRouter import com.tangem.core.analytics.filter.OneTimeEventFilter import com.tangem.core.configtoggle.blockchain.ExcludedBlockchainsManager import com.tangem.core.configtoggle.feature.FeatureTogglesManager +import com.tangem.core.navigation.settings.SettingsManager import com.tangem.core.navigation.share.ShareManager import com.tangem.core.navigation.url.UrlOpener import com.tangem.core.ui.clipboard.ClipboardManager @@ -128,4 +129,6 @@ interface ApplicationEntryPoint { fun getAppLogsStore(): AppLogsStore fun getClipboardManager(): ClipboardManager + + fun getSettingsManager(): SettingsManager } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/ForegroundActivityObserver.kt b/app/src/main/java/com/tangem/tap/ForegroundActivityObserver.kt index 5e2d1c0731..cb7805793c 100644 --- a/app/src/main/java/com/tangem/tap/ForegroundActivityObserver.kt +++ b/app/src/main/java/com/tangem/tap/ForegroundActivityObserver.kt @@ -2,17 +2,12 @@ package com.tangem.tap import android.app.Activity import android.app.Application.ActivityLifecycleCallbacks -import android.content.Intent import android.os.Bundle -import androidx.activity.result.ActivityResultLauncher -import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import java.util.WeakHashMap import kotlin.reflect.KClass -class ForegroundActivityObserver : ActivityResultCaller { - override var activityResultLauncher: ActivityResultLauncher? = null - private set +class ForegroundActivityObserver { private val activities = WeakHashMap, AppCompatActivity>() @@ -26,11 +21,6 @@ class ForegroundActivityObserver : ActivityResultCaller { internal inner class Callbacks : ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { - activityResultLauncher = (activity as? AppCompatActivity)?.registerForActivityResult( - ActivityResultContracts.StartActivityForResult(), - ) { - /* no-op */ - } } override fun onActivityResumed(activity: Activity) { @@ -39,9 +29,6 @@ class ForegroundActivityObserver : ActivityResultCaller { override fun onActivityDestroyed(activity: Activity) { activities.remove(activity::class) - if (activities.isEmpty()) { - activityResultLauncher = null - } } override fun onActivityStarted(activity: Activity) { diff --git a/app/src/main/java/com/tangem/tap/TangemApplication.kt b/app/src/main/java/com/tangem/tap/TangemApplication.kt index 83bba376a4..b0fe5e6533 100644 --- a/app/src/main/java/com/tangem/tap/TangemApplication.kt +++ b/app/src/main/java/com/tangem/tap/TangemApplication.kt @@ -20,6 +20,7 @@ import com.tangem.core.analytics.models.Basic import com.tangem.core.analytics.models.Basic.TransactionSent.WalletForm import com.tangem.core.configtoggle.blockchain.ExcludedBlockchainsManager import com.tangem.core.configtoggle.feature.FeatureTogglesManager +import com.tangem.core.navigation.settings.SettingsManager import com.tangem.core.ui.clipboard.ClipboardManager import com.tangem.datasource.api.common.MoshiConverter import com.tangem.datasource.api.common.createNetworkLoggingInterceptor @@ -74,7 +75,6 @@ import com.tangem.tap.domain.walletconnect2.domain.LegacyWalletConnectRepository lateinit var store: Store lateinit var foregroundActivityObserver: ForegroundActivityObserver -lateinit var activityResultCaller: ActivityResultCaller internal lateinit var derivationsFinder: DerivationsFinder abstract class TangemApplication : Application(), ImageLoaderFactory { @@ -202,6 +202,9 @@ abstract class TangemApplication : Application(), ImageLoaderFactory { private val clipboardManager: ClipboardManager get() = entryPoint.getClipboardManager() + + private val settingsManager: SettingsManager + get() = entryPoint.getSettingsManager() // endregion override fun onCreate() { @@ -231,7 +234,6 @@ abstract class TangemApplication : Application(), ImageLoaderFactory { tangemAppLoggerInitializer.initialize() foregroundActivityObserver = ForegroundActivityObserver() - activityResultCaller = foregroundActivityObserver registerActivityLifecycleCallbacks(foregroundActivityObserver.callbacks) // TODO: Try to performance and user experience. @@ -300,6 +302,7 @@ abstract class TangemApplication : Application(), ImageLoaderFactory { excludedBlockchains = excludedBlockchains, appPreferencesStore = appPreferencesStore, clipboardManager = clipboardManager, + settingsManager = settingsManager, ), ), ) diff --git a/app/src/main/java/com/tangem/tap/common/settings/IntentSettingsManager.kt b/app/src/main/java/com/tangem/tap/common/settings/IntentSettingsManager.kt index 145073e75c..ab6dd43f18 100644 --- a/app/src/main/java/com/tangem/tap/common/settings/IntentSettingsManager.kt +++ b/app/src/main/java/com/tangem/tap/common/settings/IntentSettingsManager.kt @@ -3,18 +3,46 @@ package com.tangem.tap.common.settings import android.content.Context import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_NEW_TASK +import android.hardware.biometrics.BiometricManager import android.net.Uri +import android.os.Build import android.provider.Settings import com.tangem.core.navigation.settings.SettingsManager internal class IntentSettingsManager(val context: Context) : SettingsManager { - override fun openSettings() { - val openSettingsIntent = Intent( + + override fun openAppSettings() { + val intent = Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", context.packageName, null), - ).apply { - flags = FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK + ) + + open(intent = intent) + } + + override fun openBiometricSettings() { + val settingsAction = when { + Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> Settings.ACTION_BIOMETRIC_ENROLL + else -> Settings.ACTION_SECURITY_SETTINGS } - context.startActivity(openSettingsIntent) + + val intent = Intent(settingsAction).apply { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + putExtra( + Settings.EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, + BiometricManager.Authenticators.BIOMETRIC_STRONG, + ) + } + } + + open(intent = intent) + } + + private fun open(intent: Intent) { + context.startActivity( + intent.apply { + flags = FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK + }, + ) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index 713ffe5c9a..106bc50e1e 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -8,7 +8,6 @@ import com.tangem.common.routing.AppRoute import com.tangem.core.analytics.Analytics import com.tangem.domain.apptheme.model.AppThemeMode import com.tangem.domain.models.scan.ScanResponse -import com.tangem.tap.* import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.tap.common.analytics.events.Settings import com.tangem.tap.common.extensions.dispatchNavigationAction @@ -18,6 +17,9 @@ import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.proxy.redux.DaggerGraphState +import com.tangem.tap.scope +import com.tangem.tap.store +import com.tangem.tap.tangemSdkManager import com.tangem.utils.coroutines.JobHolder import com.tangem.utils.coroutines.saveIn import kotlinx.coroutines.delay @@ -112,7 +114,7 @@ class DetailsMiddleware { private fun enrollBiometrics() { Analytics.send(Settings.AppSettings.ButtonEnableBiometricAuthentication) - activityResultCaller.openSystemBiometrySettings() + store.inject(DaggerGraphState::settingsManager).openBiometricSettings() } private fun changeAppThemeMode(appThemeMode: AppThemeMode) { diff --git a/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt index 2c7903ad60..cc39db075a 100644 --- a/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt @@ -8,7 +8,6 @@ import com.tangem.core.analytics.Analytics import com.tangem.core.analytics.models.event.MainScreenAnalyticsEvent import com.tangem.domain.wallets.builder.UserWalletBuilder import com.tangem.domain.wallets.models.UserWallet -import com.tangem.tap.* import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.tap.common.analytics.events.Onboarding import com.tangem.tap.common.extensions.dispatchNavigationAction @@ -17,7 +16,11 @@ import com.tangem.tap.common.extensions.inject import com.tangem.tap.common.extensions.onUserWalletSelected import com.tangem.tap.common.redux.AppState import com.tangem.tap.features.onboarding.products.wallet.redux.OnboardingWalletAction +import com.tangem.tap.mainScope import com.tangem.tap.proxy.redux.DaggerGraphState +import com.tangem.tap.scope +import com.tangem.tap.store +import com.tangem.tap.tangemSdkManager import com.tangem.utils.coroutines.JobHolder import com.tangem.utils.coroutines.saveIn import kotlinx.coroutines.launch @@ -97,7 +100,7 @@ internal class SaveWalletMiddleware { } private fun enrollBiometrics() { - activityResultCaller.openSystemBiometrySettings() + store.inject(DaggerGraphState::settingsManager).openBiometricSettings() } private fun allowToUseBiometrics(state: SaveWalletState) = scope.launch { diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt index ef18e4fe77..6de664b3ce 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt @@ -4,6 +4,7 @@ import com.tangem.blockchainsdk.BlockchainSDKFactory import com.tangem.blockchainsdk.signer.TransactionSignerFactory import com.tangem.blockchainsdk.utils.ExcludedBlockchains import com.tangem.common.routing.AppRouter +import com.tangem.core.navigation.settings.SettingsManager import com.tangem.core.navigation.share.ShareManager import com.tangem.core.navigation.url.UrlOpener import com.tangem.core.ui.clipboard.ClipboardManager @@ -77,4 +78,5 @@ data class DaggerGraphState( val excludedBlockchains: ExcludedBlockchains? = null, val appPreferencesStore: AppPreferencesStore? = null, val clipboardManager: ClipboardManager? = null, + val settingsManager: SettingsManager? = null, ) : StateType \ No newline at end of file diff --git a/core/navigation/src/main/java/com/tangem/core/navigation/settings/DummySettingsManager.kt b/core/navigation/src/main/java/com/tangem/core/navigation/settings/DummySettingsManager.kt index 25c4706fb9..a5148c68c0 100644 --- a/core/navigation/src/main/java/com/tangem/core/navigation/settings/DummySettingsManager.kt +++ b/core/navigation/src/main/java/com/tangem/core/navigation/settings/DummySettingsManager.kt @@ -1,5 +1,6 @@ package com.tangem.core.navigation.settings class DummySettingsManager : SettingsManager { - override fun openSettings() { /* no-op */ } + override fun openAppSettings() = Unit + override fun openBiometricSettings() = Unit } \ No newline at end of file diff --git a/core/navigation/src/main/java/com/tangem/core/navigation/settings/SettingsManager.kt b/core/navigation/src/main/java/com/tangem/core/navigation/settings/SettingsManager.kt index 4be904c9cb..20ffee2885 100644 --- a/core/navigation/src/main/java/com/tangem/core/navigation/settings/SettingsManager.kt +++ b/core/navigation/src/main/java/com/tangem/core/navigation/settings/SettingsManager.kt @@ -1,5 +1,8 @@ package com.tangem.core.navigation.settings interface SettingsManager { - fun openSettings() + + fun openAppSettings() + + fun openBiometricSettings() } \ No newline at end of file diff --git a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningClickIntents.kt b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningClickIntents.kt index cc5dd3518a..adfaf8bcff 100644 --- a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningClickIntents.kt +++ b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningClickIntents.kt @@ -62,6 +62,6 @@ internal class QrScanningClickIntentsImplementor @Inject constructor( } override fun onSettingsClick() { - settingsManager.openSettings() + settingsManager.openAppSettings() } } \ No newline at end of file