From 29ccd49192a3561da2295249226d8741256280f6 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 25 Sep 2024 17:00:13 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/ApplicationEntryPoint.kt | 4 +-- .../java/com/tangem/tap/TangemApplication.kt | 10 +++--- .../common/feedback/LegacyFeedbackManager.kt | 20 ++--------- .../tap/di/domain/FeedbackDomainModule.kt | 6 ++-- .../tap/proxy/redux/DaggerGraphState.kt | 4 +-- data/feedback/build.gradle.kts | 3 +- .../feedback/DefaultFeedbackRepository.kt | 35 +++++++++---------- .../feedback/di/FeedbackRepositoryModule.kt | 10 +++--- ...UseCase.kt => SendFeedbackEmailUseCase.kt} | 8 +++-- .../feedback/repository/FeedbackRepository.kt | 2 ++ 10 files changed, 47 insertions(+), 55 deletions(-) rename domain/feedback/src/main/java/com/tangem/domain/feedback/{GetFeedbackEmailUseCase.kt => SendFeedbackEmailUseCase.kt} (91%) diff --git a/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt b/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt index 721881e654..e9acc1599b 100644 --- a/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt +++ b/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt @@ -18,8 +18,8 @@ import com.tangem.domain.balancehiding.repositories.BalanceHidingRepository import com.tangem.domain.card.ScanCardProcessor import com.tangem.domain.card.repository.CardRepository import com.tangem.domain.feedback.GetCardInfoUseCase -import com.tangem.domain.feedback.GetFeedbackEmailUseCase import com.tangem.domain.feedback.SaveBlockchainErrorUseCase +import com.tangem.domain.feedback.SendFeedbackEmailUseCase import com.tangem.domain.onboarding.SaveTwinsOnboardingShownUseCase import com.tangem.domain.onboarding.WasTwinsOnboardingShownUseCase import com.tangem.domain.settings.repositories.SettingsRepository @@ -99,7 +99,7 @@ interface ApplicationEntryPoint { fun getBlockchainSDKFactory(): BlockchainSDKFactory - fun getGetFeedbackEmailUseCase(): GetFeedbackEmailUseCase + fun getSendFeedbackEmailUseCase(): SendFeedbackEmailUseCase fun getSaveBlockchainErrorUseCase(): SaveBlockchainErrorUseCase diff --git a/app/src/main/java/com/tangem/tap/TangemApplication.kt b/app/src/main/java/com/tangem/tap/TangemApplication.kt index 2ee80c884e..3a5aaedb74 100644 --- a/app/src/main/java/com/tangem/tap/TangemApplication.kt +++ b/app/src/main/java/com/tangem/tap/TangemApplication.kt @@ -28,8 +28,8 @@ import com.tangem.domain.card.ScanCardProcessor import com.tangem.domain.card.repository.CardRepository import com.tangem.domain.common.LogConfig import com.tangem.domain.feedback.GetCardInfoUseCase -import com.tangem.domain.feedback.GetFeedbackEmailUseCase import com.tangem.domain.feedback.SaveBlockchainErrorUseCase +import com.tangem.domain.feedback.SendFeedbackEmailUseCase import com.tangem.domain.onboarding.SaveTwinsOnboardingShownUseCase import com.tangem.domain.onboarding.WasTwinsOnboardingShownUseCase import com.tangem.domain.settings.repositories.SettingsRepository @@ -156,8 +156,8 @@ abstract class TangemApplication : Application(), ImageLoaderFactory { private val blockchainSDKFactory: BlockchainSDKFactory get() = entryPoint.getBlockchainSDKFactory() - private val getFeedbackEmailUseCase: GetFeedbackEmailUseCase - get() = entryPoint.getGetFeedbackEmailUseCase() + private val sendFeedbackEmailUseCase: SendFeedbackEmailUseCase + get() = entryPoint.getSendFeedbackEmailUseCase() private val saveBlockchainErrorUseCase: SaveBlockchainErrorUseCase get() = entryPoint.getSaveBlockchainErrorUseCase() @@ -255,7 +255,7 @@ abstract class TangemApplication : Application(), ImageLoaderFactory { settingsRepository = settingsRepository, blockchainSDKFactory = blockchainSDKFactory, saveBlockchainErrorUseCase = saveBlockchainErrorUseCase, - getFeedbackEmailUseCase = getFeedbackEmailUseCase, + sendFeedbackEmailUseCase = sendFeedbackEmailUseCase, getCardInfoUseCase = getCardInfoUseCase, assetLoader = assetLoader, urlOpener = urlOpener, @@ -312,7 +312,7 @@ abstract class TangemApplication : Application(), ImageLoaderFactory { private fun initFeedbackManager(store: Store) { Log.addLogger(logger = tangemSdkLogger) - val feedbackManager = LegacyFeedbackManager(getFeedbackEmailUseCase = getFeedbackEmailUseCase) + val feedbackManager = LegacyFeedbackManager(sendFeedbackEmailUseCase = sendFeedbackEmailUseCase) store.dispatch(GlobalAction.SetFeedbackManager(feedbackManager)) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/feedback/LegacyFeedbackManager.kt b/app/src/main/java/com/tangem/tap/common/feedback/LegacyFeedbackManager.kt index 412b3b542b..2fe68c1130 100644 --- a/app/src/main/java/com/tangem/tap/common/feedback/LegacyFeedbackManager.kt +++ b/app/src/main/java/com/tangem/tap/common/feedback/LegacyFeedbackManager.kt @@ -1,34 +1,20 @@ package com.tangem.tap.common.feedback -import com.tangem.core.navigation.email.EmailSender -import com.tangem.domain.feedback.GetFeedbackEmailUseCase +import com.tangem.domain.feedback.SendFeedbackEmailUseCase import com.tangem.domain.feedback.models.FeedbackEmailType -import com.tangem.tap.common.extensions.inject -import com.tangem.tap.proxy.redux.DaggerGraphState import com.tangem.tap.scope -import com.tangem.tap.store import kotlinx.coroutines.launch /** [REDACTED_AUTHOR] */ class LegacyFeedbackManager( - private val getFeedbackEmailUseCase: GetFeedbackEmailUseCase, + private val sendFeedbackEmailUseCase: SendFeedbackEmailUseCase, ) { - // TODO: [REDACTED_JIRA] fun sendEmail(type: FeedbackEmailType) { scope.launch { - val email = getFeedbackEmailUseCase(type = type) - - store.inject(DaggerGraphState::emailSender).send( - email = EmailSender.Email( - address = email.address, - subject = email.subject, - message = email.message, - attachment = email.file, - ), - ) + sendFeedbackEmailUseCase(type = type) } } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/domain/FeedbackDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/FeedbackDomainModule.kt index 04f4f03fb8..b905aa7edc 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/FeedbackDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/FeedbackDomainModule.kt @@ -2,8 +2,8 @@ package com.tangem.tap.di.domain import android.content.Context import com.tangem.domain.feedback.GetCardInfoUseCase -import com.tangem.domain.feedback.GetFeedbackEmailUseCase import com.tangem.domain.feedback.SaveBlockchainErrorUseCase +import com.tangem.domain.feedback.SendFeedbackEmailUseCase import com.tangem.domain.feedback.repository.FeedbackRepository import dagger.Module import dagger.Provides @@ -27,8 +27,8 @@ internal object FeedbackDomainModule { fun provideGetFeedbackEmailUseCase( feedbackRepository: FeedbackRepository, @ApplicationContext context: Context, - ): GetFeedbackEmailUseCase { - return GetFeedbackEmailUseCase(feedbackRepository = feedbackRepository, resources = context.resources) + ): SendFeedbackEmailUseCase { + return SendFeedbackEmailUseCase(feedbackRepository = feedbackRepository, resources = context.resources) } @Provides 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 cf0df4489b..a9dfc44797 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 @@ -16,8 +16,8 @@ import com.tangem.domain.card.ScanCardUseCase import com.tangem.domain.card.repository.CardRepository import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.domain.feedback.GetCardInfoUseCase -import com.tangem.domain.feedback.GetFeedbackEmailUseCase import com.tangem.domain.feedback.SaveBlockchainErrorUseCase +import com.tangem.domain.feedback.SendFeedbackEmailUseCase import com.tangem.domain.onboarding.SaveTwinsOnboardingShownUseCase import com.tangem.domain.onboarding.WasTwinsOnboardingShownUseCase import com.tangem.domain.settings.repositories.SettingsRepository @@ -75,7 +75,7 @@ data class DaggerGraphState( val blockchainSDKFactory: BlockchainSDKFactory? = null, val emailSender: EmailSender? = null, val saveBlockchainErrorUseCase: SaveBlockchainErrorUseCase? = null, - val getFeedbackEmailUseCase: GetFeedbackEmailUseCase? = null, + val sendFeedbackEmailUseCase: SendFeedbackEmailUseCase? = null, val getCardInfoUseCase: GetCardInfoUseCase? = null, val assetLoader: AssetLoader? = null, val stakingRouter: StakingRouter? = null, diff --git a/data/feedback/build.gradle.kts b/data/feedback/build.gradle.kts index e936310c64..5f75809008 100644 --- a/data/feedback/build.gradle.kts +++ b/data/feedback/build.gradle.kts @@ -31,9 +31,10 @@ dependencies { // region Core modules implementation(projects.core.datasource) + implementation(projects.core.navigation) + implementation(projects.core.utils) // endregion - implementation(projects.core.utils) implementation(projects.domain.feedback) implementation(projects.domain.legacy) diff --git a/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt b/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt index 4b018346c2..17f8dca358 100644 --- a/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt +++ b/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt @@ -1,21 +1,18 @@ package com.tangem.data.feedback -import android.content.Context -import android.content.pm.PackageInfo import android.os.Build import com.tangem.blockchain.common.Blockchain +import com.tangem.core.navigation.email.EmailSender import com.tangem.data.feedback.converters.BlockchainInfoConverter import com.tangem.data.feedback.converters.CardInfoConverter import com.tangem.datasource.local.logs.AppLogsStore import com.tangem.datasource.local.walletmanager.WalletManagersStore -import com.tangem.domain.feedback.models.BlockchainErrorInfo -import com.tangem.domain.feedback.models.BlockchainInfo -import com.tangem.domain.feedback.models.PhoneInfo -import com.tangem.domain.feedback.models.UserWalletsInfo +import com.tangem.domain.feedback.models.* import com.tangem.domain.feedback.repository.FeedbackRepository import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.domain.wallets.models.UserWalletId +import com.tangem.utils.version.AppVersionProvider import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update import timber.log.Timber @@ -27,7 +24,8 @@ import java.io.File * @property appLogsStore app logs store * @property userWalletsListManager user wallets list manager * @property walletManagersStore wallet managers store - * @property context context for getting app version + * @property emailSender email sender + * @property appVersionProvider app version provider * [REDACTED_AUTHOR] */ @@ -35,7 +33,8 @@ internal class DefaultFeedbackRepository( private val appLogsStore: AppLogsStore, private val userWalletsListManager: UserWalletsListManager, private val walletManagersStore: WalletManagersStore, - private val context: Context, + private val emailSender: EmailSender, + private val appVersionProvider: AppVersionProvider, ) : FeedbackRepository { private val blockchainsErrors = MutableStateFlow>(emptyMap()) @@ -73,7 +72,7 @@ internal class DefaultFeedbackRepository( return PhoneInfo( phoneModel = Build.MODEL, osVersion = Build.VERSION.SDK_INT.toString(), - appVersion = getAppVersion(), + appVersion = appVersionProvider.versionName, ) } @@ -95,14 +94,14 @@ internal class DefaultFeedbackRepository( override fun getLogFile(): File? = appLogsStore.getFile() - private fun getAppVersion(): String { - return runCatching { context.packageManager.getPackageInfo(context.packageName, 0) } - .fold( - onSuccess = PackageInfo::versionName, - onFailure = { - Timber.e(it) - "x.y.z" - }, - ) + override fun sendEmail(feedbackEmail: FeedbackEmail) { + emailSender.send( + EmailSender.Email( + address = feedbackEmail.address, + subject = feedbackEmail.subject, + message = feedbackEmail.message, + attachment = feedbackEmail.file, + ), + ) } } \ No newline at end of file diff --git a/data/feedback/src/main/java/com/tangem/data/feedback/di/FeedbackRepositoryModule.kt b/data/feedback/src/main/java/com/tangem/data/feedback/di/FeedbackRepositoryModule.kt index 2b377e8455..0290a97311 100644 --- a/data/feedback/src/main/java/com/tangem/data/feedback/di/FeedbackRepositoryModule.kt +++ b/data/feedback/src/main/java/com/tangem/data/feedback/di/FeedbackRepositoryModule.kt @@ -1,15 +1,15 @@ package com.tangem.data.feedback.di -import android.content.Context +import com.tangem.core.navigation.email.EmailSender import com.tangem.data.feedback.DefaultFeedbackRepository import com.tangem.datasource.local.logs.AppLogsStore import com.tangem.datasource.local.walletmanager.WalletManagersStore import com.tangem.domain.feedback.repository.FeedbackRepository import com.tangem.domain.wallets.legacy.UserWalletsListManager +import com.tangem.utils.version.AppVersionProvider import dagger.Module import dagger.Provides import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import javax.inject.Singleton @@ -23,13 +23,15 @@ internal object FeedbackRepositoryModule { appLogsStore: AppLogsStore, userWalletsListManager: UserWalletsListManager, walletManagersStore: WalletManagersStore, - @ApplicationContext context: Context, + emailSender: EmailSender, + appVersionProvider: AppVersionProvider, ): FeedbackRepository { return DefaultFeedbackRepository( appLogsStore = appLogsStore, userWalletsListManager = userWalletsListManager, walletManagersStore = walletManagersStore, - context = context, + emailSender = emailSender, + appVersionProvider = appVersionProvider, ) } } \ No newline at end of file diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/GetFeedbackEmailUseCase.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/SendFeedbackEmailUseCase.kt similarity index 91% rename from domain/feedback/src/main/java/com/tangem/domain/feedback/GetFeedbackEmailUseCase.kt rename to domain/feedback/src/main/java/com/tangem/domain/feedback/SendFeedbackEmailUseCase.kt index ddf8cfb767..9f11e6ed73 100644 --- a/domain/feedback/src/main/java/com/tangem/domain/feedback/GetFeedbackEmailUseCase.kt +++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/SendFeedbackEmailUseCase.kt @@ -15,7 +15,7 @@ import com.tangem.domain.feedback.utils.* * [REDACTED_AUTHOR] */ -class GetFeedbackEmailUseCase( +class SendFeedbackEmailUseCase( private val feedbackRepository: FeedbackRepository, private val resources: Resources, ) { @@ -24,13 +24,15 @@ class GetFeedbackEmailUseCase( private val emailMessageTitleResolver = EmailMessageTitleResolver(resources) private val emailMessageBodyResolver = EmailMessageBodyResolver(feedbackRepository) - suspend operator fun invoke(type: FeedbackEmailType): FeedbackEmail { - return FeedbackEmail( + suspend operator fun invoke(type: FeedbackEmailType) { + val email = FeedbackEmail( address = getAddress(type.cardInfo), subject = emailSubjectResolver.resolve(type), message = createMessage(type), file = feedbackRepository.getLogFile(), ) + + feedbackRepository.sendEmail(email) } private fun getAddress(cardInfo: CardInfo?): String { diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/repository/FeedbackRepository.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/repository/FeedbackRepository.kt index 25ebed4d9d..ae50655518 100644 --- a/domain/feedback/src/main/java/com/tangem/domain/feedback/repository/FeedbackRepository.kt +++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/repository/FeedbackRepository.kt @@ -26,4 +26,6 @@ interface FeedbackRepository { fun getBlockchainErrorInfo(userWalletId: UserWalletId): BlockchainErrorInfo? fun getLogFile(): File? + + fun sendEmail(feedbackEmail: FeedbackEmail) } \ No newline at end of file