chore(wallet): integrate add and switch dapps API

This commit is contained in:
Pavneet-Sing
2022-04-27 22:27:24 +05:30
parent 8798ac09d4
commit 955348f941
10 changed files with 367 additions and 161 deletions
+1 -1
View File
@@ -884,6 +884,7 @@ brave_java_resources = [
"java/res/layout/dapps_dialog.xml",
"java/res/layout/edit_visible_assets_bottom_sheet.xml",
"java/res/layout/fragment_accounts.xml",
"java/res/layout/fragment_add_switch_ethereum_chain.xml",
"java/res/layout/fragment_add_token.xml",
"java/res/layout/fragment_backup_wallet.xml",
"java/res/layout/fragment_binance_buy.xml",
@@ -912,7 +913,6 @@ brave_java_resources = [
"java/res/layout/fragment_set_default_browser_bottom_sheet.xml",
"java/res/layout/fragment_setup_wallet.xml",
"java/res/layout/fragment_sign_message.xml",
"java/res/layout/fragment_switch_ethereum_chain.xml",
"java/res/layout/fragment_transaction.xml",
"java/res/layout/fragment_transaction_details.xml",
"java/res/layout/fragment_troubleshooting_onboarding.xml",
+1 -1
View File
@@ -95,13 +95,13 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TwoLineItemFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxDetailsFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/TxFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/AddSwitchChainNetworkFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/AddTokenFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/BaseDAppsBottomSheetDialogFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/BaseDAppsFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/ConnectAccountFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/DAppsMessageFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/SignMessageFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/SwitchEthereumChainFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding_fragments/BackupWalletFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding_fragments/CryptoOnboardingFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/onboarding_fragments/RecoveryPhraseFragment.java",
@@ -5,11 +5,7 @@
package org.chromium.chrome.browser.crypto_wallet.activities;
import static org.chromium.chrome.browser.crypto_wallet.util.WalletConstants.ADD_NETWORK_FRAGMENT_ARG_ACTIVE_NETWORK;
import static org.chromium.chrome.browser.crypto_wallet.util.WalletConstants.ADD_NETWORK_FRAGMENT_ARG_CHAIN_ID;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import androidx.fragment.app.Fragment;
@@ -21,23 +17,20 @@ import org.chromium.brave_wallet.mojom.CoinType;
import org.chromium.brave_wallet.mojom.TransactionInfo;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.crypto_wallet.fragments.ApproveTxBottomSheetDialogFragment;
import org.chromium.chrome.browser.crypto_wallet.fragments.dapps.AddSwitchChainNetworkFragment;
import org.chromium.chrome.browser.crypto_wallet.fragments.dapps.AddTokenFragment;
import org.chromium.chrome.browser.crypto_wallet.fragments.dapps.BaseDAppsBottomSheetDialogFragment;
import org.chromium.chrome.browser.crypto_wallet.fragments.dapps.BaseDAppsFragment;
import org.chromium.chrome.browser.crypto_wallet.fragments.dapps.ConnectAccountFragment;
import org.chromium.chrome.browser.crypto_wallet.fragments.dapps.SignMessageFragment;
import org.chromium.chrome.browser.crypto_wallet.fragments.dapps.SwitchEthereumChainFragment;
import org.chromium.chrome.browser.crypto_wallet.listeners.TransactionConfirmationListener;
import org.chromium.chrome.browser.crypto_wallet.util.PendingTxHelper;
import org.chromium.chrome.browser.settings.BraveWalletAddNetworksFragment;
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
import org.chromium.components.browser_ui.settings.SettingsLauncher;
import java.util.HashMap;
import java.util.Map;
public class BraveWalletDAppsActivity
extends BraveWalletBaseActivity implements TransactionConfirmationListener {
public class BraveWalletDAppsActivity extends BraveWalletBaseActivity
implements TransactionConfirmationListener,
AddSwitchChainNetworkFragment.AddSwitchRequestProcessListener {
public static final String ACTIVITY_TYPE = "activityType";
private static final String TAG = BraveWalletBaseActivity.class.getSimpleName();
private ApproveTxBottomSheetDialogFragment approveTxBottomSheetDialogFragment;
@@ -82,31 +75,75 @@ public class BraveWalletDAppsActivity
Intent intent = getIntent();
mActivityType = ActivityType.valueOf(
intent.getIntExtra("activityType", ActivityType.ADD_ETHEREUM_CHAIN.getValue()));
mFragment = null;
if (mActivityType == ActivityType.SIGN_MESSAGE) {
mFragment = new SignMessageFragment();
} else if (mActivityType == ActivityType.SWITCH_ETHEREUM_CHAIN) {
mFragment = new SwitchEthereumChainFragment();
} else if (mActivityType == ActivityType.ADD_TOKEN) {
mFragment = new AddTokenFragment();
} else if (mActivityType == ActivityType.CONNECT_ACCOUNT) {
mFragment = new ConnectAccountFragment();
}
if (mFragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.frame_layout, mFragment);
ft.commit();
}
onInitialLayoutInflationComplete();
}
@Override
public void finishNativeInitialization() {
super.finishNativeInitialization();
if (mActivityType == ActivityType.ADD_ETHEREUM_CHAIN) {
addEthereumChain();
processPendingDappsRequest();
if (mFragment != null) {
// Note: finishNativeInitialization can be triggered before the creation of Fragment's
// view
if (mFragment instanceof BaseDAppsFragment) {
((BaseDAppsFragment) mFragment).finishNativeInitialization();
} else if (mFragment instanceof BaseDAppsBottomSheetDialogFragment) {
((BaseDAppsBottomSheetDialogFragment) mFragment).finishNativeInitialization();
}
}
}
@Override
public void onAddRequestProcessed(boolean hasMoreRequests) {
processPendingAddSwitchRequest(hasMoreRequests);
}
@Override
public void onSwitchRequestProcessed(boolean hasMoreRequests) {
processPendingAddSwitchRequest(hasMoreRequests);
}
@Override
public void onNextTransaction() {
// TODO: show the info of next Transaction via the pendingTxHelper if available,
// otherwise dismiss activity
}
@Override
public void onRejectAllTransactions() {
for (TransactionInfo transactionInfo : mPendingTxHelper.getPendingTransactions()) {
getTxService().rejectTransaction(CoinType.ETH, transactionInfo.id, success -> {
if (!success) {
Log.e(TAG, "Transaction failed " + transactionInfo.id);
}
});
}
finish();
}
@Override
public void onCancel() {
finish();
}
/*
* Process the next request by reloading the AddSwitchChainNetworkFragment
* which will load the next pending request
*/
private void processPendingAddSwitchRequest(boolean hasMoreRequests) {
if (hasMoreRequests) {
processPendingDappsRequest();
} else {
finish();
}
}
private void processPendingDappsRequest() {
mFragment = null;
if (mActivityType == ActivityType.SIGN_MESSAGE) {
mFragment = new SignMessageFragment();
} else if (mActivityType == ActivityType.ADD_TOKEN) {
mFragment = new AddTokenFragment();
} else if (mActivityType == ActivityType.CONFIRM_TRANSACTION) {
getKeyringService().getKeyringInfo(
BraveWalletConstants.DEFAULT_KEYRING_ID, keyringInfo -> {
@@ -145,43 +182,18 @@ public class BraveWalletDAppsActivity
});
mPendingTxHelper.fetchTransactions(() -> {});
});
} else if (mActivityType == ActivityType.ADD_ETHEREUM_CHAIN
|| mActivityType == ActivityType.SWITCH_ETHEREUM_CHAIN) {
mFragment = new AddSwitchChainNetworkFragment(mActivityType, this);
}
if (mFragment instanceof BaseDAppsFragment) {
((BaseDAppsFragment) mFragment).finishNativeInitialization();
} else if (mFragment instanceof BaseDAppsBottomSheetDialogFragment) {
((BaseDAppsBottomSheetDialogFragment) mFragment).finishNativeInitialization();
showCurrentFragment();
}
private void showCurrentFragment() {
if (mFragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.frame_layout, mFragment);
ft.commit();
}
}
private void addEthereumChain() {
Bundle fragmentArgs = new Bundle();
fragmentArgs.putString(ADD_NETWORK_FRAGMENT_ARG_CHAIN_ID, "");
fragmentArgs.putBoolean(ADD_NETWORK_FRAGMENT_ARG_ACTIVE_NETWORK, false);
SettingsLauncher settingsLauncher = new SettingsLauncherImpl();
settingsLauncher.launchSettingsActivity(
this, BraveWalletAddNetworksFragment.class, fragmentArgs);
}
@Override
public void onNextTransaction() {
// TODO: show the info of next Transaction via the pendingTxHelper if available,
// otherwise dismiss activity
}
@Override
public void onRejectAllTransactions() {
for (TransactionInfo transactionInfo : mPendingTxHelper.getPendingTransactions()) {
getTxService().rejectTransaction(CoinType.ETH, transactionInfo.id, success -> {
if (!success) {
Log.e(TAG, "Transaction failed " + transactionInfo.id);
}
});
}
finish();
}
@Override
public void onCancel() {
finish();
}
}
@@ -36,7 +36,7 @@ public class TwoLineItemRecyclerViewAdapter
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
holder.mTvTitle.setText(mValues.get(position).getSubTitle());
holder.mTvTitle.setText(mValues.get(position).getTitle());
holder.mTvSubtitle.setText(mValues.get(position).getSubTitle());
}
@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.crypto_wallet.fragments;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -25,6 +26,7 @@ import java.util.List;
*/
public class TwoLineItemFragment extends Fragment {
private List<TwoLineItemDataSource> items;
private TwoLineItemRecyclerViewAdapter adapter;
public TwoLineItemFragment(List<TwoLineItemDataSource> items) {
this.items = items;
@@ -39,9 +41,16 @@ public class TwoLineItemFragment extends Fragment {
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_two_line_item_list, container, false);
RecyclerView recyclerView = (RecyclerView) view;
recyclerView.setAdapter(new TwoLineItemRecyclerViewAdapter(items));
adapter = new TwoLineItemRecyclerViewAdapter(items);
recyclerView.setAdapter(adapter);
return view;
}
@SuppressLint("NotifyDataSetChanged")
public void invalidateData() {
if (adapter != null) {
adapter.notifyDataSetChanged();
}
}
}
@@ -0,0 +1,243 @@
package org.chromium.chrome.browser.crypto_wallet.fragments.dapps;
import static org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletDAppsActivity.ActivityType.ADD_ETHEREUM_CHAIN;
import static org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletDAppsActivity.ActivityType.SWITCH_ETHEREUM_CHAIN;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import org.chromium.brave_wallet.mojom.AddChainRequest;
import org.chromium.brave_wallet.mojom.CoinType;
import org.chromium.brave_wallet.mojom.NetworkInfo;
import org.chromium.brave_wallet.mojom.SwitchChainRequest;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletBaseActivity;
import org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletDAppsActivity;
import org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletDAppsActivity.ActivityType;
import org.chromium.chrome.browser.crypto_wallet.adapters.FragmentNavigationItemAdapter;
import org.chromium.chrome.browser.crypto_wallet.adapters.TwoLineItemRecyclerViewAdapter.TwoLineItemDataSource;
import org.chromium.chrome.browser.crypto_wallet.fragments.TwoLineItemFragment;
import org.chromium.chrome.browser.crypto_wallet.util.NavigationItem;
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
import org.chromium.chrome.browser.util.TabUtils;
import java.util.ArrayList;
import java.util.List;
public class AddSwitchChainNetworkFragment extends BaseDAppsFragment {
private List<NavigationItem> mTabTitles;
private ActivityType mPanelType;
private NetworkInfo mNetworkInfo;
private BraveWalletBaseActivity mBraveWalletBaseActivity;
private SwitchChainRequest mSwitchChainRequest;
private AddChainRequest mAddChainRequest;
private AddSwitchRequestProcessListener mAddSwitchRequestProcessListener;
private boolean hasMultipleAddSwitchChainRequest;
private List<TwoLineItemDataSource> networks;
private List<TwoLineItemDataSource> details;
public AddSwitchChainNetworkFragment(BraveWalletDAppsActivity.ActivityType panelType) {
mPanelType = panelType;
mTabTitles = new ArrayList<>();
networks = new ArrayList<>();
details = new ArrayList<>();
}
public AddSwitchChainNetworkFragment(BraveWalletDAppsActivity.ActivityType panelType,
AddSwitchRequestProcessListener addSwitchRequestProcessListener) {
this(panelType);
mAddSwitchRequestProcessListener = addSwitchRequestProcessListener;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTabTitles.add(new NavigationItem(getString(R.string.brave_wallet_allow_add_network_title),
new TwoLineItemFragment(networks)));
mTabTitles.add(
new NavigationItem(getString(R.string.details), new TwoLineItemFragment(details)));
}
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_add_switch_ethereum_chain, container, false);
ViewPager2 viewPager =
view.findViewById(R.id.fragment_switch_eth_chain_tv_message_view_pager);
TabLayout tabLayout = view.findViewById(R.id.fragment_switch_eth_chain_tv_message_tabs);
viewPager.setUserInputEnabled(false);
FragmentNavigationItemAdapter adapter = new FragmentNavigationItemAdapter(this, mTabTitles);
viewPager.setAdapter(adapter);
new TabLayoutMediator(tabLayout, viewPager,
(tab, position) -> tab.setText(mTabTitles.get(position).getTitle()))
.attach();
Button btnAddSwitchNetwork = view.findViewById(R.id.fragment_add_switch_eth_chain_btn_sign);
if (mPanelType == ADD_ETHEREUM_CHAIN) {
btnAddSwitchNetwork.setText(R.string.approve);
SpannableString addChainHeading = Utils.createSpannableString(
getString(R.string.brave_wallet_allow_add_network_description),
getString(R.string.brave_wallet), new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
TabUtils.openUrlInNewTab(false, Utils.BRAVE_SUPPORT_URL);
TabUtils.bringChromeTabbedActivityToTheTop(getActivity());
}
}, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView tvAddChainTitle = view.findViewById(R.id.fragment_add_switch_chain_tv_title);
tvAddChainTitle.setText(R.string.brave_wallet_allow_add_network_heading);
TextView addChainDesc = view.findViewById(R.id.fragment_add_switch_chain_tv_text);
addChainDesc.setMovementMethod(LinkMovementMethod.getInstance());
addChainDesc.setText(addChainHeading);
} else if (mPanelType == SWITCH_ETHEREUM_CHAIN) {
btnAddSwitchNetwork.setText(R.string.brave_wallet_allow_change_network_button);
}
btnAddSwitchNetwork.setOnClickListener(v -> {
if (mPanelType == ADD_ETHEREUM_CHAIN) {
processAddChainRequest(mNetworkInfo, true);
processNextAddNetworkRequest();
} else if (mPanelType == SWITCH_ETHEREUM_CHAIN) {
processSwitchChainRequest(mSwitchChainRequest, true);
processNextSwitchChainRequest();
}
});
Button btnAddSwitchCancel =
view.findViewById(R.id.fragment_add_switch_eth_chain_btn_cancel);
btnAddSwitchCancel.setOnClickListener(v -> {
if (mPanelType == ADD_ETHEREUM_CHAIN) {
processAddChainRequest(mNetworkInfo, false);
processNextAddNetworkRequest();
} else if (mPanelType == SWITCH_ETHEREUM_CHAIN) {
processSwitchChainRequest(mSwitchChainRequest, false);
processNextSwitchChainRequest();
}
});
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
fetchNetworkInfo();
}
private void fetchNetworkInfo() {
assert getActivity() instanceof BraveWalletBaseActivity;
mBraveWalletBaseActivity = (BraveWalletBaseActivity) getActivity();
if (mPanelType == ADD_ETHEREUM_CHAIN) {
mBraveWalletBaseActivity.getJsonRpcService().getPendingAddChainRequests(
addChainRequests -> {
mAddChainRequest = addChainRequests[0];
mNetworkInfo = mAddChainRequest.networkInfo;
hasMultipleAddSwitchChainRequest = addChainRequests.length > 1;
updateState();
});
} else if (mPanelType == SWITCH_ETHEREUM_CHAIN) {
mBraveWalletBaseActivity.getJsonRpcService().getPendingSwitchChainRequests(
switchChainRequests -> {
mSwitchChainRequest = switchChainRequests[0];
hasMultipleAddSwitchChainRequest = switchChainRequests.length > 1;
mBraveWalletBaseActivity.getJsonRpcService().getAllNetworks(
CoinType.ETH, chains -> {
for (NetworkInfo network : chains) {
if (mSwitchChainRequest.chainId.equals(network.chainId)) {
mNetworkInfo = network;
updateState();
break;
}
}
});
});
}
}
private void updateState() {
if (getView() != null && mNetworkInfo != null) {
addNetworkTabInfo(mNetworkInfo);
addDetailsTabInfo(mNetworkInfo);
updateNetworkInfo();
}
}
private void processNextSwitchChainRequest() {
if (mAddSwitchRequestProcessListener != null) {
mAddSwitchRequestProcessListener.onSwitchRequestProcessed(
hasMultipleAddSwitchChainRequest);
}
}
private void processNextAddNetworkRequest() {
if (mAddSwitchRequestProcessListener != null) {
mAddSwitchRequestProcessListener.onAddRequestProcessed(
hasMultipleAddSwitchChainRequest);
}
}
private void processSwitchChainRequest(
SwitchChainRequest switchChainRequest, boolean isApproved) {
mBraveWalletBaseActivity.getJsonRpcService().notifySwitchChainRequestProcessed(
isApproved, switchChainRequest.originInfo.origin);
}
private void processAddChainRequest(NetworkInfo networkInfo, boolean isApproved) {
mBraveWalletBaseActivity.getJsonRpcService().addEthereumChainRequestCompleted(
networkInfo.chainId, isApproved);
}
private void updateNetworkInfo() {
for (NavigationItem navigationItem : mTabTitles) {
((TwoLineItemFragment) navigationItem.getFragment()).invalidateData();
}
}
private void addDetailsTabInfo(NetworkInfo networkInfo) {
networks.clear();
networks.add(new TwoLineItemDataSource(
getString(R.string.brave_wallet_allow_add_network_name), networkInfo.chainName));
networks.add(
new TwoLineItemDataSource(getString(R.string.brave_wallet_allow_add_network_url),
networkInfo.rpcUrls.length > 0 ? networkInfo.rpcUrls[0] : ""));
}
private void addNetworkTabInfo(NetworkInfo networkInfo) {
details.clear();
details.add(new TwoLineItemDataSource(
getString(R.string.brave_wallet_allow_add_network_name), networkInfo.chainName));
details.add(
new TwoLineItemDataSource(getString(R.string.brave_wallet_allow_add_network_url),
networkInfo.rpcUrls.length > 0 ? networkInfo.rpcUrls[0] : ""));
details.add(new TwoLineItemDataSource(
getString(R.string.brave_wallet_allow_add_network_chain_id), networkInfo.chainId));
details.add(new TwoLineItemDataSource(
getString(R.string.brave_wallet_allow_add_network_currency_symbol),
networkInfo.symbol));
details.add(new TwoLineItemDataSource(getString(R.string.wallet_add_custom_asset_decimals),
String.valueOf(networkInfo.decimals)));
details.add(new TwoLineItemDataSource(
getString(R.string.brave_wallet_add_network_block_explorer_urls),
networkInfo.blockExplorerUrls.length > 0 ? networkInfo.blockExplorerUrls[0] : ""));
}
public interface AddSwitchRequestProcessListener {
void onAddRequestProcessed(boolean hasMoreRequests);
void onSwitchRequestProcessed(boolean hasMoreRequests);
}
}
@@ -1,82 +0,0 @@
/* Copyright (c) 2022 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.chromium.chrome.browser.crypto_wallet.fragments.dapps;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import org.chromium.brave_wallet.mojom.CoinType;
import org.chromium.brave_wallet.mojom.NetworkInfo;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.crypto_wallet.adapters.FragmentNavigationItemAdapter;
import org.chromium.chrome.browser.crypto_wallet.adapters.TwoLineItemRecyclerViewAdapter.TwoLineItemDataSource;
import org.chromium.chrome.browser.crypto_wallet.fragments.TwoLineItemFragment;
import org.chromium.chrome.browser.crypto_wallet.util.NavigationItem;
import java.util.ArrayList;
import java.util.List;
public class SwitchEthereumChainFragment extends BaseDAppsFragment {
private List<NavigationItem> mTabTitles;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTabTitles = new ArrayList<>();
// Todo: replace hardcoded strings with striung resources if required
NetworkInfo info = new NetworkInfo();
info.chainName = "Rinkeby Test Network";
info.rpcUrls = new String[] {"Rinkeby Test Network"};
info.chainId = "0x4";
info.symbol = "ETH";
info.decimals = 18;
info.coin = CoinType.ETH;
info.blockExplorerUrls = new String[] {"https://rinkeby.etherscan.io"};
List<TwoLineItemDataSource> networks = new ArrayList<>();
networks.add(new TwoLineItemDataSource("Network name", info.chainName));
networks.add(new TwoLineItemDataSource(
"Network URL", info.rpcUrls.length > 0 ? info.rpcUrls[0] : ""));
List<TwoLineItemDataSource> details = new ArrayList<>();
details.add(new TwoLineItemDataSource("Network name", "Rinkeby Test Network"));
details.add(new TwoLineItemDataSource("Network URL", "rinkeyby-infura.brave.com"));
details.add(new TwoLineItemDataSource("Chain ID", info.chainId));
details.add(new TwoLineItemDataSource("Currency symbol", info.symbol));
details.add(
new TwoLineItemDataSource("Decimals of precision", String.valueOf(info.decimals)));
details.add(new TwoLineItemDataSource("Block explorer URL",
info.blockExplorerUrls.length > 0 ? info.blockExplorerUrls[0] : ""));
mTabTitles.add(new NavigationItem("Network", new TwoLineItemFragment(networks)));
mTabTitles.add(new NavigationItem("Details", new TwoLineItemFragment(details)));
}
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_switch_ethereum_chain, container, false);
ViewPager2 viewPager =
view.findViewById(R.id.fragment_switch_eth_chain_tv_message_view_pager);
TabLayout tabLayout = view.findViewById(R.id.fragment_switch_eth_chain_tv_message_tabs);
viewPager.setUserInputEnabled(false);
FragmentNavigationItemAdapter adapter = new FragmentNavigationItemAdapter(this, mTabTitles);
viewPager.setAdapter(adapter);
new TabLayoutMediator(tabLayout, viewPager,
(tab, position) -> tab.setText(mTabTitles.get(position).getTitle()))
.attach();
return view;
}
}
@@ -119,6 +119,7 @@ public class Utils {
private static final String PREF_CRYPTO_ONBOARDING = "crypto_onboarding";
public static final String DEX_AGGREGATOR_URL = "https://0x.org/";
public static final String BRAVE_SUPPORT_URL = "https://support.brave.com";
public static final String ADDRESS = "address";
public static final String NAME = "name";
public static final String ISIMPORTED = "isImported";
@@ -52,7 +52,7 @@
tools:text="http://0.0.0.127" />
<TextView
android:id="@+id/fragment_add_token_tv_title"
android:id="@+id/fragment_add_switch_chain_tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
@@ -66,7 +66,7 @@
app:layout_constraintTop_toBottomOf="@id/fragment_add_token_tv_site" />
<TextView
android:id="@+id/fragment_add_token_tv_text"
android:id="@+id/fragment_add_switch_chain_tv_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
@@ -76,7 +76,7 @@
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/fragment_add_token_tv_title" />
app:layout_constraintTop_toBottomOf="@+id/fragment_add_switch_chain_tv_title" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/fragment_switch_eth_chain_tv_message_tabs"
@@ -86,7 +86,7 @@
android:background="@color/wallet_toolbar_bg_color"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/fragment_add_token_tv_text"
app:layout_constraintTop_toBottomOf="@+id/fragment_add_switch_chain_tv_text"
app:tabGravity="fill"
app:tabIndicatorColor="@color/tab_color"
app:tabSelectedTextColor="@color/tab_color"
@@ -112,7 +112,7 @@
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/fragment_switch_eth_chain_btn_cancel"
android:id="@+id/fragment_add_switch_eth_chain_btn_cancel"
style="@style/BraveWalletButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -125,7 +125,7 @@
tools:ignore="DuplicateSpeakableTextCheck" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/fragment_switch_eth_chain_btn_sign"
android:id="@+id/fragment_add_switch_eth_chain_btn_sign"
style="@style/BraveWalletButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -133,8 +133,7 @@
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:layout_weight="1"
android:drawableStart="@drawable/check"
android:text="@string/brave_wallet_allow_change_network_button" />
android:drawableStart="@drawable/check" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -2974,6 +2974,30 @@ If you don't accept this request, VPN will not reconnect and your internet conne
<message name="IDS_FRAGMENT_SIGN_MESSAGE_DESCRIPTION" desc="Sign message dialog description.">
Your signature is being requested
</message>
</messages>
<message name="IDS_BRAVE_WALLET_ALLOW_ADD_NETWORK_NAME" desc="Add network panel name label">
Network name
</message>
<message name="IDS_BRAVE_WALLET_ALLOW_ADD_NETWORK_URL" desc="Add network panel url label">
Network URL
</message>
<message name="IDS_BRAVE_WALLET_ALLOW_ADD_NETWORK_CHAIN_ID" desc="Add network panel chain id label">
Chain ID
</message>
<message name="IDS_BRAVE_WALLET_ALLOW_ADD_NETWORK_CURRENCY_SYMBOL" desc="Add network panel symbol label">
Currency symbol
</message>
<message name="IDS_BRAVE_WALLET_ALLOW_ADD_NETWORK_TITLE" desc="Add network panel network tab title">
Network
</message>
<message name="IDS_BRAVE_WALLET_ALLOW_ADD_NETWORK_DESCRIPTION" desc="Add network panel description">
This will allow this network to be used within Brave Wallet.
</message>
<message name="IDS_BRAVE_WALLET" desc="Brave Wallet text for string detection with localization">
Brave Wallet
</message>
<message name="IDS_BRAVE_WALLET_ALLOW_ADD_NETWORK_HEADING" desc="Add network panel title">
Allow this site to add a network?
</message>
</messages>
</release>
</grit>