chore(wallet): integrate add and switch dapps API
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
+77
-65
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
+11
-2
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+243
@@ -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);
|
||||
}
|
||||
}
|
||||
-82
@@ -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";
|
||||
|
||||
+7
-8
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user