diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/ApproveTxBottomSheetDialogFragment.java b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/ApproveTxBottomSheetDialogFragment.java index 78530037e0e..ba5d2ccddde 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/ApproveTxBottomSheetDialogFragment.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/ApproveTxBottomSheetDialogFragment.java @@ -11,6 +11,8 @@ import android.app.Dialog; import android.content.DialogInterface; import android.os.Handler; import android.os.Looper; +import android.text.Spanned; +import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -34,9 +36,7 @@ import org.chromium.brave_wallet.mojom.AccountInfo; import org.chromium.brave_wallet.mojom.AssetRatioService; import org.chromium.brave_wallet.mojom.BlockchainRegistry; import org.chromium.brave_wallet.mojom.BlockchainToken; -import org.chromium.brave_wallet.mojom.BraveWalletConstants; import org.chromium.brave_wallet.mojom.BraveWalletService; -import org.chromium.brave_wallet.mojom.CoinType; import org.chromium.brave_wallet.mojom.JsonRpcService; import org.chromium.brave_wallet.mojom.KeyringService; import org.chromium.brave_wallet.mojom.NetworkInfo; @@ -52,7 +52,7 @@ import org.chromium.chrome.browser.crypto_wallet.util.ParsedTransaction; import org.chromium.chrome.browser.crypto_wallet.util.TokenUtils; import org.chromium.chrome.browser.crypto_wallet.util.TransactionUtils; import org.chromium.chrome.browser.crypto_wallet.util.Utils; -import org.chromium.chrome.browser.crypto_wallet.util.WalletUtils; +import org.chromium.chrome.browser.util.TabUtils; import org.chromium.url.GURL; import java.util.ArrayList; @@ -212,7 +212,22 @@ public class ApproveTxBottomSheetDialogFragment extends BottomSheetDialogFragmen assert jsonRpcService != null && keyringService != null; TextView networkName = view.findViewById(R.id.network_name); - + TextView txType = view.findViewById(R.id.tx_type); + if (mTxInfo.txType + == TransactionType + .SOLANA_SPL_TOKEN_TRANSFER_WITH_ASSOCIATED_TOKEN_ACCOUNT_CREATION) { + TextView associatedSplTokenInfo = + view.findViewById(R.id.tv_approve_dialog_additional_details); + associatedSplTokenInfo.setVisibility(View.VISIBLE); + Spanned associatedSPLTokenAccountInfo = + Utils.createSpanForSurroundedPhrase(getContext(), + R.string.brave_wallet_confirm_transaction_account_creation_fee, (v) -> { + TabUtils.openUrlInNewTab(false, Utils.BRAVE_SUPPORT_URL); + TabUtils.bringChromeTabbedActivityToTheTop(getActivity()); + }); + associatedSplTokenInfo.setMovementMethod(LinkMovementMethod.getInstance()); + associatedSplTokenInfo.setText(associatedSPLTokenAccountInfo); + } mCoinType = TransactionUtils.getCoinFromTxDataUnion(mTxInfo.txDataUnion); jsonRpcService.getNetwork(mCoinType, selectedNetwork -> { networkName.setText(selectedNetwork.chainName); diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxDetailsFragment.java b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxDetailsFragment.java index 0035131950d..95273e18f69 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxDetailsFragment.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxDetailsFragment.java @@ -73,6 +73,18 @@ public class TxDetailsFragment extends Fragment { functionType = getResources().getString( R.string.wallet_details_function_type_erc721transfer); break; + case TransactionType.SOLANA_SYSTEM_TRANSFER: + functionType = getResources().getString( + R.string.wallet_details_function_type_solana_system_transfer); + break; + case TransactionType.SOLANA_SPL_TOKEN_TRANSFER: + functionType = getResources().getString( + R.string.wallet_details_function_type_spl_token_transfer); + break; + case TransactionType.SOLANA_SPL_TOKEN_TRANSFER_WITH_ASSOCIATED_TOKEN_ACCOUNT_CREATION: + functionType = getResources().getString( + R.string.wallet_details_function_type_solana_spl_token_transfer_with_associated_token_account_creation); + break; default: break; } diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxFragment.java b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxFragment.java index 692ff55fbba..146fa35daef 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxFragment.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxFragment.java @@ -27,6 +27,7 @@ import androidx.fragment.app.Fragment; import org.chromium.brave_wallet.mojom.AccountInfo; import org.chromium.brave_wallet.mojom.AssetPriceTimeframe; import org.chromium.brave_wallet.mojom.BlockchainToken; +import org.chromium.brave_wallet.mojom.CoinType; import org.chromium.brave_wallet.mojom.EthTxManagerProxy; import org.chromium.brave_wallet.mojom.NetworkInfo; import org.chromium.brave_wallet.mojom.TransactionInfo; @@ -111,6 +112,9 @@ public class TxFragment extends Fragment { setupView(view); View advanceSettingContainer = view.findViewById(R.id.fragment_tx_tv_advance_setting); + advanceSettingContainer.setVisibility( + isAdvanceSettingEnabled(mSelectedNetwork) ? View.VISIBLE : View.INVISIBLE); + advanceSettingContainer.setOnClickListener(v -> { Intent toAdvanceTxSetting = new Intent(requireActivity(), AdvanceTxSettingActivity.class); @@ -121,6 +125,7 @@ public class TxFragment extends Fragment { }); TextView editGasFee = view.findViewById(R.id.edit_gas_fee); + editGasFee.setVisibility(isEditTxEnabled(mSelectedNetwork) ? View.VISIBLE : View.INVISIBLE); editGasFee.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -434,4 +439,12 @@ public class TxFragment extends Fragment { } } } + + private boolean isEditTxEnabled(NetworkInfo selectedNetwork) { + return selectedNetwork.coin == CoinType.ETH; + } + + private boolean isAdvanceSettingEnabled(NetworkInfo selectedNetwork) { + return isEditTxEnabled(selectedNetwork); + } } diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/Utils.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/Utils.java index bcf6f2d4461..0e62b0de3fe 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/Utils.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/Utils.java @@ -1307,8 +1307,8 @@ public class Utils { Spannable spannable = new SpannableString(AndroidUtils.formatHTML(htmlString)); URLSpan[] spans = spannable.getSpans(0, spannable.length(), URLSpan.class); for (URLSpan urlSpan : spans) { - NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan(context, - R.color.brave_theme_color, (view) -> { onClickListener.onClick(view); }); + NoUnderlineClickableSpan linkSpan = new NoUnderlineClickableSpan( + context, (view) -> { onClickListener.onClick(view); }); int spanStart = spannable.getSpanStart(urlSpan); int spanEnd = spannable.getSpanEnd(urlSpan); spannable.setSpan(linkSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); diff --git a/android/java/res/layout/approve_tx_bottom_sheet.xml b/android/java/res/layout/approve_tx_bottom_sheet.xml index 66fd04886fc..3f218f9a956 100644 --- a/android/java/res/layout/approve_tx_bottom_sheet.xml +++ b/android/java/res/layout/approve_tx_bottom_sheet.xml @@ -130,6 +130,20 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/amount_asset" /> + + @android:color/white #C2C4CF #272733 + #453e2d #84889C diff --git a/android/java/res/values/brave_colors.xml b/android/java/res/values/brave_colors.xml index f7b05e0067c..95819313352 100644 --- a/android/java/res/values/brave_colors.xml +++ b/android/java/res/values/brave_colors.xml @@ -28,6 +28,7 @@ @android:color/black @android:color/black #E1E3E4 + #F0F2FF #868E96 diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index 9e50af14bce..d1252edda4b 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -2471,6 +2471,15 @@ If you don't accept this request, VPN will not reconnect and your internet conne ERC20Approve + + SolanaSystemTransfer + + + SPLTokenTransfer + + + SolanaSPLTokenTransferWithAssociatedTokenAccountCreation + %1$sAccount1 sent %2$s0.0444 %3$sETH ($%4$s10.00) - %5$s2021-11-12 08:38pm @@ -3065,6 +3074,9 @@ If you don't accept this request, VPN will not reconnect and your internet conne Not a valid SOL address + + The associated token account does not exist yet. A small amount of SOL will be spent to create and fund it.%1$sLearn more%2$s +