Merge pull request #12396 from brave/20471-replace-network-selector

20471 replace network selector
This commit is contained in:
Pavneet Singh
2022-03-02 22:47:43 +05:30
committed by GitHub
15 changed files with 668 additions and 312 deletions
+4
View File
@@ -573,6 +573,7 @@ brave_java_resources = [
"java/res/drawable/ic_addresses.xml",
"java/res/drawable/ic_appearance.xml",
"java/res/drawable/ic_arrow_down.xml",
"java/res/drawable/ic_arrow_down_circular_day_night.xml",
"java/res/drawable/ic_arrow_downward.xml",
"java/res/drawable/ic_arrow_drop_down_white.xml",
"java/res/drawable/ic_arrow_forward.xml",
@@ -595,6 +596,7 @@ brave_java_resources = [
"java/res/drawable/ic_calendar.xml",
"java/res/drawable/ic_carat_down.xml",
"java/res/drawable/ic_card_background.xml",
"java/res/drawable/ic_check.xml",
"java/res/drawable/ic_check_circle.xml",
"java/res/drawable/ic_checkbox_filled.xml",
"java/res/drawable/ic_checkbox_outline.xml",
@@ -769,6 +771,7 @@ brave_java_resources = [
"java/res/layout/activity_brave_vpn_support.xml",
"java/res/layout/activity_brave_wallet.xml",
"java/res/layout/activity_buy_send_swap.xml",
"java/res/layout/activity_network_selector.xml",
"java/res/layout/activity_ntp_widget_stack.xml",
"java/res/layout/activity_onboarding.xml",
"java/res/layout/activity_p3a_onboarding.xml",
@@ -883,6 +886,7 @@ brave_java_resources = [
"java/res/layout/fragment_vpn_callout_dialog.xml",
"java/res/layout/highlight_layout.xml",
"java/res/layout/icon_row_menu_footer.xml",
"java/res/layout/item_network_selector.xml",
"java/res/layout/location_status_incognito_badge.xml",
"java/res/layout/menu_separator.xml",
"java/res/layout/network_spinner_items.xml",
+2
View File
@@ -69,10 +69,12 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BraveWalletActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BraveWalletBaseActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/activities/BuySendSwapActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/activities/NetworkSelectorActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/adapters/AccountSpinnerAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/adapters/ApproveTxFragmentPageAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/adapters/CryptoFragmentPageAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/adapters/CryptoWalletOnboardingPagerAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/adapters/NetworkSelectorAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/adapters/NetworkSpinnerAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/adapters/RecoveryPhraseAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/crypto_wallet/adapters/WalletCoinAdapter.java",
+5
View File
@@ -85,6 +85,11 @@
android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity"/>
<activity android:name="org.chromium.chrome.browser.crypto_wallet.activities.NetworkSelectorActivity"
android:theme="@style/Theme.Chromium.Activity"
android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity"/>
<activity
android:name="org.chromium.chrome.browser.vpn.BraveVpnPlansActivity"
android:theme="@style/Theme.Chromium.Activity"
@@ -101,6 +101,7 @@ import org.chromium.chrome.browser.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerImpl;
import org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletActivity;
import org.chromium.chrome.browser.crypto_wallet.activities.NetworkSelectorActivity;
import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches;
@@ -805,6 +806,13 @@ public abstract class BraveActivity<C extends ChromeActivityComponent>
startActivity(braveWalletIntent);
}
// should only be called if the wallet is setup and unlocked
public void openNetworkSelection() {
Intent braveNetworkSelectionIntent = new Intent(this, NetworkSelectorActivity.class);
braveNetworkSelectionIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(braveNetworkSelectionIntent);
}
private void checkForYandexSE() {
String countryCode = Locale.getDefault().getCountry();
if (yandexRegions.contains(countryCode)) {
@@ -0,0 +1,87 @@
/* 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.activities;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.MaterialToolbar;
import org.chromium.base.Log;
import org.chromium.brave_wallet.mojom.EthereumChain;
import org.chromium.brave_wallet.mojom.JsonRpcService;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.crypto_wallet.adapters.NetworkSelectorAdapter;
import org.chromium.chrome.browser.crypto_wallet.adapters.NetworkSelectorAdapter.NetworkSelectorItem;
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
public class NetworkSelectorActivity
extends BraveWalletBaseActivity implements NetworkSelectorAdapter.NetworkClickListener {
private static final String TAG = NetworkSelectorActivity.class.getSimpleName();
private RecyclerView mRVNetworkSelector;
private NetworkSelectorAdapter networkSelectorAdapter;
private MaterialToolbar mToolbar;
@Override
protected void triggerLayoutInflation() {
setContentView(R.layout.activity_network_selector);
mToolbar = findViewById(R.id.toolbar);
mToolbar.setTitle(R.string.brave_wallet_network_activity_title);
setSupportActionBar(mToolbar);
mRVNetworkSelector = findViewById(R.id.rv_network_activity);
onInitialLayoutInflationComplete();
}
@Override
public void finishNativeInitialization() {
super.finishNativeInitialization();
initState();
}
private void initState() {
JsonRpcService jsonRpcService = getJsonRpcService();
assert jsonRpcService != null;
jsonRpcService.getAllNetworks(chains -> {
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
networkSelectorAdapter =
new NetworkSelectorAdapter(this, Utils.getNetworksList(this, customNetworks),
Utils.getNetworksAbbrevList(this, customNetworks));
networkSelectorAdapter.setOnNetworkItemSelected(this);
mRVNetworkSelector.setAdapter(networkSelectorAdapter);
fetchSelectedNetwork();
});
}
private void fetchSelectedNetwork() {
JsonRpcService jsonRpcService = getJsonRpcService();
assert jsonRpcService != null;
jsonRpcService.getChainId(chainId -> {
jsonRpcService.getAllNetworks(chains -> {
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
String strNetwork = Utils.getNetworkText(this, chainId, customNetworks).toString();
networkSelectorAdapter.setSelectedNetwork(strNetwork);
});
});
}
@Override
public void onNetworkItemSelected(NetworkSelectorItem networkSelectorItem) {
JsonRpcService jsonRpcService = getJsonRpcService();
if (jsonRpcService != null) {
jsonRpcService.getAllNetworks(chains -> {
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
jsonRpcService.setNetwork(
Utils.getNetworkConst(
this, networkSelectorItem.getNetworkName(), customNetworks),
(success) -> {
if (!success) {
Log.e(TAG, "Could not set network");
}
});
});
}
}
}
@@ -0,0 +1,160 @@
/* 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.adapters;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class NetworkSelectorAdapter
extends RecyclerView.Adapter<NetworkSelectorAdapter.ViewHolder> {
private Context mContext;
private final ExecutorService mExecutor;
private final Handler mHandler;
private final List<NetworkSelectorItem> networks;
private final LayoutInflater inflater;
private int previousSelectedPos;
private NetworkClickListener networkClickListener;
public NetworkSelectorAdapter(
Context context, String[] networkNames, String[] networkShortNames) {
assert networkNames.length == networkShortNames.length;
this.mContext = context;
inflater = (LayoutInflater.from(context));
mExecutor = Executors.newSingleThreadExecutor();
mHandler = new Handler(Looper.getMainLooper());
networks = new ArrayList<>();
init(networkNames, networkShortNames);
}
@Override
public @NonNull ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
mContext = parent.getContext();
View view = inflater.inflate(R.layout.item_network_selector, parent, false);
return new ViewHolder(view);
}
@SuppressLint("NotifyDataSetChanged")
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final NetworkSelectorItem network = networks.get(position);
holder.tvName.setText(network.getNetworkShortName());
Utils.setBlockiesBitmapResource(
mExecutor, mHandler, holder.ivNetworkPicture, network.getNetworkName(), false);
holder.ivSelected.setVisibility(network.isSelected() ? View.VISIBLE : View.GONE);
holder.itemView.setOnClickListener(v -> {
updateSelectedNetwork(holder.getAdapterPosition());
if (networkClickListener != null) {
networkClickListener.onNetworkItemSelected(network);
}
});
}
@Override
public int getItemCount() {
return networks.size();
}
public void setSelectedNetwork(String network) {
for (int i = 0; i < networks.size(); i++) {
NetworkSelectorItem networkSelectorItem = networks.get(i);
if (networkSelectorItem.getNetworkName().equalsIgnoreCase(network)) {
updateSelectedNetwork(i);
break;
}
}
}
public void setOnNetworkItemSelected(NetworkClickListener networkClickListener) {
this.networkClickListener = networkClickListener;
}
private void updateSelectedNetwork(int selectedNetworkPosition) {
networks.get(previousSelectedPos).setIsSelected(false);
notifyItemChanged(previousSelectedPos);
networks.get(selectedNetworkPosition).setIsSelected(true);
previousSelectedPos = selectedNetworkPosition;
notifyItemChanged(selectedNetworkPosition);
}
private void init(String[] networkNames, String[] networkShortNames) {
for (int i = 0; i < networkNames.length; i++) {
networks.add(new NetworkSelectorItem(networkNames[i], networkShortNames[i]));
}
}
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView ivNetworkPicture;
TextView tvName;
ImageView ivSelected;
ViewHolder(View itemView) {
super(itemView);
tvName = itemView.findViewById(R.id.tv_item_network_name);
ivNetworkPicture = itemView.findViewById(R.id.iv_item_network_picture);
ivSelected = itemView.findViewById(R.id.iv_item_network_selector_selected);
}
}
public static class NetworkSelectorItem {
private String mNetworkName;
private String mNetworkShortName;
private boolean mIsSelected;
public NetworkSelectorItem(String mNetworkName, String mNetworkShortName) {
this.mNetworkName = mNetworkName;
this.mNetworkShortName = mNetworkShortName;
}
public String getNetworkName() {
return mNetworkName;
}
public void setNetworkName(String mNetworkName) {
this.mNetworkName = mNetworkName;
}
public String getNetworkShortName() {
return mNetworkShortName;
}
public void setNetworkShortName(String mNetworkShortName) {
this.mNetworkShortName = mNetworkShortName;
}
public boolean isSelected() {
return mIsSelected;
}
public void setIsSelected(boolean mIsSelected) {
this.mIsSelected = mIsSelected;
}
}
public interface NetworkClickListener {
void onNetworkItemSelected(NetworkSelectorItem networkSelectorItem);
}
}
@@ -42,6 +42,7 @@ import org.chromium.brave_wallet.mojom.KeyringService;
import org.chromium.brave_wallet.mojom.TransactionInfo;
import org.chromium.brave_wallet.mojom.TxService;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.app.BraveActivity;
import org.chromium.chrome.browser.crypto_wallet.BlockchainRegistryFactory;
import org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletActivity;
import org.chromium.chrome.browser.crypto_wallet.adapters.NetworkSpinnerAdapter;
@@ -60,17 +61,18 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
public class PortfolioFragment extends Fragment
implements OnWalletListItemClick, AdapterView.OnItemSelectedListener, ApprovedTxObserver {
public class PortfolioFragment
extends Fragment implements OnWalletListItemClick, ApprovedTxObserver {
private static String TAG = "PortfolioFragment";
private Spinner mSpinner;
private TextView mBalance;
private Button mBtnChangeNetwork;
private HashMap<String, TransactionInfo[]> mPendingTxInfos;
private String mFiatSumString;
private int mPreviousCheckedRadioId;
private int mCurrentTimeframeType;
private String mSelectedChainNetworkName = "";
PortfolioHelper mPortfolioHelper;
@@ -130,8 +132,8 @@ public class PortfolioFragment extends Fragment
}
});
mSpinner = view.findViewById(R.id.spinner);
mSpinner.setOnItemSelectedListener(this);
mBtnChangeNetwork = view.findViewById(R.id.fragment_portfolio_btn_change_networks);
mBtnChangeNetwork.setOnClickListener(v -> { openNetworkSelection(); });
mBalance = view.findViewById(R.id.balance);
mBalance.setOnClickListener(new View.OnClickListener() {
@@ -141,18 +143,6 @@ public class PortfolioFragment extends Fragment
}
});
// Creating adapter for spinner
JsonRpcService jsonRpcService = getJsonRpcService();
assert jsonRpcService != null;
jsonRpcService.getAllNetworks(chains -> {
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
NetworkSpinnerAdapter dataAdapter = new NetworkSpinnerAdapter(getActivity(),
Utils.getNetworksList(getActivity(), customNetworks),
Utils.getNetworksAbbrevList(getActivity(), customNetworks));
mSpinner.setAdapter(dataAdapter);
updateNetwork();
});
return view;
}
@@ -162,12 +152,17 @@ public class PortfolioFragment extends Fragment
jsonRpcService.getChainId(chain_id -> {
jsonRpcService.getAllNetworks(chains -> {
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
String chainName = mSpinner.getSelectedItem().toString();
String chainId = Utils.getNetworkConst(getActivity(), chainName, customNetworks);
if (chainId.equals(chain_id)) {
String chainId = Utils.getNetworkConst(
getActivity(), mSelectedChainNetworkName, customNetworks);
if (chainId.equals(chain_id) && !mSelectedChainNetworkName.isEmpty()) {
return;
}
mSpinner.setSelection(getIndexOf(mSpinner, chain_id, customNetworks));
mSelectedChainNetworkName =
Utils.getNetworkText(requireActivity(), chain_id, customNetworks)
.toString();
String strNetworkShort =
Utils.getNetworkShortText(requireActivity(), chain_id).toString();
updateAccount(strNetworkShort);
});
});
}
@@ -178,40 +173,6 @@ public class PortfolioFragment extends Fragment
updateNetwork();
}
private int getIndexOf(Spinner spinner, String chain_id, EthereumChain[] customNetworks) {
String strNetwork =
Utils.getNetworkText(getActivity(), chain_id, customNetworks).toString();
for (int i = 0; i < spinner.getCount(); i++) {
if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(strNetwork)) {
return i;
}
}
return 0;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String item = parent.getItemAtPosition(position).toString();
JsonRpcService jsonRpcService = getJsonRpcService();
if (jsonRpcService != null) {
jsonRpcService.getAllNetworks(chains -> {
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
jsonRpcService.setNetwork(
Utils.getNetworkConst(getActivity(), item, customNetworks), (success) -> {
if (!success) {
Log.e(TAG, "Could not set network");
return;
}
updatePortfolioGetPendingTx(true);
});
});
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
@@ -222,9 +183,9 @@ public class PortfolioFragment extends Fragment
JsonRpcService jsonRpcService = getJsonRpcService();
assert jsonRpcService != null;
jsonRpcService.getAllNetworks(chains -> {
String chainName = mSpinner.getSelectedItem().toString();
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
String chainId = Utils.getNetworkConst(getActivity(), chainName, customNetworks);
String chainId = Utils.getNetworkConst(
getActivity(), mSelectedChainNetworkName, customNetworks);
EditVisibleAssetsBottomSheetDialogFragment bottomSheetDialogFragment =
EditVisibleAssetsBottomSheetDialogFragment.newInstance(
@@ -259,6 +220,11 @@ public class PortfolioFragment extends Fragment
});
}
private void updateAccount(String strNetwork) {
mBtnChangeNetwork.setText(strNetwork);
updatePortfolioGetPendingTx(true);
}
private void setUpCoinList(BlockchainToken[] userAssets,
HashMap<String, Double> perTokenCryptoSum, HashMap<String, Double> perTokenFiatSum) {
View view = getView();
@@ -304,13 +270,19 @@ public class PortfolioFragment extends Fragment
assert jsonRpcService != null;
jsonRpcService.getAllNetworks(chains -> {
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
String chainName = mSpinner.getSelectedItem().toString();
String chainId = Utils.getNetworkConst(getActivity(), chainName, customNetworks);
String chainId =
Utils.getNetworkConst(getActivity(), mSelectedChainNetworkName, customNetworks);
Utils.openAssetDetailsActivity(getActivity(), chainId, asset.symbol, asset.name,
asset.contractAddress, asset.logo, asset.decimals);
});
}
private void openNetworkSelection() {
BraveActivity activity = BraveActivity.getBraveActivity();
assert activity != null;
activity.openNetworkSelection();
}
private AssetRatioService getAssetRatioService() {
Activity activity = getActivity();
if (activity instanceof BraveWalletActivity) {
@@ -410,8 +382,8 @@ public class PortfolioFragment extends Fragment
getAssetRatioService(), getJsonRpcService(), accountInfos);
}
EthereumChain[] customNetworks = Utils.getCustomNetworks(chains);
String chainName = mSpinner.getSelectedItem().toString();
String chainId = Utils.getNetworkConst(getActivity(), chainName, customNetworks);
String chainId = Utils.getNetworkConst(
getActivity(), mSelectedChainNetworkName, customNetworks);
mPortfolioHelper.setChainId(chainId);
mPortfolioHelper.calculateBalances(() -> {
final String fiatSumString = String.format(
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportWidth="200"
android:viewportHeight="200">
<path
android:fillColor="@color/brave_wallet_day_night_icon_color"
android:pathData="M100,15a85,85 0,1 0,85 85A84.93,84.93 0,0 0,100 15ZM100,165a65,65 0,1 1,65 -65A64.87,64.87 0,0 1,100 165ZM128.5,83.5 L100,111.5L71.5,83a9.9,9.9 0,0 0,-14 14L86,125.5a19.92,19.92 0,0 0,28.5 0L143,97a9.67,9.67 0,0 0,0 -14C138.5,79.5 132,79.5 128.5,83.5Z"/>
</vector>
+9
View File
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="22dp"
android:height="16dp"
android:viewportWidth="22"
android:viewportHeight="16">
<path
android:pathData="M21.434,0.4C21.0951,0.08 20.6715,0 20.2479,0C19.8243,0 19.4007,0.24 19.0618,0.56L8.4719,12.08L2.8805,6.88C2.2027,6.24 1.1013,6.24 0.5083,6.88C0.1694,7.2 0,7.6 0,8C0,8.4 0.1694,8.8 0.5083,9.12L7.3706,15.52C7.6247,15.84 8.0483,16 8.5567,16H8.6414C9.1497,16 9.5733,15.76 9.8274,15.44L21.6034,2.64C22.1965,2 22.1117,0.96 21.434,0.4Z"
android:fillColor="#495057"/>
</vector>
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".browser.crypto_wallet.activities.NetworkSelectorActivity">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_marginBottom="8dp"
android:background="@color/wallet_toolbar_bg_color"
android:gravity="center_vertical"
app:titleCentered="true"
android:translationZ="10dp"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_network_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</LinearLayout>
+257 -251
View File
@@ -1,4 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
@@ -7,266 +12,267 @@
android:background="@color/wallet_bg"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/balance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingTop="16dp"
android:layout_marginBottom="8dp"
android:text="@string/brave_wallet_portfolio_balance_updating"
android:textColor="@color/wallet_text_color"
android:textStyle="bold"
android:textSize="32sp" />
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="12sp"
android:textColor="@color/wallet_text_color"
android:layout_gravity="center_vertical"
android:prompt="@string/mainnet"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:paddingTop="2dp"
android:paddingBottom="2dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/trend_percentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:drawablePadding="4dp"
android:textSize="14sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/trend_timeframe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp" />
</LinearLayout>
<org.chromium.chrome.browser.crypto_wallet.util.SmoothLineChartEquallySpaced
android:layout_marginTop="32dp"
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/line_chart" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<RadioGroup
tools:ignore="UselessParent"
android:id="@+id/portfolio_duration_radio_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/live_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:drawablePadding="4dp"
android:text="@string/live" />
<RadioButton
android:id="@+id/day_1_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:checked="true"
android:text="@string/day_1" />
<RadioButton
android:id="@+id/week_1_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/week_1" />
<RadioButton
android:id="@+id/month_1_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/month_1" />
<RadioButton
android:id="@+id/month_3_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/month_3" />
<RadioButton
android:id="@+id/year_1_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/year_1" />
<RadioButton
android:id="@+id/all_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/all" />
</RadioGroup>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/wallet_edittext_outline_color"
android:layout_marginBottom="8dp"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvCoins"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="24dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:layout_marginBottom="16dp"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/edit_visible_assets"
android:layout_width="wrap_content"
android:id="@+id/balance"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/edit_visible_assets"
android:textColor="@color/wallet_text_color"
android:background="@drawable/rounded_white_holo_bg"
android:gravity="center"
android:textSize="14sp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:layout_weight=".7"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:layout_marginStart="20dp"
android:layout_marginBottom="8dp"/>
android:gravity="center_vertical"
android:text="@string/brave_wallet_portfolio_balance_updating"
android:textColor="@color/wallet_text_color"
android:textStyle="bold"
android:textSize="32sp" />
<android.widget.Button
android:id="@+id/fragment_portfolio_btn_change_networks"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_weight=".3"
android:background="@drawable/rounded_holo_button"
android:drawableEnd="@drawable/ic_arrow_down_circular_day_night"
android:minHeight="0dp"
android:paddingHorizontal="8dp"
android:paddingVertical="2dp"
android:textAllCaps="false"
android:textColor="@color/brave_wallet_day_night_text_color" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<TextView
android:id="@+id/trend_percentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:drawablePadding="4dp"
android:textSize="14sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/trend_timeframe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp" />
</LinearLayout>
<org.chromium.chrome.browser.crypto_wallet.util.SmoothLineChartEquallySpaced
android:layout_marginTop="32dp"
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/line_chart" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<RadioGroup
tools:ignore="UselessParent"
android:id="@+id/portfolio_duration_radio_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/live_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:drawablePadding="4dp"
android:text="@string/live" />
<RadioButton
android:id="@+id/day_1_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:checked="true"
android:text="@string/day_1" />
<RadioButton
android:id="@+id/week_1_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/week_1" />
<RadioButton
android:id="@+id/month_1_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/month_1" />
<RadioButton
android:id="@+id/month_3_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/month_3" />
<RadioButton
android:id="@+id/year_1_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/year_1" />
<RadioButton
android:id="@+id/all_radiobutton"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/wallet_radio_button_selector"
android:gravity="center"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:textColor="@color/crypto_wallet_radiobutton_color_selector"
android:button="@null"
android:textSize="14sp"
android:textStyle="bold"
android:text="@string/all" />
</RadioGroup>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/wallet_edittext_outline_color"
android:layout_marginBottom="8dp"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvCoins"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="24dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/edit_visible_assets"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/edit_visible_assets"
android:textColor="@color/wallet_text_color"
android:background="@drawable/rounded_white_holo_bg"
android:gravity="center"
android:textSize="14sp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:layout_marginStart="20dp"
android:layout_marginBottom="8dp"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:animateLayoutChanges="true"
android:orientation="horizontal"
android:paddingHorizontal="12dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/iv_item_network_picture"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_gravity="center_vertical"
android:layout_marginEnd="8dp"
android:contentDescription="@null"
app:srcCompat="@drawable/ic_eth_24" />
<TextView
android:id="@+id/tv_item_network_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:paddingStart="1dp"
android:paddingTop="2dp"
android:paddingEnd="8dp"
android:paddingBottom="2dp"
android:textColor="@color/wallet_text_color"
android:textSize="16sp" />
<ImageView
android:id="@+id/iv_item_network_selector_selected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_check"
android:contentDescription="@null"
android:visibility="visible"
app:tint="@color/brave_blue_tint_color" />
</LinearLayout>
@@ -28,6 +28,10 @@
<color name="onboarding_progressbar_secondary_bg">#212529</color>
<!-- Day/Night colors -->
<color name="brave_wallet_day_night_text_color">@android:color/white</color>
<color name="brave_wallet_day_night_icon_color">@android:color/white</color>
<!-- Text colors -->
<color name="brave_theme_hint_text">#84889C</color>
+4
View File
@@ -21,6 +21,10 @@
<color name="modern_blue_700">#C22700</color>
<color name="dialog_bg_color_dark">@color/toolbar_background_primary_dark</color>
<!-- Day/Night colors -->
<color name="brave_wallet_day_night_text_color">@android:color/black</color>
<color name="brave_wallet_day_night_icon_color">@android:color/black</color>
<!-- Text colors -->
<color name="brave_theme_hint_text">#868E96</color>
@@ -2863,6 +2863,9 @@ If you don't accept this request, VPN will not reconnect and your internet conne
<message name="IDS_BRAVE_WALLET_ADD_NETWORK_SUBMIT" desc="Brave wallet networks pref add network submit button">
Submit
</message>
<message name="IDS_BRAVE_WALLET_NETWORK_ACTIVITY_TITLE" desc="Network activity toolbar title">
Select Network
</message>
<message name="IDS_CHANGE_AMOUNT" desc="Brave rewards monthly contribution text">
Change amount
</message>