Skip to content

Commit

Permalink
Merge branch 'develop' into meta/test_case_for_tron_sign
Browse files Browse the repository at this point in the history
  • Loading branch information
jakubuid authored Jan 17, 2024
2 parents c6e3b39 + 685ed43 commit fe89dd5
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 42 deletions.
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
package com.walletconnect.web3.modal.ui

import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.activity.ComponentDialog
import androidx.activity.OnBackPressedCallback
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Surface
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.platform.rememberNestedScrollInteropConnection
import androidx.compose.ui.unit.dp
import androidx.core.content.res.use
import androidx.core.content.res.getColorOrThrow
import androidx.core.content.res.use
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.walletconnect.modal.utils.theme.toComposeColor
import com.walletconnect.web3.modal.R
Expand Down Expand Up @@ -60,30 +66,34 @@ class Web3ModalSheet : BottomSheetDialogFragment() {
shouldOpenChooseNetwork: Boolean
) {
val navController = rememberNavController()
(dialog as? ComponentDialog)?.onBackPressedDispatcher?.addCallback(
this@Web3ModalSheet,
onBackPressedCallback(navController)
)
Surface(
shape = RoundedCornerShape(topStart = 36.dp, topEnd = 36.dp)
) {
dialog?.setupDialog(navController)

Surface(shape = RoundedCornerShape(topStart = 36.dp, topEnd = 36.dp)) {
Web3ModalComponent(
modifier = Modifier.nestedScroll(rememberNestedScrollInteropConnection()),
navController = navController,
shouldOpenChooseNetwork = shouldOpenChooseNetwork,
closeModal = { this@Web3ModalSheet.dismiss() }
)
closeModal = { this@Web3ModalSheet.dismiss() })
}
}

private fun Dialog.setupDialog(navController: NavHostController) {
(this as? ComponentDialog)?.onBackPressedDispatcher?.addCallback(
this@Web3ModalSheet, onBackPressedCallback(navController)
)
findViewById<FrameLayout>(com.google.android.material.R.id.design_bottom_sheet)?.let {
val behavior = BottomSheetBehavior.from(it)
behavior.state = BottomSheetBehavior.STATE_EXPANDED
}
}

private fun onBackPressedCallback(navController: NavHostController) =
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (navController.popBackStack().not()) {
dismiss()
}
private fun onBackPressedCallback(navController: NavHostController) = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (navController.popBackStack().not()) {
dismiss()
}
}
}
}

@Composable
Expand Down Expand Up @@ -177,14 +187,16 @@ private val themeColorsAttributesMap = mapOf(
23 to R.attr.modalError,
)

internal fun Context.getColorMap() =
obtainStyledAttributes(themeColorsAttributesMap.values.toIntArray()).use {
themeColorsAttributesMap.keys.map { id ->
themeColorsAttributesMap[id]!! to try { it.getColorOrThrow(id).toComposeColor() } catch (e: Exception) { null }
internal fun Context.getColorMap() = obtainStyledAttributes(themeColorsAttributesMap.values.toIntArray()).use {
themeColorsAttributesMap.keys.map { id ->
themeColorsAttributesMap[id]!! to try {
it.getColorOrThrow(id).toComposeColor()
} catch (e: Exception) {
null
}
}.toMap()
}
}.toMap()

internal fun Context.getThemeMode() = obtainStyledAttributes(intArrayOf(R.attr.modalMode))
.use { it.getInt(0, 0) }.toThemeMode()
internal fun Context.getThemeMode() = obtainStyledAttributes(intArrayOf(R.attr.modalMode)).use { it.getInt(0, 0) }.toThemeMode()

private fun Bundle?.getShouldOpenChooseNetworkArg() = this?.getBoolean(CHOOSE_NETWORK_KEY) ?: false
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
Expand All @@ -25,12 +26,12 @@ import com.walletconnect.web3.modal.ui.routes.connect.ConnectionNavGraph
import com.walletconnect.web3.modal.ui.utils.ComposableLifecycleEffect
import com.walletconnect.web3.modal.ui.utils.toComponentEvent
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch

@Composable
fun Web3ModalComponent(
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
shouldOpenChooseNetwork: Boolean,
closeModal: () -> Unit
Expand Down Expand Up @@ -62,6 +63,7 @@ fun Web3ModalComponent(
)

Web3ModalRoot(
modifier = modifier,
navController = navController,
closeModal = closeModal
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,28 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.grid.LazyGridScope
import androidx.compose.foundation.lazy.grid.itemsIndexed
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Icon
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
Expand Down Expand Up @@ -95,6 +101,24 @@ internal fun WalletImage(url: String, isEnabled: Boolean = true, modifier: Modif
)
}

@Composable
internal fun BoxScope.InstalledWalletIcon() {
Icon(
modifier = Modifier
.offset(x = 2.dp, y = 2.dp)
.background(Web3ModalTheme.colors.background.color125, shape = CircleShape)
.align(Alignment.BottomEnd)
.background(Web3ModalTheme.colors.grayGlass02, shape = CircleShape)
.padding(2.dp)
.size(12.dp)
.background(Web3ModalTheme.colors.success.copy(0.15f), shape = CircleShape)
.padding(2.dp),
imageVector = ImageVector.vectorResource(id = R.drawable.ic_check),
contentDescription = "WalletConnectLogo",
tint = Web3ModalTheme.colors.success
)
}

@Composable
internal fun WalletGridItem(
wallet: Wallet,
Expand All @@ -113,13 +137,18 @@ internal fun WalletGridItem(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
WalletImage(
url = wallet.imageUrl,
modifier = Modifier
.size(56.dp)
.clip(RoundedCornerShape(16.dp))
.border(width = 1.dp, color = Web3ModalTheme.colors.grayGlass10, shape = RoundedCornerShape(16.dp))
)
Box {
WalletImage(
url = wallet.imageUrl,
modifier = Modifier
.size(56.dp)
.clip(RoundedCornerShape(16.dp))
.border(width = 1.dp, color = Web3ModalTheme.colors.grayGlass10, shape = RoundedCornerShape(16.dp))
)
if (wallet.isWalletInstalled) {
InstalledWalletIcon()
}
}
VerticalSpacer(height = 8.dp)
Text(
text = wallet.name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import kotlinx.coroutines.flow.onEach
@Composable
internal fun Web3ModalRoot(
navController: NavHostController,
modifier: Modifier = Modifier,
closeModal: () -> Unit,
content: @Composable () -> Unit
) {
Expand All @@ -60,7 +61,10 @@ internal fun Web3ModalRoot(
.collect()
}

Column(verticalArrangement = Arrangement.Bottom) {
Column(
verticalArrangement = Arrangement.Bottom,
modifier = modifier
) {
ProvideWeb3ModalThemeComposition {
Web3ModalRoot(rootState, snackBarState, title, closeModal, content)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import com.walletconnect.web3.modal.domain.model.AccountData
import com.walletconnect.web3.modal.client.Modal

private val metaMask: Wallet
get() = Wallet(id = "1", name = "MetaMask", homePage = "", order = "", imageUrl = "", mobileLink = "metamask://", webAppLink = "", playStore = "")
get() = Wallet(id = "1", name = "MetaMask", homePage = "", order = "", imageUrl = "", mobileLink = "metamask://", webAppLink = "", playStore = "").apply { isRecent = true }
private val trustWallet: Wallet
get() = Wallet(id = "2", name = "Trust Wallet", homePage = "", order = "", imageUrl = "", mobileLink = "trustwallet://", webAppLink = "",playStore = "")
get() = Wallet(id = "2", name = "Trust Wallet", homePage = "", order = "", imageUrl = "", mobileLink = "trustwallet://", webAppLink = "",playStore = "").apply { isWalletInstalled = true }
private val safe: Wallet
get() = Wallet(id = "3", name = "Safe", homePage = "", order = "", imageUrl = "", mobileLink = "safe://", webAppLink = "", playStore = "")
private val rainbow: Wallet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import com.walletconnect.android.internal.common.modal.data.model.Wallet
import com.walletconnect.web3.modal.ui.components.internal.ErrorModalState
import com.walletconnect.web3.modal.ui.components.internal.commons.InstalledWalletIcon
import com.walletconnect.web3.modal.ui.components.internal.commons.ListSelectRow
import com.walletconnect.web3.modal.ui.components.internal.commons.RecentLabel
import com.walletconnect.web3.modal.ui.components.internal.commons.WalletImage
Expand Down Expand Up @@ -92,13 +93,18 @@ private fun WalletListSelect(item: Wallet, onWalletItemClick: (Wallet) -> Unit)

ListSelectRow(
startIcon = {
WalletImage(
url = item.imageUrl,
modifier = Modifier
.size(40.dp)
.border(width = 1.dp, color = Web3ModalTheme.colors.grayGlass10, shape = RoundedCornerShape(12.dp))
.clip(RoundedCornerShape(12.dp))
)
Box {
WalletImage(
url = item.imageUrl,
modifier = Modifier
.size(40.dp)
.border(width = 1.dp, color = Web3ModalTheme.colors.grayGlass10, shape = RoundedCornerShape(12.dp))
.clip(RoundedCornerShape(12.dp))
)
if (item.isWalletInstalled) {
InstalledWalletIcon()
}
}
},
text = item.name,
onClick = { onWalletItemClick(item) },
Expand Down
10 changes: 10 additions & 0 deletions product/web3modal/src/main/res/drawable/ic_check.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="14dp"
android:viewportWidth="14"
android:viewportHeight="14">
<path
android:pathData="M12.293,2.734C12.716,3.089 12.772,3.719 12.417,4.143L6.546,11.143C6.366,11.357 6.104,11.486 5.824,11.499C5.545,11.512 5.272,11.406 5.074,11.208L1.644,7.791C1.252,7.402 1.251,6.768 1.641,6.377C2.031,5.986 2.664,5.985 3.055,6.374L5.714,9.023L10.884,2.857C11.239,2.434 11.87,2.379 12.293,2.734Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

0 comments on commit fe89dd5

Please sign in to comment.