Skip to content

Commit

Permalink
Configure wallet modal from env.json (#285)
Browse files Browse the repository at this point in the history
Calling walletconnect modal initI() after the env.json is read
  • Loading branch information
ruixhuang authored Dec 23, 2024
1 parent e841b1a commit 38666ea
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 35 deletions.
4 changes: 2 additions & 2 deletions v4/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand Down
2 changes: 2 additions & 0 deletions v4/core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
38 changes: 6 additions & 32 deletions v4/core/src/main/java/exchange/dydx/trading/core/CarteraSetup.kt
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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")
}
Expand All @@ -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,
)
Expand All @@ -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<String>(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,
)
}
}
2 changes: 2 additions & 0 deletions v4/feature/workers/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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)
}
}

Expand All @@ -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<String>(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,
)
}
}

0 comments on commit 38666ea

Please sign in to comment.