diff --git a/v4/build.gradle b/v4/build.gradle index e313289d..c8e00de6 100644 --- a/v4/build.gradle +++ b/v4/build.gradle @@ -88,8 +88,8 @@ ext { compileSdkVersion = 35 // App dependencies - abacusVersion = '1.13.42' - carteraVersion = '0.1.17' + abacusVersion = '1.13.43' + carteraVersion = '0.1.19' //carteraVersion = '0.1.16-local-debug' // Use this for local testing kollectionsVersion = '2.0.16' diff --git a/v4/core/build.gradle b/v4/core/build.gradle index 1280698f..cce214f5 100644 --- a/v4/core/build.gradle +++ b/v4/core/build.gradle @@ -140,4 +140,6 @@ dependencies { implementation('com.walletconnect:android-core') implementation("com.walletconnect:walletconnect-modal") implementation 'com.google.accompanist:accompanist-navigation-material:0.34.0' // need for modal + + implementation("tz.co.asoft:kollections-interoperable:$kollectionsVersion") } diff --git a/v4/core/src/main/java/exchange/dydx/trading/TradingActivity.kt b/v4/core/src/main/java/exchange/dydx/trading/TradingActivity.kt index d279c6a6..bf7d351c 100644 --- a/v4/core/src/main/java/exchange/dydx/trading/TradingActivity.kt +++ b/v4/core/src/main/java/exchange/dydx/trading/TradingActivity.kt @@ -65,7 +65,7 @@ class TradingActivity : FragmentActivity() { pushPermissionRequester.takeActivity(this) viewModel.logger.d(TAG, "TradingActivity#onCreate") - CarteraSetup.run(this, viewModel.logger) + CarteraSetup.run(this, viewModel.logger, abacusStateManager) AnalyticsSetup.run(viewModel.compositeTracking, this, viewModel.logger) viewModel.compositeTracking.log( diff --git a/v4/core/src/main/java/exchange/dydx/trading/core/CarteraSetup.kt b/v4/core/src/main/java/exchange/dydx/trading/core/CarteraSetup.kt index e6ea9ad1..c45083a0 100644 --- a/v4/core/src/main/java/exchange/dydx/trading/core/CarteraSetup.kt +++ b/v4/core/src/main/java/exchange/dydx/trading/core/CarteraSetup.kt @@ -1,17 +1,13 @@ package exchange.dydx.trading.core -import android.content.Context import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.FragmentActivity import androidx.navigation.NavHostController import exchange.dydx.cartera.CarteraConfig -import exchange.dydx.cartera.WalletConnectV2Config import exchange.dydx.cartera.WalletConnectionType -import exchange.dydx.cartera.WalletProvidersConfig -import exchange.dydx.cartera.WalletSegueConfig import exchange.dydx.cartera.walletprovider.providers.WalletConnectModalProvider -import exchange.dydx.trading.common.R -import exchange.dydx.trading.core.WalletProvidersConfigUtil.getWalletProvidersConfig +import exchange.dydx.dydxstatemanager.AbacusStateManagerProtocol +import exchange.dydx.trading.feature.workers.globalworkers.WalletProvidersConfigUtil.getWalletProvidersConfig import exchange.dydx.utilities.utils.Logging object CarteraSetup { @@ -21,9 +17,10 @@ object CarteraSetup { fun run( activity: FragmentActivity, logger: Logging, + abacusStateManager: AbacusStateManagerProtocol, ) { try { - setUpCartera(activity) + setUpCartera(activity, abacusStateManager) } catch (e: Exception) { logger.e(TAG, "Failed to set up cartera") } @@ -35,14 +32,14 @@ object CarteraSetup { modal?.nav = nav } - private fun setUpCartera(activity: FragmentActivity) { + private fun setUpCartera(activity: FragmentActivity, abacusStateManager: AbacusStateManagerProtocol) { val launcher = activity.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> val uri = result.data?.data ?: return@registerForActivityResult CarteraConfig.handleResponse(uri) } CarteraConfig.shared = CarteraConfig( - walletProvidersConfig = getWalletProvidersConfig(activity.applicationContext), + walletProvidersConfig = getWalletProvidersConfig(activity.applicationContext, abacusStateManager), application = activity.application, launcher = launcher, ) @@ -53,26 +50,3 @@ object CarteraSetup { // CarteraConfig.shared?.updateConfig(WalletProvidersConfigUtil.getWalletProvidersConfig()) } } - -object WalletProvidersConfigUtil { - fun getWalletProvidersConfig(appContext: Context): WalletProvidersConfig { - val appHostUrl = "https://" + appContext.getString(R.string.app_web_host) - val walletConnectV2Config = WalletConnectV2Config( - projectId = appContext.getString(R.string.wallet_connect_project_id), - clientName = appContext.getString(R.string.app_name), - clientDescription = appContext.getString(R.string.wallet_connect_description), - clientUrl = appHostUrl, - iconUrls = listOf(appHostUrl + appContext.getString(R.string.wallet_connect_logo)), - ) - - val walletSegueConfig = WalletSegueConfig( - callbackUrl = appHostUrl + appContext.getString(R.string.wallet_segue_callback), - ) - - return WalletProvidersConfig( - walletConnectV1 = null, - walletConnectV2 = walletConnectV2Config, - walletSegue = walletSegueConfig, - ) - } -} diff --git a/v4/feature/workers/build.gradle b/v4/feature/workers/build.gradle index ee7f64b8..d5b3ccf4 100644 --- a/v4/feature/workers/build.gradle +++ b/v4/feature/workers/build.gradle @@ -92,4 +92,6 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxSerializationVersion" implementation "org.jetbrains.kotlinx:kotlinx-serialization-core:$kotlinxSerializationVersion" + + implementation("tz.co.asoft:kollections-interoperable:$kollectionsVersion") } \ No newline at end of file diff --git a/v4/feature/workers/src/main/java/exchange/dydx/trading/feature/workers/globalworkers/DydxCarteraConfigWorker.kt b/v4/feature/workers/src/main/java/exchange/dydx/trading/feature/workers/globalworkers/DydxCarteraConfigWorker.kt index 4faa35c6..629f8558 100644 --- a/v4/feature/workers/src/main/java/exchange/dydx/trading/feature/workers/globalworkers/DydxCarteraConfigWorker.kt +++ b/v4/feature/workers/src/main/java/exchange/dydx/trading/feature/workers/globalworkers/DydxCarteraConfigWorker.kt @@ -1,19 +1,30 @@ package exchange.dydx.trading.feature.workers.globalworkers import android.app.Application +import android.content.Context import dagger.hilt.android.scopes.ActivityRetainedScoped import exchange.dydx.cartera.CarteraConfig +import exchange.dydx.cartera.WalletConnectModalConfig +import exchange.dydx.cartera.WalletConnectV2Config +import exchange.dydx.cartera.WalletProvidersConfig +import exchange.dydx.cartera.WalletSegueConfig import exchange.dydx.dydxstatemanager.AbacusStateManagerProtocol import exchange.dydx.trading.common.BuildConfig +import exchange.dydx.trading.common.R +import exchange.dydx.trading.common.di.CoroutineScopes import exchange.dydx.utilities.utils.CachedFileLoader import exchange.dydx.utilities.utils.Logging import exchange.dydx.utilities.utils.WorkerProtocol +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import javax.inject.Inject private const val TAG = "DydxCarteraConfigWorker" @ActivityRetainedScoped class DydxCarteraConfigWorker @Inject constructor( + @CoroutineScopes.App private val scope: CoroutineScope, private val abacusStateManager: AbacusStateManagerProtocol, private val cachedFileLoader: CachedFileLoader, private val application: Application, @@ -34,6 +45,15 @@ class DydxCarteraConfigWorker @Inject constructor( logger.e(TAG, "Failed to load wallets.json") } } + + abacusStateManager.currentEnvironmentId.onEach { _ -> + val config = WalletProvidersConfigUtil.getWalletProvidersConfig(application, abacusStateManager) + val modalConfig = config.walletConnectModal + if (modalConfig != null) { + CarteraConfig.shared?.updateModalConfig(modalConfig) + } + } + .launchIn(scope) } } @@ -43,3 +63,32 @@ class DydxCarteraConfigWorker @Inject constructor( } } } + +object WalletProvidersConfigUtil { + fun getWalletProvidersConfig(appContext: Context, abacusStateManager: AbacusStateManagerProtocol): WalletProvidersConfig { + val appHostUrl = "https://" + appContext.getString(R.string.app_web_host) + val walletConnectV2Config = WalletConnectV2Config( + projectId = appContext.getString(R.string.wallet_connect_project_id), + clientName = appContext.getString(R.string.app_name), + clientDescription = appContext.getString(R.string.wallet_connect_description), + clientUrl = appHostUrl, + iconUrls = listOf(appHostUrl + appContext.getString(R.string.wallet_connect_logo)), + ) + + val walletSegueConfig = WalletSegueConfig( + callbackUrl = appHostUrl + appContext.getString(R.string.wallet_segue_callback), + ) + + val walletIds = abacusStateManager.environment?.walletConnection?.walletConnect?.v2?.wallets?.android + val walletConnectModalConfig = WalletConnectModalConfig( + walletIds = walletIds?.toList(), + ) + + return WalletProvidersConfig( + walletConnectV1 = null, + walletConnectV2 = walletConnectV2Config, + walletConnectModal = walletConnectModalConfig, + walletSegue = walletSegueConfig, + ) + } +}