Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configure wallet modal from env.json #285

Merged
merged 2 commits into from
Dec 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,
)
}
}
Loading