diff --git a/app/build.gradle b/app/build.gradle index 41603e8d4..5e0eb3e79 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { defaultConfig { applicationId "io.gnosis.safe" versionCode getInt("APP_VERSION_CODE", 703) - versionName getKey("APP_VERSION_NAME", "3.8.0") + versionName getKey("APP_VERSION_NAME", "3.9.0") testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // Infura API key diff --git a/app/src/main/java/io/gnosis/safe/ui/safe/send_funds/SendAssetReviewViewModel.kt b/app/src/main/java/io/gnosis/safe/ui/safe/send_funds/SendAssetReviewViewModel.kt index a76090dfb..fdf36a17f 100644 --- a/app/src/main/java/io/gnosis/safe/ui/safe/send_funds/SendAssetReviewViewModel.kt +++ b/app/src/main/java/io/gnosis/safe/ui/safe/send_funds/SendAssetReviewViewModel.kt @@ -251,10 +251,10 @@ class SendAssetReviewViewModel SendAssetReviewState( ViewAction.NavigateTo( SendAssetReviewFragmentDirections.actionSendAssetReviewFragmentToSendAssetSuccessFragment( - activeSafe.chain, - safeTxHash, - amountString, - selectedAsset.symbol + chain = activeSafe.chain, + txId = safeTxHash, // to get non cached updates later we need the txId not the hash + amount = amountString, + token = selectedAsset.symbol ) ) ) diff --git a/app/src/main/java/io/gnosis/safe/ui/settings/owner/list/OwnerListViewModel.kt b/app/src/main/java/io/gnosis/safe/ui/settings/owner/list/OwnerListViewModel.kt index a605190bc..8a33e8bb9 100644 --- a/app/src/main/java/io/gnosis/safe/ui/settings/owner/list/OwnerListViewModel.kt +++ b/app/src/main/java/io/gnosis/safe/ui/settings/owner/list/OwnerListViewModel.kt @@ -70,7 +70,7 @@ class OwnerListViewModel .sortedBy { it.name } val acceptedOwners = owners.filter { localOwner -> safe.signingOwners.any { - localOwner.address == it + localOwner.address == it && localOwner.type != Owner.Type.LEDGER_NANO_X } } val balances = rpcClient.getBalances(acceptedOwners.map { it.address }) diff --git a/app/src/main/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsFragment.kt b/app/src/main/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsFragment.kt index f063d719f..fcee95b12 100644 --- a/app/src/main/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsFragment.kt +++ b/app/src/main/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsFragment.kt @@ -70,7 +70,7 @@ class TransactionDetailsFragment : BaseViewBindingFragment R.color.success TransactionStatus.CANCELLED -> R.color.label_secondary TransactionStatus.FAILED -> R.color.error - TransactionStatus.PENDING -> R.color.label_secondary + TransactionStatus.PENDING -> R.color.warning } @StringRes diff --git a/app/src/main/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsViewModel.kt b/app/src/main/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsViewModel.kt index c773b2449..2a8504c7c 100644 --- a/app/src/main/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsViewModel.kt +++ b/app/src/main/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsViewModel.kt @@ -1,6 +1,7 @@ package io.gnosis.safe.ui.transactions.details import androidx.annotation.VisibleForTesting +import io.gnosis.data.models.AddressInfo import io.gnosis.data.models.Owner import io.gnosis.data.models.Safe import io.gnosis.data.models.TransactionLocal @@ -135,7 +136,8 @@ class TransactionDetailsViewModel executionInfo: DetailedExecutionInfo.MultisigExecutionDetails, localOwners: List ): Boolean { - return localOwners.isNotEmpty() && executionInfo.confirmations.size == executionInfo.confirmationsRequired + val ownersThatCanExecute = localOwners.filter { it.type != Owner.Type.LEDGER_NANO_X && executionInfo.signers.contains(AddressInfo(it.address))} + return ownersThatCanExecute.isNotEmpty() && executionInfo.confirmations.size == executionInfo.confirmationsRequired } @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) diff --git a/app/src/main/java/io/gnosis/safe/ui/transactions/details/view/TxConfirmationsView.kt b/app/src/main/java/io/gnosis/safe/ui/transactions/details/view/TxConfirmationsView.kt index 6b2fb14a4..78d19d5fc 100644 --- a/app/src/main/java/io/gnosis/safe/ui/transactions/details/view/TxConfirmationsView.kt +++ b/app/src/main/java/io/gnosis/safe/ui/transactions/details/view/TxConfirmationsView.kt @@ -121,6 +121,9 @@ class TxConfirmationsView @JvmOverloads constructor( TransactionStatus.FAILED -> { addExecutionStep(TxExecutionStep.Type.FAILED) } + TransactionStatus.PENDING -> { + addExecutionStep(TxExecutionStep.Type.PENDING) + } } } @@ -241,7 +244,8 @@ class TxConfirmationsView @JvmOverloads constructor( EXECUTE_WAITING, EXECUTE_READY, EXECUTE_DONE, - REJECTION_CREATED + REJECTION_CREATED, + PENDING } private val binding by lazy { ViewTxConfirmationsExecutionStepBinding.inflate(LayoutInflater.from(context), this) } @@ -297,6 +301,11 @@ class TxConfirmationsView @JvmOverloads constructor( stepTitle.text = resources.getString(R.string.tx_confirmations_rejection_created) stepTitle.setTextColor(ContextCompat.getColor(context, R.color.error)) } + Type.PENDING -> { + stepIcon.setImageResource(R.drawable.ic_tx_confirmations_execute_ready_16dp) + stepTitle.text = resources.getString(R.string.tx_confirmations_pending) + stepTitle.setTextColor(ContextCompat.getColor(context, R.color.primary)) + } } } } diff --git a/app/src/main/java/io/gnosis/safe/ui/transactions/execution/TxReviewViewModel.kt b/app/src/main/java/io/gnosis/safe/ui/transactions/execution/TxReviewViewModel.kt index e0629cdc3..37d430b5a 100644 --- a/app/src/main/java/io/gnosis/safe/ui/transactions/execution/TxReviewViewModel.kt +++ b/app/src/main/java/io/gnosis/safe/ui/transactions/execution/TxReviewViewModel.kt @@ -123,6 +123,9 @@ class TxReviewViewModel rpcClient.getBalances(acceptedOwners.map { it.address }) }.onSuccess { executionKey = acceptedOwners + .filter { + it.type != Owner.Type.LEDGER_NANO_X + } .mapIndexed { index, owner -> owner to it[index] } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2406394f4..324f405c2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -466,6 +466,7 @@ Execute (%1$d more confirmation needed) Executed On-chain rejection created + Pending Add owner key Import existing owner key diff --git a/app/src/test/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsViewModelTest.kt b/app/src/test/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsViewModelTest.kt index 5f1ec4b99..baa4b01ee 100644 --- a/app/src/test/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsViewModelTest.kt +++ b/app/src/test/java/io/gnosis/safe/ui/transactions/details/TransactionDetailsViewModelTest.kt @@ -720,7 +720,7 @@ class TransactionDetailsViewModelTest { txDetails = transactionDetails.toTransactionDetailsViewData( safes = emptyList(), canSign = false, - canExecute = true, + canExecute = false, nextInLine = false, hasOwnerKey = false, owners = listOf(owner) diff --git a/data/build.gradle b/data/build.gradle index 5707b4cca..24519cd6a 100644 --- a/data/build.gradle +++ b/data/build.gradle @@ -38,7 +38,7 @@ android { buildTypes { debug { - buildConfigField ("String", "CLIENT_GATEWAY_URL", '"https://safe-client-nest.staging.5afe.dev/"') + buildConfigField ("String", "CLIENT_GATEWAY_URL", '"https://safe-client.staging.5afe.dev/"') buildConfigField (javaTypes.INT, "CHAIN_ID", "5") buildConfigField (javaTypes.STRING, "CHAIN_TEXT_COLOR", asString("#ffffff")) buildConfigField (javaTypes.STRING, "CHAIN_BACKGROUND_COLOR", asString("#4D99EB")) @@ -49,7 +49,7 @@ android { } profile { - buildConfigField javaTypes.STRING, "CLIENT_GATEWAY_URL", asString(getKey("CLIENT_GATEWAY_URL", "https://safe-client-nest.staging.5afe.dev/")) + buildConfigField javaTypes.STRING, "CLIENT_GATEWAY_URL", asString(getKey("CLIENT_GATEWAY_URL", "https://safe-client.staging.5afe.dev/")) buildConfigField (javaTypes.INT, "CHAIN_ID", "5") buildConfigField (javaTypes.STRING, "CHAIN_TEXT_COLOR", asString("#ffffff")) buildConfigField (javaTypes.STRING, "CHAIN_BACKGROUND_COLOR", asString("#4D99EB")) @@ -71,7 +71,7 @@ android { } internal { - buildConfigField javaTypes.STRING, "CLIENT_GATEWAY_URL", asString(getKey("CLIENT_GATEWAY_URL", "https://safe-client-nest.staging.5afe.dev/")) + buildConfigField javaTypes.STRING, "CLIENT_GATEWAY_URL", asString(getKey("CLIENT_GATEWAY_URL", "https://safe-client.staging.5afe.dev/")) buildConfigField (javaTypes.INT, "CHAIN_ID", "5") buildConfigField (javaTypes.STRING, "CHAIN_TEXT_COLOR", asString("#ffffff")) buildConfigField (javaTypes.STRING, "CHAIN_BACKGROUND_COLOR", asString("#4D99EB")) diff --git a/data/src/main/java/io/gnosis/data/models/transaction/TransactionDetails.kt b/data/src/main/java/io/gnosis/data/models/transaction/TransactionDetails.kt index 4e4744052..30470ad3b 100644 --- a/data/src/main/java/io/gnosis/data/models/transaction/TransactionDetails.kt +++ b/data/src/main/java/io/gnosis/data/models/transaction/TransactionDetails.kt @@ -14,6 +14,8 @@ import java.util.* @JsonClass(generateAdapter = true) data class TransactionDetails( + @Json(name = "txId") + val txId: String? = null, @Json(name = "txHash") val txHash: String? = null, @Json(name = "txStatus")