From a107f9299d2c4ee8e5548599853fccb71ccc9f7c Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 30 Apr 2026 18:22:20 +0400 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle.kts | 2 ++ .../main/java/com/tangem/tap/MainActivity.kt | 8 ++---- .../component/impl/DefaultRoutingComponent.kt | 28 ++++++++++++++++++- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7c7411dc8a..2bb419fc52 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -221,6 +221,8 @@ dependencies { implementation(projects.data.earn) implementation(projects.data.search) + implementation(projects.common.ui) + /** Features */ implementation(projects.features.referral.impl) implementation(projects.features.referral.domain) diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 5372f06248..d24ee9d8cf 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -30,10 +30,10 @@ import com.tangem.common.routing.deeplink.DeeplinkConst.WEBLINK_KEY import com.tangem.common.routing.deeplink.PayloadToDeeplinkConverter import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.decompose.context.AppComponentContext -import com.tangem.core.ui.extensions.LocalUserInteractionTracker -import com.tangem.core.ui.extensions.UserInteractionTracker import com.tangem.core.decompose.di.RootAppComponentContext import com.tangem.core.navigation.url.UrlOpener +import com.tangem.core.ui.extensions.LocalUserInteractionTracker +import com.tangem.core.ui.extensions.UserInteractionTracker import com.tangem.data.balancehiding.DefaultDeviceFlipDetector import com.tangem.data.card.sdk.CardSdkOwner import com.tangem.domain.apptheme.model.AppThemeMode @@ -43,7 +43,6 @@ import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.settings.SetGooglePayAvailabilityUseCase import com.tangem.domain.settings.SetGoogleServicesAvailabilityUseCase -import com.tangem.domain.settings.ShouldInitiallyAskPermissionUseCase import com.tangem.domain.settings.repositories.SettingsRepository import com.tangem.domain.staking.SendUnsubmittedHashesUseCase import com.tangem.domain.wallets.hot.HotWalletPasswordRequester @@ -127,9 +126,6 @@ class MainActivity : AppCompatActivity(), ActivityResultCallbackHolder { @Inject lateinit var cardRepository: CardRepository - @Inject - lateinit var shouldInitiallyAskPermissionUseCase: ShouldInitiallyAskPermissionUseCase - @Inject lateinit var backupServiceHolder: BackupServiceHolder diff --git a/app/src/main/java/com/tangem/tap/routing/component/impl/DefaultRoutingComponent.kt b/app/src/main/java/com/tangem/tap/routing/component/impl/DefaultRoutingComponent.kt index 40c3a80da7..595de7948b 100644 --- a/app/src/main/java/com/tangem/tap/routing/component/impl/DefaultRoutingComponent.kt +++ b/app/src/main/java/com/tangem/tap/routing/component/impl/DefaultRoutingComponent.kt @@ -11,6 +11,7 @@ import com.arkivanov.essenty.lifecycle.subscribe import com.google.android.material.snackbar.Snackbar import com.tangem.common.routing.AppRoute import com.tangem.common.routing.entity.InitScreenLaunchMode +import com.tangem.common.ui.notifications.NotificationId import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.analytics.api.AnalyticsExceptionHandler import com.tangem.core.analytics.models.Basic @@ -32,10 +33,15 @@ import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.isImported import com.tangem.domain.models.wallet.isLocked +import com.tangem.domain.notifications.repository.NotificationsRepository import com.tangem.domain.onboarding.repository.OnboardingRepository +import com.tangem.domain.settings.NeverRequestPermissionUseCase +import com.tangem.domain.settings.NeverToInitiallyAskPermissionUseCase +import com.tangem.domain.settings.ShouldInitiallyAskPermissionUseCase import com.tangem.features.hotwallet.HotAccessCodeRequestComponent import com.tangem.features.hotwallet.accesscoderequest.proxy.HotWalletPasswordRequesterProxy import com.tangem.features.onboarding.v2.common.analytics.OnboardingEvent +import com.tangem.features.pushnotifications.api.utils.PUSH_PERMISSION import com.tangem.features.walletconnect.components.WcRoutingComponent import com.tangem.hot.sdk.TangemHotSdk import com.tangem.hot.sdk.android.create @@ -84,6 +90,10 @@ internal class DefaultRoutingComponent @AssistedInject constructor( private val analyticsEventHandler: AnalyticsEventHandler, private val analyticsExceptionHandler: AnalyticsExceptionHandler, private val backupServiceHolder: BackupServiceHolder, + private val notificationsRepository: NotificationsRepository, + private val neverToInitiallyAskPermissionUseCase: NeverToInitiallyAskPermissionUseCase, + private val shouldInitiallyAskPermissionUseCase: ShouldInitiallyAskPermissionUseCase, + private val neverRequestPermissionUseCase: NeverRequestPermissionUseCase, ) : RoutingComponent, AppComponentContext by context, SnackbarHandler { @@ -174,7 +184,7 @@ internal class DefaultRoutingComponent @AssistedInject constructor( val userWallets = userWalletsListRepository.userWalletsSync() return when { - userWallets.isEmpty() -> AppRoute.Home(launchMode = launchMode) + userWallets.isEmpty() -> navigateForEmptyWallets() userWallets.any { it.isLocked } -> { AppRoute.Welcome( launchMode = launchMode, @@ -190,6 +200,22 @@ internal class DefaultRoutingComponent @AssistedInject constructor( } } + private suspend fun navigateForEmptyWallets(): AppRoute { + val shouldAskPushPermission = shouldInitiallyAskPermissionUseCase(PUSH_PERMISSION).getOrNull() + ?: return AppRoute.Home(launchMode = launchMode) + return if (shouldAskPushPermission) { + notificationsRepository.setShouldShowNotifications( + key = NotificationId.EnablePushesReminderNotification.key, + value = false, + ) + AppRoute.PushNotification(AppRoute.PushNotification.Source.Stories) + } else { + neverToInitiallyAskPermissionUseCase(PUSH_PERMISSION) + neverRequestPermissionUseCase(PUSH_PERMISSION) + AppRoute.Home(launchMode = launchMode) + } + } + @Composable override fun Content(modifier: Modifier) { RootContent(