From be0b066598e484d0d146370046aedf2c4a7edf6f Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Oct 2023 16:32:12 +0800 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle.kts | 2 - app/src/main/AndroidManifest.xml | 4 - .../java/com/tangem/tap/TapApplication.kt | 5 +- .../com/tangem/tap/common/chat/ChatManager.kt | 18 +--- .../implementation/ZendeskChatOpener.kt | 87 ------------------- .../main/res/values-v29/zendesk_styles.xml | 6 -- app/src/main/res/values/zendesk_styles.xml | 10 --- .../datasource/config/ConfigManagerImpl.kt | 1 - .../datasource/config/models/ChatConfig.kt | 23 +---- .../tangem/datasource/config/models/Config.kt | 1 - .../datasource/config/models/JsonModels.kt | 1 - .../preferences/PreferencesDataSource.kt | 5 -- .../com/tangem/domain/common/LogConfig.kt | 1 - gradle/dependencies.toml | 4 - settings.gradle.kts | 1 - 15 files changed, 6 insertions(+), 163 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/common/chat/opener/implementation/ZendeskChatOpener.kt delete mode 100644 app/src/main/res/values-v29/zendesk_styles.xml delete mode 100644 app/src/main/res/values/zendesk_styles.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7817290795..e72316ffd3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -156,8 +156,6 @@ dependencies { implementation(deps.appsflyer) implementation(deps.amplitude) implementation(deps.kotsonGson) - implementation(deps.zendesk.chat) - implementation(deps.zendesk.messaging) implementation(deps.spongecastle.core) implementation(deps.lottie) implementation(deps.shopify.buy) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c1b1d65718..3eb4bc059b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -141,10 +141,6 @@ android:name="com.tangem.tap.common.qrCodeScan.ScanQrCodeActivity" android:theme="@style/AppTheme" /> - - diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 2f6e54f690..1f50712ace 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -338,7 +338,7 @@ internal class TapApplication : Application(), ImageLoaderFactory { private fun initWithConfigDependency(config: Config) { shopService = TangemShopService(this, config.shopify!!) initAnalytics(this, config) - initFeedbackManager(this, preferencesStorage, foregroundActivityObserver, store) + initFeedbackManager(this, foregroundActivityObserver, store) } private fun initAnalytics(application: Application, config: Config) { @@ -360,7 +360,6 @@ internal class TapApplication : Application(), ImageLoaderFactory { private fun initFeedbackManager( context: Context, - preferencesStorage: PreferencesDataSource, foregroundActivityObserver: ForegroundActivityObserver, store: Store, ) { @@ -399,7 +398,7 @@ internal class TapApplication : Application(), ImageLoaderFactory { val feedbackManager = FeedbackManager( infoHolder = additionalFeedbackInfo, logCollector = tangemLogCollector, - chatManager = ChatManager(preferencesStorage, foregroundActivityObserver), + chatManager = ChatManager(foregroundActivityObserver), ) store.dispatch(GlobalAction.SetFeedbackManager(feedbackManager)) } diff --git a/app/src/main/java/com/tangem/tap/common/chat/ChatManager.kt b/app/src/main/java/com/tangem/tap/common/chat/ChatManager.kt index 693113b27a..5bbe3fc679 100644 --- a/app/src/main/java/com/tangem/tap/common/chat/ChatManager.kt +++ b/app/src/main/java/com/tangem/tap/common/chat/ChatManager.kt @@ -1,39 +1,23 @@ package com.tangem.tap.common.chat import android.content.Context -import android.os.Build -import com.tangem.data.source.preferences.PreferencesDataSource import com.tangem.datasource.config.models.ChatConfig import com.tangem.datasource.config.models.SprinklrConfig -import com.tangem.datasource.config.models.ZendeskConfig import com.tangem.tap.ForegroundActivityObserver import com.tangem.tap.common.chat.opener.ChatOpener import com.tangem.tap.common.chat.opener.implementation.SprinklrChatOpener -import com.tangem.tap.common.chat.opener.implementation.ZendeskChatOpener import java.io.File -class ChatManager( - private val preferencesStorage: PreferencesDataSource, - private val foregroundActivityObserver: ForegroundActivityObserver, -) { +class ChatManager(private val foregroundActivityObserver: ForegroundActivityObserver) { private val openers = mutableMapOf() fun open(config: ChatConfig, createLogsFile: (Context) -> File?, createFeedbackFile: (Context) -> File?) { val opener = openers.getOrPut(config) { when (config) { is SprinklrConfig -> SprinklrChatOpener(config, foregroundActivityObserver) - is ZendeskConfig -> ZendeskChatOpener(getZendeskUserId(), config, foregroundActivityObserver) } } opener.open(createFeedbackFile, createLogsFile) } - - private fun getZendeskUserId(): String { - if (preferencesStorage.zendeskFirstLaunchTime == null) { - preferencesStorage.zendeskFirstLaunchTime = System.currentTimeMillis() - } - - return "${preferencesStorage.zendeskFirstLaunchTime}${Build.MODEL}".hashCode().toString() - } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/chat/opener/implementation/ZendeskChatOpener.kt b/app/src/main/java/com/tangem/tap/common/chat/opener/implementation/ZendeskChatOpener.kt deleted file mode 100644 index a65749ce62..0000000000 --- a/app/src/main/java/com/tangem/tap/common/chat/opener/implementation/ZendeskChatOpener.kt +++ /dev/null @@ -1,87 +0,0 @@ -package com.tangem.tap.common.chat.opener.implementation - -import android.content.Context -import com.tangem.core.analytics.Analytics -import com.tangem.datasource.config.models.ZendeskConfig -import com.tangem.domain.common.LogConfig -import com.tangem.tap.ForegroundActivityObserver -import com.tangem.tap.common.chat.opener.ChatOpener -import com.tangem.tap.withForegroundActivity -import com.tangem.wallet.R -import com.zendesk.logger.Logger -import timber.log.Timber -import zendesk.chat.* -import zendesk.configurations.Configuration -import zendesk.messaging.MessagingActivity -import java.io.File - -internal class ZendeskChatOpener( - private val userId: String, - private val config: ZendeskConfig, - private val foregroundActivityObserver: ForegroundActivityObserver, -) : ChatOpener { - - private var isInitialized = false - private var isFilesSent = false - - override fun open(createFeedbackFile: (Context) -> File?, createLogsFile: (Context) -> File?) { - foregroundActivityObserver.withForegroundActivity { activity -> - initZendeskIfNeeded(activity.applicationContext) - setChatVisitorInfo() - showMessagingActivity(activity) - sendFeedbackFile(createFeedbackFile(activity)) - sendLogsFile(createLogsFile(activity)) - } - } - - private fun initZendeskIfNeeded(context: Context) { - if (isInitialized) return - isInitialized = true - - Chat.INSTANCE.init(context, config.accountKey, config.appId) - Logger.setLoggable(LogConfig.zendesk) - } - - private fun setChatVisitorInfo() { - val visitorInfo = VisitorInfo.builder().withName("User $userId").build() - - Chat.INSTANCE.chatProvidersConfiguration = - ChatProvidersConfiguration.builder().withVisitorInfo(visitorInfo).build() - } - - private fun sendFeedbackFile(feedbackFile: File?) { - if (isInitialized && feedbackFile != null && !isFilesSent) { - Chat.INSTANCE.providers()?.chatProvider()?.sendFile(feedbackFile) { _, bytesUploaded, _ -> - Timber.d("Log file sent", "bytesUploaded: $bytesUploaded") - } - isFilesSent = true - } - } - - private fun sendLogsFile(logsFile: File?) { - if (isInitialized && logsFile != null && !isFilesSent) { - Chat.INSTANCE.providers()?.chatProvider()?.sendFile(logsFile) { _, bytesUploaded, _ -> - Timber.d("Log file sent", "bytesUploaded: $bytesUploaded") - } - isFilesSent = true - } - } - - private fun showMessagingActivity(context: Context) { - Analytics.send(com.tangem.tap.common.analytics.events.Chat.ScreenOpened()) - MessagingActivity.builder() - .withMultilineResponseOptionsEnabled(false) - .withBotLabelStringRes(R.string.chat_bot_name) - .withBotAvatarDrawable(R.mipmap.ic_launcher) - .withEngines(ChatEngine.engine()) - .show(context, buildChatConfig()) - } - - private fun buildChatConfig(): Configuration { - return ChatConfiguration.builder() - .withOfflineFormEnabled(true) - .withAgentAvailabilityEnabled(true) - .withPreChatFormEnabled(false) - .build() - } -} \ No newline at end of file diff --git a/app/src/main/res/values-v29/zendesk_styles.xml b/app/src/main/res/values-v29/zendesk_styles.xml deleted file mode 100644 index 764f632e87..0000000000 --- a/app/src/main/res/values-v29/zendesk_styles.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/app/src/main/res/values/zendesk_styles.xml b/app/src/main/res/values/zendesk_styles.xml deleted file mode 100644 index 2513114d19..0000000000 --- a/app/src/main/res/values/zendesk_styles.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt index 2a1e34d105..6bf2505649 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt @@ -102,7 +102,6 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager { appsFlyerDevKey = configValues.appsFlyer.appsFlyerDevKey, amplitudeApiKey = configValues.amplitudeApiKey, shopify = configValues.shopifyShop, - zendesk = configValues.zendesk, sprinklr = configValues.sprinklr, swapReferrerAccount = configValues.swapReferrerAccount, walletConnectProjectId = configValues.walletConnectProjectId, diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/models/ChatConfig.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/ChatConfig.kt index 2ab45d66bc..067c8572f3 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/models/ChatConfig.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/ChatConfig.kt @@ -5,26 +5,9 @@ import com.squareup.moshi.JsonClass sealed interface ChatConfig -@JsonClass(generateAdapter = true) -data class ZendeskConfig( - @Json(name = "zendeskApiKey") - val apiKey: String, - @Json(name = "zendeskAppId") - val appId: String, - @Json(name = "zendeskClientId") - val clientId: String, - @Json(name = "zendeskAccountKey") - val accountKey: String, - @Json(name = "zendeskUrl") - val url: String, -) : ChatConfig - @JsonClass(generateAdapter = true) data class SprinklrConfig( - @Json(name = "appID") - val appId: String, - @Json(name = "apiKey") - val apiKey: String, - @Json(name = "environment") - val environment: String, + @Json(name = "appID") val appId: String, + @Json(name = "apiKey") val apiKey: String, + @Json(name = "environment") val environment: String, ) : ChatConfig \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt index f8fe099745..2980e22216 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt @@ -15,7 +15,6 @@ data class Config( @Deprecated("Not relevant since version 3.23") val isCreatingTwinCardsAllowed: Boolean = false, val shopify: ShopifyShop? = null, - val zendesk: ZendeskConfig? = null, val sprinklr: SprinklrConfig? = null, val swapReferrerAccount: SwapReferrerAccount? = null, val walletConnectProjectId: String = "", diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt index 93210485ef..77d2c0808f 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt @@ -31,7 +31,6 @@ class ConfigValueModel( val infuraProjectId: String?, val appsFlyer: AppsFlyer, val shopifyShop: ShopifyShop?, - val zendesk: ZendeskConfig?, val sprinklr: SprinklrConfig?, val tronGridApiKey: String, val amplitudeApiKey: String, diff --git a/data/source/preferences/src/main/kotlin/com/tangem/data/source/preferences/PreferencesDataSource.kt b/data/source/preferences/src/main/kotlin/com/tangem/data/source/preferences/PreferencesDataSource.kt index 218863ac9a..5da77acb5b 100644 --- a/data/source/preferences/src/main/kotlin/com/tangem/data/source/preferences/PreferencesDataSource.kt +++ b/data/source/preferences/src/main/kotlin/com/tangem/data/source/preferences/PreferencesDataSource.kt @@ -42,10 +42,6 @@ class PreferencesDataSource @Inject internal constructor(applicationContext: Con toppedUpWalletStorage = ToppedUpWalletStorage(preferences, moshiConverter) } - var zendeskFirstLaunchTime: Long? - get() = preferences.getLong(ZENDESK_FIRST_LAUNCH_KEY, 0).takeIf { it != 0L } - set(value) = preferences.edit { putLong(ZENDESK_FIRST_LAUNCH_KEY, value ?: 0) } - var sprinklrFirstLaunchTime: Long? get() = preferences.getLong(SPRINKLR_FIRST_LAUNCH_KEY, 0).takeIf { it != 0L } set(value) = preferences.edit { putLong(SPRINKLR_FIRST_LAUNCH_KEY, value ?: 0) } @@ -93,7 +89,6 @@ class PreferencesDataSource @Inject internal constructor(applicationContext: Con private const val PREFERENCES_NAME = "tapPrefs" private const val TWINS_ONBOARDING_SHOWN_KEY = "twinsOnboardingShown" private const val APP_LAUNCH_COUNT_KEY = "launchCount" - private const val ZENDESK_FIRST_LAUNCH_KEY = "chatFirstLaunchKey" private const val SPRINKLR_FIRST_LAUNCH_KEY = "sprinklrFirstLaunch" private const val SAVE_WALLET_DIALOG_SHOWN_KEY = "saveUserWalletShown" private const val SAVE_ACCESS_CODES_KEY = "saveAccessCodes" diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/LogConfig.kt b/domain/legacy/src/main/java/com/tangem/domain/common/LogConfig.kt index 6ad07afbf2..2e115068d1 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/LogConfig.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/LogConfig.kt @@ -5,7 +5,6 @@ import com.tangem.domain.features.BuildConfig object LogConfig { const val imageLoader: Boolean = false val storeAction: Boolean = BuildConfig.DEBUG - const val zendesk: Boolean = false val network: NetworkLogConfig = NetworkLogConfig val analyticsHandlers: AnalyticsHandlersLogConfig = AnalyticsHandlersLogConfig } diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 5955bdfd13..758d9fa77f 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -67,8 +67,6 @@ spongycastleCryptoCore = "1.58.0.0" timber = "4.7.1" viewBindingDelegate = "1.5.9" xmlShimmer = "1.1.3" -zendeskChat = "3.3.5" -zendeskMessaging = "5.2.4" zxingQrBarcodeScanner = "1.9.8" zxingQrCode = "3.5.1" mviCore = "1.3.1" @@ -219,8 +217,6 @@ retrofit-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.re timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } viewBindingDelegate = { module = "com.github.kirich1409:viewbindingpropertydelegate-noreflection", version.ref = "viewBindingDelegate" } xmlShimmer = { module = "com.github.skydoves:androidveil", version.ref = "xmlShimmer" } -zendesk-chat = { module = "com.zendesk:chat", version.ref = "zendeskChat" } -zendesk-messaging = { module = "com.zendesk:messaging", version.ref = "zendeskMessaging" } zxing-qrBarcodeScanner = { module = "me.dm7.barcodescanner:zxing", version.ref = "zxingQrBarcodeScanner" } zxing-qrCore = { module = "com.google.zxing:core", version.ref = "zxingQrCode" } mviCore-watcher = { module = "com.github.badoo.mvicore:mvicore-diff", version.ref = "mviCore" } diff --git a/settings.gradle.kts b/settings.gradle.kts index df1029f7b1..e2478e48b5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -39,7 +39,6 @@ dependencyResolutionManagement { } } maven("https://jitpack.io") - maven("https://zendesk.jfrog.io/zendesk/repo") maven("https://clients-nexus.sprinklr.com/") }