diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni
index 3f836459502a..3de3a69825eb 100644
--- a/android/brave_java_resources.gni
+++ b/android/brave_java_resources.gni
@@ -640,6 +640,7 @@ brave_java_resources = [
"java/res/drawable/rounded_filled_binance.xml",
"java/res/drawable/rounded_holo_button.xml",
"java/res/drawable/rounded_shape.xml",
+ "java/res/drawable/rounded_white_bg.xml",
"java/res/drawable/selected_indicator.xml",
"java/res/drawable/shields_tooltip_background_1.xml",
"java/res/drawable/shields_tooltip_background_2.xml",
@@ -742,6 +743,7 @@ brave_java_resources = [
"java/res/layout/toolbar_space.xml",
"java/res/layout/top_sites_layout.xml",
"java/res/layout/tracker_item_layout.xml",
+ "java/res/layout/uphold_login_popup_window.xml",
"java/res/layout/user_wallet_activity.xml",
"java/res/layout/verify_wallet_activity.xml",
"java/res/layout/web_notification_big_brave_ads.xml",
diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsExternalWallet.java b/android/java/org/chromium/chrome/browser/BraveRewardsExternalWallet.java
index cf78ed29e861..ba6f58bc360a 100644
--- a/android/java/org/chromium/chrome/browser/BraveRewardsExternalWallet.java
+++ b/android/java/org/chromium/chrome/browser/BraveRewardsExternalWallet.java
@@ -24,9 +24,11 @@ class BraveRewardsExternalWallet {
public static final String ADDRESS = "address";
public static final String STATUS = "status";
public static final String TOKEN = "token";
+ public static final String TYPE = "type";
public static final String USER_NAME = "user_name";
public static final String VERIFY_URL = "verify_url";
public static final String WITHDRAW_URL = "withdraw_url";
+ public static final String LOGIN_URL = "login_url";
//WalletStatus @
//vendor/bat-native-ledger/include/bat/ledger/public/interfaces/ledger.mojom
@@ -41,16 +43,57 @@ class BraveRewardsExternalWallet {
public static final int DISCONNECTED_VERIFIED = 4;
public static final int PENDING = 5;
- public String mAccount_url;
- public String mAdd_url;
- public String mAddress;
- @WalletStatus public int mStatus;
- public String mToken;
- public String mType;
- public String mUser_name;
- public String mVerify_url;
- public String mWithdraw_url;
+ private String mAccountUrl;
+ private String mAddUrl;
+ private String mAddress;
+ @WalletStatus
+ private int mStatus;
+ private String mToken;
+ private String mType;
+ private String mUserName;
+ private String mVerifyUrl;
+ private String mWithdrawUrl;
+ private String mLoginUrl;
+ public String getAccountUrl() {
+ return mAccountUrl;
+ }
+
+ public String getAddUrl() {
+ return mAddUrl;
+ }
+
+ public String getAddress() {
+ return mAddress;
+ }
+
+ public int getStatus() {
+ return mStatus;
+ }
+
+ public String getToken() {
+ return mToken;
+ }
+
+ public String getType() {
+ return mType;
+ }
+
+ public String getUserName() {
+ return mUserName;
+ }
+
+ public String getVerifyUrl() {
+ return mVerifyUrl;
+ }
+
+ public String getWithdrawUrl() {
+ return mWithdrawUrl;
+ }
+
+ public String getLoginUrl() {
+ return mLoginUrl;
+ }
BraveRewardsExternalWallet (String json_external_wallet) throws JSONException {
fromJson (json_external_wallet);
@@ -58,29 +101,27 @@ class BraveRewardsExternalWallet {
private void fromJson(String json_external_wallet) throws JSONException {
JSONObject jsonObj = new JSONObject(json_external_wallet);
- mAccount_url = jsonObj.getString(ACCOUNT_URL);
- mAdd_url = jsonObj.getString(ADD_URL);
+ mAccountUrl = jsonObj.getString(ACCOUNT_URL);
+ mAddUrl = jsonObj.getString(ADD_URL);
mAddress = jsonObj.getString(ADDRESS);
mStatus = jsonObj.getInt(STATUS);
mToken = jsonObj.getString(TOKEN);
- mUser_name = jsonObj.getString(USER_NAME);
- mVerify_url = jsonObj.getString(VERIFY_URL);
- mWithdraw_url = jsonObj.getString(WITHDRAW_URL);
+ mType = jsonObj.getString(TYPE);
+ mUserName = jsonObj.getString(USER_NAME);
+ mVerifyUrl = jsonObj.getString(VERIFY_URL);
+ mWithdrawUrl = jsonObj.getString(WITHDRAW_URL);
+ mLoginUrl = jsonObj.getString(LOGIN_URL);
}
@VisibleForTesting
@Override
public String toString() {
- return "BraveRewardsExternalWallet{" +
- "mAccount_url='" + mAccount_url + '\'' +
- ", mAdd_url='" + mAdd_url + '\'' +
- ", mAddress='" + mAddress + '\'' +
- ", mStatus=" + mStatus +
- ", mToken='" + mToken + '\'' +
- ", mUser_name='" + mUser_name + '\'' +
- ", mVerify_url='" + mVerify_url + '\'' +
- ", mWithdraw_url='" + mWithdraw_url + '\'' +
- '}';
+ return "BraveRewardsExternalWallet{"
+ + "mAccountUrl='" + mAccountUrl + '\'' + ", mAddUrl='" + mAddUrl + '\''
+ + ", mAddress='" + mAddress + '\'' + ", mStatus=" + mStatus + ", mToken='" + mToken
+ + '\'' + ", mUserName='" + mUserName + '\'' + ", mVerifyUrl='" + mVerifyUrl + '\''
+ + ", mWithdrawUrl='" + mWithdrawUrl + '\'' + ", mLoginUrl='" + mLoginUrl + '\''
+ + '}';
}
public static String WalletStatusToString (@WalletStatus int status){
diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java b/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java
index 67867bcac7a2..515c002d5b53 100644
--- a/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java
+++ b/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java
@@ -133,6 +133,9 @@ public class BraveRewardsPanelPopup implements BraveRewardsObserver, BraveReward
private static final int BALANCE_REPORT_RECURRING_DONATION = 3;
private static final int BALANCE_REPORT_ONE_TIME_DONATION = 4;
+ private static final int CLICK_DISABLE_INTERVAL = 1000; // In milliseconds
+ private static final int WALLET_BALANCE_LIMIT = 15;
+
public static final String PREF_VERIFY_WALLET_ENABLE = "verify_wallet_enable";
protected final View anchor;
@@ -171,8 +174,6 @@ public class BraveRewardsPanelPopup implements BraveRewardsObserver, BraveReward
//flag, Handler and delay to prevent quick opening of multiple site banners
private boolean mTippingInProgress;
private final Handler mHandler = new Handler();
- private static final int CLICK_DISABLE_INTERVAL = 1000; // In milliseconds
- private static final int WALLET_BALANCE_LIMIT = 25;
private boolean mClaimInProcess;
@@ -181,7 +182,7 @@ public class BraveRewardsPanelPopup implements BraveRewardsObserver, BraveReward
private String batText;
- private BraveRewardsExternalWallet mExternal_wallet;
+ private BraveRewardsExternalWallet mExternalWallet;
private double walletBalance;
@@ -1690,14 +1691,7 @@ public void OnRewardsParameters(int errorCode) {
((TextView)this.root.findViewById(R.id.br_usd_wallet)).setText(usdText);
Button btnVerifyWallet = (Button) root.findViewById(R.id.btn_verify_wallet);
- if (btnVerifyWallet != null) {
- if (walletBalance < WALLET_BALANCE_LIMIT && !isVerifyWalletEnabled()) {
- btnVerifyWallet.setBackgroundResource(
- R.drawable.wallet_disconnected_button);
- } else {
- btnVerifyWallet.setBackgroundResource(R.drawable.wallet_verify_button);
- }
- }
+ btnVerifyWallet.setBackgroundResource(R.drawable.wallet_verify_button);
}
walletDetailsReceived = true;
} else if (errorCode == BraveRewardsNativeWorker.LEDGER_ERROR) { // No Internet connection
@@ -1805,7 +1799,7 @@ private void SetAddFundsBtnClickHandler(@WalletStatus final int status) {
@Override
public void onClick(View v) {
dismiss();
- mBraveActivity.openNewOrSelectExistingTab (mExternal_wallet.mAdd_url);
+ mBraveActivity.openNewOrSelectExistingTab(mExternalWallet.getAddUrl());
}
}));
}
@@ -1825,8 +1819,10 @@ public void onClick(View v) {
case BraveRewardsExternalWallet.CONNECTED:
case BraveRewardsExternalWallet.PENDING:
case BraveRewardsExternalWallet.VERIFIED:
- if (walletBalance < WALLET_BALANCE_LIMIT && !isVerifyWalletEnabled()) {
- Toast.makeText(ContextUtils.getApplicationContext(), root.getResources().getString(R.string.required_minium_balance), Toast.LENGTH_SHORT).show();
+ if (walletBalance < WALLET_BALANCE_LIMIT
+ && mExternalWallet.getType().equals(BraveUphold.UPHOLD)
+ && !isVerifyWalletEnabled()) {
+ showUpholdLoginPopupWindow(btnVerifyWallet);
} else {
int requestCode =
(status == BraveRewardsExternalWallet.NOT_CONNECTED) ?
@@ -1838,12 +1834,15 @@ public void onClick(View v) {
break;
case BraveRewardsExternalWallet.DISCONNECTED_NOT_VERIFIED:
case BraveRewardsExternalWallet.DISCONNECTED_VERIFIED:
- if (walletBalance < WALLET_BALANCE_LIMIT && !isVerifyWalletEnabled()) {
- Toast.makeText(ContextUtils.getApplicationContext(), root.getResources().getString(R.string.required_minium_balance), Toast.LENGTH_SHORT).show();
+ if (walletBalance < WALLET_BALANCE_LIMIT
+ && mExternalWallet.getType().equals(BraveUphold.UPHOLD)
+ && !isVerifyWalletEnabled()) {
+ showUpholdLoginPopupWindow(btnVerifyWallet);
} else {
- if (!TextUtils.isEmpty(mExternal_wallet.mVerify_url)) {
+ if (!TextUtils.isEmpty(mExternalWallet.getVerifyUrl())) {
dismiss();
- mBraveActivity.openNewOrSelectExistingTab (mExternal_wallet.mVerify_url);
+ mBraveActivity.openNewOrSelectExistingTab(
+ mExternalWallet.getVerifyUrl());
}
}
break;
@@ -1872,14 +1871,14 @@ private Intent BuildVerifyWalletActivityIntent(@WalletStatus final int status) {
}
Intent intent = new Intent(ContextUtils.getApplicationContext(), clazz);
- intent.putExtra(BraveRewardsExternalWallet.ACCOUNT_URL, mExternal_wallet.mAccount_url);
- intent.putExtra(BraveRewardsExternalWallet.ADD_URL, mExternal_wallet.mAdd_url);
- intent.putExtra(BraveRewardsExternalWallet.ADDRESS, mExternal_wallet.mAddress);
- intent.putExtra(BraveRewardsExternalWallet.STATUS, mExternal_wallet.mStatus);
- intent.putExtra(BraveRewardsExternalWallet.TOKEN, mExternal_wallet.mToken);
- intent.putExtra(BraveRewardsExternalWallet.USER_NAME, mExternal_wallet.mUser_name);
- intent.putExtra(BraveRewardsExternalWallet.VERIFY_URL, mExternal_wallet.mVerify_url);
- intent.putExtra(BraveRewardsExternalWallet.WITHDRAW_URL, mExternal_wallet.mWithdraw_url);
+ intent.putExtra(BraveRewardsExternalWallet.ACCOUNT_URL, mExternalWallet.getAccountUrl());
+ intent.putExtra(BraveRewardsExternalWallet.ADD_URL, mExternalWallet.getAddUrl());
+ intent.putExtra(BraveRewardsExternalWallet.ADDRESS, mExternalWallet.getAddress());
+ intent.putExtra(BraveRewardsExternalWallet.STATUS, mExternalWallet.getStatus());
+ intent.putExtra(BraveRewardsExternalWallet.TOKEN, mExternalWallet.getToken());
+ intent.putExtra(BraveRewardsExternalWallet.USER_NAME, mExternalWallet.getUserName());
+ intent.putExtra(BraveRewardsExternalWallet.VERIFY_URL, mExternalWallet.getVerifyUrl());
+ intent.putExtra(BraveRewardsExternalWallet.WITHDRAW_URL, mExternalWallet.getWithdrawUrl());
return intent;
}
@@ -1888,11 +1887,11 @@ public void OnGetExternalWallet(int error_code, String external_wallet) {
int walletStatus = BraveRewardsExternalWallet.NOT_CONNECTED;
if(!TextUtils.isEmpty(external_wallet)) {
try {
- mExternal_wallet = new BraveRewardsExternalWallet(external_wallet);
- walletStatus = mExternal_wallet.mStatus;
+ mExternalWallet = new BraveRewardsExternalWallet(external_wallet);
+ walletStatus = mExternalWallet.getStatus();
} catch (JSONException e) {
Log.e (TAG, "Error parsing external wallet status");
- mExternal_wallet = null;
+ mExternalWallet = null;
}
}
SetVerifyWalletControl(walletStatus);
@@ -2003,4 +2002,76 @@ public void OnRefreshPublisher(int status, String publisherKey) {
UpdatePublisherStatus(status);
}
};
+
+ public void showUpholdLoginPopupWindow(final View view) {
+ PopupWindow loginPopupWindow = new PopupWindow(mActivity);
+
+ LayoutInflater inflater =
+ (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View loginPopupView = inflater.inflate(R.layout.uphold_login_popup_window, null);
+
+ TextView loginActionButton = loginPopupView.findViewById(R.id.login_action_button);
+
+ String verifiedAccountUpholdText =
+ String.format(mActivity.getResources().getString(R.string.verified_account_uphold),
+ mActivity.getResources().getString(R.string.continue_to_login));
+ int countinueToLoginIndex = verifiedAccountUpholdText.indexOf(
+ mActivity.getResources().getString(R.string.continue_to_login));
+ Spanned verifiedAccountUpholdTextSpanned =
+ BraveRewardsHelper.spannedFromHtmlString(verifiedAccountUpholdText);
+ SpannableString verifiedAccountUpholdTextSS =
+ new SpannableString(verifiedAccountUpholdTextSpanned.toString());
+
+ ClickableSpan verifiedAccountUpholdClickableSpan = new ClickableSpan() {
+ @Override
+ public void onClick(@NonNull View textView) {
+ dismiss();
+ loginPopupWindow.dismiss();
+ mBraveActivity.openNewOrSelectExistingTab(mExternalWallet.getLoginUrl());
+ }
+ @Override
+ public void updateDrawState(@NonNull TextPaint ds) {
+ super.updateDrawState(ds);
+ ds.setUnderlineText(false);
+ }
+ };
+
+ verifiedAccountUpholdTextSS.setSpan(verifiedAccountUpholdClickableSpan,
+ countinueToLoginIndex,
+ countinueToLoginIndex
+ + mActivity.getResources().getString(R.string.continue_to_login).length(),
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ verifiedAccountUpholdTextSS.setSpan(
+ new ForegroundColorSpan(
+ mActivity.getResources().getColor(R.color.brave_rewards_modal_theme_color)),
+ countinueToLoginIndex,
+ countinueToLoginIndex
+ + mActivity.getResources().getString(R.string.continue_to_login).length(),
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+ loginActionButton.setMovementMethod(LinkMovementMethod.getInstance());
+ loginActionButton.setText(verifiedAccountUpholdTextSS);
+
+ loginPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
+ loginPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
+ loginPopupWindow.setBackgroundDrawable(
+ new ColorDrawable(android.graphics.Color.TRANSPARENT));
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ loginPopupWindow.setElevation(20);
+ }
+
+ loginPopupWindow.setTouchable(true);
+ loginPopupWindow.setFocusable(true);
+ loginPopupWindow.setOutsideTouchable(true);
+ loginPopupWindow.setContentView(loginPopupView);
+
+ view.post(new Runnable() {
+ public void run() {
+ if (SysUtils.isLowEndDevice()) {
+ loginPopupWindow.setAnimationStyle(0);
+ }
+ loginPopupWindow.showAsDropDown(view, 0, 0);
+ }
+ });
+ }
}
diff --git a/android/java/org/chromium/chrome/browser/BraveUphold.java b/android/java/org/chromium/chrome/browser/BraveUphold.java
index 418fa70ea4f1..d601c670e671 100644
--- a/android/java/org/chromium/chrome/browser/BraveUphold.java
+++ b/android/java/org/chromium/chrome/browser/BraveUphold.java
@@ -34,6 +34,9 @@ public class BraveUphold implements BraveRewardsObserver {
public static final String UPHOLD_SUPPORT_URL = "http://uphold.com/en/brave/support";
public static final String UPHOLD_ORIGIN_URL = "http://uphold.com";
+ // Wallet types
+ public static final String UPHOLD = "uphold";
+
private static int UNKNOWN_ERROR_CODE = -1;
private ExternalNavigationParams mExternalNavigationParams;
diff --git a/android/java/res/drawable/rounded_white_bg.xml b/android/java/res/drawable/rounded_white_bg.xml
new file mode 100644
index 000000000000..38afe6f85d62
--- /dev/null
+++ b/android/java/res/drawable/rounded_white_bg.xml
@@ -0,0 +1,80 @@
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/android/java/res/layout/uphold_login_popup_window.xml b/android/java/res/layout/uphold_login_popup_window.xml
new file mode 100644
index 000000000000..5c1103bfee24
--- /dev/null
+++ b/android/java/res/layout/uphold_login_popup_window.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.cc b/browser/brave_rewards/android/brave_rewards_native_worker.cc
index 0effc6fcd1f9..0ccd64b36268 100644
--- a/browser/brave_rewards/android/brave_rewards_native_worker.cc
+++ b/browser/brave_rewards/android/brave_rewards_native_worker.cc
@@ -642,6 +642,7 @@ void BraveRewardsNativeWorker::OnGetExternalWallet(
dict.SetIntKey("status", static_cast(wallet->status));
dict.SetStringKey("verify_url", wallet->verify_url);
dict.SetStringKey("add_url", wallet->add_url);
+ dict.SetStringKey("type", wallet->type);
dict.SetStringKey("withdraw_url", wallet->withdraw_url);
dict.SetStringKey("user_name", wallet->user_name);
dict.SetStringKey("account_url", wallet->account_url);
diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd
index c6a1c52dbc59..d62cbf3b58db 100644
--- a/browser/ui/android/strings/android_brave_strings.grd
+++ b/browser/ui/android/strings/android_brave_strings.grd
@@ -1071,9 +1071,6 @@ until they verify, or until 90 days have passed.
Advanced controls
-
- A minimum balance of 25 BAT is required to verify.
-
Show top sites in autocomplete
@@ -1670,6 +1667,21 @@ until they verify, or until 90 days have passed.
Enable Tab Groups
+
+ Verifying wallet allows you to manage your funds easily, adding & withdrawing
+
+
+ You don't have enough BAT.
+
+
+ You need to have minimum 15 BAT to create a verified Uphold wallet. Please try again later.
+
+
+ If you already have a verified Uphold account, %1$s.
+
+
+ continue to login
+