From 886949a8fcfff834f29732e859722558bdb2794e Mon Sep 17 00:00:00 2001 From: kubel Date: Fri, 13 Sep 2024 11:12:05 +0200 Subject: [PATCH 1/2] Restore Sample Dapp state --- .../sample/common/ui/WCTopAppBarLegacy.kt | 10 ----- sample/dapp/build.gradle.kts | 3 -- .../sample/dapp/ui/DappSampleActivity.kt | 8 ++-- .../com/reown/sample/dapp/ui/routes/Route.kt | 1 - .../composable_routes/account/AccountRoute.kt | 7 +++- .../chain_selection/ChainSelectionRoute.kt | 14 ++++++- .../ChainSelectionViewModel.kt | 10 ++--- .../composable_routes/session/SessionRoute.kt | 13 +++--- .../session/SessionViewModel.kt | 40 +++++++++---------- .../dapp/ui/routes/host/DappSampleHost.kt | 12 +++++- .../sample/wallet/ui/WalletKitActivity.kt | 1 - 11 files changed, 61 insertions(+), 58 deletions(-) diff --git a/sample/common/src/main/kotlin/com/reown/sample/common/ui/WCTopAppBarLegacy.kt b/sample/common/src/main/kotlin/com/reown/sample/common/ui/WCTopAppBarLegacy.kt index e569ef8df..f2076b3bd 100644 --- a/sample/common/src/main/kotlin/com/reown/sample/common/ui/WCTopAppBarLegacy.kt +++ b/sample/common/src/main/kotlin/com/reown/sample/common/ui/WCTopAppBarLegacy.kt @@ -48,22 +48,12 @@ fun WCTopAppBarLegacy( ), @DrawableRes icon: Int? = null, onIconClick: (() -> Unit)? = null, - onBackIconClick: (() -> Unit)? = null, ) { Row( modifier = modifier, verticalAlignment = Alignment.CenterVertically ) { Spacer(modifier = Modifier.width(8.dp)) - onBackIconClick?.let { - Icon( - tint = Color(0xFF3496ff), - imageVector = ImageVector.vectorResource(id = R.drawable.chevron_left), - contentDescription = "BackArrow", - modifier = Modifier.clickable { onBackIconClick() } - ) - Spacer(modifier = Modifier.width(32.dp)) - } Row( modifier = Modifier .fillMaxWidth() diff --git a/sample/dapp/build.gradle.kts b/sample/dapp/build.gradle.kts index 6628ef8f8..b6e6263d5 100644 --- a/sample/dapp/build.gradle.kts +++ b/sample/dapp/build.gradle.kts @@ -98,14 +98,11 @@ dependencies { debugImplementation(project(":core:android")) debugImplementation(project(":product:appkit")) - debugImplementation(project(":protocol:sign")) internalImplementation(project(":core:android")) internalImplementation(project(":product:appkit")) - internalImplementation(project(":protocol:sign")) releaseImplementation(platform("com.reown:android-bom:$BOM_VERSION")) releaseImplementation("com.reown:android-core") releaseImplementation("com.reown:appkit") - releaseImplementation("com.reown:sign") } diff --git a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/DappSampleActivity.kt b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/DappSampleActivity.kt index 855880d25..8e427445a 100644 --- a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/DappSampleActivity.kt +++ b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/DappSampleActivity.kt @@ -10,9 +10,9 @@ import androidx.activity.compose.setContent import androidx.compose.material.ExperimentalMaterialApi import androidx.lifecycle.lifecycleScope import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi +import com.reown.appkit.client.AppKit import com.reown.sample.common.ui.theme.WCSampleAppTheme import com.reown.sample.dapp.ui.routes.host.DappSampleHost -import com.reown.sign.client.SignClient import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -20,14 +20,14 @@ class DappSampleActivity : ComponentActivity() { @ExperimentalMaterialNavigationApi override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContent() { + setContent { WCSampleAppTheme { DappSampleHost() } } if (intent?.dataString?.contains("wc_ev") == true) { - SignClient.dispatchEnvelope(intent.dataString ?: "") { + AppKit.handleDeepLink(intent.dataString ?: "") { lifecycleScope.launch(Dispatchers.Main) { Toast.makeText(this@DappSampleActivity, "Error dispatching envelope: ${it.throwable.message}", Toast.LENGTH_SHORT).show() } @@ -39,7 +39,7 @@ class DappSampleActivity : ComponentActivity() { super.onNewIntent(intent) if (intent?.dataString?.contains("wc_ev") == true) { - SignClient.dispatchEnvelope(intent.dataString ?: "") { + AppKit.handleDeepLink(intent.dataString ?: "") { lifecycleScope.launch(Dispatchers.Main) { Toast.makeText(this@DappSampleActivity, "Error dispatching envelope: ${it.throwable.message}", Toast.LENGTH_SHORT).show() } diff --git a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/Route.kt b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/Route.kt index 816416ffd..dd89b0adf 100644 --- a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/Route.kt +++ b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/Route.kt @@ -2,7 +2,6 @@ package com.reown.sample.dapp.ui.routes sealed class Route(val path: String) { object ChainSelection : Route("chain_selection") - object ParingGeneration : Route("paring_generation") object Session : Route("session") object Account : Route("account") } diff --git a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/account/AccountRoute.kt b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/account/AccountRoute.kt index 92d292edb..9938c9d20 100644 --- a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/account/AccountRoute.kt +++ b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/account/AccountRoute.kt @@ -63,7 +63,12 @@ fun AccountRoute(navController: NavController) { Toast.makeText(context, "Error: ${event.exceptionMsg}", Toast.LENGTH_LONG).show() } - is DappSampleEvents.Disconnect -> navController.popBackStack(Route.ChainSelection.path, false) + is DappSampleEvents.Disconnect -> navController.navigate(Route.ChainSelection.path) { + popUpTo(navController.graph.startDestinationId) { + inclusive = true + } + } + else -> Unit } } diff --git a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/chain_selection/ChainSelectionRoute.kt b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/chain_selection/ChainSelectionRoute.kt index 571cc72bd..19d5f16a4 100644 --- a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/chain_selection/ChainSelectionRoute.kt +++ b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/chain_selection/ChainSelectionRoute.kt @@ -464,7 +464,12 @@ private fun handleSignEvents( when (event) { DappSampleEvents.SessionApproved -> { viewModel.awaitingProposalResponse(false) - navController.navigate(Route.Session.path) + navController.navigate(Route.Session.path) { + popUpTo(0) { + inclusive = true + } + launchSingleTop = true + } } DappSampleEvents.SessionRejected -> { @@ -482,7 +487,12 @@ private fun handleSignEvents( if (event.message != null) { Toast.makeText(context, event.message, Toast.LENGTH_SHORT).show() } else { - navController.navigate(Route.Session.path) + navController.navigate(Route.Session.path) { + popUpTo(0) { + inclusive = true + } + launchSingleTop = true + } } } diff --git a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/chain_selection/ChainSelectionViewModel.kt b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/chain_selection/ChainSelectionViewModel.kt index 041c7bffc..898eaa06c 100644 --- a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/chain_selection/ChainSelectionViewModel.kt +++ b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/chain_selection/ChainSelectionViewModel.kt @@ -10,8 +10,6 @@ import com.reown.sample.common.Chains import com.reown.sample.common.tag import com.reown.sample.dapp.domain.DappDelegate import com.reown.sample.dapp.ui.DappSampleEvents -import com.reown.sign.client.Sign -import com.reown.sign.client.SignClient import com.reown.util.bytesToHex import com.reown.util.randomBytes import com.reown.appkit.client.AppKit @@ -72,12 +70,12 @@ class ChainSelectionViewModel : ViewModel() { } } - fun authenticate(authenticateParams: Sign.Params.Authenticate, appLink: String = "", onAuthenticateSuccess: (String?) -> Unit, onError: (String) -> Unit = {}) { + fun authenticate(authenticateParams: Modal.Params.Authenticate, appLink: String = "", onAuthenticateSuccess: (String?) -> Unit, onError: (String) -> Unit = {}) { viewModelScope.launch { _awaitingProposalSharedFlow.emit(true) } - SignClient.authenticate(authenticateParams, walletAppLink = appLink, + AppKit.authenticate(authenticateParams, walletAppLink = appLink, onSuccess = { url -> viewModelScope.launch { _awaitingProposalSharedFlow.emit(false) @@ -190,7 +188,7 @@ class ChainSelectionViewModel : ViewModel() { val authenticateParams - get() = Sign.Params.Authenticate( + get() = Modal.Params.Authenticate( chains = uiState.value.filter { it.isSelected }.map { it.chainId }, domain = "sample.kotlin.dapp", uri = "https://web3inbox.com/all-apps", @@ -208,7 +206,7 @@ class ChainSelectionViewModel : ViewModel() { ) val siweParams - get() = Sign.Params.Authenticate( + get() = Modal.Params.Authenticate( chains = uiState.value.filter { it.isSelected }.map { it.chainId }, domain = "sample.kotlin.dapp", uri = "https://web3inbox.com/all-apps", diff --git a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/session/SessionRoute.kt b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/session/SessionRoute.kt index 66d59a3b9..f39eb3c8a 100644 --- a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/session/SessionRoute.kt +++ b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/session/SessionRoute.kt @@ -82,7 +82,11 @@ fun SessionRoute( is DappSampleEvents.PingLoading -> isPingLoading = true is DappSampleEvents.Disconnect -> { isDisconnectLoading = false - navController.popBackStack(Route.ChainSelection.path, inclusive = false) + navController.navigate(Route.ChainSelection.path) { + popUpTo(navController.graph.startDestinationId) { + inclusive = true + } + } Toast.makeText(context, "Disconnected successfully", Toast.LENGTH_SHORT).show() } @@ -99,7 +103,6 @@ fun SessionRoute( SessionScreen( uiState = state, - onBackPressed = navController::popBackStack, onSessionClick = navController::navigateToAccount, onPingClick = viewModel::ping, onDisconnectClick = viewModel::disconnect, @@ -111,7 +114,6 @@ fun SessionRoute( @Composable private fun SessionScreen( uiState: List, - onBackPressed: () -> Unit, onSessionClick: (String) -> Unit, onPingClick: () -> Unit, onDisconnectClick: () -> Unit, @@ -119,10 +121,7 @@ private fun SessionScreen( isPingLoading: Boolean, ) { Column { - WCTopAppBarLegacy( - titleText = "Session Chains", - onBackIconClick = onBackPressed, - ) + WCTopAppBarLegacy(titleText = "Session Chains",) ChainsAction(onPingClick, onDisconnectClick, isDisconnectLoading, isPingLoading) LazyColumn(modifier = Modifier.fillMaxSize()) { item { diff --git a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/session/SessionViewModel.kt b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/session/SessionViewModel.kt index e237263dc..7b7c89353 100644 --- a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/session/SessionViewModel.kt +++ b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/composable_routes/session/SessionViewModel.kt @@ -89,28 +89,26 @@ class SessionViewModel : ViewModel() { } fun disconnect() { - if (DappDelegate.selectedSessionTopic != null) { - try { - viewModelScope.launch { _sessionEvents.emit(DappSampleEvents.DisconnectLoading) } - AppKit.disconnect( - onSuccess = { - DappDelegate.deselectAccountDetails() - viewModelScope.launch { - _sessionEvents.emit(DappSampleEvents.Disconnect) - } - }, - onError = { throwable: Throwable -> - Timber.tag(tag(this)).e(throwable.stackTraceToString()) - Firebase.crashlytics.recordException(throwable) - viewModelScope.launch { - _sessionEvents.emit(DappSampleEvents.DisconnectError(throwable.message ?: "Unknown error, please try again or contact support")) - } - }) + try { + viewModelScope.launch { _sessionEvents.emit(DappSampleEvents.DisconnectLoading) } + AppKit.disconnect( + onSuccess = { + DappDelegate.deselectAccountDetails() + viewModelScope.launch { + _sessionEvents.emit(DappSampleEvents.Disconnect) + } + }, + onError = { throwable: Throwable -> + Timber.tag(tag(this)).e(throwable.stackTraceToString()) + Firebase.crashlytics.recordException(throwable) + viewModelScope.launch { + _sessionEvents.emit(DappSampleEvents.DisconnectError(throwable.message ?: "Unknown error, please try again or contact support")) + } + }) - } catch (e: Exception) { - viewModelScope.launch { - _sessionEvents.emit(DappSampleEvents.DisconnectError(e.message ?: "Unknown error, please try again or contact support")) - } + } catch (e: Exception) { + viewModelScope.launch { + _sessionEvents.emit(DappSampleEvents.DisconnectError(e.message ?: "Unknown error, please try again or contact support")) } } } diff --git a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/host/DappSampleHost.kt b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/host/DappSampleHost.kt index c7eae3097..eefa9c3ea 100644 --- a/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/host/DappSampleHost.kt +++ b/sample/dapp/src/main/kotlin/com/reown/sample/dapp/ui/routes/host/DappSampleHost.kt @@ -34,6 +34,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.rememberNavController import com.google.accompanist.navigation.material.BottomSheetNavigator import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi +import com.reown.appkit.client.AppKit import com.reown.sample.dapp.R import com.reown.sample.dapp.ui.DappSampleEvents import com.reown.sample.dapp.ui.DappSampleNavGraph @@ -48,15 +49,22 @@ fun DappSampleHost() { initialValue = ModalBottomSheetValue.Hidden, skipHalfExpanded = true ) + val bottomSheetNavigator = BottomSheetNavigator(sheetState) val navController = rememberNavController(bottomSheetNavigator) val viewModel: DappSampleViewModel = viewModel() + val isConnected = AppKit.getAccount() != null + val startDestination = if (isConnected) Route.Session.path else Route.ChainSelection.path LaunchedEffect(Unit) { viewModel.events.collect { event -> when (event) { is DappSampleEvents.ConnectionEvent -> isOfflineState = !event.isAvailable - is DappSampleEvents.Disconnect -> navController.navigate(Route.ChainSelection.path) + is DappSampleEvents.Disconnect -> navController.navigate(Route.ChainSelection.path) { + popUpTo(navController.graph.startDestinationId) { + inclusive = true + } + } is DappSampleEvents.RequestError -> scaffoldState.snackbarHostState.showSnackbar(event.exceptionMsg) is DappSampleEvents.SessionExtend -> scaffoldState.snackbarHostState.showSnackbar("Session extended") else -> Unit @@ -71,7 +79,7 @@ fun DappSampleHost() { DappSampleNavGraph( bottomSheetNavigator = bottomSheetNavigator, navController = navController, - startDestination = Route.ChainSelection.path, + startDestination = startDestination, ) if (isOfflineState != null) { diff --git a/sample/wallet/src/main/kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt b/sample/wallet/src/main/kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt index 1e34b172a..c23f99eed 100644 --- a/sample/wallet/src/main/kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt +++ b/sample/wallet/src/main/kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt @@ -287,7 +287,6 @@ class WalletKitActivity : AppCompatActivity() { override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) - println("kobe: WalletKitActivity.newIntent ${intent?.dataString}") handleAppLink(intent) } From 448f0fe29ee5b89a6db5b211f2a5ecde0ef58624 Mon Sep 17 00:00:00 2001 From: kubel Date: Fri, 13 Sep 2024 11:39:45 +0200 Subject: [PATCH 2/2] Fix disconnect ui glitch --- .../kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sample/wallet/src/main/kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt b/sample/wallet/src/main/kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt index c23f99eed..a6f8a856d 100644 --- a/sample/wallet/src/main/kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt +++ b/sample/wallet/src/main/kotlin/com/reown/sample/wallet/ui/WalletKitActivity.kt @@ -148,7 +148,11 @@ class WalletKitActivity : AppCompatActivity() { is SignEvent.Disconnect -> { connectionsViewModel.refreshConnections() - if (navController.currentDestination?.route != Route.Connections.path) { + + if (navController.currentDestination?.route != Route.Connections.path && + navController.currentDestination?.route != Route.SessionProposal.path && + navController.currentDestination?.route != Route.SessionAuthenticate.path + ) { navController.navigate(Route.Connections.path) } }