From 73ddb97cc5fe697fdcbb4d7bb5e2a2ec83cbf6cd Mon Sep 17 00:00:00 2001 From: Emerick Rogul Date: Thu, 4 Nov 2021 09:15:46 -0400 Subject: [PATCH 01/18] Initial work on bitFlyer support on Android --- android/brave_java_sources.gni | 2 +- .../chrome/browser/BraveRewardsBalance.java | 3 +- .../browser/BraveRewardsNativeWorker.java | 17 + .../chrome/browser/BraveRewardsObserver.java | 2 + .../browser/BraveRewardsPanelPopup.java | 14 +- .../BraveRewardsUserWalletActivity.java | 18 +- .../BraveRewardsVerifyWalletActivity.java | 41 +- .../chromium/chrome/browser/BraveUphold.java | 153 --- .../chrome/browser/BraveWalletProvider.java | 150 +++ .../BraveExternalNavigationHandler.java | 29 +- .../layout-land/verify_wallet_activity.xml | 10 +- .../java/res/layout/user_wallet_activity.xml | 5 +- .../res/layout/verify_wallet_activity.xml | 10 +- .../android/brave_rewards_native_worker.cc | 34 + .../android/brave_rewards_native_worker.h | 11 + .../android/strings/android_brave_strings.grd | 28 +- .../brave_rewards/browser/rewards_service.h | 2 + .../browser/rewards_service_impl.cc | 1 + .../browser/rewards_service_impl.h | 2 +- .../android_page/actions/rewards_actions.ts | 192 +++- .../android_page/assets/connect_wallet.svg | 27 + .../android_page/assets/green_check.svg | 3 + .../android_page/brave_rewards_page.tsx | 147 ++- .../components/connect_wallet_modal.style.ts | 222 +++++ .../components/connect_wallet_modal.tsx | 201 ++++ .../android_page/components/contributeBox.tsx | 20 +- .../components/icons/manage_wallet_icon.tsx | 13 + .../components/manage_wallet_button.style.ts | 37 + .../components/manage_wallet_button.tsx | 25 + .../android_page/components/pageWallet.tsx | 913 ++++++++++++++++-- .../android_page/components/settingsPage.tsx | 311 ++++-- .../android_page/components/style.ts | 12 + .../android_page/constants/rewards_types.ts | 47 +- .../android_page/reducers/rewards_reducer.ts | 287 +++++- .../android_page/reducers/wallet_reducer.ts | 161 ++- .../resources/android_page/storage.ts | 2 +- .../android_page/{utils.ts => utils.tsx} | 16 +- .../ui/components/modalRedirect/index.tsx | 19 +- .../src/bat/ledger/internal/state/state.cc | 4 - .../src/bat/ledger/internal/wallet/wallet.cc | 2 +- 40 files changed, 2753 insertions(+), 440 deletions(-) delete mode 100644 android/java/org/chromium/chrome/browser/BraveUphold.java create mode 100644 android/java/org/chromium/chrome/browser/BraveWalletProvider.java create mode 100644 components/brave_rewards/resources/android_page/assets/connect_wallet.svg create mode 100644 components/brave_rewards/resources/android_page/assets/green_check.svg create mode 100644 components/brave_rewards/resources/android_page/components/connect_wallet_modal.style.ts create mode 100644 components/brave_rewards/resources/android_page/components/connect_wallet_modal.tsx create mode 100644 components/brave_rewards/resources/android_page/components/icons/manage_wallet_icon.tsx create mode 100644 components/brave_rewards/resources/android_page/components/manage_wallet_button.style.ts create mode 100644 components/brave_rewards/resources/android_page/components/manage_wallet_button.tsx rename components/brave_rewards/resources/android_page/{utils.ts => utils.tsx} (92%) diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index 2d71e0edc4d7..406c3716bc28 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -32,7 +32,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/BraveRewardsVerifyWalletActivity.java", "../../brave/android/java/org/chromium/chrome/browser/BraveSyncInformers.java", "../../brave/android/java/org/chromium/chrome/browser/BraveSyncWorker.java", - "../../brave/android/java/org/chromium/chrome/browser/BraveUphold.java", + "../../brave/android/java/org/chromium/chrome/browser/BraveWalletProvider.java", "../../brave/android/java/org/chromium/chrome/browser/CrossPromotionalModalDialogFragment.java", "../../brave/android/java/org/chromium/chrome/browser/DormantUsersEngagementDialogFragment.java", "../../brave/android/java/org/chromium/chrome/browser/InternetConnection.java", diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsBalance.java b/android/java/org/chromium/chrome/browser/BraveRewardsBalance.java index 70ea5eb0cf76..09d4744e8502 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsBalance.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsBalance.java @@ -15,7 +15,6 @@ public class BraveRewardsBalance { public static final String WALLET_ANONYMOUS = "anonymous"; - public static final String WALLET_UPHOLD = "uphold"; public static final String WALLET_BLINDED = "blinded"; /** @@ -57,4 +56,4 @@ public String toString() { "mTotal=" + mTotal + ", mWallets=" + mWallets +'}'; } -} \ No newline at end of file +} diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java index e81a5e3c9817..079caa3b1fd8 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java @@ -191,6 +191,13 @@ public BraveRewardsBalance GetWalletBalance() { } } + public String getExternalWalletType() { + synchronized (lock) { + return BraveRewardsNativeWorkerJni.get().getExternalWalletType( + mNativeBraveRewardsNativeWorker); + } + } + public double GetWalletRate() { synchronized(lock) { return BraveRewardsNativeWorkerJni.get().getWalletRate(mNativeBraveRewardsNativeWorker); @@ -587,6 +594,15 @@ public void OnGetExternalWallet(int error_code, String external_wallet) { } } + @CalledByNative + public void OnGetAdsAccountStatement(boolean success, double next_payment_date, + int ads_received_this_month, double earnings_this_month, double earnings_last_month) { + for (BraveRewardsObserver observer : mObservers) { + observer.OnGetAdsAccountStatement(success, next_payment_date, ads_received_this_month, + earnings_this_month, earnings_last_month); + } + } + @CalledByNative public void OnDisconnectWallet(int error_code, String external_wallet) { for (BraveRewardsObserver observer : mObservers) { @@ -623,6 +639,7 @@ interface Natives { void init(BraveRewardsNativeWorker caller); void destroy(long nativeBraveRewardsNativeWorker); String getWalletBalance(long nativeBraveRewardsNativeWorker); + String getExternalWalletType(long nativeBraveRewardsNativeWorker); double getWalletRate(long nativeBraveRewardsNativeWorker); void getPublisherInfo(long nativeBraveRewardsNativeWorker, int tabId, String host); String getPublisherURL(long nativeBraveRewardsNativeWorker, int tabId); diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java index ffafa6662f11..cba4b0fd7f8c 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java @@ -31,4 +31,6 @@ default public void OnProcessRewardsPageUrl(int error_code, default public void OnRefreshPublisher(int status, String publisherKey){}; default public void OnOneTimeTip(){}; default public void OnStartProcess(){}; + default public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, + int adsReceivedThisMonth, double earningsThisMonth, double earningsLastMonth){}; } diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java b/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java index 4898f13d0860..a65627514144 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java @@ -122,7 +122,6 @@ public class BraveRewardsPanelPopup implements BraveRewardsObserver, BraveReward private static final String REWARDS_NOTIFICATION_NO_INTERNET_ID = "29d835c2-5752-4152-93c3-8a1ded9dd4ec"; private static final int REWARDS_PROMOTION_CLAIM_ERROR = REWARDS_NOTIFICATION_NO_INTERNET + 1; private static final String REWARDS_PROMOTION_CLAIM_ERROR_ID = "rewards_promotion_claim_error_id"; - // // Auto contribute results private static final String AUTO_CONTRIBUTE_SUCCESS = "0"; @@ -1636,7 +1635,6 @@ public void OnOneTimeTip() { // mBraveRewardsNativeWorker.GetExternalWallet(); } - /** * OnRecurringDonationUpdated is fired after a publisher was added or removed to/from * recurrent donation list @@ -1703,7 +1701,7 @@ public void OnRewardsParameters(int errorCode) { Button btnVerifyWallet = (Button) root.findViewById(R.id.btn_verify_wallet); btnVerifyWallet.setBackgroundResource(R.drawable.wallet_verify_button); if (mExternalWallet != null - && mExternalWallet.getType().equals(BraveUphold.BITFLYER)) { + && mExternalWallet.getType().equals(BraveWalletProvider.BITFLYER)) { btnVerifyWallet.setVisibility(View.INVISIBLE); } } @@ -1833,7 +1831,7 @@ public void onClick(View v) { case BraveRewardsExternalWallet.PENDING: case BraveRewardsExternalWallet.VERIFIED: if (walletBalance < WALLET_BALANCE_LIMIT - && mExternalWallet.getType().equals(BraveUphold.UPHOLD) + && mExternalWallet.getType().equals(BraveWalletProvider.UPHOLD) && !isVerifyWalletEnabled()) { showUpholdLoginPopupWindow(btnVerifyWallet); } else { @@ -1848,7 +1846,7 @@ public void onClick(View v) { case BraveRewardsExternalWallet.DISCONNECTED_NOT_VERIFIED: case BraveRewardsExternalWallet.DISCONNECTED_VERIFIED: if (walletBalance < WALLET_BALANCE_LIMIT - && mExternalWallet.getType().equals(BraveUphold.UPHOLD) + && mExternalWallet.getType().equals(BraveWalletProvider.UPHOLD) && !isVerifyWalletEnabled()) { showUpholdLoginPopupWindow(btnVerifyWallet); } else { @@ -1910,6 +1908,12 @@ public void OnGetExternalWallet(int error_code, String external_wallet) { SetVerifyWalletControl(walletStatus); } + @Override + public void OnGetAdsAccountStatement(boolean success, double next_payment_date, + int ads_received_this_month, double earnings_this_month, double earnings_last_month) { + // TODO: Implement + } + /** * Show the "promotion claim failed" error message. * Succesful claims are dismissed by a notification. diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java b/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java index feaaaeb5877d..94e201f3e9c1 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java @@ -21,16 +21,24 @@ import org.chromium.chrome.browser.BraveRewardsBalance; import org.chromium.chrome.browser.BraveRewardsExternalWallet; import org.chromium.chrome.browser.BraveRewardsNativeWorker; +import org.chromium.chrome.browser.BraveWalletProvider; import org.chromium.chrome.browser.app.BraveActivity; import org.chromium.chrome.browser.init.AsyncInitializationActivity; public class BraveRewardsUserWalletActivity extends AsyncInitializationActivity { public static final String DISCONNECT_WALLET_URL = "chrome://rewards/#disconnect-wallet"; + private String walletType = BraveRewardsNativeWorker.getInstance().getExternalWalletType(); + private String walletTypeString; + @Override protected void triggerLayoutInflation() { setContentView(R.layout.user_wallet_activity); + walletTypeString = walletType.equals(BraveWalletProvider.UPHOLD) + ? getResources().getString(R.string.uphold) + : getResources().getString(R.string.bitflyer); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -50,7 +58,9 @@ private void SetUIControls() { TextView txtUserStatus = (TextView) findViewById(R.id.user_status); Button btn1 = (Button) findViewById(R.id.user_wallet_btn1); Button btn2 = null; - Button btnGotoUphold = (Button) findViewById(R.id.user_wallet_go_to_uphold); + Button btnGotoProvider = (Button) findViewById(R.id.user_wallet_go_to_provider); + btnGotoProvider.setText(String.format( + getResources().getString(R.string.user_wallet_goto_provider), walletTypeString)); if (status < BraveRewardsExternalWallet.NOT_CONNECTED || status > BraveRewardsExternalWallet.PENDING) { @@ -64,7 +74,7 @@ private void SetUIControls() { // Buttons: // Add funds // Withdraw - // Go to uphold + // Go to provider // Disconnect btn1.setText(getResources().getString(R.string.brave_rewards_local_panel_add_funds)); btn2.setText(getResources().getString(R.string.user_wallet_withdraw_funds)); @@ -78,7 +88,7 @@ private void SetUIControls() { // CONNECTED or PENDING // Buttons: // Complete verification - // Go to uphold + // Go to provider // Disconnect btn1.setText(getResources().getString(R.string.user_wallet_complete_verification)); SetBtnOpenUrlClickHandler( @@ -86,7 +96,7 @@ private void SetUIControls() { } SetBtnOpenUrlClickHandler( - btnGotoUphold, intent.getStringExtra(BraveRewardsExternalWallet.ACCOUNT_URL)); + btnGotoProvider, intent.getStringExtra(BraveRewardsExternalWallet.ACCOUNT_URL)); String userId = intent.getStringExtra(BraveRewardsExternalWallet.USER_NAME); txtUserId.setText(userId); diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsVerifyWalletActivity.java b/android/java/org/chromium/chrome/browser/BraveRewardsVerifyWalletActivity.java index 00da466b4f22..aeee13b0922f 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsVerifyWalletActivity.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsVerifyWalletActivity.java @@ -19,21 +19,55 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.BraveRewardsExternalWallet; import org.chromium.chrome.browser.BraveRewardsHelper; -import org.chromium.chrome.browser.BraveUphold; +import org.chromium.chrome.browser.BraveRewardsNativeWorker; +import org.chromium.chrome.browser.BraveWalletProvider; import org.chromium.chrome.browser.app.BraveActivity; import java.util.Locale; public class BraveRewardsVerifyWalletActivity extends Activity { + private String walletType = BraveRewardsNativeWorker.getInstance().getExternalWalletType(); + private String walletTypeString; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.verify_wallet_activity); + + walletTypeString = walletType.equals(BraveWalletProvider.UPHOLD) + ? getResources().getString(R.string.uphold) + : getResources().getString(R.string.bitflyer); + + setTextForWalletTypes(); SetVerifyWalletBtnClickHandler(); SetUpholdLinkHandler(); } + void setTextForWalletTypes() { + TextView verifyWalletBenefitText1 = (TextView) findViewById(R.id.verify_wallet_benefit_1); + verifyWalletBenefitText1.setText(walletType.equals(BraveWalletProvider.UPHOLD) + ? getResources().getString(R.string.verify_wallet_uphold_benefits1) + : getResources().getString(R.string.verify_wallet_bitflyer_benefits1)); + TextView verifyWalletBenefitText2 = (TextView) findViewById(R.id.verify_wallet_benefit_2); + verifyWalletBenefitText2.setText(walletType.equals(BraveWalletProvider.UPHOLD) + ? getResources().getString(R.string.verify_wallet_uphold_benefits2) + : getResources().getString(R.string.verify_wallet_bitflyer_benefits2)); + TextView verifyWalletBenefitText3 = (TextView) findViewById(R.id.verify_wallet_benefit_3); + verifyWalletBenefitText3.setText(walletType.equals(BraveWalletProvider.UPHOLD) + ? getResources().getString(R.string.verify_wallet_uphold_benefits3) + : getResources().getString(R.string.verify_wallet_bitflyer_benefits3)); + + TextView verifyWalletProviderNoteText = + (TextView) findViewById(R.id.verify_wallet_provider_note_txt); + verifyWalletProviderNoteText.setText(String.format( + getResources().getString(R.string.verify_wallet_provider_note1), walletTypeString)); + + TextView verifyWalletBraveNoteText = + (TextView) findViewById(R.id.verify_wallet_brave_note_txt); + verifyWalletBraveNoteText.setText(String.format( + getResources().getString(R.string.verify_wallet_brave_note1), walletTypeString)); + } + void SetVerifyWalletBtnClickHandler() { Button btnVerifyWallet = (Button)findViewById(R.id.verify_wallet_btn); btnVerifyWallet.setOnClickListener( (View v) -> { @@ -49,7 +83,7 @@ void SetVerifyWalletBtnClickHandler() { void SetUpholdLinkHandler() { TextView uphold_link = (TextView)findViewById(R.id.service_provider_txt); final String part1 = getResources().getString(R.string.verify_wallet_service_note); - final String part2 = getResources().getString(R.string.verify_wallet_uphold); + final String part2 = walletTypeString; final String built_service_str = String.format(Locale.US, "%s %s", part1, part2); Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(built_service_str); uphold_link.setText(toInsert); @@ -63,7 +97,8 @@ void SetUpholdLinkHandler() { if (BraveRewardsHelper.subtextAtOffset(built_service_str, part2, offset) ){ Intent intent = new Intent(); - intent.putExtra(BraveActivity.OPEN_URL, BraveUphold.UPHOLD_ORIGIN_URL); + intent.putExtra( + BraveActivity.OPEN_URL, BraveWalletProvider.UPHOLD_ORIGIN_URL); setResult(RESULT_OK, intent); finish(); event_consumed = true; diff --git a/android/java/org/chromium/chrome/browser/BraveUphold.java b/android/java/org/chromium/chrome/browser/BraveUphold.java deleted file mode 100644 index 2c4fce883127..000000000000 --- a/android/java/org/chromium/chrome/browser/BraveUphold.java +++ /dev/null @@ -1,153 +0,0 @@ -/** Copyright (c) 2020 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; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.net.Uri; -import android.text.TextUtils; - -import org.json.JSONException; -import org.json.JSONObject; - -import org.chromium.base.ContextUtils; -import org.chromium.chrome.R; -import org.chromium.chrome.browser.BraveRewardsBalance; -import org.chromium.chrome.browser.BraveRewardsHelper; -import org.chromium.chrome.browser.BraveRewardsNativeWorker; -import org.chromium.chrome.browser.BraveRewardsObserver; -import org.chromium.chrome.browser.app.BraveActivity; -import org.chromium.chrome.browser.externalnav.BraveExternalNavigationHandler; -import org.chromium.components.external_intents.ExternalNavigationParams; - -import java.util.Locale; - -//used from org.chromium.chrome.browser.externalnav -public class BraveUphold implements BraveRewardsObserver { - public static final String UPHOLD_REDIRECT_URL = "rewards://uphold"; - public static final String UPHOLD_REDIRECT_URL_KEY = "redirect_url"; - public static final String ACTION_VALUE = "authorization"; - 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"; - public static final String BITFLYER = "bitflyer"; - - private static int UNKNOWN_ERROR_CODE = -1; - - private ExternalNavigationParams mExternalNavigationParams; - private BraveExternalNavigationHandler mBraveExternalNavigationHandler; - private BraveRewardsNativeWorker rewardsNativeProxy; - - public void CompleteUpholdVerification(ExternalNavigationParams params, - BraveExternalNavigationHandler handler) { - mExternalNavigationParams = params; - mBraveExternalNavigationHandler = handler; - rewardsNativeProxy = BraveRewardsNativeWorker.getInstance(); - - Uri uri = Uri.parse(params.getUrl().getSpec()); - rewardsNativeProxy.AddObserver(this); - String path = uri.getPath(); - String query = uri.getQuery(); - - if (TextUtils.isEmpty(path) || TextUtils.isEmpty(query)) { - rewardsNativeProxy.RemoveObserver(this); - ReleaseDependencies(); - ShowErrorMessageBox(UNKNOWN_ERROR_CODE); - return; - } - - // Ledger expects: - // path: "/uphold/path" - // query: "?query" - path = String.format(Locale.US,"/%s/%s", - BraveRewardsBalance.WALLET_UPHOLD, path); - query = String.format(Locale.US,"?%s", query); - rewardsNativeProxy.ProcessRewardsPageUrl(path, query); - } - - @Override - public void OnProcessRewardsPageUrl(int error_code, - String wallet_type, String action, - String json_args ) { - - //remove observer - if (rewardsNativeProxy != null) { - rewardsNativeProxy.RemoveObserver(this); - } - - String redirect_url = parseJsonArgs (json_args); - if (BraveRewardsNativeWorker.LEDGER_OK == error_code && - TextUtils.equals(action, ACTION_VALUE)) { - - //wallet is verified: redirect to chrome://rewards for now - if (TextUtils.isEmpty(redirect_url)) { - redirect_url = BraveActivity.REWARDS_SETTINGS_URL; - } - mBraveExternalNavigationHandler. - clobberCurrentTabWithFallbackUrl (redirect_url, - mExternalNavigationParams); - - // temporary: open Rewards Panel to show wallet transition state. - // remove this step once settings activity has this info - BraveActivity.getBraveActivity().openRewardsPanel(); - ReleaseDependencies(); - } - else { - ShowErrorMessageBox(error_code); - } - } - - private String parseJsonArgs(String json_args) { - String redirect_url = ""; - try { - JSONObject jsonObj = new JSONObject(json_args); - if (jsonObj.has(UPHOLD_REDIRECT_URL_KEY)) { - redirect_url = jsonObj.getString(UPHOLD_REDIRECT_URL_KEY); - } - } - catch(JSONException e){ } - return redirect_url; - } - - private void ReleaseDependencies() { - mExternalNavigationParams = null; - mBraveExternalNavigationHandler = null; - } - - private void ShowErrorMessageBox (int error_code) { - String msg = ""; - String msg_title = ""; - Context context = ContextUtils.getApplicationContext(); - AlertDialog.Builder builder = new AlertDialog.Builder( - BraveRewardsHelper.getChromeTabbedActivity(), - R.style.Theme_Chromium_AlertDialog); - - if (BraveRewardsNativeWorker.BAT_NOT_ALLOWED == error_code) { - msg = context.getResources().getString(R.string.bat_not_allowed_in_region); - msg_title = context.getResources().getString(R.string.bat_not_allowed_in_region_title); - } - else { - msg = context.getResources().getString(R.string.wallet_verification_generic_error); - msg_title = context.getResources().getString(R.string.wallet_verification_generic_error_title); - } - builder.setMessage(msg) - .setTitle (msg_title) - .setPositiveButton(R.string.ok, (DialogInterface dialog, int which)-> { - mBraveExternalNavigationHandler. - clobberCurrentTabWithFallbackUrl (UPHOLD_SUPPORT_URL, - mExternalNavigationParams); - }) - .setOnDismissListener((DialogInterface dialog)-> { - ReleaseDependencies(); - }); - - AlertDialog dlg = builder.create(); - dlg.show(); - } -} \ No newline at end of file diff --git a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java new file mode 100644 index 000000000000..a53d414a80af --- /dev/null +++ b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java @@ -0,0 +1,150 @@ +/** + * Copyright (c) 2020 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; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.net.Uri; +import android.text.TextUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +import org.chromium.base.ContextUtils; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.BraveRewardsBalance; +import org.chromium.chrome.browser.BraveRewardsHelper; +import org.chromium.chrome.browser.BraveRewardsNativeWorker; +import org.chromium.chrome.browser.BraveRewardsObserver; +import org.chromium.chrome.browser.app.BraveActivity; +import org.chromium.chrome.browser.externalnav.BraveExternalNavigationHandler; +import org.chromium.components.external_intents.ExternalNavigationParams; + +import java.util.Locale; + +// Used from org.chromium.chrome.browser.externalnav +public class BraveWalletProvider implements BraveRewardsObserver { + public static final String ACTION_VALUE = "authorization"; + + public static final String REDIRECT_URL_KEY = "redirect_url"; + + public static final String UPHOLD_REDIRECT_URL = "rewards://uphold"; + public static final String UPHOLD_SUPPORT_URL = "http://uphold.com/en/brave/support"; + public static final String UPHOLD_ORIGIN_URL = "http://uphold.com"; + + public static final String BITFLYER_REDIRECT_URL = "rewards://bitflyer"; + + // Wallet types + public static final String UPHOLD = "uphold"; + public static final String BITFLYER = "bitflyer"; + + private static int UNKNOWN_ERROR_CODE = -1; + + private ExternalNavigationParams mExternalNavigationParams; + private BraveExternalNavigationHandler mBraveExternalNavigationHandler; + private BraveRewardsNativeWorker rewardsNativeProxy; + + public void completeWalletProviderVerification( + ExternalNavigationParams params, BraveExternalNavigationHandler handler) { + mExternalNavigationParams = params; + mBraveExternalNavigationHandler = handler; + rewardsNativeProxy = BraveRewardsNativeWorker.getInstance(); + + Uri uri = Uri.parse(params.getUrl().getSpec()); + rewardsNativeProxy.AddObserver(this); + String path = uri.getPath(); + String query = uri.getQuery(); + + if (TextUtils.isEmpty(path) || TextUtils.isEmpty(query)) { + rewardsNativeProxy.RemoveObserver(this); + releaseDependencies(); + showErrorMessageBox(UNKNOWN_ERROR_CODE); + return; + } + + // Ledger expects: + // path: "/provider/path" + // query: "?query" + path = String.format(Locale.US, "/%s/%s", rewardsNativeProxy.getExternalWalletType(), path); + query = String.format(Locale.US, "?%s", query); + rewardsNativeProxy.ProcessRewardsPageUrl(path, query); + } + + @Override + public void OnProcessRewardsPageUrl( + int errorCode, String walletType, String action, String jsonArgs) { + // remove observer + if (rewardsNativeProxy != null) { + rewardsNativeProxy.RemoveObserver(this); + } + + String redirectUrl = parseJsonArgs(jsonArgs); + if (BraveRewardsNativeWorker.LEDGER_OK == errorCode + && TextUtils.equals(action, ACTION_VALUE)) { + // wallet is verified: redirect to chrome://rewards for now + if (TextUtils.isEmpty(redirectUrl)) { + redirectUrl = BraveActivity.REWARDS_SETTINGS_URL; + } + mBraveExternalNavigationHandler.clobberCurrentTabWithFallbackUrl( + redirectUrl, mExternalNavigationParams); + + // temporary: open Rewards Panel to show wallet transition state. + // remove this step once settings activity has this info + BraveActivity.getBraveActivity().openRewardsPanel(); + releaseDependencies(); + } else { + showErrorMessageBox(errorCode); + } + } + + private String parseJsonArgs(String jsonArgs) { + String redirect_url = ""; + try { + JSONObject jsonObj = new JSONObject(jsonArgs); + if (jsonObj.has(REDIRECT_URL_KEY)) { + redirect_url = jsonObj.getString(REDIRECT_URL_KEY); + } + } catch (JSONException e) { + } + return redirect_url; + } + + private void releaseDependencies() { + mExternalNavigationParams = null; + mBraveExternalNavigationHandler = null; + } + + private void showErrorMessageBox(int errorCode) { + String message = ""; + String messageTitle = ""; + Context context = ContextUtils.getApplicationContext(); + AlertDialog.Builder builder = new AlertDialog.Builder( + BraveRewardsHelper.getChromeTabbedActivity(), R.style.Theme_Chromium_AlertDialog); + + if (BraveRewardsNativeWorker.BAT_NOT_ALLOWED == errorCode) { + message = context.getResources().getString(R.string.bat_not_allowed_in_region); + messageTitle = + context.getResources().getString(R.string.bat_not_allowed_in_region_title); + } else { + message = context.getResources().getString(R.string.wallet_verification_generic_error); + messageTitle = context.getResources().getString( + R.string.wallet_verification_generic_error_title); + } + builder.setMessage(message) + .setTitle(messageTitle) + .setPositiveButton(R.string.ok, + (DialogInterface dialog, int which) -> { + mBraveExternalNavigationHandler.clobberCurrentTabWithFallbackUrl( + UPHOLD_SUPPORT_URL, mExternalNavigationParams); + }) + .setOnDismissListener((DialogInterface dialog) -> { releaseDependencies(); }); + + AlertDialog dialog = builder.create(); + dialog.show(); + } +} diff --git a/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java b/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java index 59217d4e5157..69b0be717d41 100644 --- a/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java +++ b/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java @@ -7,7 +7,7 @@ import android.annotation.SuppressLint; -import org.chromium.chrome.browser.BraveUphold; +import org.chromium.chrome.browser.BraveWalletProvider; import org.chromium.components.external_intents.ExternalNavigationDelegate; import org.chromium.components.external_intents.ExternalNavigationHandler; import org.chromium.components.external_intents.ExternalNavigationHandler.OverrideUrlLoadingResult; @@ -15,7 +15,7 @@ import org.chromium.url.GURL; public class BraveExternalNavigationHandler extends ExternalNavigationHandler { - private BraveUphold mBraveUphold; + private BraveWalletProvider mBraveWalletProvider; public BraveExternalNavigationHandler(ExternalNavigationDelegate delegate) { super(delegate); @@ -23,21 +23,28 @@ public BraveExternalNavigationHandler(ExternalNavigationDelegate delegate) { @Override public OverrideUrlLoadingResult shouldOverrideUrlLoading(ExternalNavigationParams params) { - if (isUpholdOverride(params)) { - CompleteUpholdVerification(params); + if (isWalletProviderOverride(params)) { + completeWalletProviderVerification(params); return OverrideUrlLoadingResult.forClobberingTab(); } return super.shouldOverrideUrlLoading(params); } - private boolean isUpholdOverride(ExternalNavigationParams params) { - if (!params.getUrl().getSpec().startsWith(BraveUphold.UPHOLD_REDIRECT_URL)) return false; - return true; + private boolean isWalletProviderOverride(ExternalNavigationParams params) { + if (params.getUrl().getSpec().startsWith(BraveWalletProvider.UPHOLD_REDIRECT_URL)) { + return true; + } + + if (params.getUrl().getSpec().startsWith(BraveWalletProvider.BITFLYER_REDIRECT_URL)) { + return true; + } + + return false; } - private void CompleteUpholdVerification(ExternalNavigationParams params) { - mBraveUphold = new BraveUphold(); - mBraveUphold.CompleteUpholdVerification(params, this); + private void completeWalletProviderVerification(ExternalNavigationParams params) { + mBraveWalletProvider = new BraveWalletProvider(); + mBraveWalletProvider.completeWalletProviderVerification(params, this); } @SuppressLint("VisibleForTests") @@ -56,4 +63,4 @@ public OverrideUrlLoadingResult clobberCurrentTabWithFallbackUrl( GURL browserFallbackGURL = new GURL(browserFallbackUrl); return clobberCurrentTab(browserFallbackGURL, params.getReferrerUrl()); } -} \ No newline at end of file +} diff --git a/android/java/res/layout-land/verify_wallet_activity.xml b/android/java/res/layout-land/verify_wallet_activity.xml index ed1be17bb150..fb3d7e365238 100644 --- a/android/java/res/layout-land/verify_wallet_activity.xml +++ b/android/java/res/layout-land/verify_wallet_activity.xml @@ -78,9 +78,9 @@ android:textAlignment="center"/> - \ No newline at end of file + diff --git a/android/java/res/layout/verify_wallet_activity.xml b/android/java/res/layout/verify_wallet_activity.xml index f95bd920db98..6578767b13fc 100644 --- a/android/java/res/layout/verify_wallet_activity.xml +++ b/android/java/res/layout/verify_wallet_activity.xml @@ -48,6 +48,7 @@ android:textStyle="bold" /> @@ -118,21 +118,21 @@ android:textSize="@dimen/verify_wallet_header4_font_size"/> diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.cc b/browser/brave_rewards/android/brave_rewards_native_worker.cc index f3823bce8049..d3ec2bbc877d 100644 --- a/browser/brave_rewards/android/brave_rewards_native_worker.cc +++ b/browser/brave_rewards/android/brave_rewards_native_worker.cc @@ -251,6 +251,40 @@ BraveRewardsNativeWorker::GetWalletBalance(JNIEnv* env) { return base::android::ConvertUTF8ToJavaString(env, json_balance); } +base::android::ScopedJavaLocalRef +BraveRewardsNativeWorker::GetExternalWalletType(JNIEnv* env) { + std::string wallet_type; + if (brave_rewards_service_) { + wallet_type = brave_rewards_service_->GetExternalWalletType(); + } + + return base::android::ConvertUTF8ToJavaString(env, wallet_type); +} + +void BraveRewardsNativeWorker::GetAdsAccountStatement(JNIEnv* env) { + auto* ads_service = brave_ads::AdsServiceFactory::GetForProfile( + ProfileManager::GetActiveUserProfile()->GetOriginalProfile()); + if (!ads_service) { + return; + } + ads_service->GetAccountStatement( + base::BindOnce(&BraveRewardsNativeWorker::OnGetAdsAccountStatement, + weak_factory_.GetWeakPtr())); +} + +void BraveRewardsNativeWorker::OnGetAdsAccountStatement( + bool success, + double next_payment_date, + int ads_received_this_month, + double earnings_this_month, + double earnings_last_month) { + JNIEnv* env = base::android::AttachCurrentThread(); + Java_BraveRewardsNativeWorker_OnGetAdsAccountStatement( + env, weak_java_brave_rewards_native_worker_.get(env), success, + next_payment_date * 1000, ads_received_this_month, earnings_this_month, + earnings_last_month); +} + double BraveRewardsNativeWorker::GetWalletRate(JNIEnv* env) { return parameters_.rate; } diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.h b/browser/brave_rewards/android/brave_rewards_native_worker.h index b8539d509fb4..ec96406b970d 100644 --- a/browser/brave_rewards/android/brave_rewards_native_worker.h +++ b/browser/brave_rewards/android/brave_rewards_native_worker.h @@ -47,6 +47,11 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver, base::android::ScopedJavaLocalRef GetWalletBalance(JNIEnv* env); + base::android::ScopedJavaLocalRef GetExternalWalletType( + JNIEnv* env); + + void GetAdsAccountStatement(JNIEnv* env); + double GetWalletRate(JNIEnv* env); base::android::ScopedJavaLocalRef GetPublisherURL(JNIEnv* env, @@ -223,6 +228,12 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver, void OnStartProcess(); + void OnGetAdsAccountStatement(bool success, + double next_payment_date, + int ads_received_this_month, + double earnings_this_month, + double earnings_last_month); + JavaObjectWeakGlobalRef weak_java_brave_rewards_native_worker_; brave_rewards::RewardsService* brave_rewards_service_; ledger::type::RewardsParameters parameters_; diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index 1375f0bb21f1..683a09e02d65 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -969,29 +969,41 @@ Are you sure you want to do this? But if you verify, you can... - + Withdraw BAT that you earn from viewing privacy-respecting ads - + Purchase additional BAT with credit cards and other sources - + Withdraw BAT that you may have previously added to your Brave Rewards wallet + + Withdraw BAT that you earn from viewing privacy-respecting ads + + + Purchase additional BAT with credit cards and other sources + + + Withdraw BAT that you may have previously added to your Brave Rewards wallet + Verify Wallet Our wallet service is provided by - + Uphold - + + Bitflyer + + Uphold may require you to verify your identity based on services requested. - Brave Software Inc. does not process, store, or access any of the personal information that you provide to Uphold when you establish an account with them. + Brave Software Inc. does not process, store, or access any of the personal information that you provide to %1$s when you establish an account with them. Complete wallet verification @@ -999,8 +1011,8 @@ Are you sure you want to do this? User Wallet - - Go to your Uphold account + + Go to my %1$s account Disconnect from Brave Rewards diff --git a/components/brave_rewards/browser/rewards_service.h b/components/brave_rewards/browser/rewards_service.h index 3c9d00af8cf3..42434be17ede 100644 --- a/components/brave_rewards/browser/rewards_service.h +++ b/components/brave_rewards/browser/rewards_service.h @@ -312,6 +312,8 @@ class RewardsService : public KeyedService { virtual void GetExternalWallet(GetExternalWalletCallback callback) = 0; + virtual std::string GetExternalWalletType() const = 0; + virtual const std::vector GetExternalWalletProviders() const = 0; virtual void ProcessRewardsPageUrl( diff --git a/components/brave_rewards/browser/rewards_service_impl.cc b/components/brave_rewards/browser/rewards_service_impl.cc index 5ad23e3116fa..4872edfd4491 100644 --- a/components/brave_rewards/browser/rewards_service_impl.cc +++ b/components/brave_rewards/browser/rewards_service_impl.cc @@ -1246,6 +1246,7 @@ void RewardsServiceImpl::OnAttestationAndroid( if (!token_received) { std::move(callback).Run(ledger::type::Result::LEDGER_ERROR, nullptr); + return; } base::Value solution(base::Value::Type::DICTIONARY); diff --git a/components/brave_rewards/browser/rewards_service_impl.h b/components/brave_rewards/browser/rewards_service_impl.h index 342deccd50f6..3af5a025ceb2 100644 --- a/components/brave_rewards/browser/rewards_service_impl.h +++ b/components/brave_rewards/browser/rewards_service_impl.h @@ -296,7 +296,7 @@ class RewardsServiceImpl : public RewardsService, void GetExternalWallet(GetExternalWalletCallback callback) override; - std::string GetExternalWalletType() const; + std::string GetExternalWalletType() const override; const std::vector GetExternalWalletProviders() const override; diff --git a/components/brave_rewards/resources/android_page/actions/rewards_actions.ts b/components/brave_rewards/resources/android_page/actions/rewards_actions.ts index 78cca8645154..d0c8d095fba6 100644 --- a/components/brave_rewards/resources/android_page/actions/rewards_actions.ts +++ b/components/brave_rewards/resources/android_page/actions/rewards_actions.ts @@ -9,24 +9,14 @@ import { types } from '../constants/rewards_types' export const isInitialized = () => action(types.IS_INITIALIZED) -export const onSettingSave = (key: string, value: any) => action(types.ON_SETTING_SAVE, { +export const onSettingSave = (key: string, value: any, persist: boolean = true) => action(types.ON_SETTING_SAVE, { key, - value + value, + persist }) export const getRewardsParameters = () => action(types.GET_REWARDS_PARAMETERS) -export const disconnectWallet = () => action(types.DISCONNECT_WALLET) - -export const disconnectWalletError = () => action(types.DISCONNECT_WALLET_ERROR) - -export const getExternalWallet = () => action(types.GET_EXTERNAL_WALLET) - -export const onExternalWallet = (result: number, wallet: Rewards.ExternalWallet) => action(types.ON_EXTERNAL_WALLET, { - result, - wallet -}) - export const onRewardsParameters = (properties: Rewards.RewardsParameters) => action(types.ON_REWARDS_PARAMETERS, { properties @@ -48,14 +38,36 @@ export const claimPromotion = (promotionId: string) => action(types.CLAIM_PROMOT promotionId }) +export const onClaimPromotion = (properties: Rewards.Captcha) => action(types.ON_CLAIM_PROMOTION, { + properties +}) + +export const attestPromotion = (promotionId: string, x: number, y: number) => action(types.ATTEST_PROMOTION, { + promotionId, + x, + y +}) + export const onPromotionFinish = (properties: Rewards.PromotionFinish) => action(types.ON_PROMOTION_FINISH, { properties }) +export const resetPromotion = (promotionId: string) => action(types.RESET_PROMOTION, { + promotionId +}) + export const deletePromotion = (promotionId: string) => action(types.DELETE_PROMOTION, { promotionId }) +export const recoverWallet = (key: string) => action(types.RECOVER_WALLET, { + key +}) + +export const onRecoverWalletData = (result: number) => action(types.ON_RECOVER_WALLET_DATA, { + result +}) + export const onModalBackupClose = () => action(types.ON_MODAL_BACKUP_CLOSE) export const onModalBackupOpen = () => action(types.ON_MODAL_BACKUP_OPEN) @@ -82,6 +94,10 @@ export const onBalanceReport = (properties: {month: number, year: number, report report: properties.report }) +export const onExternalWalletProviderList = (list: Rewards.ExternalWalletProvider[]) => action(types.ON_EXTERNAL_WALLET_PROVIDER_LIST, { + list +}) + export const getBalanceReport = (month: number, year: number) => action(types.GET_BALANCE_REPORT, { month, year @@ -121,6 +137,70 @@ export const onAdsData = (adsData: Rewards.AdsData) => action(types.ON_ADS_DATA, adsData }) +export const getAdsHistory = () => action(types.GET_ADS_HISTORY) + +export const onAdsHistory = (adsHistory: Rewards.AdsHistory[]) => action(types.ON_ADS_HISTORY, { + adsHistory +}) + +export const toggleAdThumbUp = (uuid: string, creativeSetId: string, likeAction: number) => action(types.TOGGLE_AD_THUMB_UP, { + uuid, + creativeSetId, + likeAction +}) + +export const onToggleAdThumbUp = (result: Rewards.ToggleLikeAction) => action(types.ON_TOGGLE_AD_THUMB_UP, { + result +}) + +export const toggleAdThumbDown = (uuid: string, creativeSetId: string, likeAction: number) => action(types.TOGGLE_AD_THUMB_DOWN, { + uuid, + creativeSetId, + likeAction +}) + +export const onToggleAdThumbDown = (result: Rewards.ToggleLikeAction) => action(types.ON_TOGGLE_AD_THUMB_DOWN, { + result +}) + +export const toggleAdOptIn = (category: string, optAction: number) => action(types.TOGGLE_AD_OPT_IN, { + category, + optAction +}) + +export const onToggleAdOptIn = (result: Rewards.ToggleOptAction) => action(types.ON_TOGGLE_AD_OPT_IN, { + result +}) + +export const toggleAdOptOut = (category: string, optAction: number) => action(types.TOGGLE_AD_OPT_OUT, { + category, + optAction +}) + +export const onToggleAdOptOut = (result: Rewards.ToggleOptAction) => action(types.ON_TOGGLE_AD_OPT_OUT, { + result +}) + +export const toggleSavedAd = (uuid: string, creativeSetId: string, savedAd: boolean) => action(types.TOGGLE_SAVED_AD, { + uuid, + creativeSetId, + savedAd +}) + +export const onToggleSavedAd = (result: Rewards.ToggleSavedAd) => action(types.ON_TOGGLE_SAVED_AD, { + result +}) + +export const toggleFlaggedAd = (uuid: string, creativeSetId: string, flaggedAd: boolean) => action(types.TOGGLE_FLAGGED_AD, { + uuid, + creativeSetId, + flaggedAd +}) + +export const onToggleFlaggedAd = (result: Rewards.ToggleFlaggedAd) => action(types.ON_TOGGLE_FLAGGED_AD, { + result +}) + export const onAdsSettingSave = (key: string, value: any) => action(types.ON_ADS_SETTING_SAVE, { key, value @@ -174,10 +254,96 @@ export const onBalance = (status: number, balance: Rewards.Balance) => action(ty balance }) +export const getExternalWallet = () => action(types.GET_EXTERNAL_WALLET) + +export const onExternalWallet = (result: number, wallet: Rewards.ExternalWallet) => action(types.ON_EXTERNAL_WALLET, { + result, + wallet +}) + +export const processRewardsPageUrl = (path: string, query: string) => action(types.PROCESS_REWARDS_PAGE_URL, { + path, + query +}) + +export const onProcessRewardsPageUrl = (data: Rewards.ProcessRewardsPageUrl) => action(types.ON_PROCESS_REWARDS_PAGE_URL, { + data +}) + +export const hideRedirectModal = () => action(types.HIDE_REDIRECT_MODAL) + +export const disconnectWallet = () => action(types.DISCONNECT_WALLET) + +export const getMonthlyReport = (month?: number, year?: number) => action(types.GET_MONTHLY_REPORT, { + month, + year +}) + +export const onMonthlyReport = (properties: { result: number, month: number, year: number, report: Rewards.MonthlyReport}) => action(types.ON_MONTHLY_REPORT, { + result: properties.result, + month: properties.month, + year: properties.year, + report: properties.report +}) + +export const onReconcileStampReset = () => action(types.ON_RECONCILE_STAMP_RESET) + +export const getMonthlyReportIds = () => action(types.GET_MONTHLY_REPORT_IDS) + +export const onMonthlyReportIds = (ids: string[]) => action(types.ON_MONTHLY_REPORT_IDS, ids) + +export const dismissPromoPrompt = (promo: string) => action(types.DISMISS_PROMO_PROMPT, { + promo +}) + +export const getCountryCode = () => action(types.GET_COUNTRY_CODE) + +export const onCountryCode = (countryCode: string) => action(types.ON_COUNTRY_CODE, { + countryCode +}) + export const onInitialized = (result: boolean) => action(types.ON_INITIALIZED, { result }) +export const completeReset = () => action(types.COMPLETE_RESET) + +export const onCompleteReset = (success: boolean) => action(types.ON_COMPLETE_RESET, { + success +}) + +export const getPaymentId = () => action(types.GET_PAYMENT_ID) + +export const disconnectWalletError = () => action(types.DISCONNECT_WALLET_ERROR) + +export const onPaymentId = (paymentId: string) => action(types.ON_PAYMENT_ID, { + paymentId +}) + +export const getWalletPassphrase = () => action(types.GET_WALLET_PASSPHRASE) + +export const onWalletPassphrase = (passphrase: string) => action(types.ON_WALLET_PASSPHRASE, { + passphrase +}) + +export const getOnboardingStatus = () => action(types.GET_ONBOARDING_STATUS) + +export const onOnboardingStatus = (showOnboarding: boolean) => action(types.ON_ONBOARDING_STATUS, { + showOnboarding +}) + +export const saveOnboardingResult = (result: 'opted-in' | 'dismissed') => action(types.SAVE_ONBOARDING_RESULT, { + result +}) + +export const getEnabledInlineTippingPlatforms = () => action(types.GET_ENABLED_INLINE_TIPPING_PLATFORMS) + +export const onEnabledInlineTippingPlatforms = (platforms: string[]) => action(types.ON_ENABLED_INLINE_TIPPING_PLATFORMS, { + platforms +}) + +export const restartBrowser = () => action(types.RESTART_BROWSER) + export const onPrefChanged = (key: string) => action(types.ON_PREF_CHANGED, { key }) diff --git a/components/brave_rewards/resources/android_page/assets/connect_wallet.svg b/components/brave_rewards/resources/android_page/assets/connect_wallet.svg new file mode 100644 index 000000000000..013de1fd2e6c --- /dev/null +++ b/components/brave_rewards/resources/android_page/assets/connect_wallet.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/brave_rewards/resources/android_page/assets/green_check.svg b/components/brave_rewards/resources/android_page/assets/green_check.svg new file mode 100644 index 000000000000..f59dee7c128a --- /dev/null +++ b/components/brave_rewards/resources/android_page/assets/green_check.svg @@ -0,0 +1,3 @@ + + + diff --git a/components/brave_rewards/resources/android_page/brave_rewards_page.tsx b/components/brave_rewards/resources/android_page/brave_rewards_page.tsx index 6a046e9b0b97..17239fc4821a 100644 --- a/components/brave_rewards/resources/android_page/brave_rewards_page.tsx +++ b/components/brave_rewards/resources/android_page/brave_rewards_page.tsx @@ -9,30 +9,37 @@ import { initLocale } from 'brave-ui' import { bindActionCreators } from 'redux' require('emptykit.css') +import { LocaleContext } from '../shared/lib/locale_context' +import { WithThemeVariables } from '../shared/components/with_theme_variables' + // Components import App from './components/app' require('../../../../ui/webui/resources/fonts/muli.css') require('../../../../ui/webui/resources/fonts/poppins.css') -import { WithThemeVariables } from '../shared/components/with_theme_variables' - // Utils import { ThemeProvider } from 'styled-components' import { loadTimeData } from '../../../common/loadTimeData' import store from './store' import Theme from 'brave-ui/theme/brave-default' -import { getActions as getUtilActions, getCurrentBalanceReport, setActions } from './utils' +import { getActions as getUtilActions, setActions, getCurrentBalanceReport } from './utils' import * as rewardsActions from './actions/rewards_actions' function initialize () { initLocale(loadTimeData.data_) + const localeContext = { + getString: (key: string) => loadTimeData.getString(key) + } + render( - - - + + + + + , document.getElementById('root')) @@ -50,12 +57,23 @@ function getActions () { function rewardsParameters (properties: Rewards.RewardsParameters) { getActions().onRewardsParameters(properties) + // Get the current AC amount after rewards parameters have been + // updated, as the default AC amount may have been changed. + getActions().getContributionAmount() } function promotions (properties: Rewards.PromotionResponse) { getActions().onPromotions(properties) } +function claimPromotion (properties: Rewards.Captcha) { + getActions().onClaimPromotion(properties) +} + +function recoverWalletData (result: number) { + getActions().onRecoverWalletData(result) +} + function promotionFinish (properties: Rewards.PromotionFinish) { getActions().onPromotionFinish(properties) } @@ -96,6 +114,34 @@ function adsData (adsData: Rewards.AdsData) { getActions().onAdsData(adsData) } +function adsHistory (adsHistory: Rewards.AdsHistory[]) { + getActions().onAdsHistory(adsHistory) +} + +function onToggleAdThumbUp (result: Rewards.ToggleLikeAction) { + getActions().onToggleAdThumbUp(result) +} + +function onToggleAdThumbDown (result: Rewards.ToggleLikeAction) { + getActions().onToggleAdThumbDown(result) +} + +function onToggleAdOptIn (result: Rewards.ToggleOptAction) { + getActions().onToggleAdOptIn(result) +} + +function onToggleAdOptOut (result: Rewards.ToggleOptAction) { + getActions().onToggleAdOptOut(result) +} + +function onToggleSavedAd (result: Rewards.ToggleSavedAd) { + getActions().onToggleSavedAd(result) +} + +function onToggleFlaggedAd (result: Rewards.ToggleFlaggedAd) { + getActions().onToggleFlaggedAd(result) +} + function onPendingContributionSaved (result: number) { if (result === 0) { getActions().getPendingContributions() @@ -118,6 +164,10 @@ function recurringTipRemoved (success: boolean) { getActions().onRecurringTipRemoved(success) } +function externalWalletProviderList (list: Rewards.ExternalWalletProvider[]) { + getActions().onExternalWalletProviderList(list) +} + function pendingContributions (list: Rewards.PendingContribution[]) { getActions().onPendingContributions(list) } @@ -147,6 +197,28 @@ function reconcileComplete (properties: {type: number, result: number}) { if (properties.type === 8) { // Rewards.RewardsType.ONE_TIME_TIP chrome.send('brave_rewards.getOneTimeTips') } + + // EXPIRED TOKEN + if (properties.result === 24) { + getActions().getExternalWallet() + } +} + +function externalWallet (properties: {result: number, wallet: Rewards.ExternalWallet}) { + getActions().onExternalWallet(properties.result, properties.wallet) +} + +function processRewardsPageUrl (data: Rewards.ProcessRewardsPageUrl) { + getActions().onProcessRewardsPageUrl(data) +} + +function disconnectWallet (properties: {result: number}) { + if (properties.result === 0) { + getActions().getExternalWallet() + getActions().getBalance() + return + } + getActions().disconnectWalletError() } function onlyAnonWallet (only: boolean) { @@ -157,10 +229,50 @@ function unblindedTokensReady () { getActions().getBalance() } +function monthlyReport (properties: { result: number, month: number, year: number, report: Rewards.MonthlyReport}) { + getActions().onMonthlyReport(properties) +} + +function reconcileStampReset () { + getActions().onReconcileStampReset() +} + +function monthlyReportIds (ids: string[]) { + getActions().onMonthlyReportIds(ids) +} + +function countryCode (countryCode: string) { + getActions().onCountryCode(countryCode) +} + function initialized (result: number) { getActions().onInitialized(result) } +function completeReset (success: boolean) { + getActions().onCompleteReset(success) +} + +function paymentId (paymentId: string) { + getActions().onPaymentId(paymentId) +} + +function walletPassphrase (passphrase: string) { + getActions().onWalletPassphrase(passphrase) +} + +function onboardingStatus (result: { showOnboarding: boolean }) { + getActions().onOnboardingStatus(result.showOnboarding) +} + +function enabledInlineTippingPlatforms (list: string[]) { + getActions().onEnabledInlineTippingPlatforms(list) +} + +function externalWalletLogin (url: string) { + window.open(url, '_self') +} + function onPrefChanged (key: string) { getActions().onPrefChanged(key) } @@ -171,9 +283,12 @@ function onPrefChanged (key: string) { window.brave_rewards = { rewardsParameters, promotions, + claimPromotion, + recoverWalletData, promotionFinish, reconcileStamp, contributeList, + externalWalletProviderList, excludedList, balanceReport, contributionAmount, @@ -181,6 +296,13 @@ window.brave_rewards = { currentTips, autoContributeProperties, adsData, + adsHistory, + onToggleAdThumbUp, + onToggleAdThumbDown, + onToggleAdOptIn, + onToggleAdOptOut, + onToggleSavedAd, + onToggleFlaggedAd, pendingContributions, onPendingContributionSaved, statement, @@ -191,9 +313,22 @@ window.brave_rewards = { excludedSiteChanged, balance, reconcileComplete, + externalWallet, + processRewardsPageUrl, + disconnectWallet, onlyAnonWallet, unblindedTokensReady, + monthlyReport, + reconcileStampReset, + monthlyReportIds, + countryCode, initialized, + completeReset, + paymentId, + walletPassphrase, + onboardingStatus, + enabledInlineTippingPlatforms, + externalWalletLogin, onPrefChanged } diff --git a/components/brave_rewards/resources/android_page/components/connect_wallet_modal.style.ts b/components/brave_rewards/resources/android_page/components/connect_wallet_modal.style.ts new file mode 100644 index 000000000000..84ae45f25765 --- /dev/null +++ b/components/brave_rewards/resources/android_page/components/connect_wallet_modal.style.ts @@ -0,0 +1,222 @@ +/* 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/. */ + +import styled from 'styled-components' + +import warningCircleImage from '../../shared/assets/warning_circle.svg' +import greenCheckIcon from '../assets/green_check.svg' + +export const root = styled.div` + font-family: var(--brave-font-heading); + width: 880px; + min-height: 545px; + background: var(--brave-palette-white); + box-shadow: 0px 0px 16px rgba(99, 105, 110, 0.2); + border-radius: 8px; + display: flex; + overflow: hidden; + + a { + color: var(--brave-color-brandBat); + text-decoration: none; + } + + @media screen and (max-width: 700px) { + width: 380px; + min-height: 245px; + } +` + +export const leftPanel = styled.div` + flex: 0 1 448px; + padding: 70px 28px 31px 80px; + + @media screen and (max-width: 700px) { + padding: 50px 28px 31px 50px; + } +` + +export const rightPanel = styled.div` + flex: 1 1 auto; + padding: 32px 42px; + background: var(--brave-palette-neutral000); +` + +export const panelHeader = styled.div` + font-weight: 600; + font-size: 22px; + line-height: 28px; + color: var(--brave-palette-black); +` + +export const panelText = styled.div` + font-size: 14px; + line-height: 24px; + color: var(--brave-palette-neutral700); + margin-top: 8px; +` + +export const infoPanel = styled.div`` + +export const infoListItem = styled.div` + color: var(--brave-palette-neutral900); + font-weight: 600; + margin-top: 16px; + background: top 4px left no-repeat url("${greenCheckIcon}"); + padding-left: 23px; +` + +export const infoNote = styled.div` + color: var(--brave-palette-neutral600); + font-size: 12px; + line-height: 18px; + margin-top: 16px; +` + +export const continueButton = styled.div` + margin-top: 16px; + + button { + font-weight: 600; + font-size: 13px; + line-height: 19px; + cursor: pointer; + border: none; + outline-style: none; + + color: var(--brave-palette-white); + background: var(--brave-color-brandBat); + padding: 10px 39px; + border-radius: 20px; + + .icon { + height: 12px; + vertical-align: middle; + margin: 0 -6px 2px 2px; + } + + &:focus-visible { + outline-style: auto; + } + + &:active { + background: var(--brave-color-brandBatActive); + } + } +` + +export const infoTerms = styled.div` + font-size: 12px; + line-height: 18px; + color: var(--brave-palette-neutral600); + margin-top: 38px; + + strong { + font-weight: 600; + } +` + +export const connectGraphic = styled.div` + text-align: center; + margin: 86px auto 0; + width: 250px; +` + +export const minimumBalanceWarning = styled.div` + margin-top: 16px; + background: var(--brave-palette-neutral000); + border-radius: 8px; + padding: 16px 17px 26px 41px; + font-size: 14px; + line-height: 22px; + + background-repeat: no-repeat; + background-position: 17px 21px; + background-size: 16px 16px; + background-image: url('${warningCircleImage}'); + + .login { + margin-top: 8px; + font-weight: 600; + } +` + +export const selectWalletLeftPanel = styled.div` + margin-top: 30px; +` + +export const selectWalletContent = styled.div` + min-height: 236px; +` + +export const selectWalletNote = styled.div` + margin-top: 48px; + font-size: 12px; + line-height: 18px; + color: var(--brave-palette-neutral600); +` + +export const providerButtons = styled.div` + min-height: 72%; + padding-top: 40px; + display: flex; + flex-direction: column; + justify-content: center; + + button { + margin-bottom: 17px; + margin-left: 21px; + height: 79px; + display: flex; + align-items: center; + background: var(--brave-palette-white); + border: 2px solid var(--brave-palette-grey200); + border-radius: 8px; + font-weight: 600; + font-size: 16px; + line-height: 28px; + color: var(--brave-palette-black); + padding: 14px 20px; + cursor: pointer; + + &:active { + border-color: var(--brave-palette-grey300); + } + + &.selected { + border-color: var(--brave-color-brandBat); + } + } +` + +export const providerButtonIcon = styled.div` + flex: 0 0 52px; + background: rgb(218, 220, 232, .33); + border-radius: 50%; + height: 52px; + width: 52px; + padding: 14px 0; + + .icon { + height: 25px; + width: auto; + } +` + +export const providerButtonName = styled.div` + flex: 1 1 auto; + padding-left: 30px; + text-align: left; +` + +export const providerButtonCaret = styled.div` + flex: 0 0 10px; + + .icon { + height: 16px; + width: auto; + vertical-align: middle; + margin-bottom: 3px; + } +` diff --git a/components/brave_rewards/resources/android_page/components/connect_wallet_modal.tsx b/components/brave_rewards/resources/android_page/components/connect_wallet_modal.tsx new file mode 100644 index 000000000000..f8005d914b57 --- /dev/null +++ b/components/brave_rewards/resources/android_page/components/connect_wallet_modal.tsx @@ -0,0 +1,201 @@ +/* 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/. */ + +import * as React from 'react' + +import { LocaleContext, formatMessage } from '../../shared/lib/locale_context' +import { Modal, ModalCloseButton } from '../../shared/components/modal' +import { CaretIcon } from '../../shared/components/icons/caret_icon' +import { GeminiIcon } from '../../shared/components/icons/gemini_icon' +import { UpholdIcon } from '../../shared/components/icons/uphold_icon' +import { BitflyerIcon } from '../../shared/components/icons/bitflyer_icon' + +import * as style from './connect_wallet_modal.style' + +export function getMinimumBalance (provider: string) { + switch (provider) { + case 'uphold': return 15 + default: return 0 + } +} + +function renderProviderIcon (provider: string) { + switch (provider) { + case 'bitflyer': return + case 'gemini': return + case 'uphold': return + default: return null + } +} + +type ModalState = 'info' | 'select' + +interface ExternalWalletProvider { + type: string + name: string +} + +interface Props { + rewardsBalance: number + providers: ExternalWalletProvider[] + onContinue: (provider: string) => void + onClose: () => void +} + +export function ConnectWalletModal (props: Props) { + const { getString } = React.useContext(LocaleContext) + + const [modalState, setModalState] = React.useState('info') + const [selectedProvider, setSelectedProvider] = + React.useState(null) + const [showMinimumBalanceWarning, setShowMinimumBalanceWarning] = + React.useState(false) + + if (props.providers.length === 0) { + return null + } + + function renderInfo () { + const onContinueClick = () => { + setModalState('select') + } + + return { + left: ( + + + {getString('connectWalletInfoHeader')} + + + {getString('connectWalletInfoText')} + + {getString('connectWalletInfoListItem1')} + + + {getString('connectWalletInfoListItem2')} + + + + {getString('connectWalletInfoNote')} + + + + + + { + formatMessage(getString('connectWalletInfoBraveNote'), { + tags: { + $1: (content) => {content} + } + }) + } + + + ), + right: null + } + } + + function renderMinimumBalanceWarning () { + const onLoginLinkClicked = (evt: React.MouseEvent) => { + evt.preventDefault() + if (selectedProvider) { + props.onContinue(selectedProvider.type) + } + } + + if (!selectedProvider) { + return null + } + + return ( + + { + formatMessage(getString('minimumBalanceWarning'), [ + selectedProvider.name, + getMinimumBalance(selectedProvider.type) + ]) + } + + + ) + } + + function renderSelectWallet () { + return { + left: null, + right: ( + + { showMinimumBalanceWarning && renderMinimumBalanceWarning() } + { + props.providers.map((provider) => { + const onClick = () => { + setSelectedProvider(provider) + if (props.rewardsBalance < getMinimumBalance(provider.type)) { + setShowMinimumBalanceWarning(true) + } else { + setShowMinimumBalanceWarning(false) + props.onContinue(provider.type) + } + } + + const selected = + selectedProvider && + provider.type === selectedProvider.type + + return ( + + ) + }) + } + + ) + } + } + + const { left, right } = modalState === 'info' + ? renderInfo() + : renderSelectWallet() + + return ( + + + { + left && + + + {left} + + } + { + right && + + + {right} + + } + + + ) +} diff --git a/components/brave_rewards/resources/android_page/components/contributeBox.tsx b/components/brave_rewards/resources/android_page/components/contributeBox.tsx index 909b3b31488f..359da59ace70 100644 --- a/components/brave_rewards/resources/android_page/components/contributeBox.tsx +++ b/components/brave_rewards/resources/android_page/components/contributeBox.tsx @@ -225,7 +225,8 @@ class ContributeBox extends React.Component { enabledContribute, reconcileStamp, autoContributeList, - excludedList + excludedList, + externalWallet } = this.props.rewardsData const monthlyList: MonthlyChoice[] = utils.generateContributionMonthly(parameters) const contributeRows = this.getContributeRows(autoContributeList) @@ -235,6 +236,11 @@ class ContributeBox extends React.Component { const numExcludedRows = excludedRows && excludedRows.length const allSites = !(excludedRows.length > 0 || numRows > 5) + // Hide AC options from bitFlyer wallet regions. + if (externalWallet && externalWallet.type === 'bitflyer') { + return null + } + return ( { { this.state.modalContribute ? : null } diff --git a/components/brave_rewards/resources/android_page/components/icons/manage_wallet_icon.tsx b/components/brave_rewards/resources/android_page/components/icons/manage_wallet_icon.tsx new file mode 100644 index 000000000000..4d82891a0dfa --- /dev/null +++ b/components/brave_rewards/resources/android_page/components/icons/manage_wallet_icon.tsx @@ -0,0 +1,13 @@ +/* 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/. */ + +import * as React from 'react' + +export function ManageWalletIcon () { + return ( + + + + ) +} diff --git a/components/brave_rewards/resources/android_page/components/manage_wallet_button.style.ts b/components/brave_rewards/resources/android_page/components/manage_wallet_button.style.ts new file mode 100644 index 000000000000..855249d5f341 --- /dev/null +++ b/components/brave_rewards/resources/android_page/components/manage_wallet_button.style.ts @@ -0,0 +1,37 @@ +/* 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/. */ + +import styled from 'styled-components' + +import { buttonReset } from '../../shared/lib/css_mixins' + +export const root = styled.div` + margin: 10px 20px 0px; + + button { + ${buttonReset} + width: 100%; + font-family: var(--brave-font-heading); + font-weight: 600; + font-size: 13px; + line-height: 20px; + color: var(--brave-palette-neutral900); + border: 1px solid var(--brave-palette-grey500); + border-radius: 48px; + padding: 6px 18px; + cursor: pointer; + + &:active { + background: rgba(0, 0, 0, .01); + } + } + + .icon { + width: 17px; + height: auto; + vertical-align: middle; + margin-right: 8px; + margin-bottom: 3px; + } +` diff --git a/components/brave_rewards/resources/android_page/components/manage_wallet_button.tsx b/components/brave_rewards/resources/android_page/components/manage_wallet_button.tsx new file mode 100644 index 000000000000..7c6061f7299e --- /dev/null +++ b/components/brave_rewards/resources/android_page/components/manage_wallet_button.tsx @@ -0,0 +1,25 @@ +/* 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/. */ + +import * as React from 'react' + +import { LocaleContext } from '../../shared/lib/locale_context' +import { ManageWalletIcon } from './icons/manage_wallet_icon' + +import * as style from './manage_wallet_button.style' + +interface Props { + onClick: () => void +} + +export function ManageWalletButton (props: Props) { + const { getString } = React.useContext(LocaleContext) + return ( + + + + ) +} diff --git a/components/brave_rewards/resources/android_page/components/pageWallet.tsx b/components/brave_rewards/resources/android_page/components/pageWallet.tsx index 9a7216f5d265..4e4f67833ad7 100644 --- a/components/brave_rewards/resources/android_page/components/pageWallet.tsx +++ b/components/brave_rewards/resources/android_page/components/pageWallet.tsx @@ -5,37 +5,49 @@ import * as React from 'react' import { bindActionCreators, Dispatch } from 'redux' import { connect } from 'react-redux' - // Components -import { AlertWallet } from '../../ui/components/walletWrapper' import { - WalletSummary, - WalletWrapper, - WalletEmpty + ModalActivity, + ModalBackupRestore, + ModalPending, + ModalQRCode } from '../../ui/components' -import { CloseStrokeIcon } from 'brave-ui/components/icons' -import { StyledWalletClose, StyledWalletOverlay, StyledWalletWrapper } from './style' - +import { WalletCard, ExternalWalletAction } from '../../shared/components/wallet_card' +import { ExternalWallet, ExternalWalletProvider, ExternalWalletStatus } from '../../shared/lib/external_wallet' +import { WalletAddIcon, WalletWithdrawIcon } from 'brave-ui/components/icons' +import { AlertWallet } from '../../ui/components/walletWrapper' +import { Provider } from '../../ui/components/profile' +import { DetailRow as PendingDetailRow, PendingType } from '../../ui/components/tablePending' // Utils -import { getLocale } from '../../../../common/locale' +import { getLocale, getLocaleWithTag } from '../../../../common/locale' import * as rewardsActions from '../actions/rewards_actions' import * as utils from '../utils' +import { ExtendedActivityRow, SummaryItem, SummaryType } from '../../ui/components/modalActivity' +import { DetailRow as TransactionRow } from '../../ui/components/tableTransactions' +import { ConnectWalletModal } from './connect_wallet_modal' +import { ManageWalletButton } from './manage_wallet_button' +import { PageWalletWrapper } from './style' interface State { activeTabId: number + modalActivity: boolean + modalPendingContribution: boolean + modalVerify: boolean + modalQRCode: boolean } interface Props extends Rewards.ComponentProps { - visible?: boolean - toggleAction: () => void } class PageWallet extends React.Component { constructor (props: Props) { super(props) - this.state = { - activeTabId: 0 + activeTabId: 0, + modalActivity: false, + modalPendingContribution: false, + modalVerify: false, + modalQRCode: false } } @@ -43,94 +55,869 @@ class PageWallet extends React.Component { return this.props.actions } + hasUserFunds () { + const { balance } = this.props.rewardsData + return balance && balance.wallets.anonymous > 0 + } + + componentDidMount () { + this.isBackupUrl() + this.isDisconnectUrl() + this.isVerifyUrl() + this.actions.getMonthlyReportIds() + chrome.send('brave_rewards.getExternalWalletProviders') + } + + onModalBackupClose = () => { + if (this.urlHashIs('#manage-wallet')) { + window.location.hash = '' + } + this.actions.onModalBackupClose() + } + + onModalBackupOpen = () => { + if (!this.props.rewardsData.recoveryKey || this.props.rewardsData.recoveryKey.length === 0) { + this.actions.getWalletPassphrase() + } + this.actions.onModalBackupOpen() + } + + showBackupNotice = () => { + return this.state.activeTabId === 0 && !this.hasUserFunds() + } + + onModalBackupTabChange = (newTabId: number) => { + this.setState({ + activeTabId: newTabId + }) + } + + onModalBackupOnCopy = async (backupKey: string) => { + // TODO(jsadler) possibly flash a message that copy was completed + try { + await navigator.clipboard.writeText(backupKey) + console.log('Copy successful') + chrome.send('brave_rewards.setBackupCompleted') + } catch (e) { + console.log('Copy failed') + } + } + + onModalBackupOnPrint = (backupKey: string) => { + if (document.location) { + const win = window.open(document.location.href) + if (win) { + win.document.body.innerText = utils.constructBackupString(backupKey) // this should be text, not HTML + win.print() + win.close() + chrome.send('brave_rewards.setBackupCompleted') + } + } + } + + onModalBackupOnSaveFile = (backupKey: string) => { + const backupString = utils.constructBackupString(backupKey) + const backupFileText = 'brave_wallet_recovery.txt' + const a = document.createElement('a') + document.body.appendChild(a) + a.style.display = 'display: none' + const blob = new Blob([backupString], { type: 'plain/text' }) + const url = window.URL.createObjectURL(blob) + a.href = url + a.download = backupFileText + a.click() + window.URL.revokeObjectURL(url) + chrome.send('brave_rewards.setBackupCompleted') + } + + onModalBackupOnRestore = (key: string | MouseEvent) => { + if (typeof key === 'string' && key.length > 0) { + key = this.pullRecoveryKeyFromFile(key) + this.actions.recoverWallet(key) + } + } + + onModalBackupOnReset = () => { + this.actions.onModalBackupClose() + this.actions.completeReset() + } + + pullRecoveryKeyFromFile = (key: string) => { + let recoveryKey = null + if (key) { + let messageLines = key.match(/^.+$/gm) + if (messageLines) { + let passphraseLine = '' || messageLines[2] + if (passphraseLine) { + const passphrasePattern = new RegExp(['Recovery Key:', '(.+)$'].join(' ')) + recoveryKey = (passphraseLine.match(passphrasePattern) || [])[1] + return recoveryKey + } + } + } + return key + } + + onModalBackupOnImport = () => { + // TODO NZ implement + console.log('onModalBackupOnImport') + } + getConversion = () => { const { balance, parameters } = this.props.rewardsData return utils.convertBalance(balance.total, parameters.rate) } + onModalActivityToggle = () => { + if (!this.state.modalActivity) { + this.actions.getMonthlyReport() + } + + this.setState({ + modalActivity: !this.state.modalActivity + }) + } + + urlHashIs = (hash: string) => { + return ( + window && + window.location && + window.location.hash && + window.location.hash === hash + ) + } + + onModalPendingToggle = () => { + this.setState({ + modalPendingContribution: !this.state.modalPendingContribution + }) + } + + isBackupUrl = () => { + if (this.urlHashIs('#manage-wallet')) { + this.onModalBackupOpen() + } + } + + isVerifyUrl = () => { + if (this.urlHashIs('#verify')) { + this.toggleVerifyModal() + } + } + + isDisconnectUrl = () => { + if (this.urlHashIs('#disconnect-wallet')) { + this.actions.disconnectWallet() + } + } + + toggleVerifyModal = () => { + if (this.state.modalVerify) { + window.history.replaceState({}, 'Rewards', '/') + } + this.setState({ + modalVerify: !this.state.modalVerify + }) + } + + toggleQRCodeModal = () => { + // If we are opening the QR code panel, then request a payment ID if we do + // not already have one and close the backup/restore modal. + if (!this.state.modalQRCode) { + if (!this.props.rewardsData.paymentId) { + this.actions.getPaymentId() + } + this.actions.onModalBackupClose() + } + + this.setState({ + modalQRCode: !this.state.modalQRCode + }) + } + + onModalActivityAction = (action: string, value: string, node: any) => { + if (action === 'onMonthChange') { + const items = value.split('_') + if (items.length !== 2) { + return + } + this.actions.getMonthlyReport(parseInt(items[1], 10), parseInt(items[0], 10)) + } + } + walletAlerts = (): AlertWallet | null => { - const { walletServerProblem } = this.props.rewardsData.ui + const { + disconnectWalletError, + walletRecoveryStatus, + walletServerProblem + } = this.props.rewardsData.ui if (walletServerProblem) { return { - node: {getLocale('uhOh')} {getLocale('serverNotResponding')}, + node: <>{getLocale('uhOh')} {getLocale('serverNotResponding')}, type: 'error' } } + if (walletRecoveryStatus === 0) { + return { + node: <>{getLocale('walletRestored')} {getLocale('walletRecoverySuccess')}, + type: 'success', + onAlertClose: () => { + this.actions.onClearAlert('walletRecoveryStatus') + } + } + } + + const { externalWallet } = this.props.rewardsData + if (externalWallet && disconnectWalletError) { + return { + node: <>{getLocale('uhOh')}
{getLocale('disconnectWalletFailed').replace('$1', utils.getWalletProviderName(externalWallet))}

{getLocale('learnMore')}, + type: 'error', + onAlertClose: () => { + this.actions.onClearAlert('disconnectWalletError') + } + } + } + return null } - getWalletSummary = () => { - const { balanceReport, parameters } = this.props.rewardsData + getPendingRows = (): PendingDetailRow[] => { + const { parameters, pendingContributions } = this.props.rewardsData + return pendingContributions.map((item: Rewards.PendingContribution) => { + const verified = utils.isPublisherConnectedOrVerified(item.status) + let faviconUrl = `chrome://favicon/size/64@1x/${item.url}` + if (item.favIcon && verified) { + faviconUrl = `chrome://favicon/size/64@1x/${item.favIcon}` + } - let props = {} + let type: PendingType = 'ac' - if (balanceReport) { - for (let key in balanceReport) { - const item = balanceReport[key] + if (item.type === 8) { // one-time tip + type = 'tip' + } else if (item.type === 16) { // recurring tip + type = 'recurring' + } - if (item !== 0) { - const tokens = item.toFixed(3) - props[key] = { - tokens, - converted: utils.convertBalance(item, parameters.rate) - } + return { + profile: { + name: item.name, + verified, + provider: (item.provider ? item.provider : undefined) as Provider, + src: faviconUrl + }, + url: item.url, + type, + amount: { + tokens: item.amount.toFixed(3), + converted: utils.convertBalance(item.amount, parameters.rate) + }, + date: new Date(parseInt(item.expirationDate, 10) * 1000).toLocaleDateString(), + onRemove: () => { + this.actions.removePendingContribution(item.id) } } + }) + } + + removeAllPendingContribution = () => { + this.actions.removeAllPendingContribution() + } + + handleExternalWalletLink = () => { + const { externalWallet } = this.props.rewardsData + + if (!externalWallet) { + return + } + + if (externalWallet.status === 0) { + this.toggleVerifyModal() + return + } + + if (externalWallet.status === 1) { + window.open(externalWallet.verifyUrl, '_self') + return + } + + if (externalWallet.loginUrl) { + window.open(externalWallet.loginUrl, '_self') + } + } + + onConnectWalletContinue = (provider: string) => { + chrome.send('brave_rewards.setExternalWalletType', [provider]) + } + + onVerifyClick = () => { + const { externalWallet } = this.props.rewardsData + + if (!externalWallet || !externalWallet.loginUrl) { + this.actions.getExternalWallet() + return + } + + this.handleExternalWalletLink() + } + + getExternalWalletStatus = (): ExternalWalletStatus | null => { + const { externalWallet } = this.props.rewardsData + if (!externalWallet) { + return null + } + + switch (externalWallet.status) { + // ledger::type::WalletStatus::CONNECTED + case 1: + // WalletStatus::VERIFIED + case 2: + return 'verified' + // WalletStatus::DISCONNECTED_NOT_VERIFIED + case 3: + // WalletStatus::DISCONNECTED_VERIFIED + case 4: + return 'disconnected' + // ledger::type::WalletStatus::PENDING + case 5: + return 'pending' + default: + return null + } + } + + getExternalWalletProvider = (): ExternalWalletProvider | null => { + const { externalWallet } = this.props.rewardsData + if (!externalWallet) { + return null + } + + switch (externalWallet.type) { + case 'bitflyer': return 'bitflyer' + case 'gemini': return 'gemini' + case 'uphold': return 'uphold' + default: return null + } + } + + onFundsAction = (action: string) => { + const { externalWallet } = this.props.rewardsData + + if (!externalWallet) { + return + } + + switch (action) { + case 'add': { + if (externalWallet.addUrl) { + window.open(externalWallet.addUrl, '_self') + return + } + break + } + case 'withdraw': { + if (externalWallet.withdrawUrl) { + window.open(externalWallet.withdrawUrl, '_self') + return + } + break + } + } + + if (externalWallet.loginUrl) { + this.handleExternalWalletLink() + } + } + + goToExternalWallet = () => { + const { externalWallet } = this.props.rewardsData + + if (!externalWallet || !externalWallet.accountUrl) { + this.actions.getExternalWallet() + return + } + + window.open(externalWallet.accountUrl, '_self') + } + + getGreetings = () => { + const { externalWallet } = this.props.rewardsData + if (!externalWallet || !externalWallet.userName) { + return '' + } + + return getLocale('greetingsVerified', { name: externalWallet.userName }) + } + + onDisconnectClick = () => { + this.actions.disconnectWallet() + } + + getActions = () => { + return [ + { + name: getLocale('panelAddFunds'), + action: this.onFundsAction.bind(this, 'add'), + icon: , + testId: 'panel-add-funds', + externalWallet: true + }, + { + name: getLocale('panelWithdrawFunds'), + action: this.onFundsAction.bind(this, 'withdraw'), + icon: , + testId: 'panel-withdraw-funds', + externalWallet: true + } + ] + } + + getBalanceToken = (key: string) => { + const { + monthlyReport, + parameters, + externalWallet + } = this.props.rewardsData + + let value = 0.0 + if (monthlyReport && monthlyReport.balance && monthlyReport.balance[key]) { + value = monthlyReport.balance[key] } return { - report: props + value: value.toFixed(3), + converted: utils.convertBalance(value, parameters.rate), + link: externalWallet && externalWallet.status === 2 /* VERIFIED */ && key === 'ads' ? externalWallet.activityUrl : undefined + } + } + + generateSummaryRows = (): SummaryItem[] => { + return [ + { + type: 'grant', + token: this.getBalanceToken('grant') + }, + { + type: 'ads', + token: this.getBalanceToken('ads') + }, + { + type: 'contribute', + token: this.getBalanceToken('contribute') + }, + { + type: 'monthly', + token: this.getBalanceToken('monthly') + }, + { + type: 'tip', + token: this.getBalanceToken('tips') + } + ] + } + + generateActivityRows = (): ExtendedActivityRow[] => { + const { + monthlyReport, + parameters + } = this.props.rewardsData + + if (!monthlyReport.contributions) { + return [] + } + + let records: ExtendedActivityRow[] = [] + + monthlyReport.contributions + .forEach((contribution: Rewards.ContributionReport) => { + records = contribution.publishers + .map((publisher: Rewards.Publisher): ExtendedActivityRow => { + let faviconUrl = `chrome://favicon/size/64@1x/${publisher.url}` + const verified = utils.isPublisherConnectedOrVerified(publisher.status) + if (publisher.favIcon && verified) { + faviconUrl = `chrome://favicon/size/64@1x/${publisher.favIcon}` + } + return { + profile: { + name: publisher.name, + verified, + provider: (publisher.provider ? publisher.provider : undefined) as Provider, + src: faviconUrl + }, + url: publisher.url, + amount: { + tokens: publisher.weight.toFixed(3), + converted: utils.convertBalance(publisher.weight, parameters.rate) + }, + type: this.getSummaryType(contribution.type), + date: contribution.created_at + } + }) + .concat(records) + }) + + return records + } + + getSummaryType = (type: Rewards.ReportType): SummaryType => { + switch (type) { + case 0: { // Rewards.ReportType.GRANT_UGP + return 'grant' + } + case 1: { // Rewards.ReportType.AUTO_CONTRIBUTION + return 'contribute' + } + case 3: { // Rewards.ReportType.GRANT_AD + return 'ads' + } + case 4: { // Rewards.ReportType.TIP_RECURRING + return 'monthly' + } + case 5: { // Rewards.ReportType.TIP + return 'tip' + } + } + + return 'contribute' + } + + getTransactionDescription = (transaction: Rewards.TransactionReport) => { + switch (transaction.type) { + case 0: { // Rewards.ReportType.GRANT_UGP + return getLocale('tokenGrantReceived') + } + case 3: { // Rewards.ReportType.GRANT_AD + return getLocale('adsGrantReceived') + } + } + + return '' + } + + getProcessorString = (processor: Rewards.Processor) => { + let text = '' + switch (processor) { + case 0: { // Rewards.Processor.NONE + text = '' + break + } + case 1: { // Rewards.Processor.BRAVE_TOKENS + text = getLocale('processorBraveTokens') + break + } + case 2: { // Rewards.Processor.UPHOLD + text = getLocale('processorUphold') + break + } + case 3: { // Rewards.Processor.BRAVE_USER_FUNDS + text = getLocale('processorBraveUserFunds') + break + } + case 4: { // Rewards.Processor.BITFLYER + text = getLocale('processorBitflyer') + break + } + case 5: { // Rewards.Processor.GEMINI + text = getLocale('processorGemini') + break + } + } + + if (text.length === 0) { + return '' + } + + return `(${text})` + } + + getContributionDescription = (contribution: Rewards.ContributionReport) => { + if (contribution.type === 1) { // Rewards.ReportType.AUTO_CONTRIBUTION + return getLocale( + 'autoContributeTransaction', + { processor: this.getProcessorString(contribution.processor) }) + } + + return '' + } + + generateTransactionRows = (): TransactionRow[] => { + const { + monthlyReport, + parameters + } = this.props.rewardsData + + if (!monthlyReport.transactions && !monthlyReport.contributions) { + return [] + } + + let transactions: TransactionRow[] = [] + + if (monthlyReport.transactions) { + transactions = monthlyReport.transactions.map((transaction: Rewards.TransactionReport) => { + return { + date: transaction.created_at, + type: this.getSummaryType(transaction.type), + description: this.getTransactionDescription(transaction), + amount: { + value: transaction.amount.toFixed(3), + converted: utils.convertBalance(transaction.amount, parameters.rate) + } + } + }) + } + + if (monthlyReport.contributions) { + transactions = transactions.concat( + monthlyReport.contributions + .filter((contribution: Rewards.ContributionReport) => contribution.type === 1) + .map((contribution: Rewards.ContributionReport) => { + return { + date: contribution.created_at, + type: this.getSummaryType(contribution.type), + description: this.getContributionDescription(contribution), + amount: { + value: contribution.amount.toFixed(3), + converted: utils.convertBalance(contribution.amount, parameters.rate), + isNegative: true + } + } + }) + ) + } + + transactions.sort((a, b) => a.date - b.date) + + return transactions + } + + getMonthlyReportDropDown = (): Record => { + const { monthlyReportIds } = this.props.rewardsData + + const ids = [ + `${new Date().getFullYear()}_${new Date().getMonth() + 1}`, + ...monthlyReportIds || [] + ] + + let result: Record = {} + ids.forEach((id: string) => { + const items = id.split('_') + if (items.length !== 2) { + return + } + + const year = parseInt(items[0], 10) + const month = parseInt(items[1], 10) - 1 + + // we only want to show reports from version 1.3 (Feb 2020) up + if (year < 2020 || (year === 2020 && month === 0)) { + return + } + + // Don't show drop-down items for a future month + if (new Date(year, month).getTime() > Date.now()) { + return + } + + const date = new Date(Date.UTC(year, month, 10)) + result[id] = new Intl.DateTimeFormat('default', { month: 'long', year: 'numeric' }).format(date) + }) + + return result + } + + generateMonthlyReport = () => { + const { monthlyReport, externalWallet } = this.props.rewardsData + + if (!monthlyReport || monthlyReport.year === -1 || monthlyReport.month === -1) { + return undefined + } + + return ( + + ) + } + + getInternalFunds = () => { + const { balance } = this.props.rewardsData + if (!balance.wallets) { + return 0 + } + + return (balance.wallets.anonymous || 0) + (balance.wallets.blinded || 0) + } + + getBackupErrorMessage = () => { + const { ui } = this.props.rewardsData + const { walletRecoveryStatus } = ui + + if (walletRecoveryStatus === null) { + return '' + } + + // ledger::type::Result::CORRUPTED_DATA + if (walletRecoveryStatus === 17) { + const tags = getLocaleWithTag('walletRecoveryOutdated') + return ( + + {tags.beforeTag} + + {tags.duringTag} + + {tags.afterTag} + + ) + } + + if (walletRecoveryStatus !== 0) { + return getLocale('walletRecoveryFail') + } + + return '' + } + + generateExternalWalletProviderList = (walletProviders: string[]) => { + return walletProviders.map((type) => ({ type, name: utils.getWalletProviderName(type) })) + } + + onExternalWalletAction = (action: ExternalWalletAction) => { + switch (action) { + case 'add-funds': + this.onFundsAction('add') + break + case 'complete-verification': + this.handleExternalWalletLink() + break + case 'disconnect': + this.onDisconnectClick() + break + case 'reconnect': + this.handleExternalWalletLink() + break + case 'verify': + this.onVerifyClick() + break + case 'view-account': + this.goToExternalWallet() + break } } render () { - const { visible, toggleAction } = this.props const { + adsData, balance, + balanceReport, + enabledContribute, + externalWalletProviderList, ui, + recoveryKey, + externalWallet, + parameters, + paymentId, pendingContributionTotal } = this.props.rewardsData - const { emptyWallet } = ui const { total } = balance - const pendingTotal = parseFloat((pendingContributionTotal || 0).toFixed(3)) + const { modalBackup } = ui - if (!visible) { - return null + let externalWalletInfo: ExternalWallet | null = null + const walletStatus = this.getExternalWalletStatus() + const walletProvider = this.getExternalWalletProvider() + if (externalWallet && walletStatus && walletProvider) { + externalWalletInfo = { + provider: walletProvider, + status: walletStatus, + username: externalWallet.userName || '', + links: {} + } + } + + const summaryData = { + adEarnings: balanceReport && balanceReport.ads || 0, + autoContributions: balanceReport && balanceReport.contribute || 0, + oneTimeTips: balanceReport && balanceReport.tips || 0, + monthlyTips: balanceReport && balanceReport.monthly || 0, + pendingTips: pendingContributionTotal || 0 } return ( - - - - - - - - { - emptyWallet - ? - : - } - - - - + + + + { + modalBackup + ? + : null + } + { + this.state.modalPendingContribution + ? + : null + } + { + this.state.modalVerify + ? + : null + } + { + this.state.modalActivity + ? this.generateMonthlyReport() + : null + } + { + this.state.modalQRCode + ? + : null + } + ) } } diff --git a/components/brave_rewards/resources/android_page/components/settingsPage.tsx b/components/brave_rewards/resources/android_page/components/settingsPage.tsx index db37e9a8a7b8..7e620dc432cf 100644 --- a/components/brave_rewards/resources/android_page/components/settingsPage.tsx +++ b/components/brave_rewards/resources/android_page/components/settingsPage.tsx @@ -7,31 +7,31 @@ import { bindActionCreators, Dispatch } from 'redux' import { connect } from 'react-redux' // Components -import Promotion from './promotion' -import AdsBox from './adsBox' -import ContributeBox from './contributeBox' -import TipBox from './tipsBox' -import PageWallet from './pageWallet' -import MonthlyContributionBox from './monthlyContributionBox' import { MainToggleMobile, - SettingsPageMobile, - WalletInfoHeader + SettingsPageMobile as Page } from '../../ui/components/mobile' +import { ModalRedirect } from '../../ui/components' -import { getLocale } from 'brave-ui/helpers' -import { AlertWallet } from '../../ui/components/mobile/walletInfoHeader' +import PageWallet from './pageWallet' +import AdsBox from './adsBox' +import ContributeBox from './contributeBox' +import TipBox from './tipsBox' +import MonthlyContributionBox from './monthlyContributionBox' // Utils import * as rewardsActions from '../actions/rewards_actions' -import * as utils from '../utils' +import Promotion from './promotion' +import { getLocale } from '../../../../common/locale' +import { getWalletProviderName } from '../utils' -interface State { - walletShown: boolean +export interface Props extends Rewards.ComponentProps { } -export interface Props extends Rewards.ComponentProps { - rewardsEnabled?: boolean +interface State { + redirectModalDisplayed: 'hide' | 'show' + showRewardsTour: boolean + firstTimeSetup: boolean } class SettingsPage extends React.Component { @@ -40,7 +40,9 @@ class SettingsPage extends React.Component { constructor (props: Props) { super(props) this.state = { - walletShown: false + redirectModalDisplayed: 'hide', + showRewardsTour: false, + firstTimeSetup: false } } @@ -48,16 +50,6 @@ class SettingsPage extends React.Component { return this.props.actions } - onToggleWallet = () => { - if (this.state.walletShown) { - window.location.hash = '' - } else { - window.location.hash = '#rewards-summary' - } - - this.setState({ walletShown: !this.state.walletShown }) - } - refreshActions () { this.actions.getBalanceReport(new Date().getMonth() + 1, new Date().getFullYear()) this.actions.getTipTable() @@ -67,24 +59,16 @@ class SettingsPage extends React.Component { this.actions.getStatement() this.actions.getAdsData() this.actions.getExcludedSites() - this.actions.getExternalWallet() + this.actions.getCountryCode() } componentDidMount () { - if (this.props.rewardsData.firstLoad === null) { - // First load ever - this.actions.onSettingSave('firstLoad', true, false) - } else if (this.props.rewardsData.firstLoad) { - // Second load ever - this.actions.onSettingSave('firstLoad', false, false) - } - if (!this.props.rewardsData.initializing) { this.startRewards() } } - componentDidUpdate (prevProps: Props) { + componentDidUpdate (prevProps: Props, prevState: State) { if ( prevProps.rewardsData.initializing && !this.props.rewardsData.initializing @@ -101,83 +85,81 @@ class SettingsPage extends React.Component { } if ( - !prevProps.rewardsData.adsData.adsEnabled && - this.props.rewardsData.adsData.adsEnabled + prevState.redirectModalDisplayed !== 'hide' && + this.props.rewardsData.ui.modalRedirect === 'hide' ) { - this.actions.getStatement() + this.setState({ + redirectModalDisplayed: 'hide' + }) + window.history.replaceState({}, 'Rewards', '/') + } else if ( + prevState.redirectModalDisplayed === 'hide' && + this.props.rewardsData.ui.modalRedirect !== 'hide' + ) { + this.setState({ + redirectModalDisplayed: 'show' + }) } + + if ( + prevProps.rewardsData.externalWallet && + !this.props.rewardsData.externalWallet + ) { + this.actions.getExternalWallet() + } + } + + stopRewards () { + window.clearInterval(this.balanceTimerId) + this.balanceTimerId = -1 } startRewards () { - if (this.props.rewardsData.firstLoad) { - this.actions.getAdsData() - } else { - // normal load - this.refreshActions() - } + this.refreshActions() this.actions.getRewardsParameters() this.actions.getContributionAmount() this.actions.getAutoContributeProperties() this.actions.getBalance() - this.actions.getExternalWallet() this.balanceTimerId = window.setInterval(() => { this.actions.getBalance() }, 60000) this.actions.fetchPromotions() - this.isWalletUrl() - window.addEventListener('popstate', (e) => { - this.isWalletUrl() - }) - window.addEventListener('hashchange', (e) => { - this.isWalletUrl() - }) - } + this.actions.getExternalWallet() + this.actions.getOnboardingStatus() + this.actions.getEnabledInlineTippingPlatforms() - stopRewards () { - window.clearInterval(this.balanceTimerId) - this.balanceTimerId = -1 + this.handleURL() } - isWalletUrl = () => { - const walletShown = ( - window && - window.location && - window.location.hash && - window.location.hash === '#rewards-summary' - ) + handleURL () { + const { pathname } = window.location - this.setState({ - walletShown: !!walletShown - }) - } + if (pathname === '/enable') { + this.actions.saveOnboardingResult('opted-in') + this.setState({ showRewardsTour: true, firstTimeSetup: true }) + window.history.replaceState({}, '', '/') + return + } - walletAlerts = (): AlertWallet | null => { - const { externalWallet } = this.props.rewardsData - const { disconnectWalletError } = this.props.rewardsData.ui - - if (disconnectWalletError) { - return { - node: <>{getLocale('uhOh')}
{getLocale('disconnectWalletFailed').replace('$1', utils.getWalletProviderName(externalWallet))}

{getLocale('learnMore')}, - type: 'error', - onAlertClose: () => { - this.actions.onClearAlert('disconnectWalletError') - } + if (pathname.length > 1) { + const pathElements = pathname.split('/') + if (pathElements.length > 2) { + this.actions.processRewardsPageUrl(window.location.pathname, window.location.search) } } - return null } getPromotionsClaims = () => { const { promotions } = this.props.rewardsData - if (!promotions) { + if (!promotions || promotions.length === 0) { return null } return ( -
+
{promotions.map((promotion?: Rewards.Promotion, index?: number) => { if (!promotion || !promotion.promotionId) { return null @@ -197,32 +179,159 @@ class SettingsPage extends React.Component { this.stopRewards() } - render () { - const { externalWallet, parameters, balance } = this.props.rewardsData - const { total } = balance - const convertedBalance = utils.convertBalance((total || 0), parameters.rate) + onRedirectError = () => { + this.actions.hideRedirectModal() + const { externalWallet } = this.props.rewardsData + + if (externalWallet && externalWallet.verifyUrl) { + window.open(externalWallet.verifyUrl, '_self') + } + } + + getRedirectModal = () => { + const { externalWallet, ui } = this.props.rewardsData + const walletType = externalWallet ? externalWallet.type : '' + + switch (ui.modalRedirect) { + case 'deviceLimitReachedModal': + return ( + + ) + case 'error': + return ( + + ) + case 'kycRequiredModal': + return ( + + ) + case 'mismatchedProviderAccountsModal': + return ( + + ) + case 'show': + return ( + + ) + case 'upholdBATNotAllowedModal': + return ( + + ) + case 'upholdBlockedUserModal': + return ( + + ) + case 'upholdPendingUserModal': + return ( + + ) + case 'upholdRestrictedUserModal': + return ( + + ) + default: + return null + } + } + + renderSettings () { return ( - + <> - {this.getPromotionsClaims()} - - - + + ) + } + + render () { + return ( + + {this.getPromotionsClaims()} + + {this.getRedirectModal()} + {this.renderSettings()} + ) } } diff --git a/components/brave_rewards/resources/android_page/components/style.ts b/components/brave_rewards/resources/android_page/components/style.ts index 36280d7b248a..afe71d7444d1 100644 --- a/components/brave_rewards/resources/android_page/components/style.ts +++ b/components/brave_rewards/resources/android_page/components/style.ts @@ -4,6 +4,18 @@ import styled from 'styled-components' +export const TourPromoWrapper = styled('div')<{}>` + margin-top: 30px; +` + +export const PageWalletWrapper = styled.div` + width: 373px; + + @media screen and (max-width: 700px) { + margin-bottom: 10px; + } +` + export const StyledListContent = styled('div')<{}>` padding: 0 25px; ` diff --git a/components/brave_rewards/resources/android_page/constants/rewards_types.ts b/components/brave_rewards/resources/android_page/constants/rewards_types.ts index e5e9b6b2afbc..949a252cb5df 100644 --- a/components/brave_rewards/resources/android_page/constants/rewards_types.ts +++ b/components/brave_rewards/resources/android_page/constants/rewards_types.ts @@ -12,8 +12,13 @@ export const enum types { FETCH_PROMOTIONS = '@@rewards/FETCH_PROMOTIONS', ON_PROMOTIONS = '@@rewards/ON_PROMOTION', CLAIM_PROMOTION = '@@rewards/CLAIM_PROMOTION', + ON_CLAIM_PROMOTION = '@@rewards/ON_CLAIM_PROMOTION', + ATTEST_PROMOTION = '@@rewards/ATTEST_PROMOTION', + RESET_PROMOTION = '@@rewards/RESET_PROMOTION', DELETE_PROMOTION = '@@rewards/DELETE_PROMOTION', ON_PROMOTION_FINISH = '@@rewards/ON_PROMOTION_FINISH', + RECOVER_WALLET = '@@rewards/RECOVER_WALLET', + ON_RECOVER_WALLET_DATA = '@@rewards/ON_RECOVER_WALLET_DATA', ON_MODAL_BACKUP_CLOSE = '@@rewards/ON_MODAL_BACKUP_CLOSE', ON_MODAL_BACKUP_OPEN = '@@rewards/ON_MODAL_BACKUP_OPEN', ON_CLEAR_ALERT = '@@rewards/ON_CLEAR_ALERT', @@ -32,6 +37,20 @@ export const enum types { INIT_AUTOCONTRIBUTE_SETTINGS = '@@rewards/INIT_AUTOCONTRIBUTE_SETTINGS', GET_ADS_DATA = '@@rewards/GET_ADS_DATA', ON_ADS_DATA = '@@rewards/ON_ADS_DATA', + GET_ADS_HISTORY = '@@rewards/GET_ADS_HISTORY', + TOGGLE_AD_THUMB_UP = '@@rewards/TOGGLE_AD_THUMB_UP', + ON_TOGGLE_AD_THUMB_UP = '@@rewards/ON_TOGGLE_AD_THUMB_UP', + TOGGLE_AD_THUMB_DOWN = '@@rewards/TOGGLE_AD_THUMB_DOWN', + ON_TOGGLE_AD_THUMB_DOWN = '@@rewards/ON_TOGGLE_AD_THUMB_DOWN', + TOGGLE_AD_OPT_IN = '@@rewards/TOGGLE_AD_OPT_IN', + ON_TOGGLE_AD_OPT_IN = '@@rewards/ON_TOGGLE_AD_OPT_IN', + TOGGLE_AD_OPT_OUT = '@@rewards/TOGGLE_AD_OPT_OUT', + ON_TOGGLE_AD_OPT_OUT = '@@rewards/ON_TOGGLE_AD_OPT_OUT', + TOGGLE_SAVED_AD = '@@rewards/TOGGLE_SAVED_AD', + ON_TOGGLE_SAVED_AD = '@@rewards/ON_TOGGLE_SAVED_AD', + TOGGLE_FLAGGED_AD = '@@rewards/TOGGLE_FLAGGED_AD', + ON_TOGGLE_FLAGGED_AD = '@@rewards/ON_TOGGLE_FLAGGED_AD', + ON_ADS_HISTORY = '@@rewards/ON_ADS_HISTORY', ON_ADS_SETTING_SAVE = '@@rewards/ON_ADS_SETTING_SAVE', GET_BALANCE_REPORT = '@@rewards/GET_BALANCE_REPORT', ON_BALANCE_REPORT = '@@rewards/ON_BALANCE_REPORT', @@ -49,14 +68,38 @@ export const enum types { ON_EXCLUDED_LIST = '@@rewards/ON_EXCLUDED_LIST', ON_RESTORE_PUBLISHER = '@@rewards/ON_RESTORE_PUBLISHER', GET_EXCLUDED_SITES = '@@rewards/GET_EXCLUDED_SITES', - GET_EXTERNAL_WALLET = '@@rewards/GET_EXTERNAL_WALLET', GET_BALANCE = '@@rewards/GET_BALANCE', ON_BALANCE = '@@rewards/ON_BALANCE', + GET_EXTERNAL_WALLET = '@@rewards/GET_EXTERNAL_WALLET', ON_EXTERNAL_WALLET = '@@rewards/ON_EXTERNAL_WALLET', + PROCESS_REWARDS_PAGE_URL = '@@rewards/PROCESS_REWARDS_PAGE_URL', + ON_PROCESS_REWARDS_PAGE_URL = '@@rewards/ON_PROCESS_REWARDS_PAGE_URL', + HIDE_REDIRECT_MODAL = '@@rewards/HIDE_REDIRECT_MODAL', + DISCONNECT_WALLET = '@@rewards/DISCONNECT_WALLET', ONLY_ANON_WALLET = '@@rewards/ONLY_ANON_WALLET', ON_ONLY_ANON_WALLET = '@@rewards/ON_ONLY_ANON_WALLET', + GET_MONTHLY_REPORT = '@@rewards/GET_MONTHLY_REPORT', + ON_MONTHLY_REPORT = '@@rewards/ON_MONTHLY_REPORT', + ON_RECONCILE_STAMP_RESET = '@@rewards/ON_RECONCILE_STAMP_RESET', + GET_MONTHLY_REPORT_IDS = '@@rewards/GET_MONTHLY_REPORT_IDS', + ON_MONTHLY_REPORT_IDS = '@@rewards/ON_MONTHLY_REPORT_IDS', + DISMISS_PROMO_PROMPT = '@@rewards/DISMISS_PROMO_PROMPT', + GET_COUNTRY_CODE = '@@rewards/GET_COUNTRY_CODE', + ON_COUNTRY_CODE = '@@rewards/ON_COUNTRY_CODE', ON_INITIALIZED = '@@rewards/ON_INITIALIZED', - DISCONNECT_WALLET = '@@rewards/DISCONNECT_WALLET', + COMPLETE_RESET = '@@rewards/COMPLETE_RESET', + ON_COMPLETE_RESET = '@@rewards/ON_COMPLETE_RESET', + GET_PAYMENT_ID = '@@rewards/GET_PAYMENT_ID', + ON_PAYMENT_ID = '@@rewards/ON_PAYMENT_ID', + GET_WALLET_PASSPHRASE = '@@rewards/GET_WALLLET_PASSPHRASE', + ON_WALLET_PASSPHRASE = '@@rewards/ON_WALLLET_PASSPHRASE', + GET_ONBOARDING_STATUS = '@@rewards/GET_ONBOARDING_STATUS', + ON_ONBOARDING_STATUS = '@@rewards/ON_ONBOARDING_STATUS', + SAVE_ONBOARDING_RESULT = '@@rewards/SAVE_ONBOARDING_RESULT', DISCONNECT_WALLET_ERROR = '@@rewards/DISCONNECT_WALLET_ERROR', + GET_ENABLED_INLINE_TIPPING_PLATFORMS = '@@rewards/GET_ENABLED_INLINE_TIPPING_PLATFORMS', + ON_ENABLED_INLINE_TIPPING_PLATFORMS = '@@rewards/ON_ENABLED_INLINE_TIPPING_PLATFORMS', + ON_EXTERNAL_WALLET_PROVIDER_LIST = '@@rewards/ON_EXTERNAL_WALLET_PROVIDER_LIST', + RESTART_BROWSER = '@@rewards/RESTART_BROWSER', ON_PREF_CHANGED = '@@rewards/ON_PREF_CHANGED' } diff --git a/components/brave_rewards/resources/android_page/reducers/rewards_reducer.ts b/components/brave_rewards/resources/android_page/reducers/rewards_reducer.ts index 1834ff985da9..98c085a17256 100644 --- a/components/brave_rewards/resources/android_page/reducers/rewards_reducer.ts +++ b/components/brave_rewards/resources/android_page/reducers/rewards_reducer.ts @@ -9,6 +9,10 @@ import { types } from '../constants/rewards_types' import { defaultState } from '../storage' const rewardsReducer: Reducer = (state: Rewards.State, action) => { + if (!state) { + return + } + switch (action.type) { case types.IS_INITIALIZED: { chrome.send('brave_rewards.isInitialized') @@ -18,11 +22,6 @@ const rewardsReducer: Reducer = (state: Rewards.State chrome.send('brave_rewards.getAutoContributeProperties') break } - case types.DISCONNECT_WALLET : { - state = { ...state } - chrome.send('brave_rewards.disconnectWallet') - break - } case types.DISCONNECT_WALLET_ERROR: { state = { ...state } let ui = state.ui @@ -53,34 +52,22 @@ const rewardsReducer: Reducer = (state: Rewards.State break } - case types.GET_EXTERNAL_WALLET: { - chrome.send('brave_rewards.getExternalWallet') - break - } - case types.ON_EXTERNAL_WALLET: { + case types.ON_SETTING_SAVE: { state = { ...state } - - if (action.payload.result === 24) { // on ledger::type::Result::EXPIRED_TOKEN - chrome.send('brave_rewards.getExternalWallet') + const key = action.payload.key + const value = action.payload.value + const persist = action.payload.persist + if (!key) { break } - if (action.payload.result === 0) { // type::Result::LEDGER_OK - chrome.send('brave_rewards.fetchBalance') + if (persist) { + chrome.send('brave_rewards.saveSetting', [key, value.toString()]) } - state.externalWallet = action.payload.wallet + state[key] = value break } - case types.ON_SETTING_SAVE: - state = { ...state } - const key = action.payload.key - const value = action.payload.value - if (key) { - state[key] = value - chrome.send('brave_rewards.saveSetting', [key, value.toString()]) - } - break case types.ON_MODAL_BACKUP_CLOSE: { state = { ...state } let ui = state.ui @@ -103,7 +90,7 @@ const rewardsReducer: Reducer = (state: Rewards.State } case types.ON_CLEAR_ALERT: { let ui = state.ui - if (!ui[action.payload.property]) { + if (ui[action.payload.property] === undefined) { break } @@ -152,16 +139,85 @@ const rewardsReducer: Reducer = (state: Rewards.State state.adsData.adsIsSupported = action.payload.adsData.adsIsSupported break } + case types.GET_ADS_HISTORY: { + chrome.send('brave_rewards.getAdsHistory') + break + } + case types.ON_ADS_HISTORY: { + if (!action.payload.adsHistory) { + break + } + + state = { ...state } + + if (!state.adsHistory) { + state.adsHistory = defaultState.adsHistory + } + + state.adsHistory = action.payload.adsHistory + break + } + case types.TOGGLE_AD_THUMB_UP: { + chrome.send('brave_rewards.toggleAdThumbUp', [action.payload.adContent]) + break + } + case types.ON_TOGGLE_AD_THUMB_UP: { + chrome.send('brave_rewards.getAdsHistory') + break + } + case types.TOGGLE_AD_THUMB_DOWN: { + chrome.send('brave_rewards.toggleAdThumbDown', [action.payload.adContent]) + break + } + case types.ON_TOGGLE_AD_THUMB_DOWN: { + chrome.send('brave_rewards.getAdsHistory') + break + } + case types.TOGGLE_AD_OPT_IN: { + chrome.send('brave_rewards.toggleAdOptIn', + [action.payload.category, action.payload.optAction]) + break + } + case types.ON_TOGGLE_AD_OPT_IN: { + chrome.send('brave_rewards.getAdsHistory') + break + } + case types.TOGGLE_AD_OPT_OUT: { + chrome.send('brave_rewards.toggleAdOptOut', + [action.payload.category, action.payload.optAction]) + break + } + case types.ON_TOGGLE_AD_OPT_OUT: { + chrome.send('brave_rewards.getAdsHistory') + break + } + case types.TOGGLE_SAVED_AD: { + chrome.send('brave_rewards.toggleSavedAd', [action.payload.adContent]) + break + } + case types.ON_TOGGLE_SAVED_AD: { + chrome.send('brave_rewards.getAdsHistory') + break + } + case types.TOGGLE_FLAGGED_AD: { + chrome.send('brave_rewards.toggleFlaggedAd', [action.payload.adContent]) + break + } + case types.ON_TOGGLE_FLAGGED_AD: { + chrome.send('brave_rewards.getAdsHistory') + break + } case types.ON_ADS_SETTING_SAVE: { state = { ...state } const key = action.payload.key const value = action.payload.value if (key) { - state[key] = value chrome.send('brave_rewards.saveAdsSetting', [key, value.toString()]) - if (key === 'adsEnabledMigrated') { state.enabledAdsMigrated = true + } else { + state.adsData = { ...(state.adsData || defaultState.adsData) } + state.adsData[key] = value } } break @@ -189,6 +245,38 @@ const rewardsReducer: Reducer = (state: Rewards.State state.adsData.adsEarningsLastMonth = data.adsEarningsLastMonth break } + case types.GET_ENABLED_INLINE_TIPPING_PLATFORMS: { + chrome.send('brave_rewards.getEnabledInlineTippingPlatforms') + break + } + case types.ON_ENABLED_INLINE_TIPPING_PLATFORMS: { + const inlineTip = { + twitter: false, + reddit: false, + github: false + } + + for (const platform of action.payload.platforms) { + switch (platform) { + case 'github': + inlineTip.github = true + break + case 'reddit': + inlineTip.reddit = true + break + case 'twitter': + inlineTip.twitter = true + break + } + } + + state = { + ...state, + inlineTip + } + + break + } case types.ON_INLINE_TIP_SETTINGS_CHANGE: { if (!state.inlineTip) { state.inlineTip = { @@ -217,6 +305,124 @@ const rewardsReducer: Reducer = (state: Rewards.State break } + case types.PROCESS_REWARDS_PAGE_URL: { + const path = action.payload.path + const query = action.payload.query + const ui = state.ui + + chrome.send('brave_rewards.processRewardsPageUrl', [path, query]) + ui.modalRedirect = 'show' + + state = { + ...state, + ui + } + break + } + case types.ON_PROCESS_REWARDS_PAGE_URL: { + const data = action.payload.data + const ui = state.ui + + chrome.send('brave_rewards.getExternalWallet') + + if (data.result === 9) { // type::Result::NOT_FOUND + ui.modalRedirect = 'kycRequiredModal' + break + } + + if (data.result === 24) { // type::Result::EXPIRED_TOKEN + ui.modalRedirect = 'error' + break + } + + if (data.result === 25) { // type::Result::UPHOLD_BAT_NOT_ALLOWED + ui.modalRedirect = 'upholdBATNotAllowedModal' + break + } + + if (data.result === 36) { // type::Result::DEVICE_LIMIT_REACHED + ui.modalRedirect = 'deviceLimitReachedModal' + break + } + + if (data.result === 37) { // type::Result::MISMATCHED_PROVIDER_ACCOUNTS + ui.modalRedirect = 'mismatchedProviderAccountsModal' + break + } + + if (data.result !== 0) { + ui.modalRedirect = 'error' + break + } + + if (data.walletType === 'uphold' || data.walletType === 'bitflyer' || data.walletType === 'gemini') { + chrome.send('brave_rewards.fetchBalance') + + if (data.action === 'authorization') { + const url = data.args.redirect_url + if (url && url.length > 0) { + window.open(url, '_self') + } + ui.modalRedirect = 'hide' + break + } + } + + ui.modalRedirect = 'error' + + state = { + ...state, + ui + } + break + } + case types.HIDE_REDIRECT_MODAL: { + const ui = state.ui + + ui.modalRedirect = 'hide' + + state = { + ...state, + ui + } + break + } + case types.DISCONNECT_WALLET: { + state = { ...state } + chrome.send('brave_rewards.disconnectWallet') + break + } + case types.GET_EXTERNAL_WALLET: { + chrome.send('brave_rewards.getExternalWallet') + break + } + case types.ON_EXTERNAL_WALLET: { + state = { ...state } + + if (action.payload.result === 24) { // on ledger::type::Result::EXPIRED_TOKEN + chrome.send('brave_rewards.getExternalWallet') + break + } + + if (action.payload.result === 0) { // type::Result::LEDGER_OK + chrome.send('brave_rewards.fetchBalance') + } + + state.externalWallet = action.payload.wallet + break + } + case types.GET_COUNTRY_CODE: { + chrome.send('brave_rewards.getCountryCode') + break + } + case types.ON_COUNTRY_CODE: { + const { countryCode } = action.payload + state = { + ...state, + currentCountryCode: countryCode + } + break + } case types.ON_INITIALIZED: { state = { ...state, @@ -225,6 +431,31 @@ const rewardsReducer: Reducer = (state: Rewards.State chrome.send('brave_rewards.getReconcileStamp') break } + case types.COMPLETE_RESET: { + chrome.send('brave_rewards.completeReset') + break + } + case types.ON_COMPLETE_RESET: { + if (action.payload.success) { + return undefined + } + break + } + case types.GET_PAYMENT_ID: { + chrome.send('brave_rewards.getPaymentId') + break + } + case types.ON_PAYMENT_ID: { + state = { + ...state, + paymentId: action.payload.paymentId + } + break + } + case types.RESTART_BROWSER: { + chrome.send('brave_rewards.restartBrowser') + break + } case types.ON_PREF_CHANGED: { chrome.send('brave_rewards.getEnabledInlineTippingPlatforms') chrome.send('brave_rewards.getContributionAmount') diff --git a/components/brave_rewards/resources/android_page/reducers/wallet_reducer.ts b/components/brave_rewards/resources/android_page/reducers/wallet_reducer.ts index 6b1065f0e00b..832b0bd088a0 100644 --- a/components/brave_rewards/resources/android_page/reducers/wallet_reducer.ts +++ b/components/brave_rewards/resources/android_page/reducers/wallet_reducer.ts @@ -4,24 +4,68 @@ import { Reducer } from 'redux' +import { getCurrentBalanceReport } from '../utils' + // Constant import { types } from '../constants/rewards_types' const walletReducer: Reducer = (state: Rewards.State, action) => { + if (!state) { + return + } + switch (action.type) { case types.GET_REWARDS_PARAMETERS: chrome.send('brave_rewards.getRewardsParameters') break case types.ON_REWARDS_PARAMETERS: { state = { ...state } + state.parameters = action.payload.properties + break + } + case types.RECOVER_WALLET: { + let key = action.payload.key + key = key.trim() + + if (!key || key.length === 0) { + let ui = state.ui + ui.walletRecoveryStatus = 0 + + state = { + ...state, + ui + } + + break + } + + chrome.send('brave_rewards.recoverWallet', [key]) + break + } + case types.ON_EXTERNAL_WALLET_PROVIDER_LIST: { + if (!action.payload.list) { + break + } + + state = { ...state } + state.externalWalletProviderList = action.payload.list + break + } + case types.ON_RECOVER_WALLET_DATA: { + state = { ...state } + const result = action.payload.result let ui = state.ui // TODO NZ check why enum can't be used inside Rewards namespace - if (action.payload.properties.status === 1) { - ui.walletServerProblem = true - } else { - state.parameters = action.payload.properties - ui.walletServerProblem = false + ui.walletRecoveryStatus = result + if (result === 0) { + chrome.send('brave_rewards.fetchPromotions') + chrome.send('brave_rewards.fetchBalance') + chrome.send('brave_rewards.getPaymentId') + getCurrentBalanceReport() + ui.modalBackup = false + ui.emptyWallet = false + state.recoveryKey = '' } state = { @@ -96,6 +140,9 @@ const walletReducer: Reducer = (state: Rewards.State, } } else if (status === 1) { // on ledger::type::Result::LEDGER_ERROR ui.walletServerProblem = true + } else if (status === 24) { // on ledger::type::Result::EXPIRED_TOKEN + chrome.send('brave_rewards.getExternalWallet') + state.balance.total = action.payload.balance.total || 0 } state = { @@ -104,6 +151,110 @@ const walletReducer: Reducer = (state: Rewards.State, } break } + case types.GET_EXTERNAL_WALLET: { + chrome.send('brave_rewards.getExternalWallet') + break + } + case types.ON_EXTERNAL_WALLET: { + state = { ...state } + + if (action.payload.result === 24) { // type::Result::EXPIRED_TOKEN + chrome.send('brave_rewards.getExternalWallet') + break + } + + if (action.payload.result === 25) { // type::Result::UPHOLD_BAT_NOT_ALLOWED + state.ui.modalRedirect = 'upholdBATNotAllowedModal' + break + } + + if (action.payload.result === 36) { // type::Result::DEVICE_LIMIT_REACHED + state.ui.modalRedirect = 'deviceLimitReachedModal' + break + } + + if (action.payload.result === 37) { // type::Result::MISMATCHED_PROVIDER_ACCOUNTS + state.ui.modalRedirect = 'mismatchedProviderAccountsModal' + break + } + + if (action.payload.result === 38) { // type::Result::UPHOLD_BLOCKED_USER + state.ui.modalRedirect = 'upholdBlockedUserModal' + break + } + + if (action.payload.result === 39) { // type::Result::UPHOLD_PENDING_USER + state.ui.modalRedirect = 'upholdPendingUserModal' + break + } + + if (action.payload.result === 40) { // type::Result::UPHOLD_RESTRICTED_USER + state.ui.modalRedirect = 'upholdRestrictedUserModal' + break + } + + if (action.payload.result === 0) { // type::Result::LEDGER_OK + chrome.send('brave_rewards.fetchBalance') + } + + state.externalWallet = action.payload.wallet + break + } + case types.GET_MONTHLY_REPORT: { + let month = action.payload.month + let year = action.payload.year + if (month == null) { + month = new Date().getMonth() + 1 + } + + if (year == null) { + year = new Date().getFullYear() + } + + chrome.send('brave_rewards.getMonthlyReport', [month, year]) + break + } + case types.ON_MONTHLY_REPORT: { + state = { ...state } + state.monthlyReport = { + month: action.payload.month, + year: action.payload.year + } + + if (!action.payload.report) { + break + } + + state.monthlyReport = Object.assign(state.monthlyReport, action.payload.report) + break + } + case types.GET_MONTHLY_REPORT_IDS: { + chrome.send('brave_rewards.getMonthlyReportIds') + break + } + case types.ON_MONTHLY_REPORT_IDS: { + state = { ...state } + state.monthlyReportIds = action.payload + break + } + case types.GET_WALLET_PASSPHRASE: { + chrome.send('brave_rewards.getWalletPassphrase') + break + } + case types.ON_WALLET_PASSPHRASE: { + const value = action.payload.passphrase + if (value && value.length > 0) { + state = { ...state } + let ui = state.ui + state.recoveryKey = value + + state = { + ...state, + ui + } + } + break + } } return state diff --git a/components/brave_rewards/resources/android_page/storage.ts b/components/brave_rewards/resources/android_page/storage.ts index a880ef93ffcb..862baa592b6d 100644 --- a/components/brave_rewards/resources/android_page/storage.ts +++ b/components/brave_rewards/resources/android_page/storage.ts @@ -11,7 +11,7 @@ export const defaultState: Rewards.State = { createdTimestamp: null, enabledAds: true, enabledAdsMigrated: false, - enabledContribute: true, + enabledContribute: false, firstLoad: null, contributionMinTime: 8, contributionMinVisits: 1, diff --git a/components/brave_rewards/resources/android_page/utils.ts b/components/brave_rewards/resources/android_page/utils.tsx similarity index 92% rename from components/brave_rewards/resources/android_page/utils.ts rename to components/brave_rewards/resources/android_page/utils.tsx index ce0602c87ab4..9bb9536aada8 100644 --- a/components/brave_rewards/resources/android_page/utils.ts +++ b/components/brave_rewards/resources/android_page/utils.tsx @@ -23,10 +23,6 @@ export const convertBalance = (tokens: number, rate: number): string => { return converted.toFixed(2) } -export const getWalletProviderName = (wallet?: Rewards.ExternalWallet) => { - return lookupExternalWalletProviderName(wallet ? wallet.type : '') -} - export const formatConverted = (converted: string, currency: string = 'USD'): string | null => { return `${converted} ${currency}` } @@ -61,11 +57,11 @@ export const constructBackupString = (backupKey: string) => { } export const isPublisherVerified = (status: Rewards.PublisherStatus) => { - return status === 2 + return status > 1 } export const isPublisherConnectedOrVerified = (status: Rewards.PublisherStatus) => { - return status === 2 || status === 1 + return status > 0 } export const isPublisherNotVerified = (status: Rewards.PublisherStatus) => { @@ -78,3 +74,11 @@ export const getCurrentBalanceReport = () => { new Date().getFullYear() ]) } + +export const getWalletProviderName = (wallet?: Rewards.ExternalWallet | string) => { + if (!wallet) { + return '' + } + return lookupExternalWalletProviderName( + typeof wallet === 'string' ? wallet : wallet.type) +} diff --git a/components/brave_rewards/resources/ui/components/modalRedirect/index.tsx b/components/brave_rewards/resources/ui/components/modalRedirect/index.tsx index 2093ff76de1f..c922d070ec61 100644 --- a/components/brave_rewards/resources/ui/components/modalRedirect/index.tsx +++ b/components/brave_rewards/resources/ui/components/modalRedirect/index.tsx @@ -25,6 +25,7 @@ export interface Props { learnMore?: string walletType?: string displayCloseButton?: boolean + isMobile?: boolean onClick?: () => void onClose?: () => void } @@ -44,14 +45,28 @@ export default class ModalRedirect extends React.PureComponent { } render () { - const { id, errorText, errorTextLink, titleText, learnMore, displayCloseButton, onClose } = this.props + const { + id, + errorText, + errorTextLink, + titleText, + learnMore, + displayCloseButton, + isMobile, + onClose + } = this.props let errorTextLinkTags = null if (errorText && errorText.includes('$2')) { errorTextLinkTags = splitStringForTag(errorText, 2) } return ( - + {titleText} diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/state/state.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/state/state.cc index fc8e13bb5020..c4f346b63c69 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/state/state.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/state/state.cc @@ -155,12 +155,10 @@ void State::GetScoreValues(double* a, double* b) { } void State::SetAutoContributeEnabled(bool enabled) { -#if !defined(OS_ANDROID) // Auto-contribute is not supported for regions where bitFlyer is the external // wallet provider. If AC is not supported, then always set the pref to false. if (ledger_->ledger_client()->GetBooleanOption(option::kIsBitflyerRegion)) enabled = false; -#endif ledger_->database()->SaveEventLog( kAutoContributeEnabled, @@ -173,12 +171,10 @@ void State::SetAutoContributeEnabled(bool enabled) { } bool State::GetAutoContributeEnabled() { -#if !defined(OS_ANDROID) // Auto-contribute is not supported for regions where bitFlyer is the external // wallet provider. If AC is not supported, then always report AC as disabled. if (ledger_->ledger_client()->GetBooleanOption(option::kIsBitflyerRegion)) return false; -#endif return ledger_->ledger_client()->GetBooleanState(kAutoContributeEnabled); } diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet.cc index 832d18cb8275..7c1dd1fc7496 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/wallet/wallet.cc @@ -88,7 +88,7 @@ void Wallet::ExternalWalletAuthorization( const std::string& wallet_type, const base::flat_map& args, ledger::ExternalWalletAuthorizationCallback callback) { - ledger_->wallet()->CreateWalletIfNecessary( + CreateWalletIfNecessary( [this, wallet_type, args, callback](const type::Result result) { if (result != type::Result::WALLET_CREATED) { BLOG(0, "Wallet couldn't be created"); From 4ec8301409e74c9a9f0d2fc0d5232deb0b0fd99c Mon Sep 17 00:00:00 2001 From: Emerick Rogul Date: Wed, 8 Dec 2021 14:48:57 -0500 Subject: [PATCH 02/18] Stub in non-fuctional production bitFlyer domain for now --- components/brave_rewards/browser/rewards_protocol_handler.cc | 2 +- .../src/bat/ledger/internal/bitflyer/bitflyer_util.h | 2 +- .../src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc | 2 +- .../internal/endpoint/bitflyer/bitflyer_utils_unittest.cc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/components/brave_rewards/browser/rewards_protocol_handler.cc b/components/brave_rewards/browser/rewards_protocol_handler.cc index ec4bede690b8..2666a67b11db 100644 --- a/components/brave_rewards/browser/rewards_protocol_handler.cc +++ b/components/brave_rewards/browser/rewards_protocol_handler.cc @@ -69,7 +69,7 @@ void LoadRewardsURL( const std::string bitflyer_staging_host = bitflyer_staging_url.host(); const std::string gemini_staging_host = gemini_oauth_staging_url.host(); const char* kAllowedDomains[] = { - "bitflyer.com", // bitFlyer production + "dummy.com", // bitFlyer production bitflyer_staging_host.c_str(), // bitFlyer staging "gemini.com", // Gemini production gemini_staging_host.c_str(), // Gemini staging diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_util.h b/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_util.h index d3eafd94a47b..fd181193da15 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_util.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_util.h @@ -18,7 +18,7 @@ class LedgerImpl; namespace bitflyer { const char kUrlStaging[] = BITFLYER_STAGING_URL; -const char kUrlProduction[] = "https://bitflyer.com"; +const char kUrlProduction[] = "https://dummy.com"; const char kFeeAddressStaging[] = "068e675b-f137-48ed-8068-4ad34ca4f30f"; const char kFeeAddressProduction[] = "e77cacb4-c49c-4451-bc2d-5072c10e55d3"; const char kACAddressStaging[] = ""; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc index cb6e1c0562b3..2d5b56ac0784 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc @@ -15,7 +15,7 @@ namespace endpoint { namespace bitflyer { const char kUrlStaging[] = BITFLYER_STAGING_URL; -const char kUrlProduction[] = "https://bitflyer.com"; +const char kUrlProduction[] = "https://dummy.com"; std::string GetClientId() { return ::ledger::bitflyer::GetClientId(); diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils_unittest.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils_unittest.cc index f16ef3fd35f5..c0c94a9da1ca 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils_unittest.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils_unittest.cc @@ -31,7 +31,7 @@ TEST(BitflyerUtilsTest, GetServerUrlStaging) { TEST(BitflyerUtilsTest, GetServerUrlProduction) { ledger::_environment = type::Environment::PRODUCTION; const std::string url = GetServerUrl("/test"); - ASSERT_EQ(url, "https://bitflyer.com/test"); + ASSERT_EQ(url, "https://dummy.com/test"); } } // namespace bitflyer From 1ac308058674bac197e35a1e4c974f2e3c6b6411 Mon Sep 17 00:00:00 2001 From: Deep Date: Thu, 18 Nov 2021 18:12:22 -0500 Subject: [PATCH 03/18] Add rewards panel 2.0 UI --- android/brave_java_resources.gni | 18 + android/brave_java_sources.gni | 1 + .../browser/rewards/BraveRewardsPanel.java | 257 +++++++++++ .../toolbar/top/BraveToolbarLayoutImpl.java | 5 +- .../java/res/drawable/blue_48_rounded_bg.xml | 6 + android/java/res/drawable/ic_arrow_down.xml | 10 + android/java/res/drawable/ic_bar_chart_20.xml | 10 + android/java/res/drawable/ic_hearts.xml | 8 + android/java/res/drawable/ic_plus.xml | 9 + android/java/res/drawable/ic_settings.xml | 4 + .../java/res/drawable/ic_unverified_state.xml | 10 + android/java/res/drawable/ic_uphold.xml | 10 + .../drawable/rewards_settings_gradient_bg.xml | 12 + .../java/res/drawable/rounded_8_bottom_bg.xml | 8 + .../java/res/drawable/rounded_8_top_bg.xml | 8 + .../res/drawable/unverified_48_rounded_bg.xml | 10 + .../java/res/drawable/white_48_rounded_bg.xml | 6 + .../res/layout/brave_rewards_panel_layout.xml | 180 ++++++++ .../brave_rewards_panel_publisher_layout.xml | 83 ++++ .../brave_rewards_panel_settings_layout.xml | 70 +++ .../brave_rewards_panel_summary_layout.xml | 414 ++++++++++++++++++ .../layout/brave_rewards_panel_tip_layout.xml | 132 ++++++ android/java/res/values/brave_colors.xml | 5 + .../android/strings/android_brave_strings.grd | 54 +++ 24 files changed, 1328 insertions(+), 2 deletions(-) create mode 100644 android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java create mode 100644 android/java/res/drawable/blue_48_rounded_bg.xml create mode 100644 android/java/res/drawable/ic_arrow_down.xml create mode 100644 android/java/res/drawable/ic_bar_chart_20.xml create mode 100644 android/java/res/drawable/ic_hearts.xml create mode 100644 android/java/res/drawable/ic_plus.xml create mode 100644 android/java/res/drawable/ic_settings.xml create mode 100644 android/java/res/drawable/ic_unverified_state.xml create mode 100644 android/java/res/drawable/ic_uphold.xml create mode 100644 android/java/res/drawable/rewards_settings_gradient_bg.xml create mode 100644 android/java/res/drawable/rounded_8_bottom_bg.xml create mode 100644 android/java/res/drawable/rounded_8_top_bg.xml create mode 100644 android/java/res/drawable/unverified_48_rounded_bg.xml create mode 100644 android/java/res/drawable/white_48_rounded_bg.xml create mode 100644 android/java/res/layout/brave_rewards_panel_layout.xml create mode 100644 android/java/res/layout/brave_rewards_panel_publisher_layout.xml create mode 100644 android/java/res/layout/brave_rewards_panel_settings_layout.xml create mode 100644 android/java/res/layout/brave_rewards_panel_summary_layout.xml create mode 100644 android/java/res/layout/brave_rewards_panel_tip_layout.xml diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni index 3cc2d42ee025..f798da291fdf 100644 --- a/android/brave_java_resources.gni +++ b/android/brave_java_resources.gni @@ -525,6 +525,7 @@ brave_java_resources = [ "java/res/drawable/bat_rewards_summary_gradient.xml", "java/res/drawable/binance_edittext.xml", "java/res/drawable/binance_radio_button_selector.xml", + "java/res/drawable/blue_48_rounded_bg.xml", "java/res/drawable/blue_rounded_button.xml", "java/res/drawable/blue_rounded_holo_button.xml", "java/res/drawable/brave_badge_rewards_background_large.xml", @@ -576,11 +577,13 @@ brave_java_resources = [ "java/res/drawable/ic_add.xml", "java/res/drawable/ic_addresses.xml", "java/res/drawable/ic_appearance.xml", + "java/res/drawable/ic_arrow_down.xml", "java/res/drawable/ic_arrow_downward.xml", "java/res/drawable/ic_arrow_drop_down_white.xml", "java/res/drawable/ic_arrow_forward.xml", "java/res/drawable/ic_back.xml", "java/res/drawable/ic_background_bat.xml", + "java/res/drawable/ic_bar_chart_20.xml", "java/res/drawable/ic_baseline_arrow_back_24.xml", "java/res/drawable/ic_baseline_close_24.xml", "java/res/drawable/ic_baseline_more_vert_24.xml", @@ -614,6 +617,7 @@ brave_java_resources = [ "java/res/drawable/ic_eth.xml", "java/res/drawable/ic_eth_24.xml", "java/res/drawable/ic_guardian.xml", + "java/res/drawable/ic_hearts.xml", "java/res/drawable/ic_help.xml", "java/res/drawable/ic_help_filled.xml", "java/res/drawable/ic_homepage.xml", @@ -643,6 +647,7 @@ brave_java_resources = [ "java/res/drawable/ic_payment_methods.xml", "java/res/drawable/ic_phone.xml", "java/res/drawable/ic_plans.xml", + "java/res/drawable/ic_plus.xml", "java/res/drawable/ic_privacy_reports.xml", "java/res/drawable/ic_promoted.xml", "java/res/drawable/ic_qr_code.xml", @@ -658,6 +663,7 @@ brave_java_resources = [ "java/res/drawable/ic_server_selection_check.xml", "java/res/drawable/ic_setbraveasdefault.xml", "java/res/drawable/ic_setbraveasdefault_dark.xml", + "java/res/drawable/ic_settings.xml", "java/res/drawable/ic_share.xml", "java/res/drawable/ic_share_white.xml", "java/res/drawable/ic_shield_done_filled.xml", @@ -673,7 +679,9 @@ brave_java_resources = [ "java/res/drawable/ic_toggle_down.xml", "java/res/drawable/ic_toggle_up.xml", "java/res/drawable/ic_trash_icon.xml", + "java/res/drawable/ic_unverified_state.xml", "java/res/drawable/ic_up_icon.xml", + "java/res/drawable/ic_uphold.xml", "java/res/drawable/ic_vpn.xml", "java/res/drawable/ic_vpn_shield.xml", "java/res/drawable/ic_wallet_add.xml", @@ -702,6 +710,9 @@ brave_java_resources = [ "java/res/drawable/rewards_button_purple_border.xml", "java/res/drawable/rewards_button_summary.xml", "java/res/drawable/rewards_image_button.xml", + "java/res/drawable/rewards_settings_gradient_bg.xml", + "java/res/drawable/rounded_8_bottom_bg.xml", + "java/res/drawable/rounded_8_top_bg.xml", "java/res/drawable/rounded_corners.xml", "java/res/drawable/rounded_filled.xml", "java/res/drawable/rounded_filled_bg_radius_12.xml", @@ -720,12 +731,14 @@ brave_java_resources = [ "java/res/drawable/tab_selector.xml", "java/res/drawable/tip_amount.xml", "java/res/drawable/transparent_bg_bordered.xml", + "java/res/drawable/unverified_48_rounded_bg.xml", "java/res/drawable/wallet_disconnected_button.xml", "java/res/drawable/wallet_radio_button_normal.xml", "java/res/drawable/wallet_radio_button_selected.xml", "java/res/drawable/wallet_radio_button_selector.xml", "java/res/drawable/wallet_top_banner_bg.xml", "java/res/drawable/wallet_verify_button.xml", + "java/res/drawable/white_48_rounded_bg.xml", "java/res/drawable/white_rounded_holo_button.xml", "java/res/drawable/yearly_selector.xml", "java/res/font/poppins_light.ttf", @@ -783,6 +796,11 @@ brave_java_resources = [ "java/res/layout/brave_rewards_panel.xml", "java/res/layout/brave_rewards_panel_grant.xml", "java/res/layout/brave_rewards_panel_header.xml", + "java/res/layout/brave_rewards_panel_layout.xml", + "java/res/layout/brave_rewards_panel_publisher_layout.xml", + "java/res/layout/brave_rewards_panel_settings_layout.xml", + "java/res/layout/brave_rewards_panel_summary_layout.xml", + "java/res/layout/brave_rewards_panel_tip_layout.xml", "java/res/layout/brave_rewards_reset_tab_content.xml", "java/res/layout/brave_rewards_site_banner.xml", "java/res/layout/brave_rewards_spinnner_item.xml", diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index 406c3716bc28..c4f936ff1552 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -209,6 +209,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/rate/RateDialogFragment.java", "../../brave/android/java/org/chromium/chrome/browser/rate/RateFeedbackUtils.java", "../../brave/android/java/org/chromium/chrome/browser/rate/RateUtils.java", + "../../brave/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java", "../../brave/android/java/org/chromium/chrome/browser/safe_browsing/settings/BraveStandardProtectionSettingsFragment.java", "../../brave/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java", "../../brave/android/java/org/chromium/chrome/browser/settings/BackgroundImagesPreferences.java", diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java new file mode 100644 index 000000000000..44e428b9cd8d --- /dev/null +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -0,0 +1,257 @@ +/** + * Copyright (c) 2021 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.rewards; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.content.ContextWrapper; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.Point; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.Rect; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.cardview.widget.CardView; + +import org.chromium.base.SysUtils; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.BraveRewardsHelper; +import org.chromium.chrome.browser.BraveRewardsNativeWorker; +import org.chromium.chrome.browser.BraveRewardsObserver; +import org.chromium.chrome.browser.ChromeTabbedActivity; +import org.chromium.chrome.browser.app.BraveActivity; +import org.chromium.chrome.browser.util.ConfigurationUtils; + +import java.util.Timer; +import java.util.TimerTask; + +public class BraveRewardsPanel implements BraveRewardsHelper.LargeIconReadyCallback { + private static final int UPDATE_BALANCE_INTERVAL = 60000; // In milliseconds + + private final View mAnchorView; + private final PopupWindow mPopupWindow; + private View mPopupView; + private final BraveActivity mBraveActivity; + private final ChromeTabbedActivity mActivity; + private BraveRewardsHelper mIconFetcher; + + private Timer mBalanceUpdater; + private Timer mPublisherFetcher; + + private BraveRewardsNativeWorker mBraveRewardsNativeWorker; + + private int mCurrentTabId; + + public BraveRewardsPanel(View anchorView) { + // currentNotificationId = ""; + // publisherExist = false; + // publisherFetchesCount = 0; + mCurrentTabId = -1; + mAnchorView = anchorView; + mPopupWindow = new PopupWindow(anchorView.getContext()); + mPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); + mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mPopupWindow.setElevation(20); + } + mIconFetcher = + new BraveRewardsHelper(BraveRewardsHelper.currentActiveChromeTabbedActivityTab()); + + mPopupWindow.setTouchInterceptor(new View.OnTouchListener() { + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + dismiss(); + return true; + } + return false; + } + }); + mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + if (mBalanceUpdater != null) { + mBalanceUpdater.cancel(); + } + + if (mPublisherFetcher != null) { + mPublisherFetcher.cancel(); + } + + if (mIconFetcher != null) { + mIconFetcher.detach(); + } + + // if (mBraveRewardsNativeWorker != null) { + // mBraveRewardsNativeWorker.RemoveObserver(this); + // } + + if (mCurrentTabId != -1 && mBraveRewardsNativeWorker != null) { + mBraveRewardsNativeWorker.RemovePublisherFromMap(mCurrentTabId); + } + + if (mBraveActivity != null) { + mBraveActivity.OnRewardsPanelDismiss(); + } + } + }); + mBraveActivity = BraveRewardsHelper.getBraveActivity(); + mActivity = BraveRewardsHelper.getChromeTabbedActivity(); + mBraveRewardsNativeWorker = BraveRewardsNativeWorker.getInstance(); + // if (mBraveRewardsNativeWorker != null) { + // mBraveRewardsNativeWorker.AddObserver(this); + // } + mBalanceUpdater = new Timer(); + setUpViews(); + } + + private void setUpViews() { + LayoutInflater inflater = (LayoutInflater) mAnchorView.getContext().getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + mPopupView = inflater.inflate(R.layout.brave_rewards_panel_layout, null); + + LinearLayout rewardsSummaryDetailLayout = + mPopupView.findViewById(R.id.brave_rewards_panel_summary_layout_id); + CardView rewardsTipLayout = mPopupView.findViewById(R.id.brave_rewards_panel_tip_layout_id); + + TextView btnAddFunds = mPopupView.findViewById(R.id.btn_add_funds); + btnAddFunds.setOnClickListener(view + -> { + + }); + + TextView btnTip = mPopupView.findViewById(R.id.btn_tip); + TextView btnSummary = mPopupView.findViewById(R.id.btn_summary); + btnTip.setOnClickListener(view -> { + btnTip.setTextColor(Color.parseColor("#4C54D2")); + for (Drawable drawable : btnTip.getCompoundDrawables()) { + if (drawable != null) { + drawable.setColorFilter(new PorterDuffColorFilter( + Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); + } + } + + btnSummary.setTextColor(Color.parseColor("#868E96")); + for (Drawable drawable : btnSummary.getCompoundDrawables()) { + if (drawable != null) { + drawable.setColorFilter(new PorterDuffColorFilter( + Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); + } + } + rewardsSummaryDetailLayout.setVisibility(View.GONE); + rewardsTipLayout.setVisibility(View.VISIBLE); + }); + + btnSummary.setOnClickListener(view -> { + btnTip.setTextColor(Color.parseColor("#868E96")); + for (Drawable drawable : btnTip.getCompoundDrawables()) { + if (drawable != null) { + drawable.setColorFilter(new PorterDuffColorFilter( + Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); + } + } + + btnSummary.setTextColor(Color.parseColor("#4C54D2")); + for (Drawable drawable : btnSummary.getCompoundDrawables()) { + if (drawable != null) { + drawable.setColorFilter(new PorterDuffColorFilter( + Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); + } + } + + rewardsSummaryDetailLayout.setVisibility(View.VISIBLE); + rewardsTipLayout.setVisibility(View.GONE); + }); + + mPopupWindow.setContentView(mPopupView); + } + + public void showLikePopDownMenu() { + mPopupWindow.setTouchable(true); + mPopupWindow.setFocusable(true); + mPopupWindow.setOutsideTouchable(true); + + // mPopupWindow.setContentView(this.root); + + mPopupWindow.setAnimationStyle(R.style.OverflowMenuAnim); + + if (SysUtils.isLowEndDevice()) { + mPopupWindow.setAnimationStyle(0); + } + + mPopupWindow.showAsDropDown(mAnchorView, 0, 0); + // checkForRewardsOnboarding(); + // BraveRewardsNativeWorker.getInstance().StartProcess(); + } + + public void dismiss() { + mPopupWindow.dismiss(); + } + + public boolean isShowing() { + return mPopupWindow.isShowing(); + } + + private void CreateUpdateBalanceTask() { + mBalanceUpdater.schedule(new TimerTask() { + @Override + public void run() { + if (mBraveRewardsNativeWorker == null) { + return; + } + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + // mBraveRewardsNativeWorker.FetchGrants(); + } + }); + } + }, 0, UPDATE_BALANCE_INTERVAL); + } + + @Override + public void onLargeIconReady(Bitmap icon) { + setFavIcon(icon); + } + + private void setFavIcon(Bitmap bitmap) { + if (bitmap != null) { + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + ImageView publisherFaviconIcon = + mPopupView.findViewById(R.id.publisher_favicon); + publisherFaviconIcon.setImageBitmap( + BraveRewardsHelper.getCircularBitmap(bitmap)); + + View fadeout = mPopupView.findViewById(R.id.publisher_favicon_update); + BraveRewardsHelper.crossfade(fadeout, publisherFaviconIcon, View.GONE, 1f, + BraveRewardsHelper.CROSS_FADE_DURATION); + } + }); + } + } +} diff --git a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java index 96185fa5c3cb..01213f37abce 100644 --- a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java +++ b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java @@ -86,6 +86,7 @@ import org.chromium.chrome.browser.preferences.website.BraveShieldsContentSettings; import org.chromium.chrome.browser.preferences.website.BraveShieldsContentSettingsObserver; import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.rewards.BraveRewardsPanel; import org.chromium.chrome.browser.settings.AppearancePreferences; import org.chromium.chrome.browser.settings.BraveSearchEngineUtils; import org.chromium.chrome.browser.shields.BraveShieldsHandler; @@ -151,7 +152,7 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout private TabModelSelectorTabObserver mTabModelSelectorTabObserver; private TabModelSelectorTabModelObserver mTabModelSelectorTabModelObserver; private BraveRewardsNativeWorker mBraveRewardsNativeWorker; - private BraveRewardsPanelPopup mRewardsPopup; + private BraveRewardsPanel mRewardsPopup; private BraveTalkOptInPopup mBraveTalkOptInPopup; private BraveShieldsContentSettings mBraveShieldsContentSettings; private BraveShieldsContentSettingsObserver mBraveShieldsContentSettingsObserver; @@ -871,7 +872,7 @@ public void onClickImpl(View v) { } hideRewardsOnboardingIcon(); OnboardingPrefManager.getInstance().setOnboardingShown(true); - mRewardsPopup = new BraveRewardsPanelPopup(v); + mRewardsPopup = new BraveRewardsPanel(v); mRewardsPopup.showLikePopDownMenu(); if (mBraveRewardsNotificationsCount.isShown()) { SharedPreferences sharedPref = ContextUtils.getAppSharedPreferences(); diff --git a/android/java/res/drawable/blue_48_rounded_bg.xml b/android/java/res/drawable/blue_48_rounded_bg.xml new file mode 100644 index 000000000000..19efae252d30 --- /dev/null +++ b/android/java/res/drawable/blue_48_rounded_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/android/java/res/drawable/ic_arrow_down.xml b/android/java/res/drawable/ic_arrow_down.xml new file mode 100644 index 000000000000..e2ee5be7e0ae --- /dev/null +++ b/android/java/res/drawable/ic_arrow_down.xml @@ -0,0 +1,10 @@ + + + diff --git a/android/java/res/drawable/ic_bar_chart_20.xml b/android/java/res/drawable/ic_bar_chart_20.xml new file mode 100644 index 000000000000..89b8be59689a --- /dev/null +++ b/android/java/res/drawable/ic_bar_chart_20.xml @@ -0,0 +1,10 @@ + + + diff --git a/android/java/res/drawable/ic_hearts.xml b/android/java/res/drawable/ic_hearts.xml new file mode 100644 index 000000000000..63830d63ce9a --- /dev/null +++ b/android/java/res/drawable/ic_hearts.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/android/java/res/drawable/ic_plus.xml b/android/java/res/drawable/ic_plus.xml new file mode 100644 index 000000000000..77f0d8c35ed6 --- /dev/null +++ b/android/java/res/drawable/ic_plus.xml @@ -0,0 +1,9 @@ + + + diff --git a/android/java/res/drawable/ic_settings.xml b/android/java/res/drawable/ic_settings.xml new file mode 100644 index 000000000000..86f91b270d81 --- /dev/null +++ b/android/java/res/drawable/ic_settings.xml @@ -0,0 +1,4 @@ + + + diff --git a/android/java/res/drawable/ic_unverified_state.xml b/android/java/res/drawable/ic_unverified_state.xml new file mode 100644 index 000000000000..d14c0a3e9bca --- /dev/null +++ b/android/java/res/drawable/ic_unverified_state.xml @@ -0,0 +1,10 @@ + + + diff --git a/android/java/res/drawable/ic_uphold.xml b/android/java/res/drawable/ic_uphold.xml new file mode 100644 index 000000000000..fa831428d103 --- /dev/null +++ b/android/java/res/drawable/ic_uphold.xml @@ -0,0 +1,10 @@ + + + diff --git a/android/java/res/drawable/rewards_settings_gradient_bg.xml b/android/java/res/drawable/rewards_settings_gradient_bg.xml new file mode 100644 index 000000000000..76d60bf4efe0 --- /dev/null +++ b/android/java/res/drawable/rewards_settings_gradient_bg.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/android/java/res/drawable/rounded_8_bottom_bg.xml b/android/java/res/drawable/rounded_8_bottom_bg.xml new file mode 100644 index 000000000000..a6e3157aed68 --- /dev/null +++ b/android/java/res/drawable/rounded_8_bottom_bg.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/android/java/res/drawable/rounded_8_top_bg.xml b/android/java/res/drawable/rounded_8_top_bg.xml new file mode 100644 index 000000000000..e7390ae293ef --- /dev/null +++ b/android/java/res/drawable/rounded_8_top_bg.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/android/java/res/drawable/unverified_48_rounded_bg.xml b/android/java/res/drawable/unverified_48_rounded_bg.xml new file mode 100644 index 000000000000..09b4c5cbb9d7 --- /dev/null +++ b/android/java/res/drawable/unverified_48_rounded_bg.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/android/java/res/drawable/white_48_rounded_bg.xml b/android/java/res/drawable/white_48_rounded_bg.xml new file mode 100644 index 000000000000..18a1d2df94e0 --- /dev/null +++ b/android/java/res/drawable/white_48_rounded_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/android/java/res/layout/brave_rewards_panel_layout.xml b/android/java/res/layout/brave_rewards_panel_layout.xml new file mode 100644 index 000000000000..9dd7b23049da --- /dev/null +++ b/android/java/res/layout/brave_rewards_panel_layout.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/java/res/layout/brave_rewards_panel_publisher_layout.xml b/android/java/res/layout/brave_rewards_panel_publisher_layout.xml new file mode 100644 index 000000000000..85f1cedcf983 --- /dev/null +++ b/android/java/res/layout/brave_rewards_panel_publisher_layout.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/java/res/layout/brave_rewards_panel_settings_layout.xml b/android/java/res/layout/brave_rewards_panel_settings_layout.xml new file mode 100644 index 000000000000..57a90ba99d0b --- /dev/null +++ b/android/java/res/layout/brave_rewards_panel_settings_layout.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/java/res/layout/brave_rewards_panel_summary_layout.xml b/android/java/res/layout/brave_rewards_panel_summary_layout.xml new file mode 100644 index 000000000000..346979733ed6 --- /dev/null +++ b/android/java/res/layout/brave_rewards_panel_summary_layout.xml @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/java/res/layout/brave_rewards_panel_tip_layout.xml b/android/java/res/layout/brave_rewards_panel_tip_layout.xml new file mode 100644 index 000000000000..e3774322f792 --- /dev/null +++ b/android/java/res/layout/brave_rewards_panel_tip_layout.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/java/res/values/brave_colors.xml b/android/java/res/values/brave_colors.xml index 17a0daf5b2d3..7c416b435977 100644 --- a/android/java/res/values/brave_colors.xml +++ b/android/java/res/values/brave_colors.xml @@ -171,4 +171,9 @@ #381E85 #27155E + + #E6E8F5 + #868E96 + #212529 + #4C54D2 diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index 683a09e02d65..8dd2ba2357b3 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -2721,6 +2721,60 @@ If you don't accept this request, VPN will not reconnect and your internet conne The receiving address is a token's contract address + + Add funds + + + Rewards summary + + + Total Grants Claimed + + + Rewards from Ads + + + Auto-Contribute + + + One-Time Tip + + + Monthly Tips + + + My wallet + + + Your Balance + + + Estimated earnings + + + Tip + + + Send Tip + + + Include in Auto-Contribute + + + Set + + + Attention + + + Unverified Creator + + + Refresh Status + + + Monthly contribution + From 2200d0a0d3f65ae960cdf46cb9e28c0de4432c61 Mon Sep 17 00:00:00 2001 From: Deep Date: Tue, 23 Nov 2021 17:03:35 -0500 Subject: [PATCH 04/18] Add publisher info Add Balance related info --- .../chrome/browser/BraveRewardsBalance.java | 2 +- .../browser/BraveRewardsExternalWallet.java | 4 +- .../browser/BraveRewardsNativeWorker.java | 7 + .../browser/BraveRewardsPanelPopup.java | 4 +- .../chrome/browser/BraveRewardsPublisher.java | 2 +- .../BraveRewardsSiteBannerActivity.java | 6 +- .../chrome/browser/BraveWalletProvider.java | 9 + .../browser/rewards/BraveRewardsPanel.java | 862 ++++++++++++++++-- .../res/layout/brave_rewards_panel_layout.xml | 260 +++--- .../brave_rewards_panel_publisher_layout.xml | 36 +- .../brave_rewards_panel_settings_layout.xml | 71 +- .../brave_rewards_panel_summary_layout.xml | 16 +- .../layout/brave_rewards_panel_tip_layout.xml | 7 +- .../android/strings/android_brave_strings.grd | 5 +- 14 files changed, 1058 insertions(+), 233 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsBalance.java b/android/java/org/chromium/chrome/browser/BraveRewardsBalance.java index 09d4744e8502..c032fe76f865 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsBalance.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsBalance.java @@ -24,7 +24,7 @@ public class BraveRewardsBalance { public static final String JSON_TOTAL = "total"; public static final String JSON_WALLETS = "wallets"; - double mTotal; + private double mTotal; Map mWallets; BraveRewardsBalance (String json_balance) throws JSONException { diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsExternalWallet.java b/android/java/org/chromium/chrome/browser/BraveRewardsExternalWallet.java index ba6f58bc360a..abce031d285a 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsExternalWallet.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsExternalWallet.java @@ -17,7 +17,7 @@ import org.json.JSONException; import org.json.JSONObject; -class BraveRewardsExternalWallet { +public class BraveRewardsExternalWallet { //fields public static final String ACCOUNT_URL = "account_url"; public static final String ADD_URL = "add_url"; @@ -95,7 +95,7 @@ public String getLoginUrl() { return mLoginUrl; } - BraveRewardsExternalWallet (String json_external_wallet) throws JSONException { + public BraveRewardsExternalWallet(String json_external_wallet) throws JSONException { fromJson (json_external_wallet); } diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java index 079caa3b1fd8..40402aa9082f 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java @@ -431,6 +431,12 @@ public void RecoverWallet(String passPhrase) { } } + public void getAdsAccountStatement() { + synchronized (lock) { + BraveRewardsNativeWorkerJni.get().getAdsAccountStatement(mNativeBraveRewardsNativeWorker); + } + } + @CalledByNative public void OnRecoverWallet(int errorCode) { for (BraveRewardsObserver observer : mObservers) { @@ -684,5 +690,6 @@ void setAutoContributeEnabled( long nativeBraveRewardsNativeWorker, boolean isSetAutoContributeEnabled); void setAutoContributionAmount(long nativeBraveRewardsNativeWorker, double amount); void startProcess(long nativeBraveRewardsNativeWorker); + void getAdsAccountStatement(long nativeBraveRewardsNativeWorker); } } diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java b/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java index a65627514144..347319bf97fa 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java @@ -1680,7 +1680,7 @@ public void OnRewardsParameters(int errorCode) { if (mBraveRewardsNativeWorker != null) { BraveRewardsBalance balance_obj = mBraveRewardsNativeWorker.GetWalletBalance(); if (balance_obj != null) { - walletBalance = balance_obj.mTotal; + walletBalance = balance_obj.getTotal(); } if (walletBalance > 0 && braveRewardsWelcomeView != null) { @@ -1819,7 +1819,7 @@ private void SetVerifyWalletBtnClickHandler(@WalletStatus final int status) { Button btnVerifyWallet = (Button)root.findViewById(R.id.btn_verify_wallet); BraveRewardsBalance balance_obj = mBraveRewardsNativeWorker.GetWalletBalance(); if (balance_obj != null) { - walletBalance = balance_obj.mTotal; + walletBalance = balance_obj.getTotal(); } btnVerifyWallet.setOnClickListener((new View.OnClickListener() { diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsPublisher.java b/android/java/org/chromium/chrome/browser/BraveRewardsPublisher.java index b1039401524c..25589326219c 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsPublisher.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsPublisher.java @@ -9,7 +9,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -class BraveRewardsPublisher { +public class BraveRewardsPublisher { //PublisherStatus @ //vendor/bat-native-ledger/include/bat/ledger/public/interfaces/ledger.mojom @Retention(RetentionPolicy.SOURCE) diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java b/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java index 3cd7e0168143..80f8adcf3206 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java @@ -138,7 +138,7 @@ public void onClick(View view) { double balance = .0; BraveRewardsBalance rewards_balance = mBraveRewardsNativeWorker.GetWalletBalance(); if (rewards_balance != null){ - balance = rewards_balance.mTotal; + balance = rewards_balance.getTotal(); } DecimalFormat df = new DecimalFormat("#.###"); @@ -167,7 +167,7 @@ public void onClick(View view) { double balance = .0; BraveRewardsBalance rewards_balance = mBraveRewardsNativeWorker.GetWalletBalance(); if (rewards_balance != null){ - balance = rewards_balance.mTotal; + balance = rewards_balance.getTotal(); } int amount = 0; for (ToggleButton tb : radio_tip_amount){ @@ -474,7 +474,7 @@ public void OnRewardsParameters(int errorCode) { double balance = .0; BraveRewardsBalance rewardsBalance = mBraveRewardsNativeWorker.GetWalletBalance(); if (rewardsBalance != null) { - balance = rewardsBalance.mTotal; + balance = rewardsBalance.getTotal(); } DecimalFormat df = new DecimalFormat("#.###"); df.setRoundingMode(RoundingMode.FLOOR); diff --git a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java index a53d414a80af..01a62dfdedc9 100644 --- a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java +++ b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java @@ -16,6 +16,7 @@ import org.json.JSONObject; import org.chromium.base.ContextUtils; +import org.chromium.base.Log; import org.chromium.chrome.R; import org.chromium.chrome.browser.BraveRewardsBalance; import org.chromium.chrome.browser.BraveRewardsHelper; @@ -59,6 +60,8 @@ public void completeWalletProviderVerification( rewardsNativeProxy.AddObserver(this); String path = uri.getPath(); String query = uri.getQuery(); + Log.e("BraveRewards", "BraveWalletProvider : path : "+path); + Log.e("BraveRewards", "BraveWalletProvider : query : "+query); if (TextUtils.isEmpty(path) || TextUtils.isEmpty(query)) { rewardsNativeProxy.RemoveObserver(this); @@ -72,6 +75,10 @@ public void completeWalletProviderVerification( // query: "?query" path = String.format(Locale.US, "/%s/%s", rewardsNativeProxy.getExternalWalletType(), path); query = String.format(Locale.US, "?%s", query); + + Log.e("BraveRewards", "BraveWalletProvider : path : "+path); + Log.e("BraveRewards", "BraveWalletProvider : query : "+query); + rewardsNativeProxy.ProcessRewardsPageUrl(path, query); } @@ -84,6 +91,7 @@ public void OnProcessRewardsPageUrl( } String redirectUrl = parseJsonArgs(jsonArgs); + Log.e("BraveRewards", "BraveWalletProvider : "+redirectUrl); if (BraveRewardsNativeWorker.LEDGER_OK == errorCode && TextUtils.equals(action, ACTION_VALUE)) { // wallet is verified: redirect to chrome://rewards for now @@ -122,6 +130,7 @@ private void releaseDependencies() { private void showErrorMessageBox(int errorCode) { String message = ""; String messageTitle = ""; + Log.e("BraveRewards", "Error code : "+errorCode); Context context = ContextUtils.getApplicationContext(); AlertDialog.Builder builder = new AlertDialog.Builder( BraveRewardsHelper.getChromeTabbedActivity(), R.style.Theme_Chromium_AlertDialog); diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index 44e428b9cd8d..a3d62b9c5ca7 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -7,10 +7,14 @@ package org.chromium.chrome.browser.rewards; +import static org.chromium.ui.base.ViewUtils.dpToPx; + import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; +import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Point; @@ -21,52 +25,116 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; +import android.text.Html; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.TextPaint; +import android.text.TextUtils; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; +import android.text.style.ForegroundColorSpan; import android.view.ContextThemeWrapper; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.webkit.URLUtil; +import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.cardview.widget.CardView; +import androidx.core.content.res.ResourcesCompat; +import androidx.appcompat.widget.SwitchCompat; + +import org.json.JSONException; +import org.chromium.base.ContextUtils; +import org.chromium.base.Log; import org.chromium.base.SysUtils; import org.chromium.chrome.R; +import org.chromium.chrome.browser.BraveRewardsBalance; +import org.chromium.chrome.browser.BraveRewardsExternalWallet; +import org.chromium.chrome.browser.BraveRewardsExternalWallet.WalletStatus; import org.chromium.chrome.browser.BraveRewardsHelper; import org.chromium.chrome.browser.BraveRewardsNativeWorker; import org.chromium.chrome.browser.BraveRewardsObserver; +import org.chromium.chrome.browser.BraveRewardsPublisher; +import org.chromium.chrome.browser.BraveRewardsSiteBannerActivity; +import org.chromium.chrome.browser.BraveRewardsUserWalletActivity; +import org.chromium.chrome.browser.BraveRewardsVerifyWalletActivity; +import org.chromium.chrome.browser.BraveWalletProvider; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.app.BraveActivity; +import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.util.ConfigurationUtils; +import org.chromium.ui.base.DeviceFormFactor; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.util.Locale; import java.util.Timer; import java.util.TimerTask; +import java.util.Date; +import java.util.Calendar; -public class BraveRewardsPanel implements BraveRewardsHelper.LargeIconReadyCallback { +public class BraveRewardsPanel + implements BraveRewardsObserver, BraveRewardsHelper.LargeIconReadyCallback { + private static final String TAG = "BraveRewards"; private static final int UPDATE_BALANCE_INTERVAL = 60000; // In milliseconds + private static final int PUBLISHER_INFO_FETCH_RETRY = 3 * 1000; // In milliseconds + private static final int PUBLISHER_FETCHES_COUNT = 3; + + private static final String YOUTUBE_TYPE = "youtube#"; + private static final String TWITCH_TYPE = "twitch#"; + + private static final String PREF_VERIFY_WALLET_ENABLE = "verify_wallet_enable"; + + private static final int WALLET_BALANCE_LIMIT = 15; private final View mAnchorView; private final PopupWindow mPopupWindow; - private View mPopupView; + private ViewGroup mPopupView; private final BraveActivity mBraveActivity; private final ChromeTabbedActivity mActivity; private BraveRewardsHelper mIconFetcher; + private LinearLayout mRewardsSummaryDetailLayout; + private CardView mRewardsTipLayout; + private LinearLayout mBtnTip; + private ImageView mImgTip; + private TextView mTextTip; + private LinearLayout mBtnSummary; + private ImageView mImgSummary; + private TextView mTextSummary; + private TextView mBtnAddFunds; + private SwitchCompat mSwitchAutoContribute; + private Timer mBalanceUpdater; + private Timer mPublisherFetcher; + private int mPublisherFetchesCount; + private boolean mPublisherExist; private BraveRewardsNativeWorker mBraveRewardsNativeWorker; private int mCurrentTabId; + private boolean mAutoContributeEnabled; + private TextView mPublisherAttention; + + private BraveRewardsExternalWallet mExternalWallet; public BraveRewardsPanel(View anchorView) { // currentNotificationId = ""; - // publisherExist = false; - // publisherFetchesCount = 0; + mPublisherExist = false; + mPublisherFetchesCount = 0; mCurrentTabId = -1; mAnchorView = anchorView; mPopupWindow = new PopupWindow(anchorView.getContext()); @@ -105,9 +173,9 @@ public void onDismiss() { mIconFetcher.detach(); } - // if (mBraveRewardsNativeWorker != null) { - // mBraveRewardsNativeWorker.RemoveObserver(this); - // } + if (mBraveRewardsNativeWorker != null) { + mBraveRewardsNativeWorker.RemoveObserver(BraveRewardsPanel.this); + } if (mCurrentTabId != -1 && mBraveRewardsNativeWorker != null) { mBraveRewardsNativeWorker.RemovePublisherFromMap(mCurrentTabId); @@ -121,9 +189,9 @@ public void onDismiss() { mBraveActivity = BraveRewardsHelper.getBraveActivity(); mActivity = BraveRewardsHelper.getChromeTabbedActivity(); mBraveRewardsNativeWorker = BraveRewardsNativeWorker.getInstance(); - // if (mBraveRewardsNativeWorker != null) { - // mBraveRewardsNativeWorker.AddObserver(this); - // } + if (mBraveRewardsNativeWorker != null) { + mBraveRewardsNativeWorker.AddObserver(this); + } mBalanceUpdater = new Timer(); setUpViews(); } @@ -131,64 +199,123 @@ public void onDismiss() { private void setUpViews() { LayoutInflater inflater = (LayoutInflater) mAnchorView.getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE); - mPopupView = inflater.inflate(R.layout.brave_rewards_panel_layout, null); + mPopupView = (ViewGroup) inflater.inflate(R.layout.brave_rewards_panel_layout, null); - LinearLayout rewardsSummaryDetailLayout = - mPopupView.findViewById(R.id.brave_rewards_panel_summary_layout_id); - CardView rewardsTipLayout = mPopupView.findViewById(R.id.brave_rewards_panel_tip_layout_id); + ImageView btnRewardsSettings = mPopupView.findViewById(R.id.btn_rewards_settings); + btnRewardsSettings.setOnClickListener((new View.OnClickListener() { + @Override + public void onClick(View v) { + mBraveActivity.openNewOrSelectExistingTab(BraveActivity.REWARDS_SETTINGS_URL); + dismiss(); + } + })); - TextView btnAddFunds = mPopupView.findViewById(R.id.btn_add_funds); - btnAddFunds.setOnClickListener(view - -> { + mRewardsSummaryDetailLayout = + mPopupView.findViewById(R.id.brave_rewards_panel_summary_layout_id); + mRewardsTipLayout = mPopupView.findViewById(R.id.brave_rewards_panel_tip_layout_id); + + TextView btnSendTip = mPopupView.findViewById(R.id.btn_send_tip); + btnSendTip.setOnClickListener(view -> { + // if (mTippingInProgress) { + // return; + // } + // mTippingInProgress = true; + + Intent intent = new Intent( + ContextUtils.getApplicationContext(), BraveRewardsSiteBannerActivity.class); + intent.putExtra(BraveRewardsSiteBannerActivity.TAB_ID_EXTRA, mCurrentTabId); + mActivity.startActivity(intent); + // mActivity.startActivityForResult(intent, BraveActivity.SITE_BANNER_REQUEST_CODE); + + // BraveRewardsPanelPopup is not an Activity and onActivityResult is not available + // to dismiss mTippingInProgress. Post a delayed task to flip a mTippingInProgress flag. + // mHandler.postDelayed(new Runnable() { + // @Override + // public void run() { + // mTippingInProgress = false; + // } + // }, CLICK_DISABLE_INTERVAL); + // } + }); - }); + mBtnAddFunds = mPopupView.findViewById(R.id.btn_add_funds); + mBtnAddFunds.setOnClickListener(view -> { + dismiss(); + mBraveActivity.openNewOrSelectExistingTab(mExternalWallet.getAddUrl()); + }); - TextView btnTip = mPopupView.findViewById(R.id.btn_tip); - TextView btnSummary = mPopupView.findViewById(R.id.btn_summary); - btnTip.setOnClickListener(view -> { - btnTip.setTextColor(Color.parseColor("#4C54D2")); - for (Drawable drawable : btnTip.getCompoundDrawables()) { - if (drawable != null) { - drawable.setColorFilter(new PorterDuffColorFilter( - Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); - } - } + mBtnTip = mPopupView.findViewById(R.id.tip_btn); + mImgTip = mPopupView.findViewById(R.id.tip_img); + mTextTip = mPopupView.findViewById(R.id.tip_text); + mBtnTip.setOnClickListener(view -> { + showTipSection(); + }); - btnSummary.setTextColor(Color.parseColor("#868E96")); - for (Drawable drawable : btnSummary.getCompoundDrawables()) { - if (drawable != null) { - drawable.setColorFilter(new PorterDuffColorFilter( - Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); - } - } - rewardsSummaryDetailLayout.setVisibility(View.GONE); - rewardsTipLayout.setVisibility(View.VISIBLE); + mBtnSummary = mPopupView.findViewById(R.id.summary_btn); + mImgSummary = mPopupView.findViewById(R.id.summary_img); + mTextSummary = mPopupView.findViewById(R.id.summary_text); + mBtnSummary.setOnClickListener(view -> { + showSummarySection(); }); - btnSummary.setOnClickListener(view -> { - btnTip.setTextColor(Color.parseColor("#868E96")); - for (Drawable drawable : btnTip.getCompoundDrawables()) { - if (drawable != null) { - drawable.setColorFilter(new PorterDuffColorFilter( + mSwitchAutoContribute = mPopupView.findViewById(R.id.auto_contribution_switch); + mSwitchAutoContribute.setOnCheckedChangeListener(autoContributeSwitchListener); + + showSummarySection(); + mBtnTip.setEnabled(false); + + String monthName=(String)android.text.format.DateFormat.format("MMM", new Date()); + int lastDate = Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH); + int currentYear = Calendar.getInstance().get(Calendar.YEAR); + + String adsMonthlyStatement = new StringBuilder(monthName).append(" 1 - ").append(monthName).append(" ").append(lastDate).toString(); + String monthYear = new StringBuilder(monthName).append(" ").append(currentYear).toString(); + + TextView adsMonthlyStatementText = mPopupView.findViewById(R.id.ads_monthly_statement_text); + adsMonthlyStatementText.setText(adsMonthlyStatement); + + TextView monthYearText = mPopupView.findViewById(R.id.month_year_text); + monthYearText.setText(monthYear); + + mPopupWindow.setContentView(mPopupView); + } + + private void showSummarySection() { + mTextTip.setTextColor(Color.parseColor("#868E96")); + mImgTip.setColorFilter(new PorterDuffColorFilter( Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); - } - } + - btnSummary.setTextColor(Color.parseColor("#4C54D2")); - for (Drawable drawable : btnSummary.getCompoundDrawables()) { - if (drawable != null) { - drawable.setColorFilter(new PorterDuffColorFilter( + mTextSummary.setTextColor(Color.parseColor("#4C54D2")); + mImgSummary.setColorFilter(new PorterDuffColorFilter( Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); - } - } - rewardsSummaryDetailLayout.setVisibility(View.VISIBLE); - rewardsTipLayout.setVisibility(View.GONE); - }); + mRewardsSummaryDetailLayout.setVisibility(View.VISIBLE); + mRewardsTipLayout.setVisibility(View.GONE); + } - mPopupWindow.setContentView(mPopupView); + private void showTipSection() { + mTextTip.setTextColor(Color.parseColor("#4C54D2")); + mImgTip.setColorFilter(new PorterDuffColorFilter( + Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); + + mTextSummary.setTextColor(Color.parseColor("#868E96")); + mImgSummary.setColorFilter(new PorterDuffColorFilter( + Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); + mRewardsSummaryDetailLayout.setVisibility(View.GONE); + mRewardsTipLayout.setVisibility(View.VISIBLE); } + + + OnCheckedChangeListener autoContributeSwitchListener = new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + mBraveRewardsNativeWorker.IncludeInAutoContribution(mCurrentTabId, !isChecked); + } + }; + public void showLikePopDownMenu() { mPopupWindow.setTouchable(true); mPopupWindow.setFocusable(true); @@ -203,8 +330,492 @@ public void showLikePopDownMenu() { } mPopupWindow.showAsDropDown(mAnchorView, 0, 0); + // checkForRewardsOnboarding(); - // BraveRewardsNativeWorker.getInstance().StartProcess(); + mBraveRewardsNativeWorker.getInstance().StartProcess(); + } + + @Override + public void OnStartProcess() { + requestPublisherInfo(); + mBraveRewardsNativeWorker.GetRewardsParameters(); + mBraveRewardsNativeWorker.GetExternalWallet(); + mBraveRewardsNativeWorker.getAdsAccountStatement(); + // if (root != null && PackageUtils.isFirstInstall(mActivity) + // && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { + // if (BraveRewardsHelper.getBraveRewardsAppOpenCount() == 0 + // && BraveRewardsHelper.shouldShowBraveRewardsOnboardingModal() + // && !BraveAdsNativeHelper.nativeIsBraveAdsEnabled( + // Profile.getLastUsedRegularProfile())) { + // showBraveRewardsOnboardingModal(root); + // BraveRewardsHelper.updateBraveRewardsAppOpenCount(); + // BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); + // } else if (SharedPreferencesManager.getInstance().readInt( + // BravePreferenceKeys.BRAVE_APP_OPEN_COUNT) + // > BraveRewardsHelper.getBraveRewardsAppOpenCount() + // && BraveRewardsHelper.shouldShowMiniOnboardingModal()) { + // if + // (BraveAdsNativeHelper.nativeIsBraveAdsEnabled(Profile.getLastUsedRegularProfile())) + // { + // showBraveRewardsWelcomeLayout(root); + // } else { + // showBraveRewardsOptInLayout(root); + // } + // BraveRewardsHelper.setShowMiniOnboardingModal(false); + // } + // } + } + + @Override + public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, + int adsReceivedThisMonth, double earningsThisMonth, double earningsLastMonth){ + DecimalFormat df = new DecimalFormat("#.###"); + df.setRoundingMode(RoundingMode.FLOOR); + df.setMinimumFractionDigits(3); + TextView batBalanceAdsText = mPopupView.findViewById(R.id.bat_balance_ads_text); + batBalanceAdsText.setText(df.format(earningsThisMonth)); + double usdValue = earningsThisMonth * mBraveRewardsNativeWorker.GetWalletRate(); + String usdText = + String.format(mPopupView.getResources().getString(R.string.brave_ads_statement_usd), + String.format(Locale.getDefault(), "%.2f", usdValue)); + TextView usdBalanceAdsText = mPopupView.findViewById(R.id.usd_balance_ads_text); + usdBalanceAdsText.setText(usdText); + } + + @Override + public void OnRewardsParameters(int errorCode) { + Log.e(TAG, "OnRewardsParameters"); + // boolean formerWalletDetailsReceived = walletDetailsReceived; + if (errorCode == BraveRewardsNativeWorker.LEDGER_OK) { + // DismissNotification(REWARDS_NOTIFICATION_NO_INTERNET_ID); + Log.e(TAG, "LEDGER_OK"); + if (mBraveRewardsNativeWorker != null) { + Log.e(TAG, "mBraveRewardsNativeWorker != null"); + BraveRewardsBalance walletBalanceObject = + mBraveRewardsNativeWorker.GetWalletBalance(); + double walletBalance = 0; + if (walletBalanceObject != null) { + walletBalance = walletBalanceObject.getTotal(); + } + Log.e(TAG, "Wallet balance : "+walletBalance); + // if (walletBalance > 0 && braveRewardsWelcomeView != null) { + // braveRewardsWelcomeView.setVisibility(View.GONE); + // } + + DecimalFormat df = new DecimalFormat("#.###"); + df.setRoundingMode(RoundingMode.FLOOR); + df.setMinimumFractionDigits(3); + TextView batBalanceText = mPopupView.findViewById(R.id.bat_balance_text); + batBalanceText.setText(df.format(walletBalance)); + double usdValue = walletBalance * mBraveRewardsNativeWorker.GetWalletRate(); + String usdText = + String.format(mPopupView.getResources().getString(R.string.brave_ui_usd), + String.format(Locale.getDefault(), "%.2f", usdValue)); + Log.e(TAG, "USd amount : "+ usdText); + TextView usdBalanceText = mPopupView.findViewById(R.id.usd_balance_text); + usdBalanceText.setText(usdText); + + // Button btnVerifyWallet = (Button) root.findViewById(R.id.btn_verify_wallet); + // btnVerifyWallet.setBackgroundResource(R.drawable.wallet_verify_button); + // if (mExternalWallet != null + // && mExternalWallet.getType().equals(BraveWalletProvider.BITFLYER)) { + // btnVerifyWallet.setVisibility(View.INVISIBLE); + // } + } + // walletDetailsReceived = true; + } else if (errorCode == BraveRewardsNativeWorker.LEDGER_ERROR) { // No Internet connection + String args[] = {}; + Log.e(TAG, "LEDGER_ERROR"); + // ShowNotification(REWARDS_NOTIFICATION_NO_INTERNET_ID, + // REWARDS_NOTIFICATION_NO_INTERNET, 0, args); + } + Log.e(TAG, "Outside check"); + // else { + // walletDetailsReceived = false; + // } + + // if (formerWalletDetailsReceived != walletDetailsReceived) { + // EnableWalletDetails(walletDetailsReceived); + // } + } + + @Override + public void OnGetExternalWallet(int errorCode, String externalWallet) { + Log.e(TAG, "OnGetExternalWallet"); + int walletStatus = BraveRewardsExternalWallet.NOT_CONNECTED; + if (!TextUtils.isEmpty(externalWallet)) { + try { + mExternalWallet = new BraveRewardsExternalWallet(externalWallet); + walletStatus = mExternalWallet.getStatus(); + } catch (JSONException e) { + Log.e(TAG, "Error parsing external wallet status"); + mExternalWallet = null; + } + } + setVerifyWalletButton(walletStatus); + } + + private void setVerifyWalletButton(@WalletStatus final int status) { + Log.e(TAG, "Status : " + status); + TextView btnVerifyWallet = mPopupView.findViewById(R.id.btn_verify_wallet); + SharedPreferences sharedPref = ContextUtils.getAppSharedPreferences(); + SharedPreferences.Editor editor = sharedPref.edit(); + int rightDrawable = 0; + int leftDrawable = 0; + int text = 0; + + switch (status) { + case BraveRewardsExternalWallet.NOT_CONNECTED: + rightDrawable = R.drawable.disclosure; + text = R.string.brave_ui_wallet_button_unverified; + btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(0, 0, rightDrawable, 0); + Log.e(TAG, "BraveRewardsExternalWallet.NOT_CONNECTED"); + break; + case BraveRewardsExternalWallet.CONNECTED: + rightDrawable = R.drawable.verified_disclosure; + text = R.string.brave_ui_wallet_button_unverified; + btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(0, 0, rightDrawable, 0); + break; + case BraveRewardsExternalWallet.PENDING: + editor.putBoolean(PREF_VERIFY_WALLET_ENABLE, true); + editor.apply(); + + rightDrawable = R.drawable.verified_disclosure; + text = R.string.brave_ui_wallet_button_unverified; + btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(0, 0, rightDrawable, 0); + break; + case BraveRewardsExternalWallet.VERIFIED: + editor.putBoolean(PREF_VERIFY_WALLET_ENABLE, true); + editor.apply(); + + leftDrawable = R.drawable.uphold_white; + rightDrawable = R.drawable.verified_disclosure; + text = R.string.brave_ui_wallet_button_verified; + btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds( + leftDrawable, 0, rightDrawable, 0); + btnVerifyWallet.setBackgroundColor(Color.TRANSPARENT); + + // show Add funds button + if (mBtnAddFunds != null) { + mBtnAddFunds.setVisibility(View.VISIBLE); + } + break; + case BraveRewardsExternalWallet.DISCONNECTED_NOT_VERIFIED: + case BraveRewardsExternalWallet.DISCONNECTED_VERIFIED: + leftDrawable = R.drawable.uphold_white; + text = R.string.brave_ui_wallet_button_disconnected; + btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(leftDrawable, 0, 0, 0); + btnVerifyWallet.setBackgroundDrawable(ResourcesCompat.getDrawable( + ContextUtils.getApplicationContext().getResources(), + R.drawable.wallet_disconnected_button, /* theme= */ null)); + break; + default: + Log.e(TAG, "Unexpected external wallet status"); + return; + } + + // tvYourWalletTitle.setVisibility(View.GONE); + btnVerifyWallet.setVisibility(View.VISIBLE); + btnVerifyWallet.setText(mPopupView.getResources().getString(text)); + Log.e(TAG, "before onClick"); + setVerifyWalletButtonClickEvent(btnVerifyWallet, status); + + // Update add funds button based on status + if (status != BraveRewardsExternalWallet.VERIFIED) { + mBtnAddFunds.setEnabled(false); + return; + } + } + + private void setVerifyWalletButtonClickEvent( + View btnVerifyWallet, @WalletStatus final int status) { + btnVerifyWallet.setOnClickListener((new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.e(TAG, "onClick"); + BraveRewardsBalance walletBalanceObject = + mBraveRewardsNativeWorker.GetWalletBalance(); + double walletBalance = 0; + if (walletBalanceObject != null) { + walletBalance = walletBalanceObject.getTotal(); + } + + switch (status) { + case BraveRewardsExternalWallet.NOT_CONNECTED: + case BraveRewardsExternalWallet.CONNECTED: + case BraveRewardsExternalWallet.PENDING: + case BraveRewardsExternalWallet.VERIFIED: + if (walletBalance < WALLET_BALANCE_LIMIT + && mExternalWallet.getType().equals(BraveWalletProvider.UPHOLD) + && !isVerifyWalletEnabled()) { + showUpholdLoginPopupWindow(btnVerifyWallet); + } else { + int requestCode = (status == BraveRewardsExternalWallet.NOT_CONNECTED) + ? BraveActivity.VERIFY_WALLET_ACTIVITY_REQUEST_CODE + : BraveActivity.USER_WALLET_ACTIVITY_REQUEST_CODE; + Intent intent = BuildVerifyWalletActivityIntent(status); + mActivity.startActivityForResult(intent, requestCode); + } + break; + case BraveRewardsExternalWallet.DISCONNECTED_NOT_VERIFIED: + case BraveRewardsExternalWallet.DISCONNECTED_VERIFIED: + if (walletBalance < WALLET_BALANCE_LIMIT + && mExternalWallet.getType().equals(BraveWalletProvider.UPHOLD) + && !isVerifyWalletEnabled()) { + showUpholdLoginPopupWindow(btnVerifyWallet); + } else { + if (!TextUtils.isEmpty(mExternalWallet.getVerifyUrl())) { + dismiss(); + mBraveActivity.openNewOrSelectExistingTab( + mExternalWallet.getLoginUrl()); + } + } + break; + default: + Log.e(TAG, "Unexpected external wallet status"); + return; + } + } + })); + } + + private void requestPublisherInfo() { + Tab currentActiveTab = BraveRewardsHelper.currentActiveChromeTabbedActivityTab(); + if (currentActiveTab != null && !currentActiveTab.isIncognito()) { + String url = currentActiveTab.getUrl().getSpec(); + if (URLUtil.isValidUrl(url)) { + mBraveRewardsNativeWorker.GetPublisherInfo(currentActiveTab.getId(), url); + mPublisherFetcher = new Timer(); + mPublisherFetcher.schedule(new PublisherFetchTimer(currentActiveTab.getId(), url), + PUBLISHER_INFO_FETCH_RETRY, PUBLISHER_INFO_FETCH_RETRY); + showTipSection(); + mBtnTip.setEnabled(true); + } else { + showSummarySection(); + mBtnTip.setEnabled(false); + } + } else { + showSummarySection(); + mBtnTip.setEnabled(false); + } + } + + @Override + public void OnPublisherInfo(int tabId) { + mPublisherExist = true; + mCurrentTabId = tabId; + // RemoveRewardsSummaryMonthYear(); + // if (btRewardsSummary != null) { + // btRewardsSummary.setClickable(true); + // } + + String publisherFavIconURL = + mBraveRewardsNativeWorker.GetPublisherFavIconURL(mCurrentTabId); + Tab currentActiveTab = BraveRewardsHelper.currentActiveChromeTabbedActivityTab(); + String url = currentActiveTab.getUrl().getSpec(); + final String favicon_url = (publisherFavIconURL.isEmpty()) ? url : publisherFavIconURL; + + mIconFetcher.retrieveLargeIcon(favicon_url, this); + + String pubName = mBraveRewardsNativeWorker.GetPublisherName(mCurrentTabId); + String pubId = mBraveRewardsNativeWorker.GetPublisherId(mCurrentTabId); + String pubSuffix = ""; + if (pubId.startsWith(YOUTUBE_TYPE)) { + pubSuffix = mPopupView.getResources().getString(R.string.brave_ui_on_youtube); + } else if (pubName.startsWith(TWITCH_TYPE)) { + pubSuffix = mPopupView.getResources().getString(R.string.brave_ui_on_twitch); + } + pubName = "" + pubName + " " + pubSuffix; + TextView publisherName = mPopupView.findViewById(R.id.publisher_name); + publisherName.setText(Html.fromHtml(pubName)); + mPublisherAttention = mPopupView.findViewById(R.id.attention_value_text); + String percent = + Integer.toString(mBraveRewardsNativeWorker.GetPublisherPercent(mCurrentTabId)) + + "%"; + mPublisherAttention.setText(percent); + if (mSwitchAutoContribute != null) { + mSwitchAutoContribute.setOnCheckedChangeListener(null); + mSwitchAutoContribute.setChecked( + mBraveRewardsNativeWorker.GetPublisherExcluded(mCurrentTabId)); + mSwitchAutoContribute.setOnCheckedChangeListener(autoContributeSwitchListener); + } + + updatePublisherStatus(mBraveRewardsNativeWorker.GetPublisherStatus(mCurrentTabId)); + + // tv = (TextView) root.findViewById(R.id.br_no_activities_yet); + // gl = (GridLayout) thisObject.root.findViewById(R.id.br_activities); + // if (tv != null && gl != null) { + // tv.setVisibility(View.GONE); + // gl.setVisibility(View.GONE); + // } + mBraveRewardsNativeWorker.GetRecurringDonations(); + + mBraveRewardsNativeWorker.GetAutoContributeProperties(); + } + + @Override + public void OnGetAutoContributeProperties() { + if (mBraveRewardsNativeWorker !=null && mBraveRewardsNativeWorker.IsAutoContributeEnabled()) { + mPopupView.findViewById(R.id.attention_layout).setVisibility(View.VISIBLE); + mPopupView.findViewById(R.id.auto_contribution_layout).setVisibility(View.VISIBLE); + } + mBraveRewardsNativeWorker.GetRecurringDonations(); + } + + @Override + public void OnOneTimeTip() { + //TODO add logic for refresh balance + // mBraveRewardsNativeWorker.GetExternalWallet(); + } + + /** + * OnRecurringDonationUpdated is fired after a publisher was added or removed to/from + * recurrent donation list + */ + @Override + public void OnRecurringDonationUpdated() { + String pubId = mBraveRewardsNativeWorker.GetPublisherId(mCurrentTabId); + // mPubInReccuredDonation = mBraveRewardsNativeWorker.IsCurrentPublisherInRecurrentDonations(pubId); + + //all (mPubInReccuredDonation, mAutoContributeEnabled) are false: exit + //one is true: ac_enabled_controls on + //mAutoContributeEnabled: attention_layout and include_in_ac_layout on + //mPubInReccuredDonation: auto_tip_layout is on + + // if (mAutoContributeEnabled || mPubInReccuredDonation) { + // root.findViewById(R.id.ac_enabled_controls).setVisibility(View.VISIBLE); + + // if (mAutoContributeEnabled) { + // root.findViewById(R.id.attention_layout).setVisibility(View.VISIBLE); + // root.findViewById(R.id.include_in_ac_layout).setVisibility(View.VISIBLE); + // root.findViewById(R.id.brave_ui_auto_contribute_separator_top).setVisibility(View.VISIBLE); + // root.findViewById(R.id.brave_ui_auto_contribute_separator_bottom).setVisibility(View.VISIBLE); + // } + + //Temporary commented out due to dropdown spinner inflating issue on PopupWindow (API 24) + /* + if (mPubInReccuredDonation){ + double amount = mBraveRewardsNativeWorker.GetPublisherRecurrentDonationAmount(pubId); + UpdateRecurentDonationSpinner(amount); + root.findViewById(R.id.auto_tip_layout).setVisibility(View.VISIBLE); + }*/ + // } + } + + private void updatePublisherStatus(int pubStatus) { + // Set publisher verified/unverified status + String verifiedText = ""; + TextView publisherVerified = mPopupView.findViewById(R.id.publisher_verified); + publisherVerified.setAlpha(1f); + TextView refreshPublisher = mPopupView.findViewById(R.id.refresh_publisher); + refreshPublisher.setAlpha(1f); + refreshPublisher.setEnabled(true); + View refreshStatusProgress = mPopupView.findViewById(R.id.progress_refresh_status); + refreshStatusProgress.setVisibility(View.GONE); + refreshPublisher.setOnClickListener((new View.OnClickListener() { + @Override + public void onClick(View v) { + String pubId = mBraveRewardsNativeWorker.GetPublisherId(mCurrentTabId); + refreshStatusProgress.setVisibility(View.VISIBLE); + refreshPublisher.setEnabled(false); + publisherVerified.setAlpha(.3f); + mBraveRewardsNativeWorker.RefreshPublisher(pubId); + } + })); + if (pubStatus == BraveRewardsPublisher.CONNECTED + || pubStatus == BraveRewardsPublisher.UPHOLD_VERIFIED) { + verifiedText = + mPopupView.getResources().getString(R.string.brave_ui_verified_publisher); + publisherVerified.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.bat_verified, 0, 0, 0); + } else { + verifiedText = + mPopupView.getResources().getString(R.string.brave_ui_not_verified_publisher); + publisherVerified.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.bat_unverified, 0, 0, 0); + } + publisherVerified.setText(verifiedText); + publisherVerified.setVisibility(View.VISIBLE); + + // show |brave_ui_panel_connected_text| text if + // publisher is CONNECTED and user doesn't have any Brave funds (anonymous or + // blinded wallets) + // String verified_description = ""; + // if (pubStatus == BraveRewardsPublisher.CONNECTED) { + // BraveRewardsBalance balance_obj = mBraveRewardsNativeWorker.GetWalletBalance(); + // if (balance_obj != null) { + // double braveFunds = + // ((balance_obj.mWallets.containsKey(BraveRewardsBalance.WALLET_ANONYMOUS) + // && balance_obj.mWallets.get(BraveRewardsBalance.WALLET_ANONYMOUS) + // != null) + // ? balance_obj.mWallets.get( + // BraveRewardsBalance.WALLET_ANONYMOUS) + // : .0) + // + ((balance_obj.mWallets.containsKey(BraveRewardsBalance.WALLET_BLINDED) + // && balance_obj.mWallets.get(BraveRewardsBalance.WALLET_BLINDED) + // != null) + // ? balance_obj.mWallets.get( + // BraveRewardsBalance.WALLET_BLINDED) + // : .0); + // if (braveFunds <= 0) { + // verified_description = + // root.getResources().getString(R.string.brave_ui_panel_connected_text); + // } + // } + // } else if (pubStatus == BraveRewardsPublisher.NOT_VERIFIED) { + // verified_description = root.getResources().getString( + // R.string.brave_ui_not_verified_publisher_description); + // } + + // if (!TextUtils.isEmpty(verified_description)) { + // verified_description += "
" + // + root.getResources().getString(R.string.learn_more) + + // "."; + // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(verified_description); + // TextView tv_note = (TextView) root.findViewById(R.id.publisher_not_verified); + // tv_note.setText(toInsert); + // tv_note.setVisibility(View.VISIBLE); + // } + } + + @Override + public void OnRefreshPublisher(int status, String publisherKey) { + String pubName = mBraveRewardsNativeWorker.GetPublisherName(mCurrentTabId); + if (pubName.equals(publisherKey)) { + updatePublisherStatus(status); + } + }; + + class PublisherFetchTimer extends TimerTask { + private final int tabId; + private final String url; + + PublisherFetchTimer(int tabId, String url) { + this.tabId = tabId; + this.url = url; + } + + @Override + public void run() { + if (mPublisherExist || mPublisherFetchesCount >= PUBLISHER_FETCHES_COUNT) { + if (mPublisherFetcher != null) { + mPublisherFetcher.cancel(); + mPublisherFetcher = null; + } + + return; + } + if (mBraveRewardsNativeWorker == null) { + return; + } + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + mBraveRewardsNativeWorker.GetPublisherInfo(tabId, url); + } + }); + mPublisherFetchesCount++; + } } public void dismiss() { @@ -254,4 +865,145 @@ public void run() { }); } } + + private boolean isVerifyWalletEnabled() { + SharedPreferences sharedPreferences = ContextUtils.getAppSharedPreferences(); + return sharedPreferences.getBoolean(PREF_VERIFY_WALLET_ENABLE, false); + } + + private void showUpholdLoginPopupWindow(final View view) { + PopupWindow loginPopupWindow = new PopupWindow(mActivity); + + LayoutInflater inflater = + (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + ViewGroup rewardsMainLayout = mPopupView.findViewById(R.id.rewards_main_layout); + View loginPopupView = + inflater.inflate(R.layout.uphold_login_popup_window, mPopupView); + + boolean isTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity); + if (isTablet) { + ViewGroup.LayoutParams params = loginPopupView.getLayoutParams(); + params.width = dpToPx(mActivity, 320); + params.height = ViewGroup.LayoutParams.WRAP_CONTENT; + loginPopupView.setLayoutParams(params); + } + + 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)); + assert countinueToLoginIndex != 0; + 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); + + // Rect bgPadding = new Rect(); + // int popupWidth = mActivity.getResources().getDimensionPixelSize(R.dimen.menu_width) + // + bgPadding.left + bgPadding.right; + mPopupView.measure( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + int popupWidth = mPopupView.getMeasuredWidth(); + 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.setTouchInterceptor(new View.OnTouchListener() { + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + loginPopupWindow.dismiss(); + return true; + } + return false; + } + }); + + view.post(new Runnable() { + @Override + public void run() { + if (SysUtils.isLowEndDevice()) { + loginPopupWindow.setAnimationStyle(0); + } + + if (android.os.Build.VERSION.SDK_INT + < android.os.Build.VERSION_CODES.N) { // Before 7.0 + loginPopupWindow.showAsDropDown(view, 0, 0); + } else { + int[] location = new int[2]; + view.getLocationOnScreen(location); + int x = location[0]; + int y = location[1]; + loginPopupWindow.showAtLocation(view, Gravity.NO_GRAVITY, 0, y); + } + } + }); + } + + private Intent BuildVerifyWalletActivityIntent(@WalletStatus final int status) { + Class clazz = null; + switch (status) { + case BraveRewardsExternalWallet.NOT_CONNECTED: + clazz = BraveRewardsVerifyWalletActivity.class; + break; + case BraveRewardsExternalWallet.CONNECTED: + case BraveRewardsExternalWallet.PENDING: + case BraveRewardsExternalWallet.VERIFIED: + clazz = BraveRewardsUserWalletActivity.class; + break; + default: + Log.e(TAG, "Unexpected external wallet status"); + return null; + } + + Intent intent = new Intent(ContextUtils.getApplicationContext(), clazz); + 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; + } } diff --git a/android/java/res/layout/brave_rewards_panel_layout.xml b/android/java/res/layout/brave_rewards_panel_layout.xml index 9dd7b23049da..dea51a0a3800 100644 --- a/android/java/res/layout/brave_rewards_panel_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_layout.xml @@ -1,180 +1,204 @@ - - - + android:layout_height="400dp" + android:background="#FAFCFF" + android:layout_margin="12dp" + app:cardCornerRadius="16dp"> - - - - - - - - - + android:layout_height="wrap_content"> + android:background="@drawable/rewards_settings_gradient_bg" + android:orientation="vertical" + android:paddingTop="16dp" + android:paddingBottom="16dp"> - - - + android:layout_marginStart="12dp" + android:layout_marginBottom="16dp"> + android:paddingStart="16dp" + android:orientation="horizontal" + android:visibility="gone" + tools:ignore="UseCompoundDrawables"> + android:textSize="14sp" + app:drawableEndCompat="@drawable/ic_uphold" /> - + android:layout_gravity="center_vertical" + android:contentDescription="@null" + app:srcCompat="@drawable/ic_arrow_down" /> - - + android:textAllCaps="false"/> + - - - - + android:baselineAligned="false" + android:orientation="horizontal"> + android:layout_weight="0.5" + android:paddingStart="32dp" + android:orientation="vertical"> + android:textSize="14sp" /> + + + + + + + + - + android:layout_weight="0.5" + android:paddingEnd="32dp" + android:orientation="vertical"> - + - + + + + + + + + + + + - + + + - + - + - + + - + - + diff --git a/android/java/res/layout/brave_rewards_panel_publisher_layout.xml b/android/java/res/layout/brave_rewards_panel_publisher_layout.xml index 85f1cedcf983..6498b0ec0467 100644 --- a/android/java/res/layout/brave_rewards_panel_publisher_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_publisher_layout.xml @@ -65,18 +65,34 @@ android:textSize="12sp" app:drawableStartCompat="@drawable/ic_unverified_state" /> - + android:layout_marginBottom="8dp" + android:orientation="horizontal"> + + + + + + diff --git a/android/java/res/layout/brave_rewards_panel_settings_layout.xml b/android/java/res/layout/brave_rewards_panel_settings_layout.xml index 57a90ba99d0b..c2933d954311 100644 --- a/android/java/res/layout/brave_rewards_panel_settings_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_settings_layout.xml @@ -13,39 +13,65 @@ android:layout_height="wrap_content" android:orientation="horizontal"> - + android:orientation="horizontal"> + + + + + + - + android:orientation="horizontal"> + + + + + + - - - - - - - - - - - - - - @@ -59,6 +59,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" + android:visibility="gone" android:orientation="horizontal"> - %1$s0.0 + %1$s0.0 USD USD @@ -2775,6 +2775,9 @@ If you don't accept this request, VPN will not reconnect and your internet conne Monthly contribution + + ≈ %1$s0.0 USD + From 2f0bc1e73dad65f4ad81839087da591e7a6614e2 Mon Sep 17 00:00:00 2001 From: Deep Date: Tue, 23 Nov 2021 19:32:50 -0500 Subject: [PATCH 05/18] Add monthly contribution --- .../browser/BraveRewardsNativeWorker.java | 15 +++++++++++++ .../chrome/browser/BraveRewardsObserver.java | 1 + .../BraveRewardsSiteBannerActivity.java | 14 ++++++++++++ .../browser/rewards/BraveRewardsPanel.java | 22 +++++++++++++++++-- .../android/brave_rewards_native_worker.cc | 16 ++++++++++++++ .../android/brave_rewards_native_worker.h | 4 ++++ .../android/strings/android_brave_strings.grd | 7 ++++-- 7 files changed, 75 insertions(+), 4 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java index 40402aa9082f..bcf258ec4bc6 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java @@ -465,6 +465,13 @@ public void SetAutoContributionAmount(double amount) { } } + public void getAutoContributionAmount() { + synchronized (lock) { + BraveRewardsNativeWorkerJni.get().getAutoContributionAmount( + mNativeBraveRewardsNativeWorker); + } + } + public void StartProcess() { synchronized (lock) { BraveRewardsNativeWorkerJni.get().startProcess(mNativeBraveRewardsNativeWorker); @@ -564,6 +571,13 @@ public void OnGetAutoContributeProperties() { } } + @CalledByNative + public void OnGetAutoContributionAmount(double amount) { + for (BraveRewardsObserver observer : mObservers) { + observer.onGetAutoContributionAmount(amount); + } + } + @CalledByNative public void OnGetReconcileStamp(long timestamp) { for (BraveRewardsObserver observer : mObservers) { @@ -689,6 +703,7 @@ boolean isCurrentPublisherInRecurrentDonations( void setAutoContributeEnabled( long nativeBraveRewardsNativeWorker, boolean isSetAutoContributeEnabled); void setAutoContributionAmount(long nativeBraveRewardsNativeWorker, double amount); + void getAutoContributionAmount(long nativeBraveRewardsNativeWorker); void startProcess(long nativeBraveRewardsNativeWorker); void getAdsAccountStatement(long nativeBraveRewardsNativeWorker); } diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java index cba4b0fd7f8c..270510f3a795 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java @@ -16,6 +16,7 @@ default public void OnGetLatestNotification(String id, int type, long timestamp, default public void OnNotificationDeleted(String id) {}; default public void OnGetPendingContributionsTotal(double amount) {}; default public void OnGetAutoContributeProperties() {}; + default public void onGetAutoContributionAmount(double amount){}; default public void OnGetReconcileStamp(long timestamp) {}; default public void OnRecurringDonationUpdated() {}; default public void OnResetTheWholeState(boolean success) {}; diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java b/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java index 80f8adcf3206..c3ac4c108ba9 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java @@ -46,10 +46,12 @@ public class BraveRewardsSiteBannerActivity extends Activity implements private final int FADE_OUT_DURATION = 500; private final float LANDSCAPE_HEADER_WEIGHT = 2.0f; public static final String TAB_ID_EXTRA = "currentTabId"; + public static final String IS_MONTHLY_CONTRIBUTION = "is_monthly_contribution"; public static final String TIP_AMOUNT_EXTRA="tipAmount"; public static final String TIP_MONTHLY_EXTRA="tipMonthly"; private int currentTabId_ = -1; + private boolean mIsMonthlyContribution; private BraveRewardsNativeWorker mBraveRewardsNativeWorker; private final int PUBLISHER_ICON_SIDE_LEN= 70; //dp private final int TOUCH_PADDING_MONTHLY= 32; //dp @@ -121,6 +123,8 @@ public void onClick(View view) { } currentTabId_ = IntentUtils.safeGetIntExtra(getIntent(), TAB_ID_EXTRA, -1); + mIsMonthlyContribution = + IntentUtils.safeGetBooleanExtra(getIntent(), IS_MONTHLY_CONTRIBUTION, false); mBraveRewardsNativeWorker = BraveRewardsNativeWorker.getInstance(); mBraveRewardsNativeWorker.AddObserver(this); @@ -160,6 +164,11 @@ public void onClick(View view) { //set tip button onClick CheckBox monthly = (CheckBox) findViewById(R.id.make_monthly_checkbox); + if (mIsMonthlyContribution) { + monthly.setChecked(true); + TextView send_btn = (TextView) findViewById(R.id.send_donation_text); + send_btn.setText(getResources().getString(R.string.brave_ui_do_monthly)); + } View.OnClickListener send_tip_clicker = new View.OnClickListener() { @Override public void onClick(View view) { @@ -186,6 +195,11 @@ public void onClick(View view) { } boolean enough_funds = ((balance - amount) >= 0); + if (mIsMonthlyContribution) { + mBraveRewardsNativeWorker.SetAutoContributionAmount(amount); + finish(); + } + //proceed to tipping if (true == enough_funds) { if (mTippingInProgress){ diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index a3d62b9c5ca7..ff003623bfbc 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -224,8 +224,7 @@ public void onClick(View v) { Intent intent = new Intent( ContextUtils.getApplicationContext(), BraveRewardsSiteBannerActivity.class); intent.putExtra(BraveRewardsSiteBannerActivity.TAB_ID_EXTRA, mCurrentTabId); - mActivity.startActivity(intent); - // mActivity.startActivityForResult(intent, BraveActivity.SITE_BANNER_REQUEST_CODE); + mActivity.startActivityForResult(intent, BraveActivity.SITE_BANNER_REQUEST_CODE); // BraveRewardsPanelPopup is not an Activity and onActivityResult is not available // to dismiss mTippingInProgress. Post a delayed task to flip a mTippingInProgress flag. @@ -660,6 +659,25 @@ public void OnGetAutoContributeProperties() { mPopupView.findViewById(R.id.auto_contribution_layout).setVisibility(View.VISIBLE); } mBraveRewardsNativeWorker.GetRecurringDonations(); + mBraveRewardsNativeWorker.getAutoContributionAmount(); + } + + @Override + public void onGetAutoContributionAmount(double amount) { + Log.e(TAG, "Auto contribution amount : " + amount); + TextView monthlyContributionText = + mPopupView.findViewById(R.id.monthly_contribution_set_text); + monthlyContributionText.setText(String.format( + mPopupView.getResources().getString(R.string.brave_rewards_bat_value_text), + (int) amount)); + monthlyContributionText.setOnClickListener(view -> { + Intent intent = new Intent( + ContextUtils.getApplicationContext(), BraveRewardsSiteBannerActivity.class); + intent.putExtra(BraveRewardsSiteBannerActivity.TAB_ID_EXTRA, mCurrentTabId); + intent.putExtra(BraveRewardsSiteBannerActivity.IS_MONTHLY_CONTRIBUTION, true); + dismiss(); + mActivity.startActivityForResult(intent, BraveActivity.SITE_BANNER_REQUEST_CODE); + }); } @Override diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.cc b/browser/brave_rewards/android/brave_rewards_native_worker.cc index d3ec2bbc877d..21cb660e2ab7 100644 --- a/browser/brave_rewards/android/brave_rewards_native_worker.cc +++ b/browser/brave_rewards/android/brave_rewards_native_worker.cc @@ -636,6 +636,22 @@ void BraveRewardsNativeWorker::SetAutoContributionAmount(JNIEnv* env, } } +void BraveRewardsNativeWorker::GetAutoContributionAmount(JNIEnv* env) { + if (brave_rewards_service_) { + brave_rewards_service_->GetAutoContributionAmount( + base::BindOnce(&BraveRewardsNativeWorker::OnGetAutoContributionAmount, + weak_factory_.GetWeakPtr())); + } +} + +void BraveRewardsNativeWorker::OnGetAutoContributionAmount( + double auto_contribution_amount) { + JNIEnv* env = base::android::AttachCurrentThread(); + Java_BraveRewardsNativeWorker_OnGetAutoContributionAmount( + env, weak_java_brave_rewards_native_worker_.get(env), + auto_contribution_amount); +} + bool BraveRewardsNativeWorker::IsRewardsEnabled(JNIEnv* env) { if (brave_rewards_service_) { return brave_rewards_service_->IsRewardsEnabled(); diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.h b/browser/brave_rewards/android/brave_rewards_native_worker.h index ec96406b970d..d98a7f92a5d7 100644 --- a/browser/brave_rewards/android/brave_rewards_native_worker.h +++ b/browser/brave_rewards/android/brave_rewards_native_worker.h @@ -125,6 +125,8 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver, void SetAutoContributionAmount(JNIEnv* env, jdouble value); + void GetAutoContributionAmount(JNIEnv* env); + void GetExternalWallet(JNIEnv* env); void DisconnectWallet(JNIEnv* env); @@ -147,6 +149,8 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver, void OnGetAutoContributeProperties( ledger::type::AutoContributePropertiesPtr properties); + void OnGetAutoContributionAmount(double auto_contribution_amount); + void OnGetPendingContributionsTotal(double amount); void OnPanelPublisherInfo( diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index 0b41d793580d..f15f04a06aa6 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -558,10 +558,10 @@ This file contains all "about" strings. It is set to NOT be translated, in tran Settings - Brave Verified Publisher + Verified Creator - Not yet verified + Unverified Creator This Brave Verified Creator has not yet configured their account to receive contributions from Brave Users. @@ -2778,6 +2778,9 @@ If you don't accept this request, VPN will not reconnect and your internet conne ≈ %1$s0.0 USD + + %1$s0 BAT + From f958810f622eb12defaa6464356ca0398f08508c Mon Sep 17 00:00:00 2001 From: Deep Date: Tue, 30 Nov 2021 21:09:06 -0500 Subject: [PATCH 06/18] Update Layout for Tip/Summary toggle Add balance report --- .../browser/rewards/BraveRewardsPanel.java | 107 +++++++++++++ .../res/layout/brave_rewards_panel_layout.xml | 4 +- .../brave_rewards_panel_summary_layout.xml | 149 +++++------------- .../layout/brave_rewards_panel_tip_layout.xml | 2 +- 4 files changed, 146 insertions(+), 116 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index ff003623bfbc..a8a06d97280a 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -99,6 +99,15 @@ public class BraveRewardsPanel private static final int WALLET_BALANCE_LIMIT = 15; + // Balance report codes + private static final int BALANCE_REPORT_GRANTS = 0; + private static final int BALANCE_REPORT_EARNING_FROM_ADS = 1; + private static final int BALANCE_REPORT_AUTO_CONTRIBUTE = 2; + private static final int BALANCE_REPORT_RECURRING_DONATION = 3; + private static final int BALANCE_REPORT_ONE_TIME_DONATION = 4; + + private static final String ERROR_CONVERT_PROBI = "ERROR"; + private final View mAnchorView; private final PopupWindow mPopupWindow; private ViewGroup mPopupView; @@ -340,6 +349,7 @@ public void OnStartProcess() { mBraveRewardsNativeWorker.GetRewardsParameters(); mBraveRewardsNativeWorker.GetExternalWallet(); mBraveRewardsNativeWorker.getAdsAccountStatement(); + mBraveRewardsNativeWorker.GetCurrentBalanceReport(); // if (root != null && PackageUtils.isFirstInstall(mActivity) // && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { // if (BraveRewardsHelper.getBraveRewardsAppOpenCount() == 0 @@ -365,6 +375,103 @@ public void OnStartProcess() { // } } + @Override + public void OnGetCurrentBalanceReport(double[] report) { + Log.e(TAG, "OnGetCurrentBalanceReport : "+ report); + if (report == null) { + return; + } + String batText = BraveRewardsHelper.BAT_TEXT; + for (int i = 0; i < report.length; i++) { + TextView tvTitle = null; + TextView tv = null; + TextView tvUSD = null; + String text = ""; + String textUSD = ""; + + double probiDouble = report[i]; + boolean hideControls = (probiDouble == 0); + String value = Double.isNaN(probiDouble) ? "0.000"+batText : String.format(Locale.getDefault(), "%.3f", probiDouble); + + String usdValue = "0.00 USD"; + if (! Double.isNaN(probiDouble)) { + double usdValueDouble = probiDouble * mBraveRewardsNativeWorker.GetWalletRate(); + usdValue = String.format(Locale.getDefault(), "%.2f USD", usdValueDouble); + } + + switch (i) { + case BALANCE_REPORT_GRANTS: + // tvTitle = (TextView)root.findViewById(R.id.br_grants_claimed_title); + // tvTitle.setText(BraveRewardsPanelPopup.this.root.getResources().getString( + // R.string.brave_ui_token_grant_claimed)); + tv = mPopupView.findViewById(R.id.total_grants_claimed_bat_text); + tvUSD = mPopupView.findViewById(R.id.total_grants_claimed_usd_text); + text = "" + value + " " + batText + ""; + textUSD = usdValue; + break; + case BALANCE_REPORT_EARNING_FROM_ADS: + // tvTitle = (TextView)root.findViewById(R.id.br_earnings_ads_title); + tv = mPopupView.findViewById(R.id.rewards_from_ads_bat_text); + tvUSD = mPopupView.findViewById(R.id.rewards_from_ads_usd_text); + text = "" + value + " " + batText + ""; + textUSD = usdValue; + break; + case BALANCE_REPORT_AUTO_CONTRIBUTE: + // tvTitle = (TextView)root.findViewById(R.id.br_auto_contribute_title); + tv = mPopupView.findViewById(R.id.auto_contribute_bat_text); + tvUSD = mPopupView.findViewById(R.id.auto_contribute_usd_text); + text = "" + value > 0 ? value * (-1) : value + " " + batText + ""; + textUSD = usdValue; + break; + case BALANCE_REPORT_ONE_TIME_DONATION: + // tvTitle = (TextView)root.findViewById(R.id.br_recurring_donation_title); + tv = mPopupView.findViewById(R.id.one_time_tip_bat_text); + tvUSD = mPopupView.findViewById(R.id.one_time_tip_usd_text); + text = "" + value > 0 ? value * (-1) : value + " " + batText + ""; + textUSD = usdValue; + break; + case BALANCE_REPORT_RECURRING_DONATION: + // tvTitle = (TextView)root.findViewById(R.id.br_one_time_donation_title); + tv = mPopupView.findViewById(R.id.monthly_tips_bat_text); + tvUSD = mPopupView.findViewById(R.id.monthly_tips_usd_text); + text = "" + value > 0 ? value * (-1) : value + " " + batText + ""; + textUSD = usdValue; + break; + } + Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(text); + tv.setText(toInsert); + tvUSD.setText(textUSD); + // if (tv != null && tvUSD != null && + // !text.isEmpty() && !textUSD.isEmpty()) { + // // tvTitle.setVisibility(hideControls ? View.GONE : View.VISIBLE); + // tv.setVisibility(hideControls ? View.GONE : View.VISIBLE); + // tvUSD.setVisibility(hideControls ? View.GONE : View.VISIBLE); + // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(text); + // tv.setText(toInsert); + // tvUSD.setText(textUSD); + // } + } + + mBraveRewardsNativeWorker.GetPendingContributionsTotal(); + } + + @Override + public void OnGetPendingContributionsTotal(double amount) { + // if (amount > 0.0) { + // String non_verified_summary = + // String.format( + // root.getResources().getString(R.string.brave_ui_reserved_amount_text), + // String.format(Locale.getDefault(), "%.3f", amount)) + // + " " + root.getResources().getString(R.string.learn_more) + // + "."; + // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(non_verified_summary); + // tvPublisherNotVerifiedSummary.setText(toInsert); + // tvPublisherNotVerifiedSummary.setVisibility(View.VISIBLE); + // } else { + // tvPublisherNotVerifiedSummary.setVisibility(View.GONE); + // } + } + @Override public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, int adsReceivedThisMonth, double earningsThisMonth, double earningsLastMonth){ diff --git a/android/java/res/layout/brave_rewards_panel_layout.xml b/android/java/res/layout/brave_rewards_panel_layout.xml index dea51a0a3800..69a3eec288df 100644 --- a/android/java/res/layout/brave_rewards_panel_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_layout.xml @@ -26,7 +26,7 @@ - - - - - - - + android:layout_marginEnd="4dp" + android:fontFamily="sans-serif" + android:textColor="#C12D7C" + android:textSize="14sp" /> - - - - - - - + android:layout_marginEnd="4dp" + android:fontFamily="sans-serif" + android:textColor="#C12D7C" + android:textSize="14sp" /> - - - - - - - + android:layout_marginEnd="4dp" + android:fontFamily="sans-serif" + android:textColor="@color/rewards_settings_button_color" + android:textSize="14sp" /> - - - - - - - + android:layout_marginEnd="4dp" + android:fontFamily="sans-serif" + android:textColor="@color/rewards_settings_button_color" + android:textSize="14sp" /> - - - - - - - + android:layout_marginEnd="4dp" + android:fontFamily="sans-serif" + android:textColor="@color/rewards_settings_button_color" + android:textSize="14sp" /> Date: Thu, 9 Dec 2021 14:46:48 -0500 Subject: [PATCH 07/18] Add notification layout --- android/brave_java_resources.gni | 6 +- .../chrome/browser/BraveRewardsHelper.java | 2 +- .../browser/rewards/BraveRewardsPanel.java | 463 +++++++++++++++++- android/java/res/drawable/ic_calendar.xml | 4 + android/java/res/drawable/ic_close_12.xml | 4 + .../java/res/drawable/ic_money_bag_coins.xml | 4 + .../res/layout/brave_rewards_panel_layout.xml | 260 +++++----- ...rave_rewards_panel_notification_layout.xml | 104 ++++ .../android/strings/android_brave_strings.grd | 3 + 9 files changed, 718 insertions(+), 132 deletions(-) create mode 100644 android/java/res/drawable/ic_calendar.xml create mode 100644 android/java/res/drawable/ic_close_12.xml create mode 100644 android/java/res/drawable/ic_money_bag_coins.xml create mode 100644 android/java/res/layout/brave_rewards_panel_notification_layout.xml diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni index f798da291fdf..ce81acd7fabd 100644 --- a/android/brave_java_resources.gni +++ b/android/brave_java_resources.gni @@ -523,8 +523,6 @@ brave_java_resources = [ "java/res/drawable/bat_ads_logo_button.xml", "java/res/drawable/bat_panel_gradient.xml", "java/res/drawable/bat_rewards_summary_gradient.xml", - "java/res/drawable/binance_edittext.xml", - "java/res/drawable/binance_radio_button_selector.xml", "java/res/drawable/blue_48_rounded_bg.xml", "java/res/drawable/blue_rounded_button.xml", "java/res/drawable/blue_rounded_holo_button.xml", @@ -728,8 +726,12 @@ brave_java_resources = [ "java/res/drawable/shields_tooltip_background_1.xml", "java/res/drawable/shields_tooltip_background_2.xml", "java/res/drawable/sync_icon.xml", + "java/res/layout/brave_rewards_panel_notification_layout.xml", "java/res/drawable/tab_selector.xml", "java/res/drawable/tip_amount.xml", + "java/res/drawable/ic_close_12.xml", + "java/res/drawable/ic_calendar.xml", + "java/res/drawable/ic_money_bag_coins.xml", "java/res/drawable/transparent_bg_bordered.xml", "java/res/drawable/unverified_48_rounded_bg.xml", "java/res/drawable/wallet_disconnected_button.xml", diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java b/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java index 243bbb51e4e8..54e1d8ce44a3 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java @@ -431,7 +431,7 @@ public void onAnimationEnd(Animator animation) { } - static double probiToDouble(String probi) { + public static double probiToDouble(String probi) { final String PROBI_POWER = "1000000000000000000"; double val = Double.NaN; try { diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index a8a06d97280a..c5504cd741dc 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -56,10 +56,12 @@ import org.json.JSONException; +import org.chromium.base.BraveReflectionUtil; import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.SysUtils; import org.chromium.chrome.R; +import org.chromium.chrome.browser.BraveRewardsHelper; import org.chromium.chrome.browser.BraveRewardsBalance; import org.chromium.chrome.browser.BraveRewardsExternalWallet; import org.chromium.chrome.browser.BraveRewardsExternalWallet.WalletStatus; @@ -106,6 +108,18 @@ public class BraveRewardsPanel private static final int BALANCE_REPORT_RECURRING_DONATION = 3; private static final int BALANCE_REPORT_ONE_TIME_DONATION = 4; + // Custom Android notification + private static final char NOTIFICATION_PROMID_SEPARATOR = '_'; + private static final int REWARDS_NOTIFICATION_NO_INTERNET = 1000; + private static final String REWARDS_NOTIFICATION_NO_INTERNET_ID = "29d835c2-5752-4152-93c3-8a1ded9dd4ec"; + private static final int REWARDS_PROMOTION_CLAIM_ERROR = REWARDS_NOTIFICATION_NO_INTERNET + 1; + private static final String REWARDS_PROMOTION_CLAIM_ERROR_ID = "rewards_promotion_claim_error_id"; + + // Auto contribute results + private static final String AUTO_CONTRIBUTE_SUCCESS = "0"; + private static final String AUTO_CONTRIBUTE_GENERAL_ERROR = "1"; + private static final String AUTO_CONTRIBUTE_NOT_ENOUGH_FUNDS = "15"; + private static final String AUTO_CONTRIBUTE_TIPPING_ERROR = "16"; private static final String ERROR_CONVERT_PROBI = "ERROR"; private final View mAnchorView; @@ -132,6 +146,8 @@ public class BraveRewardsPanel private int mPublisherFetchesCount; private boolean mPublisherExist; + private String mCurrentNotificationId; + private BraveRewardsNativeWorker mBraveRewardsNativeWorker; private int mCurrentTabId; @@ -140,8 +156,11 @@ public class BraveRewardsPanel private BraveRewardsExternalWallet mExternalWallet; + private View mNotificationLayout; + private boolean mClaimInProcess; + public BraveRewardsPanel(View anchorView) { - // currentNotificationId = ""; + mCurrentNotificationId = ""; mPublisherExist = false; mPublisherFetchesCount = 0; mCurrentTabId = -1; @@ -314,7 +333,409 @@ private void showTipSection() { mRewardsTipLayout.setVisibility(View.VISIBLE); } + private void setNotificationsControls() { + // Check for notifications + + mNotificationLayout = mPopupView.findViewById(R.id.brave_rewards_panel_notification_layout_id); + + Log.e(TAG, "setNotificationsControls"); + if (mBraveRewardsNativeWorker != null) { + mBraveRewardsNativeWorker.GetAllNotifications(); + } + ImageView btnCloseNotification = mPopupView.findViewById(R.id.btn_close_notification); + if (btnCloseNotification != null) { + btnCloseNotification.setOnClickListener((new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mCurrentNotificationId.isEmpty()) { + assert false; + + return; + } + if (mBraveRewardsNativeWorker != null) { + mBraveRewardsNativeWorker.DeleteNotification(mCurrentNotificationId); + } + } + })); + } + } + + /** + * Validates if a notification can be processed and has an expected + * number of arguments + */ + private boolean isValidNotificationType(int type, int argsNum) { + Log.e(TAG, "isValidNotificationType : "+type); + boolean valid = false; + + switch (type) { + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_AUTO_CONTRIBUTE: + valid = (argsNum >= 4) ? true : false; + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_VERIFIED_PUBLISHER: + valid = (argsNum >= 1) ? true : false; + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT_ADS: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_INSUFFICIENT_FUNDS: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_TIPS_PROCESSED: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_ADS_ONBOARDING: + case REWARDS_NOTIFICATION_NO_INTERNET: + case REWARDS_PROMOTION_CLAIM_ERROR: + valid = true; + break; + default: + valid = false; + } + Log.i(TAG, "IsValidNotificationType: type %d argnum %d ", type, argsNum); + return valid; + } + + private void showNotification(String id, int type, long timestamp, + String[] args) { + Log.e(TAG, "showNotification"); + if (mBraveRewardsNativeWorker == null) { + return; + } + + // don't process unknown notifications + if ( !isValidNotificationType (type, args.length) && mBraveRewardsNativeWorker != null) { + Log.e(TAG, "showNotification 1"); + mBraveRewardsNativeWorker.DeleteNotification(id); + return; + } + + mCurrentNotificationId = id; + TextView notificationDayText = mPopupView.findViewById(R.id.notification_day_text); + String currentDay=(String)android.text.format.DateFormat.format("MMM dd", new Date()); + notificationDayText.setText(currentDay); + + + TextView notificationTitleText = mPopupView.findViewById(R.id.notification_title_text); + TextView notificationSubtitleText = mPopupView.findViewById(R.id.notification_subtitle_text); + TextView actionNotificationButton = mPopupView.findViewById(R.id.btn_action_notification); + + + // LinearLayout hl = (LinearLayout)root.findViewById(R.id.header_layout); + // hl.setBackgroundResource(R.drawable.notification_header); + // GridLayout gl = (GridLayout)root.findViewById(R.id.wallet_info_gridlayout); + // gl.setVisibility(View.GONE); + // TimeZone utc = TimeZone.getTimeZone("UTC"); + // Calendar calTime = Calendar.getInstance(utc); + // calTime.setTimeInMillis(timestamp * 1000); + // String currentMonth = BraveRewardsHelper.getCurrentMonth(calTime, + // root.getResources(), false); + // String currentDay = Integer.toString(calTime.get(Calendar.DAY_OF_MONTH)); + // String notificationTime = currentMonth + " " + currentDay; + String title = ""; + String description = ""; + // Button btClaimOk = (Button)root.findViewById(R.id.br_claim_button); + View claimProgress = mPopupView.findViewById(R.id.claim_progress); + + + //hide or show 'Claim/OK' button if Grant claim is (not) in process + mClaimInProcess = mBraveRewardsNativeWorker.IsGrantClaimInProcess(); + if (mClaimInProcess) { + BraveRewardsHelper.crossfade(actionNotificationButton, claimProgress, View.GONE, 1f, BraveRewardsHelper.CROSS_FADE_DURATION); + } else { + actionNotificationButton.setEnabled(true); + BraveRewardsHelper.crossfade(claimProgress, actionNotificationButton, View.GONE, 1f, BraveRewardsHelper.CROSS_FADE_DURATION); + } + + // TextView notificationClose = (TextView)root.findViewById(R.id.br_notification_close); + // notificationClose.setVisibility(View.VISIBLE); + // ImageView notification_icon = (ImageView)root.findViewById(R.id.br_notification_icon); + // LinearLayout nit = (LinearLayout)root.findViewById(R.id.notification_image_text); + // nit.setOrientation(LinearLayout.VERTICAL); + // LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)nit.getLayoutParams(); + // params.setMargins(params.leftMargin, 5, params.rightMargin, params.bottomMargin); + // nit.setLayoutParams(params); + // TextView tv = (TextView)root.findViewById(R.id.br_notification_description); + // tv.setGravity(Gravity.CENTER); + + // LinearLayout ll = (LinearLayout)root.findViewById(R.id.notification_info_layout); + // ll.setVisibility(View.VISIBLE); + + // TODO other types of notifications + switch (type) { + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_AUTO_CONTRIBUTE: + // TODO find the case where it is used + // notification_icon.setImageResource(R.drawable.icon_validated_notification); + Log.e(TAG, "showNotification 2"); + String result = args[1]; + switch (result) { + case AUTO_CONTRIBUTE_SUCCESS: + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + title = mPopupView.getResources().getString(R.string.brave_ui_rewards_contribute); + // notification_icon.setImageResource(R.drawable.contribute_icon); + // hl.setBackgroundResource(R.drawable.notification_header_normal); + + double value = 0; + String valueString = ""; + String[] splittedValue = args[3].split("\\.", 0); + // 18 digits is a probi min digits count + if (splittedValue.length != 0 && splittedValue[0].length() >= 18) { + value = BraveRewardsHelper.probiToDouble(args[3]); + valueString = Double.isNaN(value) + ? ERROR_CONVERT_PROBI + : String.format(Locale.getDefault(), "%.3f", value); + } else { + value = Double.parseDouble(args[3]); + valueString = String.format(Locale.getDefault(), "%.3f", value); + } + + description = + String.format(mPopupView.getResources().getString( + R.string.brave_ui_rewards_contribute_description), + valueString); + break; + case AUTO_CONTRIBUTE_NOT_ENOUGH_FUNDS: + Log.e(TAG, "showNotification 3"); + title = ""; + // notification_icon.setImageResource(R.drawable.icon_warning_notification); + // hl.setBackgroundResource(R.drawable.notification_header_warning); + description = + mPopupView.getResources().getString(R.string.brave_ui_notification_desc_no_funds); + break; + case AUTO_CONTRIBUTE_TIPPING_ERROR: + Log.e(TAG, "showNotification 4"); + title = ""; + // notification_icon.setImageResource(R.drawable.icon_error_notification); + // hl.setBackgroundResource(R.drawable.notification_header_error); + description = + mPopupView.getResources().getString(R.string.brave_ui_notification_desc_tip_error); + break; + default: + title = ""; + // notification_icon.setImageResource(R.drawable.icon_error_notification); + // hl.setBackgroundResource(R.drawable.notification_header_error); + description = + mPopupView.getResources().getString(R.string.brave_ui_notification_desc_contr_error); + } + if (title.isEmpty()) { + actionNotificationButton.setVisibility(View.GONE); + // nit.setOrientation(LinearLayout.HORIZONTAL); + // params.setMargins(params.leftMargin, 35, params.rightMargin, params.bottomMargin); + // nit.setLayoutParams(params); + // tv.setGravity(Gravity.START); + } + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT_ADS: + Log.e(TAG, "showNotification 5"); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.brave_ui_claim)); + + // int grant_icon_id = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type ) ? + // R.drawable.grant_icon : R.drawable.notification_icon; + // notification_icon.setImageResource(grant_icon_id); + + title = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type) + ? mPopupView.getResources().getString(R.string.brave_ui_new_token_grant) + : mPopupView.getResources().getString(R.string.notification_category_group_brave_ads); + + description = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type) + ? String.format(mPopupView.getResources().getString(R.string.brave_ui_new_grant), + mPopupView.getResources().getString(R.string.token)) + : mPopupView.getResources().getString(R.string.brave_ads_you_earned); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_INSUFFICIENT_FUNDS: + Log.e(TAG, "showNotification 6"); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + // notification_icon.setImageResource(R.drawable.notification_icon); + title = mPopupView.getResources().getString(R.string.brave_ui_insufficient_funds_msg); + description = mPopupView.getResources().getString(R.string.brave_ui_insufficient_funds_desc); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET: + Log.e(TAG, "showNotification 7"); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + // notification_icon.setImageResource(R.drawable.notification_icon); + title = mPopupView.getResources().getString(R.string.brave_ui_backup_wallet_msg); + description = mPopupView.getResources().getString(R.string.brave_ui_backup_wallet_desc); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_TIPS_PROCESSED: + Log.e(TAG, "showNotification 8"); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + title = mPopupView.getResources().getString(R.string.brave_ui_contribution_tips); + description = mPopupView.getResources().getString(R.string.brave_ui_tips_processed_notification); + // notification_icon.setImageResource(R.drawable.contribute_icon); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_ADS_ONBOARDING: + Log.e(TAG, "showNotification 9"); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.brave_ui_turn_on_ads)); + title = mPopupView.getResources().getString(R.string.brave_ui_brave_ads_launch_title); + description = ""; //TODO verify the text + // notification_icon.setImageResource(R.drawable.notification_icon); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_VERIFIED_PUBLISHER: + Log.e(TAG, "showNotification 10"); + String pubName = args[0]; + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + title = mPopupView.getResources().getString(R.string.brave_ui_pending_contribution_title); + description = mPopupView.getResources().getString(R.string.brave_ui_verified_publisher_notification, pubName); + // notification_icon.setImageResource(R.drawable.contribute_icon); + break; + case REWARDS_NOTIFICATION_NO_INTERNET: + Log.e(TAG, "showNotification 11"); + title = ""; + // notification_icon.setImageResource(R.drawable.icon_error_notification); + // hl.setBackgroundResource(R.drawable.notification_header_error); + description = "" + mPopupView.getResources().getString(R.string.brave_rewards_local_uh_oh) + + " " + mPopupView.getResources().getString(R.string.brave_rewards_local_server_not_responding); + actionNotificationButton.setVisibility(View.GONE); + // notificationClose.setVisibility(View.GONE); + // nit.setOrientation(LinearLayout.HORIZONTAL); + // params.setMargins(params.leftMargin, 180, params.rightMargin, params.bottomMargin); + // nit.setLayoutParams(params); + // tv.setGravity(Gravity.START); + break; + case REWARDS_PROMOTION_CLAIM_ERROR: + Log.e(TAG, "showNotification 12"); + title = ""; + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + description = "" + + mPopupView.getResources().getString( + R.string.brave_rewards_local_general_grant_error_title) + + ""; + // notification_icon.setImageResource(R.drawable.coin_stack); + // hl.setBackgroundResource(R.drawable.notification_header_error); + // notificationClose.setVisibility(View.GONE); + // nit.setOrientation(LinearLayout.HORIZONTAL); + // params.setMargins(params.leftMargin, 180, params.rightMargin, params.bottomMargin); + // nit.setLayoutParams(params); + // tv.setGravity(Gravity.START); + break; + default: + Log.e(TAG, "This notification type is either invalid or not handled yet: " + type); + assert false; + return; + } + // String stringToInsert = (title.isEmpty() ? "" : ("" + title + "" + " | ")) + description + + // (title.isEmpty() ? "" : (" " + notificationTime + "")); + // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(stringToInsert); + // tv.setText(toInsert); + notificationTitleText.setText(title); + notificationSubtitleText.setText(description); + + if (mNotificationLayout != null) { + Log.e(TAG, "mNotificationLayout visible"); + mNotificationLayout.setVisibility(View.VISIBLE); + } + + setNotificationButtoClickListener(); + } + + //TODO needs to be changed + private void setNotificationButtoClickListener() { + Log.e(TAG, "setNotificationButtoClickListener"); + TextView actionNotificationButton = mPopupView.findViewById(R.id.btn_action_notification); + String strAction = (actionNotificationButton != null && mBraveRewardsNativeWorker != null ) ? actionNotificationButton.getText().toString() : ""; + if (strAction.equals(mPopupView.getResources().getString(R.string.ok))) { + actionNotificationButton.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.e(TAG, "setNotificationButtoClickListener 1"); + // This is custom Android notification and thus should be dismissed intead of + // deleting + if (mCurrentNotificationId.equals(REWARDS_PROMOTION_CLAIM_ERROR_ID)) { + dismissNotification(mCurrentNotificationId); + return; + } + mBraveRewardsNativeWorker.DeleteNotification(mCurrentNotificationId); + } + }); + } else if (strAction.equals(mPopupView.getResources().getString(R.string.brave_ui_claim))) { + actionNotificationButton.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.e(TAG, "setNotificationButtoClickListener 2"); + //disable and hide CLAIM button + // actionNotificationButton.setEnabled(false); + + if (mClaimInProcess || mCurrentNotificationId.isEmpty()) { + return; + } + + int promIdSeparator = mCurrentNotificationId.lastIndexOf(NOTIFICATION_PROMID_SEPARATOR); + String promId = ""; + if (-1 != promIdSeparator ) { + promId = mCurrentNotificationId.substring(promIdSeparator + 1); + } + if (promId.isEmpty()) { + return; + } + + mClaimInProcess = true; + + View fadein = mPopupView.findViewById(R.id.claim_progress); + BraveRewardsHelper.crossfade(actionNotificationButton, fadein, View.GONE, 1f, BraveRewardsHelper.CROSS_FADE_DURATION); + + mBraveRewardsNativeWorker.GetGrant(promId); + // walletDetailsReceived = false; //re-read wallet status + // EnableWalletDetails(false); + } + }); + } else if (strAction.equals(mPopupView.getResources().getString(R.string.brave_ui_turn_on_ads))) { + actionNotificationButton.setOnClickListener( new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.e(TAG, "setNotificationButtoClickListener 3"); + mBraveRewardsNativeWorker.DeleteNotification(mCurrentNotificationId); + assert (BraveReflectionUtil.EqualTypes( + mActivity.getClass(), BraveActivity.class)); + BraveActivity.class.cast(mActivity).openNewOrSelectExistingTab( + BraveActivity.REWARDS_SETTINGS_URL); + dismiss(); + } + }); + } + } + + private void dismissNotification(String id) { + Log.e(TAG, "dismissNotification"); + if (!mCurrentNotificationId.equals(id)) { + return; + } + hideNotifications(); + mCurrentNotificationId = ""; + if (mBraveRewardsNativeWorker != null) { + mBraveRewardsNativeWorker.GetAllNotifications(); + } + } + + private void hideNotifications() { + Log.e(TAG, "hideNotifications"); + if (mNotificationLayout != null) { + mNotificationLayout.setVisibility(View.GONE); + } + } + + @Override + public void OnClaimPromotion(int responseCode) { + if (responseCode != BraveRewardsNativeWorker.LEDGER_OK) { + String args[] = {}; + showNotification(REWARDS_PROMOTION_CLAIM_ERROR_ID, REWARDS_PROMOTION_CLAIM_ERROR, 0, args); + } + //TODO add logic for balance refresh + else if (responseCode == BraveRewardsNativeWorker.LEDGER_OK) { + Log.e(TAG, "BraveRewardsNativeWorker.LEDGER_OK"); + // mBraveRewardsNativeWorker.GetRewardsParameters(); + // mBraveRewardsNativeWorker.GetExternalWallet(); + // mBraveRewardsNativeWorker.getAdsAccountStatement(); + // mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + } + } + + @Override + public void OnGrantFinish(int result) { + Log.e(TAG, "OnGrantFinish"); + mBraveRewardsNativeWorker.GetAllNotifications(); + mBraveRewardsNativeWorker.GetRewardsParameters(); + mBraveRewardsNativeWorker.GetExternalWallet(); + mBraveRewardsNativeWorker.getAdsAccountStatement(); + mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + } OnCheckedChangeListener autoContributeSwitchListener = new OnCheckedChangeListener() { @Override @@ -350,6 +771,7 @@ public void OnStartProcess() { mBraveRewardsNativeWorker.GetExternalWallet(); mBraveRewardsNativeWorker.getAdsAccountStatement(); mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + setNotificationsControls(); // if (root != null && PackageUtils.isFirstInstall(mActivity) // && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { // if (BraveRewardsHelper.getBraveRewardsAppOpenCount() == 0 @@ -420,21 +842,21 @@ public void OnGetCurrentBalanceReport(double[] report) { // tvTitle = (TextView)root.findViewById(R.id.br_auto_contribute_title); tv = mPopupView.findViewById(R.id.auto_contribute_bat_text); tvUSD = mPopupView.findViewById(R.id.auto_contribute_usd_text); - text = "" + value > 0 ? value * (-1) : value + " " + batText + ""; + text = "" + value + " " + batText + ""; textUSD = usdValue; break; case BALANCE_REPORT_ONE_TIME_DONATION: // tvTitle = (TextView)root.findViewById(R.id.br_recurring_donation_title); tv = mPopupView.findViewById(R.id.one_time_tip_bat_text); tvUSD = mPopupView.findViewById(R.id.one_time_tip_usd_text); - text = "" + value > 0 ? value * (-1) : value + " " + batText + ""; + text = "" + value + " " + batText + ""; textUSD = usdValue; break; case BALANCE_REPORT_RECURRING_DONATION: // tvTitle = (TextView)root.findViewById(R.id.br_one_time_donation_title); tv = mPopupView.findViewById(R.id.monthly_tips_bat_text); tvUSD = mPopupView.findViewById(R.id.monthly_tips_usd_text); - text = "" + value > 0 ? value * (-1) : value + " " + batText + ""; + text = "" + value + " " + batText + ""; textUSD = usdValue; break; } @@ -545,6 +967,39 @@ public void OnRewardsParameters(int errorCode) { // } } + @Override + public void OnNotificationAdded(String id, int type, long timestamp, + String[] args) { + // Do nothing here as we will receive the most recent notification + // in OnGetLatestNotification + } + + @Override + public void OnNotificationsCount(int count) {} + + @Override + public void OnGetLatestNotification(String id, int type, long timestamp, + String[] args) { + if (type == BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET) { + if (mBraveRewardsNativeWorker != null) { + mBraveRewardsNativeWorker.DeleteNotification(id); + mBraveRewardsNativeWorker.GetAllNotifications(); + } + return; + } + + // This is to make sure that user saw promotion error message before showing the + // rest of messages + if (!mCurrentNotificationId.equals(REWARDS_PROMOTION_CLAIM_ERROR_ID)) { + showNotification(id, type, timestamp, args); + } + } + + @Override + public void OnNotificationDeleted(String id) { + dismissNotification(id); + } + @Override public void OnGetExternalWallet(int errorCode, String externalWallet) { Log.e(TAG, "OnGetExternalWallet"); diff --git a/android/java/res/drawable/ic_calendar.xml b/android/java/res/drawable/ic_calendar.xml new file mode 100644 index 000000000000..f39274c3d6e0 --- /dev/null +++ b/android/java/res/drawable/ic_calendar.xml @@ -0,0 +1,4 @@ + + + diff --git a/android/java/res/drawable/ic_close_12.xml b/android/java/res/drawable/ic_close_12.xml new file mode 100644 index 000000000000..f6dfb621cd33 --- /dev/null +++ b/android/java/res/drawable/ic_close_12.xml @@ -0,0 +1,4 @@ + + + diff --git a/android/java/res/drawable/ic_money_bag_coins.xml b/android/java/res/drawable/ic_money_bag_coins.xml new file mode 100644 index 000000000000..b1fa6d037715 --- /dev/null +++ b/android/java/res/drawable/ic_money_bag_coins.xml @@ -0,0 +1,4 @@ + + + diff --git a/android/java/res/layout/brave_rewards_panel_layout.xml b/android/java/res/layout/brave_rewards_panel_layout.xml index 69a3eec288df..6ec1727f2ebc 100644 --- a/android/java/res/layout/brave_rewards_panel_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_layout.xml @@ -14,190 +14,200 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - + android:layout_height="wrap_content"> - + android:background="@drawable/rewards_settings_gradient_bg" + android:orientation="vertical" + android:paddingTop="16dp" + android:paddingBottom="16dp"> - + android:layout_marginStart="16dp" + android:layout_marginBottom="16dp"> - - - + android:paddingStart="16dp" + android:orientation="horizontal" + android:visibility="gone" + tools:ignore="UseCompoundDrawables"> - - - - - + - + - + + android:textAllCaps="false"/> + + + + + android:layout_weight="0.5" + android:paddingStart="16dp" + android:orientation="vertical"> + android:textSize="14sp" /> + + + + + + + + - - - - - - - - - - + android:layout_weight="0.5" + android:paddingEnd="32dp" + android:orientation="vertical"> + + + android:textSize="14sp" /> + + + + + + + + - - - + - + - + + + + android:id="@+id/brave_rewards_panel_notification_layout_id" + layout="@layout/brave_rewards_panel_notification_layout" /> - + diff --git a/android/java/res/layout/brave_rewards_panel_notification_layout.xml b/android/java/res/layout/brave_rewards_panel_notification_layout.xml new file mode 100644 index 000000000000..04ffe8dfa00b --- /dev/null +++ b/android/java/res/layout/brave_rewards_panel_notification_layout.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index f15f04a06aa6..6d98bdbbe958 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -2775,6 +2775,9 @@ If you don't accept this request, VPN will not reconnect and your internet conne Monthly contribution + + Summary + ≈ %1$s0.0 USD From d9bfb2f607cbef9e42e3c3d4b1c4a43529930e9e Mon Sep 17 00:00:00 2001 From: Deep Date: Thu, 9 Dec 2021 22:34:48 -0500 Subject: [PATCH 08/18] Resolve reabse issue --- android/brave_java_resources.gni | 10 +- .../chrome/browser/BraveRewardsHelper.java | 2 - .../browser/BraveRewardsNativeWorker.java | 3 +- .../browser/BraveRewardsPanelPopup.java | 3 +- .../chrome/browser/BraveWalletProvider.java | 12 +- .../browser/rewards/BraveRewardsPanel.java | 628 +++++++++--------- .../android/strings/android_brave_strings.grd | 3 - 7 files changed, 345 insertions(+), 316 deletions(-) diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni index ce81acd7fabd..3451c432fa70 100644 --- a/android/brave_java_resources.gni +++ b/android/brave_java_resources.gni @@ -523,6 +523,8 @@ brave_java_resources = [ "java/res/drawable/bat_ads_logo_button.xml", "java/res/drawable/bat_panel_gradient.xml", "java/res/drawable/bat_rewards_summary_gradient.xml", + "java/res/drawable/binance_edittext.xml", + "java/res/drawable/binance_radio_button_selector.xml", "java/res/drawable/blue_48_rounded_bg.xml", "java/res/drawable/blue_rounded_button.xml", "java/res/drawable/blue_rounded_holo_button.xml", @@ -594,6 +596,7 @@ brave_java_resources = [ "java/res/drawable/ic_brave_logo.xml", "java/res/drawable/ic_brave_mobiledata.xml", "java/res/drawable/ic_brave_vpn_graphic.xml", + "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_circle.xml", @@ -603,6 +606,7 @@ brave_java_resources = [ "java/res/drawable/ic_chevron_right.xml", "java/res/drawable/ic_clock.xml", "java/res/drawable/ic_close.xml", + "java/res/drawable/ic_close_12.xml", "java/res/drawable/ic_closing_all_closes_brave.xml", "java/res/drawable/ic_copy.xml", "java/res/drawable/ic_crypto_wallets.xml", @@ -623,6 +627,7 @@ brave_java_resources = [ "java/res/drawable/ic_info.xml", "java/res/drawable/ic_languages.xml", "java/res/drawable/ic_mask.xml", + "java/res/drawable/ic_money_bag_coins.xml", "java/res/drawable/ic_more_horiz.xml", "java/res/drawable/ic_new_tab_page.xml", "java/res/drawable/ic_news.xml", @@ -726,12 +731,8 @@ brave_java_resources = [ "java/res/drawable/shields_tooltip_background_1.xml", "java/res/drawable/shields_tooltip_background_2.xml", "java/res/drawable/sync_icon.xml", - "java/res/layout/brave_rewards_panel_notification_layout.xml", "java/res/drawable/tab_selector.xml", "java/res/drawable/tip_amount.xml", - "java/res/drawable/ic_close_12.xml", - "java/res/drawable/ic_calendar.xml", - "java/res/drawable/ic_money_bag_coins.xml", "java/res/drawable/transparent_bg_bordered.xml", "java/res/drawable/unverified_48_rounded_bg.xml", "java/res/drawable/wallet_disconnected_button.xml", @@ -799,6 +800,7 @@ brave_java_resources = [ "java/res/layout/brave_rewards_panel_grant.xml", "java/res/layout/brave_rewards_panel_header.xml", "java/res/layout/brave_rewards_panel_layout.xml", + "java/res/layout/brave_rewards_panel_notification_layout.xml", "java/res/layout/brave_rewards_panel_publisher_layout.xml", "java/res/layout/brave_rewards_panel_settings_layout.xml", "java/res/layout/brave_rewards_panel_summary_layout.xml", diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java b/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java index 54e1d8ce44a3..f106d8ed5506 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java @@ -430,7 +430,6 @@ public void onAnimationEnd(Animator animation) { } } - public static double probiToDouble(String probi) { final String PROBI_POWER = "1000000000000000000"; double val = Double.NaN; @@ -445,7 +444,6 @@ public static double probiToDouble(String probi) { return val; } - /** * Expands touchable area of a small view * @param parentView diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java index bcf258ec4bc6..f7131bd3bb8b 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java @@ -433,7 +433,8 @@ public void RecoverWallet(String passPhrase) { public void getAdsAccountStatement() { synchronized (lock) { - BraveRewardsNativeWorkerJni.get().getAdsAccountStatement(mNativeBraveRewardsNativeWorker); + BraveRewardsNativeWorkerJni.get().getAdsAccountStatement( + mNativeBraveRewardsNativeWorker); } } diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java b/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java index 347319bf97fa..7b8857a3a137 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsPanelPopup.java @@ -121,7 +121,8 @@ public class BraveRewardsPanelPopup implements BraveRewardsObserver, BraveReward private static final int REWARDS_NOTIFICATION_NO_INTERNET = 1000; private static final String REWARDS_NOTIFICATION_NO_INTERNET_ID = "29d835c2-5752-4152-93c3-8a1ded9dd4ec"; private static final int REWARDS_PROMOTION_CLAIM_ERROR = REWARDS_NOTIFICATION_NO_INTERNET + 1; - private static final String REWARDS_PROMOTION_CLAIM_ERROR_ID = "rewards_promotion_claim_error_id"; + private static final String REWARDS_PROMOTION_CLAIM_ERROR_ID = + "rewards_promotion_claim_error_id"; // Auto contribute results private static final String AUTO_CONTRIBUTE_SUCCESS = "0"; diff --git a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java index 01a62dfdedc9..8a695dc7b3ac 100644 --- a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java +++ b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java @@ -60,8 +60,8 @@ public void completeWalletProviderVerification( rewardsNativeProxy.AddObserver(this); String path = uri.getPath(); String query = uri.getQuery(); - Log.e("BraveRewards", "BraveWalletProvider : path : "+path); - Log.e("BraveRewards", "BraveWalletProvider : query : "+query); + Log.e("BraveRewards", "BraveWalletProvider : path : " + path); + Log.e("BraveRewards", "BraveWalletProvider : query : " + query); if (TextUtils.isEmpty(path) || TextUtils.isEmpty(query)) { rewardsNativeProxy.RemoveObserver(this); @@ -76,8 +76,8 @@ public void completeWalletProviderVerification( path = String.format(Locale.US, "/%s/%s", rewardsNativeProxy.getExternalWalletType(), path); query = String.format(Locale.US, "?%s", query); - Log.e("BraveRewards", "BraveWalletProvider : path : "+path); - Log.e("BraveRewards", "BraveWalletProvider : query : "+query); + Log.e("BraveRewards", "BraveWalletProvider : path : " + path); + Log.e("BraveRewards", "BraveWalletProvider : query : " + query); rewardsNativeProxy.ProcessRewardsPageUrl(path, query); } @@ -91,7 +91,7 @@ public void OnProcessRewardsPageUrl( } String redirectUrl = parseJsonArgs(jsonArgs); - Log.e("BraveRewards", "BraveWalletProvider : "+redirectUrl); + Log.e("BraveRewards", "BraveWalletProvider : " + redirectUrl); if (BraveRewardsNativeWorker.LEDGER_OK == errorCode && TextUtils.equals(action, ACTION_VALUE)) { // wallet is verified: redirect to chrome://rewards for now @@ -130,7 +130,7 @@ private void releaseDependencies() { private void showErrorMessageBox(int errorCode) { String message = ""; String messageTitle = ""; - Log.e("BraveRewards", "Error code : "+errorCode); + Log.e("BraveRewards", "Error code : " + errorCode); Context context = ContextUtils.getApplicationContext(); AlertDialog.Builder builder = new AlertDialog.Builder( BraveRewardsHelper.getChromeTabbedActivity(), R.style.Theme_Chromium_AlertDialog); diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index c5504cd741dc..a572bce053a3 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -41,18 +41,18 @@ import android.view.ViewGroup; import android.webkit.URLUtil; import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; -import android.widget.CompoundButton; -import android.widget.CompoundButton.OnCheckedChangeListener; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.SwitchCompat; import androidx.cardview.widget.CardView; import androidx.core.content.res.ResourcesCompat; -import androidx.appcompat.widget.SwitchCompat; import org.json.JSONException; @@ -61,7 +61,6 @@ import org.chromium.base.Log; import org.chromium.base.SysUtils; import org.chromium.chrome.R; -import org.chromium.chrome.browser.BraveRewardsHelper; import org.chromium.chrome.browser.BraveRewardsBalance; import org.chromium.chrome.browser.BraveRewardsExternalWallet; import org.chromium.chrome.browser.BraveRewardsExternalWallet.WalletStatus; @@ -81,11 +80,11 @@ import java.math.RoundingMode; import java.text.DecimalFormat; +import java.util.Calendar; +import java.util.Date; import java.util.Locale; import java.util.Timer; import java.util.TimerTask; -import java.util.Date; -import java.util.Calendar; public class BraveRewardsPanel implements BraveRewardsObserver, BraveRewardsHelper.LargeIconReadyCallback { @@ -111,9 +110,11 @@ public class BraveRewardsPanel // Custom Android notification private static final char NOTIFICATION_PROMID_SEPARATOR = '_'; private static final int REWARDS_NOTIFICATION_NO_INTERNET = 1000; - private static final String REWARDS_NOTIFICATION_NO_INTERNET_ID = "29d835c2-5752-4152-93c3-8a1ded9dd4ec"; + private static final String REWARDS_NOTIFICATION_NO_INTERNET_ID = + "29d835c2-5752-4152-93c3-8a1ded9dd4ec"; private static final int REWARDS_PROMOTION_CLAIM_ERROR = REWARDS_NOTIFICATION_NO_INTERNET + 1; - private static final String REWARDS_PROMOTION_CLAIM_ERROR_ID = "rewards_promotion_claim_error_id"; + private static final String REWARDS_PROMOTION_CLAIM_ERROR_ID = + "rewards_promotion_claim_error_id"; // Auto contribute results private static final String AUTO_CONTRIBUTE_SUCCESS = "0"; @@ -274,16 +275,12 @@ public void onClick(View v) { mBtnTip = mPopupView.findViewById(R.id.tip_btn); mImgTip = mPopupView.findViewById(R.id.tip_img); mTextTip = mPopupView.findViewById(R.id.tip_text); - mBtnTip.setOnClickListener(view -> { - showTipSection(); - }); + mBtnTip.setOnClickListener(view -> { showTipSection(); }); mBtnSummary = mPopupView.findViewById(R.id.summary_btn); mImgSummary = mPopupView.findViewById(R.id.summary_img); mTextSummary = mPopupView.findViewById(R.id.summary_text); - mBtnSummary.setOnClickListener(view -> { - showSummarySection(); - }); + mBtnSummary.setOnClickListener(view -> { showSummarySection(); }); mSwitchAutoContribute = mPopupView.findViewById(R.id.auto_contribution_switch); mSwitchAutoContribute.setOnCheckedChangeListener(autoContributeSwitchListener); @@ -291,11 +288,16 @@ public void onClick(View v) { showSummarySection(); mBtnTip.setEnabled(false); - String monthName=(String)android.text.format.DateFormat.format("MMM", new Date()); + String monthName = (String) android.text.format.DateFormat.format("MMM", new Date()); int lastDate = Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH); int currentYear = Calendar.getInstance().get(Calendar.YEAR); - String adsMonthlyStatement = new StringBuilder(monthName).append(" 1 - ").append(monthName).append(" ").append(lastDate).toString(); + String adsMonthlyStatement = new StringBuilder(monthName) + .append(" 1 - ") + .append(monthName) + .append(" ") + .append(lastDate) + .toString(); String monthYear = new StringBuilder(monthName).append(" ").append(currentYear).toString(); TextView adsMonthlyStatementText = mPopupView.findViewById(R.id.ads_monthly_statement_text); @@ -309,34 +311,34 @@ public void onClick(View v) { private void showSummarySection() { mTextTip.setTextColor(Color.parseColor("#868E96")); - mImgTip.setColorFilter(new PorterDuffColorFilter( - Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); - + mImgTip.setColorFilter( + new PorterDuffColorFilter(Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); - mTextSummary.setTextColor(Color.parseColor("#4C54D2")); - mImgSummary.setColorFilter(new PorterDuffColorFilter( - Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); + mTextSummary.setTextColor(Color.parseColor("#4C54D2")); + mImgSummary.setColorFilter( + new PorterDuffColorFilter(Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); - mRewardsSummaryDetailLayout.setVisibility(View.VISIBLE); - mRewardsTipLayout.setVisibility(View.GONE); + mRewardsSummaryDetailLayout.setVisibility(View.VISIBLE); + mRewardsTipLayout.setVisibility(View.GONE); } private void showTipSection() { mTextTip.setTextColor(Color.parseColor("#4C54D2")); - mImgTip.setColorFilter(new PorterDuffColorFilter( - Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); - - mTextSummary.setTextColor(Color.parseColor("#868E96")); - mImgSummary.setColorFilter(new PorterDuffColorFilter( - Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); - mRewardsSummaryDetailLayout.setVisibility(View.GONE); - mRewardsTipLayout.setVisibility(View.VISIBLE); + mImgTip.setColorFilter( + new PorterDuffColorFilter(Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); + + mTextSummary.setTextColor(Color.parseColor("#868E96")); + mImgSummary.setColorFilter( + new PorterDuffColorFilter(Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); + mRewardsSummaryDetailLayout.setVisibility(View.GONE); + mRewardsTipLayout.setVisibility(View.VISIBLE); } private void setNotificationsControls() { // Check for notifications - mNotificationLayout = mPopupView.findViewById(R.id.brave_rewards_panel_notification_layout_id); + mNotificationLayout = + mPopupView.findViewById(R.id.brave_rewards_panel_notification_layout_id); Log.e(TAG, "setNotificationsControls"); if (mBraveRewardsNativeWorker != null) { @@ -366,42 +368,41 @@ public void onClick(View v) { * number of arguments */ private boolean isValidNotificationType(int type, int argsNum) { - Log.e(TAG, "isValidNotificationType : "+type); + Log.e(TAG, "isValidNotificationType : " + type); boolean valid = false; switch (type) { - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_AUTO_CONTRIBUTE: - valid = (argsNum >= 4) ? true : false; - break; - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_VERIFIED_PUBLISHER: - valid = (argsNum >= 1) ? true : false; - break; - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT: - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT_ADS: - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_INSUFFICIENT_FUNDS: - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET: - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_TIPS_PROCESSED: - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_ADS_ONBOARDING: - case REWARDS_NOTIFICATION_NO_INTERNET: - case REWARDS_PROMOTION_CLAIM_ERROR: - valid = true; - break; - default: - valid = false; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_AUTO_CONTRIBUTE: + valid = (argsNum >= 4) ? true : false; + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_VERIFIED_PUBLISHER: + valid = (argsNum >= 1) ? true : false; + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT_ADS: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_INSUFFICIENT_FUNDS: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_TIPS_PROCESSED: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_ADS_ONBOARDING: + case REWARDS_NOTIFICATION_NO_INTERNET: + case REWARDS_PROMOTION_CLAIM_ERROR: + valid = true; + break; + default: + valid = false; } Log.i(TAG, "IsValidNotificationType: type %d argnum %d ", type, argsNum); return valid; } - private void showNotification(String id, int type, long timestamp, - String[] args) { + private void showNotification(String id, int type, long timestamp, String[] args) { Log.e(TAG, "showNotification"); if (mBraveRewardsNativeWorker == null) { return; } // don't process unknown notifications - if ( !isValidNotificationType (type, args.length) && mBraveRewardsNativeWorker != null) { + if (!isValidNotificationType(type, args.length) && mBraveRewardsNativeWorker != null) { Log.e(TAG, "showNotification 1"); mBraveRewardsNativeWorker.DeleteNotification(id); return; @@ -409,15 +410,14 @@ private void showNotification(String id, int type, long timestamp, mCurrentNotificationId = id; TextView notificationDayText = mPopupView.findViewById(R.id.notification_day_text); - String currentDay=(String)android.text.format.DateFormat.format("MMM dd", new Date()); + String currentDay = (String) android.text.format.DateFormat.format("MMM dd", new Date()); notificationDayText.setText(currentDay); - TextView notificationTitleText = mPopupView.findViewById(R.id.notification_title_text); - TextView notificationSubtitleText = mPopupView.findViewById(R.id.notification_subtitle_text); + TextView notificationSubtitleText = + mPopupView.findViewById(R.id.notification_subtitle_text); TextView actionNotificationButton = mPopupView.findViewById(R.id.btn_action_notification); - // LinearLayout hl = (LinearLayout)root.findViewById(R.id.header_layout); // hl.setBackgroundResource(R.drawable.notification_header); // GridLayout gl = (GridLayout)root.findViewById(R.id.wallet_info_gridlayout); @@ -434,14 +434,15 @@ private void showNotification(String id, int type, long timestamp, // Button btClaimOk = (Button)root.findViewById(R.id.br_claim_button); View claimProgress = mPopupView.findViewById(R.id.claim_progress); - - //hide or show 'Claim/OK' button if Grant claim is (not) in process + // hide or show 'Claim/OK' button if Grant claim is (not) in process mClaimInProcess = mBraveRewardsNativeWorker.IsGrantClaimInProcess(); if (mClaimInProcess) { - BraveRewardsHelper.crossfade(actionNotificationButton, claimProgress, View.GONE, 1f, BraveRewardsHelper.CROSS_FADE_DURATION); + BraveRewardsHelper.crossfade(actionNotificationButton, claimProgress, View.GONE, 1f, + BraveRewardsHelper.CROSS_FADE_DURATION); } else { actionNotificationButton.setEnabled(true); - BraveRewardsHelper.crossfade(claimProgress, actionNotificationButton, View.GONE, 1f, BraveRewardsHelper.CROSS_FADE_DURATION); + BraveRewardsHelper.crossfade(claimProgress, actionNotificationButton, View.GONE, 1f, + BraveRewardsHelper.CROSS_FADE_DURATION); } // TextView notificationClose = (TextView)root.findViewById(R.id.br_notification_close); @@ -460,159 +461,176 @@ private void showNotification(String id, int type, long timestamp, // TODO other types of notifications switch (type) { - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_AUTO_CONTRIBUTE: - // TODO find the case where it is used - // notification_icon.setImageResource(R.drawable.icon_validated_notification); - Log.e(TAG, "showNotification 2"); - String result = args[1]; - switch (result) { - case AUTO_CONTRIBUTE_SUCCESS: - actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); - title = mPopupView.getResources().getString(R.string.brave_ui_rewards_contribute); - // notification_icon.setImageResource(R.drawable.contribute_icon); - // hl.setBackgroundResource(R.drawable.notification_header_normal); - - double value = 0; - String valueString = ""; - String[] splittedValue = args[3].split("\\.", 0); - // 18 digits is a probi min digits count - if (splittedValue.length != 0 && splittedValue[0].length() >= 18) { - value = BraveRewardsHelper.probiToDouble(args[3]); - valueString = Double.isNaN(value) - ? ERROR_CONVERT_PROBI - : String.format(Locale.getDefault(), "%.3f", value); - } else { - value = Double.parseDouble(args[3]); - valueString = String.format(Locale.getDefault(), "%.3f", value); - } + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_AUTO_CONTRIBUTE: + // TODO find the case where it is used + // notification_icon.setImageResource(R.drawable.icon_validated_notification); + Log.e(TAG, "showNotification 2"); + String result = args[1]; + switch (result) { + case AUTO_CONTRIBUTE_SUCCESS: + actionNotificationButton.setText( + mPopupView.getResources().getString(R.string.ok)); + title = mPopupView.getResources().getString( + R.string.brave_ui_rewards_contribute); + // notification_icon.setImageResource(R.drawable.contribute_icon); + // hl.setBackgroundResource(R.drawable.notification_header_normal); + + double value = 0; + String valueString = ""; + String[] splittedValue = args[3].split("\\.", 0); + // 18 digits is a probi min digits count + if (splittedValue.length != 0 && splittedValue[0].length() >= 18) { + value = BraveRewardsHelper.probiToDouble(args[3]); + valueString = Double.isNaN(value) + ? ERROR_CONVERT_PROBI + : String.format(Locale.getDefault(), "%.3f", value); + } else { + value = Double.parseDouble(args[3]); + valueString = String.format(Locale.getDefault(), "%.3f", value); + } - description = - String.format(mPopupView.getResources().getString( - R.string.brave_ui_rewards_contribute_description), + description = String.format( + mPopupView.getResources().getString( + R.string.brave_ui_rewards_contribute_description), valueString); + break; + case AUTO_CONTRIBUTE_NOT_ENOUGH_FUNDS: + Log.e(TAG, "showNotification 3"); + title = ""; + // notification_icon.setImageResource(R.drawable.icon_warning_notification); + // hl.setBackgroundResource(R.drawable.notification_header_warning); + description = mPopupView.getResources().getString( + R.string.brave_ui_notification_desc_no_funds); + break; + case AUTO_CONTRIBUTE_TIPPING_ERROR: + Log.e(TAG, "showNotification 4"); + title = ""; + // notification_icon.setImageResource(R.drawable.icon_error_notification); + // hl.setBackgroundResource(R.drawable.notification_header_error); + description = mPopupView.getResources().getString( + R.string.brave_ui_notification_desc_tip_error); + break; + default: + title = ""; + // notification_icon.setImageResource(R.drawable.icon_error_notification); + // hl.setBackgroundResource(R.drawable.notification_header_error); + description = mPopupView.getResources().getString( + R.string.brave_ui_notification_desc_contr_error); + } + if (title.isEmpty()) { + actionNotificationButton.setVisibility(View.GONE); + // nit.setOrientation(LinearLayout.HORIZONTAL); + // params.setMargins(params.leftMargin, 35, params.rightMargin, + // params.bottomMargin); nit.setLayoutParams(params); + // tv.setGravity(Gravity.START); + } break; - case AUTO_CONTRIBUTE_NOT_ENOUGH_FUNDS: - Log.e(TAG, "showNotification 3"); - title = ""; - // notification_icon.setImageResource(R.drawable.icon_warning_notification); - // hl.setBackgroundResource(R.drawable.notification_header_warning); + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT: + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT_ADS: + Log.e(TAG, "showNotification 5"); + actionNotificationButton.setText( + mPopupView.getResources().getString(R.string.brave_ui_claim)); + + // int grant_icon_id = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type + // ) ? + // R.drawable.grant_icon : R.drawable.notification_icon; + // notification_icon.setImageResource(grant_icon_id); + + title = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type) + ? mPopupView.getResources().getString(R.string.brave_ui_new_token_grant) + : mPopupView.getResources().getString( + R.string.notification_category_group_brave_ads); + + description = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type) + ? String.format( + mPopupView.getResources().getString(R.string.brave_ui_new_grant), + mPopupView.getResources().getString(R.string.token)) + : mPopupView.getResources().getString(R.string.brave_ads_you_earned); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_INSUFFICIENT_FUNDS: + Log.e(TAG, "showNotification 6"); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + // notification_icon.setImageResource(R.drawable.notification_icon); + title = mPopupView.getResources().getString( + R.string.brave_ui_insufficient_funds_msg); + description = mPopupView.getResources().getString( + R.string.brave_ui_insufficient_funds_desc); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET: + Log.e(TAG, "showNotification 7"); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + // notification_icon.setImageResource(R.drawable.notification_icon); + title = mPopupView.getResources().getString(R.string.brave_ui_backup_wallet_msg); description = - mPopupView.getResources().getString(R.string.brave_ui_notification_desc_no_funds); + mPopupView.getResources().getString(R.string.brave_ui_backup_wallet_desc); break; - case AUTO_CONTRIBUTE_TIPPING_ERROR: - Log.e(TAG, "showNotification 4"); + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_TIPS_PROCESSED: + Log.e(TAG, "showNotification 8"); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + title = mPopupView.getResources().getString(R.string.brave_ui_contribution_tips); + description = mPopupView.getResources().getString( + R.string.brave_ui_tips_processed_notification); + // notification_icon.setImageResource(R.drawable.contribute_icon); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_ADS_ONBOARDING: + Log.e(TAG, "showNotification 9"); + actionNotificationButton.setText( + mPopupView.getResources().getString(R.string.brave_ui_turn_on_ads)); + title = mPopupView.getResources().getString( + R.string.brave_ui_brave_ads_launch_title); + description = ""; // TODO verify the text + // notification_icon.setImageResource(R.drawable.notification_icon); + break; + case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_VERIFIED_PUBLISHER: + Log.e(TAG, "showNotification 10"); + String pubName = args[0]; + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + title = mPopupView.getResources().getString( + R.string.brave_ui_pending_contribution_title); + description = mPopupView.getResources().getString( + R.string.brave_ui_verified_publisher_notification, pubName); + // notification_icon.setImageResource(R.drawable.contribute_icon); + break; + case REWARDS_NOTIFICATION_NO_INTERNET: + Log.e(TAG, "showNotification 11"); title = ""; // notification_icon.setImageResource(R.drawable.icon_error_notification); // hl.setBackgroundResource(R.drawable.notification_header_error); - description = - mPopupView.getResources().getString(R.string.brave_ui_notification_desc_tip_error); + description = "" + + mPopupView.getResources().getString(R.string.brave_rewards_local_uh_oh) + + " " + + mPopupView.getResources().getString( + R.string.brave_rewards_local_server_not_responding); + actionNotificationButton.setVisibility(View.GONE); + // notificationClose.setVisibility(View.GONE); + // nit.setOrientation(LinearLayout.HORIZONTAL); + // params.setMargins(params.leftMargin, 180, params.rightMargin, + // params.bottomMargin); nit.setLayoutParams(params); tv.setGravity(Gravity.START); break; - default: + case REWARDS_PROMOTION_CLAIM_ERROR: + Log.e(TAG, "showNotification 12"); title = ""; - // notification_icon.setImageResource(R.drawable.icon_error_notification); + actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); + description = "" + + mPopupView.getResources().getString( + R.string.brave_rewards_local_general_grant_error_title) + + ""; + // notification_icon.setImageResource(R.drawable.coin_stack); // hl.setBackgroundResource(R.drawable.notification_header_error); - description = - mPopupView.getResources().getString(R.string.brave_ui_notification_desc_contr_error); - } - if (title.isEmpty()) { - actionNotificationButton.setVisibility(View.GONE); + // notificationClose.setVisibility(View.GONE); // nit.setOrientation(LinearLayout.HORIZONTAL); - // params.setMargins(params.leftMargin, 35, params.rightMargin, params.bottomMargin); - // nit.setLayoutParams(params); - // tv.setGravity(Gravity.START); - } - break; - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT: - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT_ADS: - Log.e(TAG, "showNotification 5"); - actionNotificationButton.setText(mPopupView.getResources().getString(R.string.brave_ui_claim)); - - // int grant_icon_id = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type ) ? - // R.drawable.grant_icon : R.drawable.notification_icon; - // notification_icon.setImageResource(grant_icon_id); - - title = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type) - ? mPopupView.getResources().getString(R.string.brave_ui_new_token_grant) - : mPopupView.getResources().getString(R.string.notification_category_group_brave_ads); - - description = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type) - ? String.format(mPopupView.getResources().getString(R.string.brave_ui_new_grant), - mPopupView.getResources().getString(R.string.token)) - : mPopupView.getResources().getString(R.string.brave_ads_you_earned); - break; - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_INSUFFICIENT_FUNDS: - Log.e(TAG, "showNotification 6"); - actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); - // notification_icon.setImageResource(R.drawable.notification_icon); - title = mPopupView.getResources().getString(R.string.brave_ui_insufficient_funds_msg); - description = mPopupView.getResources().getString(R.string.brave_ui_insufficient_funds_desc); - break; - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET: - Log.e(TAG, "showNotification 7"); - actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); - // notification_icon.setImageResource(R.drawable.notification_icon); - title = mPopupView.getResources().getString(R.string.brave_ui_backup_wallet_msg); - description = mPopupView.getResources().getString(R.string.brave_ui_backup_wallet_desc); - break; - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_TIPS_PROCESSED: - Log.e(TAG, "showNotification 8"); - actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); - title = mPopupView.getResources().getString(R.string.brave_ui_contribution_tips); - description = mPopupView.getResources().getString(R.string.brave_ui_tips_processed_notification); - // notification_icon.setImageResource(R.drawable.contribute_icon); - break; - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_ADS_ONBOARDING: - Log.e(TAG, "showNotification 9"); - actionNotificationButton.setText(mPopupView.getResources().getString(R.string.brave_ui_turn_on_ads)); - title = mPopupView.getResources().getString(R.string.brave_ui_brave_ads_launch_title); - description = ""; //TODO verify the text - // notification_icon.setImageResource(R.drawable.notification_icon); - break; - case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_VERIFIED_PUBLISHER: - Log.e(TAG, "showNotification 10"); - String pubName = args[0]; - actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); - title = mPopupView.getResources().getString(R.string.brave_ui_pending_contribution_title); - description = mPopupView.getResources().getString(R.string.brave_ui_verified_publisher_notification, pubName); - // notification_icon.setImageResource(R.drawable.contribute_icon); - break; - case REWARDS_NOTIFICATION_NO_INTERNET: - Log.e(TAG, "showNotification 11"); - title = ""; - // notification_icon.setImageResource(R.drawable.icon_error_notification); - // hl.setBackgroundResource(R.drawable.notification_header_error); - description = "" + mPopupView.getResources().getString(R.string.brave_rewards_local_uh_oh) - + " " + mPopupView.getResources().getString(R.string.brave_rewards_local_server_not_responding); - actionNotificationButton.setVisibility(View.GONE); - // notificationClose.setVisibility(View.GONE); - // nit.setOrientation(LinearLayout.HORIZONTAL); - // params.setMargins(params.leftMargin, 180, params.rightMargin, params.bottomMargin); - // nit.setLayoutParams(params); - // tv.setGravity(Gravity.START); - break; - case REWARDS_PROMOTION_CLAIM_ERROR: - Log.e(TAG, "showNotification 12"); - title = ""; - actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); - description = "" + - mPopupView.getResources().getString( - R.string.brave_rewards_local_general_grant_error_title) - + ""; - // notification_icon.setImageResource(R.drawable.coin_stack); - // hl.setBackgroundResource(R.drawable.notification_header_error); - // notificationClose.setVisibility(View.GONE); - // nit.setOrientation(LinearLayout.HORIZONTAL); - // params.setMargins(params.leftMargin, 180, params.rightMargin, params.bottomMargin); - // nit.setLayoutParams(params); - // tv.setGravity(Gravity.START); - break; - default: - Log.e(TAG, "This notification type is either invalid or not handled yet: " + type); - assert false; - return; + // params.setMargins(params.leftMargin, 180, params.rightMargin, + // params.bottomMargin); nit.setLayoutParams(params); tv.setGravity(Gravity.START); + break; + default: + Log.e(TAG, "This notification type is either invalid or not handled yet: " + type); + assert false; + return; } - // String stringToInsert = (title.isEmpty() ? "" : ("" + title + "" + " | ")) + description + - // (title.isEmpty() ? "" : (" " + notificationTime + "")); + // String stringToInsert = (title.isEmpty() ? "" : ("" + title + "" + " | ")) + + // description + + // (title.isEmpty() ? "" : (" " + + // notificationTime + "")); // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(stringToInsert); // tv.setText(toInsert); notificationTitleText.setText(title); @@ -626,13 +644,15 @@ private void showNotification(String id, int type, long timestamp, setNotificationButtoClickListener(); } - //TODO needs to be changed + // TODO needs to be changed private void setNotificationButtoClickListener() { Log.e(TAG, "setNotificationButtoClickListener"); TextView actionNotificationButton = mPopupView.findViewById(R.id.btn_action_notification); - String strAction = (actionNotificationButton != null && mBraveRewardsNativeWorker != null ) ? actionNotificationButton.getText().toString() : ""; + String strAction = (actionNotificationButton != null && mBraveRewardsNativeWorker != null) + ? actionNotificationButton.getText().toString() + : ""; if (strAction.equals(mPopupView.getResources().getString(R.string.ok))) { - actionNotificationButton.setOnClickListener( new View.OnClickListener() { + actionNotificationButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.e(TAG, "setNotificationButtoClickListener 1"); @@ -646,20 +666,21 @@ public void onClick(View v) { } }); } else if (strAction.equals(mPopupView.getResources().getString(R.string.brave_ui_claim))) { - actionNotificationButton.setOnClickListener( new View.OnClickListener() { + actionNotificationButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.e(TAG, "setNotificationButtoClickListener 2"); - //disable and hide CLAIM button + // disable and hide CLAIM button // actionNotificationButton.setEnabled(false); if (mClaimInProcess || mCurrentNotificationId.isEmpty()) { return; } - int promIdSeparator = mCurrentNotificationId.lastIndexOf(NOTIFICATION_PROMID_SEPARATOR); + int promIdSeparator = + mCurrentNotificationId.lastIndexOf(NOTIFICATION_PROMID_SEPARATOR); String promId = ""; - if (-1 != promIdSeparator ) { + if (-1 != promIdSeparator) { promId = mCurrentNotificationId.substring(promIdSeparator + 1); } if (promId.isEmpty()) { @@ -669,15 +690,17 @@ public void onClick(View v) { mClaimInProcess = true; View fadein = mPopupView.findViewById(R.id.claim_progress); - BraveRewardsHelper.crossfade(actionNotificationButton, fadein, View.GONE, 1f, BraveRewardsHelper.CROSS_FADE_DURATION); + BraveRewardsHelper.crossfade(actionNotificationButton, fadein, View.GONE, 1f, + BraveRewardsHelper.CROSS_FADE_DURATION); mBraveRewardsNativeWorker.GetGrant(promId); // walletDetailsReceived = false; //re-read wallet status // EnableWalletDetails(false); } }); - } else if (strAction.equals(mPopupView.getResources().getString(R.string.brave_ui_turn_on_ads))) { - actionNotificationButton.setOnClickListener( new View.OnClickListener() { + } else if (strAction.equals( + mPopupView.getResources().getString(R.string.brave_ui_turn_on_ads))) { + actionNotificationButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.e(TAG, "setNotificationButtoClickListener 3"); @@ -715,9 +738,10 @@ private void hideNotifications() { public void OnClaimPromotion(int responseCode) { if (responseCode != BraveRewardsNativeWorker.LEDGER_OK) { String args[] = {}; - showNotification(REWARDS_PROMOTION_CLAIM_ERROR_ID, REWARDS_PROMOTION_CLAIM_ERROR, 0, args); + showNotification( + REWARDS_PROMOTION_CLAIM_ERROR_ID, REWARDS_PROMOTION_CLAIM_ERROR, 0, args); } - //TODO add logic for balance refresh + // TODO add logic for balance refresh else if (responseCode == BraveRewardsNativeWorker.LEDGER_OK) { Log.e(TAG, "BraveRewardsNativeWorker.LEDGER_OK"); // mBraveRewardsNativeWorker.GetRewardsParameters(); @@ -732,18 +756,17 @@ public void OnGrantFinish(int result) { Log.e(TAG, "OnGrantFinish"); mBraveRewardsNativeWorker.GetAllNotifications(); mBraveRewardsNativeWorker.GetRewardsParameters(); - mBraveRewardsNativeWorker.GetExternalWallet(); - mBraveRewardsNativeWorker.getAdsAccountStatement(); - mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + mBraveRewardsNativeWorker.GetExternalWallet(); + mBraveRewardsNativeWorker.getAdsAccountStatement(); + mBraveRewardsNativeWorker.GetCurrentBalanceReport(); } OnCheckedChangeListener autoContributeSwitchListener = new OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, - boolean isChecked) { - mBraveRewardsNativeWorker.IncludeInAutoContribution(mCurrentTabId, !isChecked); - } - }; + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + mBraveRewardsNativeWorker.IncludeInAutoContribution(mCurrentTabId, !isChecked); + } + }; public void showLikePopDownMenu() { mPopupWindow.setTouchable(true); @@ -799,7 +822,7 @@ public void OnStartProcess() { @Override public void OnGetCurrentBalanceReport(double[] report) { - Log.e(TAG, "OnGetCurrentBalanceReport : "+ report); + Log.e(TAG, "OnGetCurrentBalanceReport : " + report); if (report == null) { return; } @@ -811,54 +834,61 @@ public void OnGetCurrentBalanceReport(double[] report) { String text = ""; String textUSD = ""; - double probiDouble = report[i]; + double probiDouble = report[i]; boolean hideControls = (probiDouble == 0); - String value = Double.isNaN(probiDouble) ? "0.000"+batText : String.format(Locale.getDefault(), "%.3f", probiDouble); + String value = Double.isNaN(probiDouble) + ? "0.000" + batText + : String.format(Locale.getDefault(), "%.3f", probiDouble); String usdValue = "0.00 USD"; - if (! Double.isNaN(probiDouble)) { + if (!Double.isNaN(probiDouble)) { double usdValueDouble = probiDouble * mBraveRewardsNativeWorker.GetWalletRate(); usdValue = String.format(Locale.getDefault(), "%.2f USD", usdValueDouble); } switch (i) { - case BALANCE_REPORT_GRANTS: - // tvTitle = (TextView)root.findViewById(R.id.br_grants_claimed_title); - // tvTitle.setText(BraveRewardsPanelPopup.this.root.getResources().getString( - // R.string.brave_ui_token_grant_claimed)); - tv = mPopupView.findViewById(R.id.total_grants_claimed_bat_text); - tvUSD = mPopupView.findViewById(R.id.total_grants_claimed_usd_text); - text = "" + value + " " + batText + ""; - textUSD = usdValue; - break; - case BALANCE_REPORT_EARNING_FROM_ADS: - // tvTitle = (TextView)root.findViewById(R.id.br_earnings_ads_title); - tv = mPopupView.findViewById(R.id.rewards_from_ads_bat_text); - tvUSD = mPopupView.findViewById(R.id.rewards_from_ads_usd_text); - text = "" + value + " " + batText + ""; - textUSD = usdValue; - break; - case BALANCE_REPORT_AUTO_CONTRIBUTE: - // tvTitle = (TextView)root.findViewById(R.id.br_auto_contribute_title); - tv = mPopupView.findViewById(R.id.auto_contribute_bat_text); - tvUSD = mPopupView.findViewById(R.id.auto_contribute_usd_text); - text = "" + value + " " + batText + ""; - textUSD = usdValue; - break; - case BALANCE_REPORT_ONE_TIME_DONATION: - // tvTitle = (TextView)root.findViewById(R.id.br_recurring_donation_title); - tv = mPopupView.findViewById(R.id.one_time_tip_bat_text); - tvUSD = mPopupView.findViewById(R.id.one_time_tip_usd_text); - text = "" + value + " " + batText + ""; - textUSD = usdValue; - break; - case BALANCE_REPORT_RECURRING_DONATION: - // tvTitle = (TextView)root.findViewById(R.id.br_one_time_donation_title); - tv = mPopupView.findViewById(R.id.monthly_tips_bat_text); - tvUSD = mPopupView.findViewById(R.id.monthly_tips_usd_text); - text = "" + value + " " + batText + ""; - textUSD = usdValue; - break; + case BALANCE_REPORT_GRANTS: + // tvTitle = (TextView)root.findViewById(R.id.br_grants_claimed_title); + // tvTitle.setText(BraveRewardsPanelPopup.this.root.getResources().getString( + // R.string.brave_ui_token_grant_claimed)); + tv = mPopupView.findViewById(R.id.total_grants_claimed_bat_text); + tvUSD = mPopupView.findViewById(R.id.total_grants_claimed_usd_text); + text = "" + value + " " + batText + + ""; + textUSD = usdValue; + break; + case BALANCE_REPORT_EARNING_FROM_ADS: + // tvTitle = (TextView)root.findViewById(R.id.br_earnings_ads_title); + tv = mPopupView.findViewById(R.id.rewards_from_ads_bat_text); + tvUSD = mPopupView.findViewById(R.id.rewards_from_ads_usd_text); + text = "" + value + " " + batText + + ""; + textUSD = usdValue; + break; + case BALANCE_REPORT_AUTO_CONTRIBUTE: + // tvTitle = (TextView)root.findViewById(R.id.br_auto_contribute_title); + tv = mPopupView.findViewById(R.id.auto_contribute_bat_text); + tvUSD = mPopupView.findViewById(R.id.auto_contribute_usd_text); + text = "" + value + " " + batText + + ""; + textUSD = usdValue; + break; + case BALANCE_REPORT_ONE_TIME_DONATION: + // tvTitle = (TextView)root.findViewById(R.id.br_recurring_donation_title); + tv = mPopupView.findViewById(R.id.one_time_tip_bat_text); + tvUSD = mPopupView.findViewById(R.id.one_time_tip_usd_text); + text = "" + value + " " + batText + + ""; + textUSD = usdValue; + break; + case BALANCE_REPORT_RECURRING_DONATION: + // tvTitle = (TextView)root.findViewById(R.id.br_one_time_donation_title); + tv = mPopupView.findViewById(R.id.monthly_tips_bat_text); + tvUSD = mPopupView.findViewById(R.id.monthly_tips_usd_text); + text = "" + value + " " + batText + + ""; + textUSD = usdValue; + break; } Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(text); tv.setText(toInsert); @@ -884,7 +914,8 @@ public void OnGetPendingContributionsTotal(double amount) { // String.format( // root.getResources().getString(R.string.brave_ui_reserved_amount_text), // String.format(Locale.getDefault(), "%.3f", amount)) - // + " " + root.getResources().getString(R.string.learn_more) + // + " " + + // root.getResources().getString(R.string.learn_more) // + "."; // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(non_verified_summary); // tvPublisherNotVerifiedSummary.setText(toInsert); @@ -896,18 +927,18 @@ public void OnGetPendingContributionsTotal(double amount) { @Override public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, - int adsReceivedThisMonth, double earningsThisMonth, double earningsLastMonth){ + int adsReceivedThisMonth, double earningsThisMonth, double earningsLastMonth) { DecimalFormat df = new DecimalFormat("#.###"); - df.setRoundingMode(RoundingMode.FLOOR); - df.setMinimumFractionDigits(3); - TextView batBalanceAdsText = mPopupView.findViewById(R.id.bat_balance_ads_text); - batBalanceAdsText.setText(df.format(earningsThisMonth)); - double usdValue = earningsThisMonth * mBraveRewardsNativeWorker.GetWalletRate(); - String usdText = - String.format(mPopupView.getResources().getString(R.string.brave_ads_statement_usd), - String.format(Locale.getDefault(), "%.2f", usdValue)); - TextView usdBalanceAdsText = mPopupView.findViewById(R.id.usd_balance_ads_text); - usdBalanceAdsText.setText(usdText); + df.setRoundingMode(RoundingMode.FLOOR); + df.setMinimumFractionDigits(3); + TextView batBalanceAdsText = mPopupView.findViewById(R.id.bat_balance_ads_text); + batBalanceAdsText.setText(df.format(earningsThisMonth)); + double usdValue = earningsThisMonth * mBraveRewardsNativeWorker.GetWalletRate(); + String usdText = + String.format(mPopupView.getResources().getString(R.string.brave_ads_statement_usd), + String.format(Locale.getDefault(), "%.2f", usdValue)); + TextView usdBalanceAdsText = mPopupView.findViewById(R.id.usd_balance_ads_text); + usdBalanceAdsText.setText(usdText); } @Override @@ -925,7 +956,7 @@ public void OnRewardsParameters(int errorCode) { if (walletBalanceObject != null) { walletBalance = walletBalanceObject.getTotal(); } - Log.e(TAG, "Wallet balance : "+walletBalance); + Log.e(TAG, "Wallet balance : " + walletBalance); // if (walletBalance > 0 && braveRewardsWelcomeView != null) { // braveRewardsWelcomeView.setVisibility(View.GONE); // } @@ -939,7 +970,7 @@ public void OnRewardsParameters(int errorCode) { String usdText = String.format(mPopupView.getResources().getString(R.string.brave_ui_usd), String.format(Locale.getDefault(), "%.2f", usdValue)); - Log.e(TAG, "USd amount : "+ usdText); + Log.e(TAG, "USd amount : " + usdText); TextView usdBalanceText = mPopupView.findViewById(R.id.usd_balance_text); usdBalanceText.setText(usdText); @@ -968,8 +999,7 @@ public void OnRewardsParameters(int errorCode) { } @Override - public void OnNotificationAdded(String id, int type, long timestamp, - String[] args) { + public void OnNotificationAdded(String id, int type, long timestamp, String[] args) { // Do nothing here as we will receive the most recent notification // in OnGetLatestNotification } @@ -978,8 +1008,7 @@ public void OnNotificationAdded(String id, int type, long timestamp, public void OnNotificationsCount(int count) {} @Override - public void OnGetLatestNotification(String id, int type, long timestamp, - String[] args) { + public void OnGetLatestNotification(String id, int type, long timestamp, String[] args) { if (type == BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET) { if (mBraveRewardsNativeWorker != null) { mBraveRewardsNativeWorker.DeleteNotification(id); @@ -1216,7 +1245,8 @@ public void OnPublisherInfo(int tabId) { @Override public void OnGetAutoContributeProperties() { - if (mBraveRewardsNativeWorker !=null && mBraveRewardsNativeWorker.IsAutoContributeEnabled()) { + if (mBraveRewardsNativeWorker != null + && mBraveRewardsNativeWorker.IsAutoContributeEnabled()) { mPopupView.findViewById(R.id.attention_layout).setVisibility(View.VISIBLE); mPopupView.findViewById(R.id.auto_contribution_layout).setVisibility(View.VISIBLE); } @@ -1244,7 +1274,7 @@ public void onGetAutoContributionAmount(double amount) { @Override public void OnOneTimeTip() { - //TODO add logic for refresh balance + // TODO add logic for refresh balance // mBraveRewardsNativeWorker.GetExternalWallet(); } @@ -1255,12 +1285,13 @@ public void OnOneTimeTip() { @Override public void OnRecurringDonationUpdated() { String pubId = mBraveRewardsNativeWorker.GetPublisherId(mCurrentTabId); - // mPubInReccuredDonation = mBraveRewardsNativeWorker.IsCurrentPublisherInRecurrentDonations(pubId); + // mPubInReccuredDonation = + // mBraveRewardsNativeWorker.IsCurrentPublisherInRecurrentDonations(pubId); - //all (mPubInReccuredDonation, mAutoContributeEnabled) are false: exit - //one is true: ac_enabled_controls on - //mAutoContributeEnabled: attention_layout and include_in_ac_layout on - //mPubInReccuredDonation: auto_tip_layout is on + // all (mPubInReccuredDonation, mAutoContributeEnabled) are false: exit + // one is true: ac_enabled_controls on + // mAutoContributeEnabled: attention_layout and include_in_ac_layout on + // mPubInReccuredDonation: auto_tip_layout is on // if (mAutoContributeEnabled || mPubInReccuredDonation) { // root.findViewById(R.id.ac_enabled_controls).setVisibility(View.VISIBLE); @@ -1272,13 +1303,13 @@ public void OnRecurringDonationUpdated() { // root.findViewById(R.id.brave_ui_auto_contribute_separator_bottom).setVisibility(View.VISIBLE); // } - //Temporary commented out due to dropdown spinner inflating issue on PopupWindow (API 24) - /* - if (mPubInReccuredDonation){ - double amount = mBraveRewardsNativeWorker.GetPublisherRecurrentDonationAmount(pubId); - UpdateRecurentDonationSpinner(amount); - root.findViewById(R.id.auto_tip_layout).setVisibility(View.VISIBLE); - }*/ + // Temporary commented out due to dropdown spinner inflating issue on PopupWindow (API 24) + /* + if (mPubInReccuredDonation){ + double amount = mBraveRewardsNativeWorker.GetPublisherRecurrentDonationAmount(pubId); + UpdateRecurentDonationSpinner(amount); + root.findViewById(R.id.auto_tip_layout).setVisibility(View.VISIBLE); + }*/ // } } @@ -1457,8 +1488,7 @@ private void showUpholdLoginPopupWindow(final View view) { LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewGroup rewardsMainLayout = mPopupView.findViewById(R.id.rewards_main_layout); - View loginPopupView = - inflater.inflate(R.layout.uphold_login_popup_window, mPopupView); + View loginPopupView = inflater.inflate(R.layout.uphold_login_popup_window, mPopupView); boolean isTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity); if (isTablet) { diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index 6d98bdbbe958..f15f04a06aa6 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -2775,9 +2775,6 @@ If you don't accept this request, VPN will not reconnect and your internet conne Monthly contribution - - Summary - ≈ %1$s0.0 USD From 2496186092201ab8262bb698c669677d355c2649 Mon Sep 17 00:00:00 2001 From: Deep Date: Fri, 10 Dec 2021 02:05:32 -0500 Subject: [PATCH 09/18] Add fetch grants --- .../chromium/chrome/browser/rewards/BraveRewardsPanel.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index a572bce053a3..0c332b677b9e 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -123,6 +123,8 @@ public class BraveRewardsPanel private static final String AUTO_CONTRIBUTE_TIPPING_ERROR = "16"; private static final String ERROR_CONVERT_PROBI = "ERROR"; + private static final int CLICK_DISABLE_INTERVAL = 1000; // In milliseconds + private final View mAnchorView; private final PopupWindow mPopupWindow; private ViewGroup mPopupView; @@ -222,6 +224,7 @@ public void onDismiss() { mBraveRewardsNativeWorker.AddObserver(this); } mBalanceUpdater = new Timer(); + createUpdateBalanceTask(); setUpViews(); } @@ -1437,7 +1440,7 @@ public boolean isShowing() { return mPopupWindow.isShowing(); } - private void CreateUpdateBalanceTask() { + private void createUpdateBalanceTask() { mBalanceUpdater.schedule(new TimerTask() { @Override public void run() { @@ -1447,7 +1450,7 @@ public void run() { mActivity.runOnUiThread(new Runnable() { @Override public void run() { - // mBraveRewardsNativeWorker.FetchGrants(); + mBraveRewardsNativeWorker.FetchGrants(); } }); } From aab02ebbcbe7eaed3d3dd6a9ad8f5381a7f578bd Mon Sep 17 00:00:00 2001 From: Deep Date: Fri, 10 Dec 2021 03:26:15 -0500 Subject: [PATCH 10/18] Add rewards onboarding --- .../browser/rewards/BraveRewardsPanel.java | 280 ++++++++++++++++-- .../res/layout/brave_rewards_panel_layout.xml | 12 + 2 files changed, 268 insertions(+), 24 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index 0c332b677b9e..1530838f293d 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -50,9 +50,13 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.SwitchCompat; import androidx.cardview.widget.CardView; import androidx.core.content.res.ResourcesCompat; +import androidx.viewpager.widget.ViewPager; + +import com.google.android.material.tabs.TabLayout; import org.json.JSONException; @@ -61,12 +65,15 @@ import org.chromium.base.Log; import org.chromium.base.SysUtils; import org.chromium.chrome.R; +import org.chromium.chrome.browser.BraveAdsNativeHelper; +import org.chromium.chrome.browser.BraveFeatureList; import org.chromium.chrome.browser.BraveRewardsBalance; import org.chromium.chrome.browser.BraveRewardsExternalWallet; import org.chromium.chrome.browser.BraveRewardsExternalWallet.WalletStatus; import org.chromium.chrome.browser.BraveRewardsHelper; import org.chromium.chrome.browser.BraveRewardsNativeWorker; import org.chromium.chrome.browser.BraveRewardsObserver; +import org.chromium.chrome.browser.BraveRewardsOnboardingPagerAdapter; import org.chromium.chrome.browser.BraveRewardsPublisher; import org.chromium.chrome.browser.BraveRewardsSiteBannerActivity; import org.chromium.chrome.browser.BraveRewardsUserWalletActivity; @@ -74,12 +81,21 @@ import org.chromium.chrome.browser.BraveWalletProvider; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.app.BraveActivity; +import org.chromium.chrome.browser.custom_layout.HeightWrappingViewPager; +import org.chromium.chrome.browser.customtabs.CustomTabActivity; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.preferences.BravePreferenceKeys; +import org.chromium.chrome.browser.preferences.SharedPreferencesManager; +import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.util.ConfigurationUtils; +import org.chromium.chrome.browser.util.PackageUtils; import org.chromium.ui.base.DeviceFormFactor; import java.math.RoundingMode; +import java.text.DateFormat; import java.text.DecimalFormat; +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; @@ -162,6 +178,14 @@ public class BraveRewardsPanel private View mNotificationLayout; private boolean mClaimInProcess; + private View braveRewardsOnboardingModalView; + // private View braveRewardsOptInView; + + private BraveRewardsOnboardingPagerAdapter braveRewardsOnboardingPagerAdapter; + private HeightWrappingViewPager braveRewardsViewPager; + private View braveRewardsOnboardingView; + // private View braveRewardsWelcomeView; + public BraveRewardsPanel(View anchorView) { mCurrentNotificationId = ""; mPublisherExist = false; @@ -786,10 +810,18 @@ public void showLikePopDownMenu() { mPopupWindow.showAsDropDown(mAnchorView, 0, 0); - // checkForRewardsOnboarding(); + checkForRewardsOnboarding(); mBraveRewardsNativeWorker.getInstance().StartProcess(); } + private void checkForRewardsOnboarding() { + if (mPopupView != null && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS) + && BraveRewardsHelper.shouldShowBraveRewardsOnboardingOnce()) { + showBraveRewardsOnboarding(mPopupView, false); + BraveRewardsHelper.setShowBraveRewardsOnboardingOnce(false); + } + } + @Override public void OnStartProcess() { requestPublisherInfo(); @@ -798,31 +830,231 @@ public void OnStartProcess() { mBraveRewardsNativeWorker.getAdsAccountStatement(); mBraveRewardsNativeWorker.GetCurrentBalanceReport(); setNotificationsControls(); - // if (root != null && PackageUtils.isFirstInstall(mActivity) - // && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { - // if (BraveRewardsHelper.getBraveRewardsAppOpenCount() == 0 - // && BraveRewardsHelper.shouldShowBraveRewardsOnboardingModal() - // && !BraveAdsNativeHelper.nativeIsBraveAdsEnabled( - // Profile.getLastUsedRegularProfile())) { - // showBraveRewardsOnboardingModal(root); - // BraveRewardsHelper.updateBraveRewardsAppOpenCount(); - // BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); - // } else if (SharedPreferencesManager.getInstance().readInt( - // BravePreferenceKeys.BRAVE_APP_OPEN_COUNT) - // > BraveRewardsHelper.getBraveRewardsAppOpenCount() - // && BraveRewardsHelper.shouldShowMiniOnboardingModal()) { - // if - // (BraveAdsNativeHelper.nativeIsBraveAdsEnabled(Profile.getLastUsedRegularProfile())) - // { - // showBraveRewardsWelcomeLayout(root); - // } else { - // showBraveRewardsOptInLayout(root); - // } - // BraveRewardsHelper.setShowMiniOnboardingModal(false); - // } - // } + if (mPopupView != null && PackageUtils.isFirstInstall(mActivity) + && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { + if (BraveRewardsHelper.getBraveRewardsAppOpenCount() == 0 + && BraveRewardsHelper.shouldShowBraveRewardsOnboardingModal() + && !BraveAdsNativeHelper.nativeIsBraveAdsEnabled( + Profile.getLastUsedRegularProfile())) { + showBraveRewardsOnboardingModal(mPopupView); + BraveRewardsHelper.updateBraveRewardsAppOpenCount(); + BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); + } else if (SharedPreferencesManager.getInstance().readInt( + BravePreferenceKeys.BRAVE_APP_OPEN_COUNT) + > BraveRewardsHelper.getBraveRewardsAppOpenCount() + && BraveRewardsHelper.shouldShowMiniOnboardingModal()) { + if (BraveAdsNativeHelper.nativeIsBraveAdsEnabled( + Profile.getLastUsedRegularProfile())) { + // showBraveRewardsWelcomeLayout(mPopupView); + } else { + // showBraveRewardsOptInLayout(mPopupView); + } + BraveRewardsHelper.setShowMiniOnboardingModal(false); + } + } + } + + private void showBraveRewardsOnboardingModal(View root) { + braveRewardsOnboardingModalView = root.findViewById(R.id.brave_rewards_onboarding_modal_id); + braveRewardsOnboardingModalView.setVisibility(View.VISIBLE); + + String tosText = + String.format(mActivity.getResources().getString(R.string.brave_rewards_tos_text), + mActivity.getResources().getString(R.string.terms_of_service), + mActivity.getResources().getString(R.string.privacy_policy)); + int termsOfServiceIndex = + tosText.indexOf(mActivity.getResources().getString(R.string.terms_of_service)); + Spanned tosTextSpanned = BraveRewardsHelper.spannedFromHtmlString(tosText); + SpannableString tosTextSS = new SpannableString(tosTextSpanned.toString()); + + ClickableSpan tosClickableSpan = new ClickableSpan() { + @Override + public void onClick(@NonNull View textView) { + CustomTabActivity.showInfoPage(mActivity, BraveActivity.BRAVE_TERMS_PAGE); + } + @Override + public void updateDrawState(@NonNull TextPaint ds) { + super.updateDrawState(ds); + ds.setUnderlineText(false); + } + }; + + tosTextSS.setSpan(tosClickableSpan, termsOfServiceIndex, + termsOfServiceIndex + + mActivity.getResources().getString(R.string.terms_of_service).length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + tosTextSS.setSpan(new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.brave_rewards_modal_theme_color)), + termsOfServiceIndex, + termsOfServiceIndex + + mActivity.getResources().getString(R.string.terms_of_service).length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + ClickableSpan privacyProtectionClickableSpan = new ClickableSpan() { + @Override + public void onClick(@NonNull View textView) { + CustomTabActivity.showInfoPage(mActivity, BraveActivity.BRAVE_PRIVACY_POLICY); + } + @Override + public void updateDrawState(@NonNull TextPaint ds) { + super.updateDrawState(ds); + ds.setUnderlineText(false); + } + }; + + int privacyPolicyIndex = + tosText.indexOf(mActivity.getResources().getString(R.string.privacy_policy)); + tosTextSS.setSpan(privacyProtectionClickableSpan, privacyPolicyIndex, + privacyPolicyIndex + + mActivity.getResources().getString(R.string.privacy_policy).length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + tosTextSS.setSpan(new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.brave_rewards_modal_theme_color)), + privacyPolicyIndex, + privacyPolicyIndex + + mActivity.getResources().getString(R.string.privacy_policy).length(), + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + TextView tosAndPpText = braveRewardsOnboardingModalView.findViewById( + R.id.brave_rewards_onboarding_modal_tos_pp_text); + tosAndPpText.setMovementMethod(LinkMovementMethod.getInstance()); + tosAndPpText.setText(tosTextSS); + + TextView takeQuickTourButton = root.findViewById(R.id.take_quick_tour_button); + takeQuickTourButton.setOnClickListener((new View.OnClickListener() { + @Override + public void onClick(View v) { + braveRewardsOnboardingModalView.setVisibility(View.GONE); + showBraveRewardsOnboarding(root, false); + } + })); + Button btnBraveRewards = root.findViewById(R.id.btn_brave_rewards); + btnBraveRewards.setOnClickListener((new View.OnClickListener() { + @Override + public void onClick(View v) { + braveRewardsOnboardingModalView.setVisibility(View.GONE); + BraveAdsNativeHelper.nativeSetAdsEnabled(Profile.getLastUsedRegularProfile()); + BraveRewardsNativeWorker.getInstance().SetAutoContributeEnabled(true); + showBraveRewardsOnboarding(root, true); + } + })); + AppCompatImageView modalCloseButton = braveRewardsOnboardingModalView.findViewById( + R.id.brave_rewards_onboarding_modal_close); + modalCloseButton.setOnClickListener((new View.OnClickListener() { + @Override + public void onClick(View v) { + braveRewardsOnboardingModalView.setVisibility(View.GONE); + } + })); } + private void showBraveRewardsOnboarding(View root, boolean shouldShowMoreOption) { + braveRewardsOnboardingView = root.findViewById(R.id.brave_rewards_onboarding_layout_id); + braveRewardsOnboardingView.setVisibility(View.VISIBLE); + final Button btnNext = braveRewardsOnboardingView.findViewById(R.id.btn_next); + btnNext.setOnClickListener(braveRewardsOnboardingClickListener); + braveRewardsOnboardingView.findViewById(R.id.btn_go_back) + .setOnClickListener(braveRewardsOnboardingClickListener); + braveRewardsOnboardingView.findViewById(R.id.btn_skip) + .setOnClickListener(braveRewardsOnboardingClickListener); + braveRewardsOnboardingView.findViewById(R.id.btn_start_quick_tour) + .setOnClickListener(braveRewardsOnboardingClickListener); + + braveRewardsViewPager = + braveRewardsOnboardingView.findViewById(R.id.brave_rewards_view_pager); + braveRewardsViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled( + int position, float positionOffset, int positionOffsetPixels) { + if (positionOffset == 0 && positionOffsetPixels == 0 && position == 0) { + braveRewardsOnboardingView.findViewById(R.id.onboarding_first_screen_layout) + .setVisibility(View.VISIBLE); + braveRewardsOnboardingView.findViewById(R.id.onboarding_action_layout) + .setVisibility(View.GONE); + } else { + braveRewardsOnboardingView.findViewById(R.id.onboarding_action_layout) + .setVisibility(View.VISIBLE); + braveRewardsOnboardingView.findViewById(R.id.onboarding_first_screen_layout) + .setVisibility(View.GONE); + } + } + + @Override + public void onPageSelected(int position) { + if (braveRewardsOnboardingPagerAdapter != null + && position == braveRewardsOnboardingPagerAdapter.getCount() - 1) { + btnNext.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); + btnNext.setText(mActivity.getResources().getString(R.string.done)); + } else { + btnNext.setText(mActivity.getResources().getString(R.string.next)); + btnNext.setCompoundDrawablesWithIntrinsicBounds( + 0, 0, R.drawable.ic_chevron_right, 0); + } + } + + @Override + public void onPageScrollStateChanged(int state) {} + }); + braveRewardsOnboardingPagerAdapter = new BraveRewardsOnboardingPagerAdapter(); + braveRewardsOnboardingPagerAdapter.setOnboardingType(shouldShowMoreOption); + braveRewardsViewPager.setAdapter(braveRewardsOnboardingPagerAdapter); + TabLayout braveRewardsTabLayout = + braveRewardsOnboardingView.findViewById(R.id.brave_rewards_tab_layout); + braveRewardsTabLayout.setupWithViewPager(braveRewardsViewPager, true); + AppCompatImageView modalCloseButton = braveRewardsOnboardingView.findViewById( + R.id.brave_rewards_onboarding_layout_modal_close); + modalCloseButton.setOnClickListener((new View.OnClickListener() { + @Override + public void onClick(View v) { + braveRewardsOnboardingView.setVisibility(View.GONE); + } + })); + braveRewardsOnboardingView.findViewById(R.id.onboarding_first_screen_layout) + .setVisibility(View.VISIBLE); + braveRewardsOnboardingView.findViewById(R.id.onboarding_action_layout) + .setVisibility(View.GONE); + } + + View.OnClickListener braveRewardsOnboardingClickListener = new View.OnClickListener() { + @Override + public void onClick(View view) { + int viewId = view.getId(); + if (viewId == R.id.btn_start_quick_tour) { + if (braveRewardsViewPager != null && braveRewardsViewPager.getCurrentItem() == 0) { + braveRewardsViewPager.setCurrentItem( + braveRewardsViewPager.getCurrentItem() + 1); + } + } + + if (viewId == R.id.btn_next) { + if (braveRewardsViewPager != null && braveRewardsOnboardingPagerAdapter != null) { + if (braveRewardsViewPager.getCurrentItem() + == braveRewardsOnboardingPagerAdapter.getCount() - 1) { + if (braveRewardsOnboardingView != null) { + braveRewardsOnboardingView.setVisibility(View.GONE); + } + if (BraveAdsNativeHelper.nativeIsBraveAdsEnabled( + Profile.getLastUsedRegularProfile())) { + // showBraveRewardsWelcomeLayout(mPopupView); + } + } else { + braveRewardsViewPager.setCurrentItem( + braveRewardsViewPager.getCurrentItem() + 1); + } + } + } + + if (viewId == R.id.btn_skip && braveRewardsOnboardingView != null) { + braveRewardsViewPager.setCurrentItem( + braveRewardsOnboardingPagerAdapter.getCount() - 1); + } + + if (viewId == R.id.btn_go_back && braveRewardsViewPager != null) { + braveRewardsViewPager.setCurrentItem(braveRewardsViewPager.getCurrentItem() - 1); + } + } + }; + @Override public void OnGetCurrentBalanceReport(double[] report) { Log.e(TAG, "OnGetCurrentBalanceReport : " + report); diff --git a/android/java/res/layout/brave_rewards_panel_layout.xml b/android/java/res/layout/brave_rewards_panel_layout.xml index 6ec1727f2ebc..602c36305cd8 100644 --- a/android/java/res/layout/brave_rewards_panel_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_layout.xml @@ -18,6 +18,14 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + + + + + From 9dda1a1ef30943024aaac32cb8446a8cc10c8e40 Mon Sep 17 00:00:00 2001 From: Deep Date: Fri, 10 Dec 2021 11:28:06 -0500 Subject: [PATCH 11/18] Add observers for claim update Add observer for tip update Add bifluer changes --- android/brave_java_resources.gni | 2 + .../browser/BraveRewardsNativeWorker.java | 14 +++++ .../chrome/browser/BraveRewardsObserver.java | 2 + .../BraveRewardsUserWalletActivity.java | 4 ++ .../browser/rewards/BraveRewardsPanel.java | 51 ++++++++++++++++++- .../java/res/drawable/ic_logo_bitflyer.xml | 9 ++++ .../res/drawable/ic_logo_bitflyer_colored.xml | 9 ++++ .../res/layout/brave_rewards_panel_layout.xml | 1 + .../brave_rewards_panel_summary_layout.xml | 2 + .../android/brave_rewards_native_worker.cc | 20 ++++++++ .../android/brave_rewards_native_worker.h | 11 ++++ 11 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 android/java/res/drawable/ic_logo_bitflyer.xml create mode 100644 android/java/res/drawable/ic_logo_bitflyer_colored.xml diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni index 3451c432fa70..195fe7fa50b4 100644 --- a/android/brave_java_resources.gni +++ b/android/brave_java_resources.gni @@ -626,6 +626,8 @@ brave_java_resources = [ "java/res/drawable/ic_icon_bat_eta.xml", "java/res/drawable/ic_info.xml", "java/res/drawable/ic_languages.xml", + "java/res/drawable/ic_logo_bitflyer.xml", + "java/res/drawable/ic_logo_bitflyer_colored.xml", "java/res/drawable/ic_mask.xml", "java/res/drawable/ic_money_bag_coins.xml", "java/res/drawable/ic_more_horiz.xml", diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java index f7131bd3bb8b..cacb786d76c9 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java @@ -655,6 +655,20 @@ public void OnOneTimeTip() { } } + @CalledByNative + public void onUnblindedTokensReady() { + for (BraveRewardsObserver observer : mObservers) { + observer.onUnblindedTokensReady(); + } + } + + @CalledByNative + public void onReconcileComplete(int resultCode, int rewardsType, double amount) { + for (BraveRewardsObserver observer : mObservers) { + observer.onReconcileComplete(resultCode, rewardsType, amount); + } + } + @NativeMethods interface Natives { void init(BraveRewardsNativeWorker caller); diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java index 270510f3a795..1c13f7a6248a 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java @@ -28,6 +28,8 @@ default public void OnDisconnectWallet(int error_code, default public void OnProcessRewardsPageUrl(int error_code, String wallet_type, String action, String json_args ) {}; default public void OnClaimPromotion(int error_code) {}; + default public void onUnblindedTokensReady() {} + default public void onReconcileComplete(int resultCode, int rewardsType, double amount) {} default public void OnRecoverWallet(int errorCode) {}; default public void OnRefreshPublisher(int status, String publisherKey){}; default public void OnOneTimeTip(){}; diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java b/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java index 94e201f3e9c1..a6c6060c2441 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java @@ -100,6 +100,10 @@ private void SetUIControls() { String userId = intent.getStringExtra(BraveRewardsExternalWallet.USER_NAME); txtUserId.setText(userId); + txtUserId.setCompoundDrawablesWithIntrinsicBounds( + walletType.equals(BraveWalletProvider.UPHOLD) ? R.drawable.uphold_green + : R.drawable.ic_logo_bitflyer_colored, + 0, 0, 0); SetDisconnectBtnClickHandler(); } diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index 1530838f293d..06f7b03adb60 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -333,6 +333,15 @@ public void onClick(View v) { TextView monthYearText = mPopupView.findViewById(R.id.month_year_text); monthYearText.setText(monthYear); + if (mBraveRewardsNativeWorker != null) { + String walletType = mBraveRewardsNativeWorker.getExternalWalletType(); + TextView mywalletText = mPopupView.findViewById(R.id.my_wallet_text); + mywalletText.setCompoundDrawablesWithIntrinsicBounds(0, 0, + walletType.equals(BraveWalletProvider.UPHOLD) ? R.drawable.uphold_white + : R.drawable.ic_logo_bitflyer, + 0); + } + mPopupWindow.setContentView(mPopupView); } @@ -781,6 +790,28 @@ else if (responseCode == BraveRewardsNativeWorker.LEDGER_OK) { @Override public void OnGrantFinish(int result) { Log.e(TAG, "OnGrantFinish"); + // mBraveRewardsNativeWorker.GetAllNotifications(); + // mBraveRewardsNativeWorker.GetRewardsParameters(); + // mBraveRewardsNativeWorker.GetExternalWallet(); + // mBraveRewardsNativeWorker.getAdsAccountStatement(); + // mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + } + + @Override + public void onUnblindedTokensReady() { + Log.e("NTP", "onUnblindedTokensReady"); + mBraveRewardsNativeWorker.GetAllNotifications(); + mBraveRewardsNativeWorker.GetRewardsParameters(); + mBraveRewardsNativeWorker.GetExternalWallet(); + mBraveRewardsNativeWorker.getAdsAccountStatement(); + mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + } + + @Override + public void onReconcileComplete(int resultCode, int rewardsType, double amount) { + Log.e("NTP", + "onReconcileComplete : resultCode : " + resultCode + + " : rewardsType : " + rewardsType + " : amouont : " + amount); mBraveRewardsNativeWorker.GetAllNotifications(); mBraveRewardsNativeWorker.GetRewardsParameters(); mBraveRewardsNativeWorker.GetExternalWallet(); @@ -1128,6 +1159,15 @@ public void OnGetCurrentBalanceReport(double[] report) { Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(text); tv.setText(toInsert); tvUSD.setText(textUSD); + if (mBraveRewardsNativeWorker != null) { + String walletType = mBraveRewardsNativeWorker.getExternalWalletType(); + mPopupView.findViewById(R.id.auto_contribute_summary_seperator) + .setVisibility(walletType.equals(BraveWalletProvider.UPHOLD) ? View.VISIBLE + : View.GONE); + mPopupView.findViewById(R.id.auto_contribute_summary_layout) + .setVisibility(walletType.equals(BraveWalletProvider.UPHOLD) ? View.VISIBLE + : View.GONE); + } // if (tv != null && tvUSD != null && // !text.isEmpty() && !textUSD.isEmpty()) { // // tvTitle.setVisibility(hideControls ? View.GONE : View.VISIBLE); @@ -1288,6 +1328,7 @@ private void setVerifyWalletButton(@WalletStatus final int status) { int rightDrawable = 0; int leftDrawable = 0; int text = 0; + String walletType = mBraveRewardsNativeWorker.getExternalWalletType(); switch (status) { case BraveRewardsExternalWallet.NOT_CONNECTED: @@ -1313,7 +1354,9 @@ private void setVerifyWalletButton(@WalletStatus final int status) { editor.putBoolean(PREF_VERIFY_WALLET_ENABLE, true); editor.apply(); - leftDrawable = R.drawable.uphold_white; + leftDrawable = walletType.equals(BraveWalletProvider.UPHOLD) + ? R.drawable.uphold_white + : R.drawable.ic_logo_bitflyer; rightDrawable = R.drawable.verified_disclosure; text = R.string.brave_ui_wallet_button_verified; btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds( @@ -1327,7 +1370,9 @@ private void setVerifyWalletButton(@WalletStatus final int status) { break; case BraveRewardsExternalWallet.DISCONNECTED_NOT_VERIFIED: case BraveRewardsExternalWallet.DISCONNECTED_VERIFIED: - leftDrawable = R.drawable.uphold_white; + leftDrawable = walletType.equals(BraveWalletProvider.UPHOLD) + ? R.drawable.uphold_white + : R.drawable.ic_logo_bitflyer; text = R.string.brave_ui_wallet_button_disconnected; btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(leftDrawable, 0, 0, 0); btnVerifyWallet.setBackgroundDrawable(ResourcesCompat.getDrawable( @@ -1409,6 +1454,7 @@ private void requestPublisherInfo() { if (currentActiveTab != null && !currentActiveTab.isIncognito()) { String url = currentActiveTab.getUrl().getSpec(); if (URLUtil.isValidUrl(url)) { + Log.e("NTP", "publisher : " + url); mBraveRewardsNativeWorker.GetPublisherInfo(currentActiveTab.getId(), url); mPublisherFetcher = new Timer(); mPublisherFetcher.schedule(new PublisherFetchTimer(currentActiveTab.getId(), url), @@ -1427,6 +1473,7 @@ private void requestPublisherInfo() { @Override public void OnPublisherInfo(int tabId) { + Log.e("NTP", "OnPublisherInfo"); mPublisherExist = true; mCurrentTabId = tabId; // RemoveRewardsSummaryMonthYear(); diff --git a/android/java/res/drawable/ic_logo_bitflyer.xml b/android/java/res/drawable/ic_logo_bitflyer.xml new file mode 100644 index 000000000000..2b22c039170b --- /dev/null +++ b/android/java/res/drawable/ic_logo_bitflyer.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/android/java/res/drawable/ic_logo_bitflyer_colored.xml b/android/java/res/drawable/ic_logo_bitflyer_colored.xml new file mode 100644 index 000000000000..145d234ef5a0 --- /dev/null +++ b/android/java/res/drawable/ic_logo_bitflyer_colored.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/android/java/res/layout/brave_rewards_panel_layout.xml b/android/java/res/layout/brave_rewards_panel_layout.xml index 602c36305cd8..b7a9cb600a6c 100644 --- a/android/java/res/layout/brave_rewards_panel_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_layout.xml @@ -50,6 +50,7 @@ tools:ignore="UseCompoundDrawables"> (result), static_cast(type), amount); +} + base::android::ScopedJavaLocalRef BraveRewardsNativeWorker::GetPublisherURL(JNIEnv* env, uint64_t tabId) { base::android::ScopedJavaLocalRef res = diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.h b/browser/brave_rewards/android/brave_rewards_native_worker.h index d98a7f92a5d7..ce44ee97e3ac 100644 --- a/browser/brave_rewards/android/brave_rewards_native_worker.h +++ b/browser/brave_rewards/android/brave_rewards_native_worker.h @@ -168,6 +168,17 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver, brave_rewards::RewardsService* rewards_service, ledger::type::RewardsParametersPtr parameters); + void OnUnblindedTokensReady( + brave_rewards::RewardsService* rewards_service) override; + + void OnReconcileComplete( + brave_rewards::RewardsService* rewards_service, + const ledger::type::Result result, + const std::string& contribution_id, + const double amount, + const ledger::type::RewardsType type, + const ledger::type::ContributionProcessor processor) override; + void OnNotificationAdded( brave_rewards::RewardsNotificationService* rewards_notification_service, const brave_rewards::RewardsNotificationService::RewardsNotification& From 1d990ad2b1e1251aa0587c4e665a8d6fbb79532f Mon Sep 17 00:00:00 2001 From: Deep Date: Mon, 13 Dec 2021 04:06:30 -0500 Subject: [PATCH 12/18] Add shadow for all popups Remove verify banner Updfate rewards modal pref --- .../chrome/browser/app/BraveActivity.java | 2 + .../browser/rewards/BraveRewardsPanel.java | 78 ++++++++++++++++--- .../toolbar/top/BraveToolbarLayoutImpl.java | 3 +- .../res/layout/brave_rewards_panel_layout.xml | 8 +- ...rave_rewards_panel_notification_layout.xml | 5 +- .../brave_rewards_panel_summary_layout.xml | 1 + .../res/layout/uphold_login_popup_window.xml | 2 +- android/java/res/values/brave_colors.xml | 1 + 8 files changed, 80 insertions(+), 20 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/app/BraveActivity.java b/android/java/org/chromium/chrome/browser/app/BraveActivity.java index b74b486006a1..9cffb281ce22 100644 --- a/android/java/org/chromium/chrome/browser/app/BraveActivity.java +++ b/android/java/org/chromium/chrome/browser/app/BraveActivity.java @@ -170,6 +170,8 @@ public abstract class BraveActivity extends C public static final String ADD_FUNDS_URL = "chrome://rewards/#add-funds"; public static final String REWARDS_SETTINGS_URL = "chrome://rewards/"; public static final String BRAVE_REWARDS_SETTINGS_URL = "brave://rewards/"; + public static final String BRAVE_REWARDS_SETTINGS_WALLET_PROVIDER_URL = + "brave://rewards/#verify"; public static final String REWARDS_AC_SETTINGS_URL = "chrome://rewards/contribute"; public static final String REWARDS_LEARN_MORE_URL = "https://brave.com/faq-rewards/#unclaimed-funds"; public static final String BRAVE_TERMS_PAGE = diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index 06f7b03adb60..b2b4de8e6bea 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -53,6 +53,7 @@ import androidx.appcompat.widget.AppCompatImageView; import androidx.appcompat.widget.SwitchCompat; import androidx.cardview.widget.CardView; +import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; import androidx.viewpager.widget.ViewPager; @@ -144,6 +145,7 @@ public class BraveRewardsPanel private final View mAnchorView; private final PopupWindow mPopupWindow; private ViewGroup mPopupView; + private LinearLayout mRewardsMainLayout; private final BraveActivity mBraveActivity; private final ChromeTabbedActivity mActivity; private BraveRewardsHelper mIconFetcher; @@ -257,6 +259,8 @@ private void setUpViews() { Context.LAYOUT_INFLATER_SERVICE); mPopupView = (ViewGroup) inflater.inflate(R.layout.brave_rewards_panel_layout, null); + mRewardsMainLayout = mPopupView.findViewById(R.id.rewards_main_layout); + ImageView btnRewardsSettings = mPopupView.findViewById(R.id.btn_rewards_settings); btnRewardsSettings.setOnClickListener((new View.OnClickListener() { @Override @@ -675,6 +679,11 @@ private void showNotification(String id, int type, long timestamp, String[] args if (mNotificationLayout != null) { Log.e(TAG, "mNotificationLayout visible"); mNotificationLayout.setVisibility(View.VISIBLE); + // mRewardsMainLayout.setAlpha(0.4f); + int foregroundColor = R.color.rewards_foreground_color; + mRewardsMainLayout.setForeground( + new ColorDrawable(ContextCompat.getColor(mActivity, foregroundColor))); + disableControls(false, mRewardsMainLayout); } setNotificationButtoClickListener(); @@ -767,6 +776,9 @@ private void hideNotifications() { Log.e(TAG, "hideNotifications"); if (mNotificationLayout != null) { mNotificationLayout.setVisibility(View.GONE); + // mRewardsMainLayout.setAlpha(1.0f); + mRewardsMainLayout.setForeground(null); + disableControls(true, mRewardsMainLayout); } } @@ -863,13 +875,12 @@ public void OnStartProcess() { setNotificationsControls(); if (mPopupView != null && PackageUtils.isFirstInstall(mActivity) && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { - if (BraveRewardsHelper.getBraveRewardsAppOpenCount() == 0 - && BraveRewardsHelper.shouldShowBraveRewardsOnboardingModal() + if (BraveRewardsHelper.shouldShowBraveRewardsOnboardingModal() && !BraveAdsNativeHelper.nativeIsBraveAdsEnabled( Profile.getLastUsedRegularProfile())) { showBraveRewardsOnboardingModal(mPopupView); BraveRewardsHelper.updateBraveRewardsAppOpenCount(); - BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); + // BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); } else if (SharedPreferencesManager.getInstance().readInt( BravePreferenceKeys.BRAVE_APP_OPEN_COUNT) > BraveRewardsHelper.getBraveRewardsAppOpenCount() @@ -889,6 +900,12 @@ private void showBraveRewardsOnboardingModal(View root) { braveRewardsOnboardingModalView = root.findViewById(R.id.brave_rewards_onboarding_modal_id); braveRewardsOnboardingModalView.setVisibility(View.VISIBLE); + // mRewardsMainLayout.setAlpha(0.4f); + int foregroundColor = R.color.rewards_foreground_color; + mRewardsMainLayout.setForeground( + new ColorDrawable(ContextCompat.getColor(mActivity, foregroundColor))); + disableControls(false, mRewardsMainLayout); + String tosText = String.format(mActivity.getResources().getString(R.string.brave_rewards_tos_text), mActivity.getResources().getString(R.string.terms_of_service), @@ -966,6 +983,7 @@ public void onClick(View v) { braveRewardsOnboardingModalView.setVisibility(View.GONE); BraveAdsNativeHelper.nativeSetAdsEnabled(Profile.getLastUsedRegularProfile()); BraveRewardsNativeWorker.getInstance().SetAutoContributeEnabled(true); + BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); showBraveRewardsOnboarding(root, true); } })); @@ -975,11 +993,20 @@ public void onClick(View v) { @Override public void onClick(View v) { braveRewardsOnboardingModalView.setVisibility(View.GONE); + // mRewardsMainLayout.setAlpha(1.0f); + mRewardsMainLayout.setForeground(null); + disableControls(true, mRewardsMainLayout); } })); } private void showBraveRewardsOnboarding(View root, boolean shouldShowMoreOption) { + // mRewardsMainLayout.setAlpha(0.4f); + int foregroundColor = R.color.rewards_foreground_color; + mRewardsMainLayout.setForeground( + new ColorDrawable(ContextCompat.getColor(mActivity, foregroundColor))); + disableControls(false, mRewardsMainLayout); + braveRewardsOnboardingView = root.findViewById(R.id.brave_rewards_onboarding_layout_id); braveRewardsOnboardingView.setVisibility(View.VISIBLE); final Button btnNext = braveRewardsOnboardingView.findViewById(R.id.btn_next); @@ -1038,6 +1065,9 @@ public void onPageScrollStateChanged(int state) {} @Override public void onClick(View v) { braveRewardsOnboardingView.setVisibility(View.GONE); + // mRewardsMainLayout.setAlpha(1.0f); + mRewardsMainLayout.setForeground(null); + disableControls(true, mRewardsMainLayout); } })); braveRewardsOnboardingView.findViewById(R.id.onboarding_first_screen_layout) @@ -1063,6 +1093,9 @@ public void onClick(View view) { == braveRewardsOnboardingPagerAdapter.getCount() - 1) { if (braveRewardsOnboardingView != null) { braveRewardsOnboardingView.setVisibility(View.GONE); + // mRewardsMainLayout.setAlpha(1.0f); + mRewardsMainLayout.setForeground(null); + disableControls(true, mRewardsMainLayout); } if (BraveAdsNativeHelper.nativeIsBraveAdsEnabled( Profile.getLastUsedRegularProfile())) { @@ -1420,11 +1453,20 @@ public void onClick(View v) { && !isVerifyWalletEnabled()) { showUpholdLoginPopupWindow(btnVerifyWallet); } else { - int requestCode = (status == BraveRewardsExternalWallet.NOT_CONNECTED) - ? BraveActivity.VERIFY_WALLET_ACTIVITY_REQUEST_CODE - : BraveActivity.USER_WALLET_ACTIVITY_REQUEST_CODE; - Intent intent = BuildVerifyWalletActivityIntent(status); - mActivity.startActivityForResult(intent, requestCode); + if (status == BraveRewardsExternalWallet.NOT_CONNECTED) { + BraveActivity.class.cast(mActivity).openNewOrSelectExistingTab( + BraveActivity.BRAVE_REWARDS_SETTINGS_WALLET_PROVIDER_URL); + dismiss(); + } else { + int requestCode = + (status == BraveRewardsExternalWallet.NOT_CONNECTED) + ? BraveActivity.VERIFY_WALLET_ACTIVITY_REQUEST_CODE + : BraveActivity.USER_WALLET_ACTIVITY_REQUEST_CODE; + Intent intent = BuildVerifyWalletActivityIntent(status); + if (intent != null) { + mActivity.startActivityForResult(intent, requestCode); + } + } } break; case BraveRewardsExternalWallet.DISCONNECTED_NOT_VERIFIED: @@ -1767,9 +1809,14 @@ private boolean isVerifyWalletEnabled() { private void showUpholdLoginPopupWindow(final View view) { PopupWindow loginPopupWindow = new PopupWindow(mActivity); + // mRewardsMainLayout.setAlpha(0.4f); + int foregroundColor = R.color.rewards_foreground_color; + mRewardsMainLayout.setForeground( + new ColorDrawable(ContextCompat.getColor(mActivity, foregroundColor))); + disableControls(false, mRewardsMainLayout); + LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - ViewGroup rewardsMainLayout = mPopupView.findViewById(R.id.rewards_main_layout); View loginPopupView = inflater.inflate(R.layout.uphold_login_popup_window, mPopupView); boolean isTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity); @@ -1874,9 +1921,6 @@ public void run() { private Intent BuildVerifyWalletActivityIntent(@WalletStatus final int status) { Class clazz = null; switch (status) { - case BraveRewardsExternalWallet.NOT_CONNECTED: - clazz = BraveRewardsVerifyWalletActivity.class; - break; case BraveRewardsExternalWallet.CONNECTED: case BraveRewardsExternalWallet.PENDING: case BraveRewardsExternalWallet.VERIFIED: @@ -1898,4 +1942,14 @@ private Intent BuildVerifyWalletActivityIntent(@WalletStatus final int status) { intent.putExtra(BraveRewardsExternalWallet.WITHDRAW_URL, mExternalWallet.getWithdrawUrl()); return intent; } + + private void disableControls(boolean enable, ViewGroup vg) { + for (int i = 0; i < vg.getChildCount(); i++) { + View child = vg.getChildAt(i); + child.setEnabled(enable); + if (child instanceof ViewGroup) { + disableControls(enable, (ViewGroup) child); + } + } + } } diff --git a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java index 01213f37abce..34c30cb849eb 100644 --- a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java +++ b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java @@ -403,7 +403,7 @@ public void onDidFinishNavigation(Tab tab, NavigationHandle navigation) { && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { showBraveRewardsOnboardingModal(); BraveRewardsHelper.updateBraveRewardsAppOpenCount(); - BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); + // BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); } } @@ -770,6 +770,7 @@ public void onClick(View v) { public void onClick(View v) { BraveAdsNativeHelper.nativeSetAdsEnabled(Profile.getLastUsedRegularProfile()); BraveRewardsNativeWorker.getInstance().SetAutoContributeEnabled(true); + BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); dialog.dismiss(); } })); diff --git a/android/java/res/layout/brave_rewards_panel_layout.xml b/android/java/res/layout/brave_rewards_panel_layout.xml index b7a9cb600a6c..8530a2e05e8b 100644 --- a/android/java/res/layout/brave_rewards_panel_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_layout.xml @@ -18,6 +18,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> + + @@ -212,10 +216,6 @@ - - diff --git a/android/java/res/layout/brave_rewards_panel_notification_layout.xml b/android/java/res/layout/brave_rewards_panel_notification_layout.xml index 04ffe8dfa00b..0cb0464c35a4 100644 --- a/android/java/res/layout/brave_rewards_panel_notification_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_notification_layout.xml @@ -91,8 +91,9 @@ diff --git a/android/java/res/layout/brave_rewards_panel_summary_layout.xml b/android/java/res/layout/brave_rewards_panel_summary_layout.xml index 312f2784754b..4315b1bf9fdb 100644 --- a/android/java/res/layout/brave_rewards_panel_summary_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_summary_layout.xml @@ -21,6 +21,7 @@ android:paddingEnd="16dp" android:paddingBottom="8dp" android:text="@string/add_funds" + android:visibility="gone" android:foreground="?android:attr/selectableItemBackground" android:clickable="true" android:focusable="true" diff --git a/android/java/res/layout/uphold_login_popup_window.xml b/android/java/res/layout/uphold_login_popup_window.xml index 40fc5154e406..6d5669055ba9 100644 --- a/android/java/res/layout/uphold_login_popup_window.xml +++ b/android/java/res/layout/uphold_login_popup_window.xml @@ -3,7 +3,7 @@ #868E96 #212529 #4C54D2 + #80000000 From 9282b0f8173add0031a3e4d5542e7f2e0ff53573 Mon Sep 17 00:00:00 2001 From: Deep Date: Mon, 13 Dec 2021 15:33:05 -0500 Subject: [PATCH 13/18] Refactor colors and strings --- .../browser/rewards/BraveRewardsPanel.java | 68 ++++---- .../toolbar/top/BraveToolbarLayoutImpl.java | 1 - .../brave_rewards_onboarding_layout.xml | 4 +- .../res/layout/brave_rewards_panel_layout.xml | 147 +++++++++++------- ...rave_rewards_panel_notification_layout.xml | 18 +-- .../brave_rewards_panel_publisher_layout.xml | 7 +- .../brave_rewards_panel_settings_layout.xml | 6 +- .../brave_rewards_panel_summary_layout.xml | 7 - .../layout/brave_rewards_panel_tip_layout.xml | 9 +- android/java/res/values/brave_colors.xml | 4 + .../android/strings/android_brave_strings.grd | 3 + 11 files changed, 145 insertions(+), 129 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index b2b4de8e6bea..28b294be04a4 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -188,6 +188,11 @@ public class BraveRewardsPanel private View braveRewardsOnboardingView; // private View braveRewardsWelcomeView; + private LinearLayout mWalletBalanceLayout; + private LinearLayout mAdsStatementLayout; + private View mWalletBalanceProgress; + private View mAdsStatementProgress; + public BraveRewardsPanel(View anchorView) { mCurrentNotificationId = ""; mPublisherExist = false; @@ -261,6 +266,11 @@ private void setUpViews() { mRewardsMainLayout = mPopupView.findViewById(R.id.rewards_main_layout); + mWalletBalanceLayout = mPopupView.findViewById(R.id.wallet_balance_layout); + mAdsStatementLayout = mPopupView.findViewById(R.id.ads_statement_layout); + mWalletBalanceProgress = mPopupView.findViewById(R.id.wallet_balance_progress); + mAdsStatementProgress = mPopupView.findViewById(R.id.ads_statement_progress); + ImageView btnRewardsSettings = mPopupView.findViewById(R.id.btn_rewards_settings); btnRewardsSettings.setOnClickListener((new View.OnClickListener() { @Override @@ -381,9 +391,6 @@ private void setNotificationsControls() { mPopupView.findViewById(R.id.brave_rewards_panel_notification_layout_id); Log.e(TAG, "setNotificationsControls"); - if (mBraveRewardsNativeWorker != null) { - mBraveRewardsNativeWorker.GetAllNotifications(); - } ImageView btnCloseNotification = mPopupView.findViewById(R.id.btn_close_notification); if (btnCloseNotification != null) { @@ -739,6 +746,8 @@ public void onClick(View v) { BraveRewardsHelper.CROSS_FADE_DURATION); mBraveRewardsNativeWorker.GetGrant(promId); + mWalletBalanceLayout.setAlpha(0.4f); + mWalletBalanceProgress.setVisibility(View.VISIBLE); // walletDetailsReceived = false; //re-read wallet status // EnableWalletDetails(false); } @@ -789,34 +798,24 @@ public void OnClaimPromotion(int responseCode) { showNotification( REWARDS_PROMOTION_CLAIM_ERROR_ID, REWARDS_PROMOTION_CLAIM_ERROR, 0, args); } - // TODO add logic for balance refresh - else if (responseCode == BraveRewardsNativeWorker.LEDGER_OK) { - Log.e(TAG, "BraveRewardsNativeWorker.LEDGER_OK"); - // mBraveRewardsNativeWorker.GetRewardsParameters(); - // mBraveRewardsNativeWorker.GetExternalWallet(); - // mBraveRewardsNativeWorker.getAdsAccountStatement(); - // mBraveRewardsNativeWorker.GetCurrentBalanceReport(); - } - } - - @Override - public void OnGrantFinish(int result) { - Log.e(TAG, "OnGrantFinish"); - // mBraveRewardsNativeWorker.GetAllNotifications(); - // mBraveRewardsNativeWorker.GetRewardsParameters(); - // mBraveRewardsNativeWorker.GetExternalWallet(); - // mBraveRewardsNativeWorker.getAdsAccountStatement(); - // mBraveRewardsNativeWorker.GetCurrentBalanceReport(); } @Override public void onUnblindedTokensReady() { Log.e("NTP", "onUnblindedTokensReady"); - mBraveRewardsNativeWorker.GetAllNotifications(); + fetchRewardsData(); + } + + private void fetchRewardsData() { + mWalletBalanceLayout.setAlpha(0.4f); + mWalletBalanceProgress.setVisibility(View.VISIBLE); mBraveRewardsNativeWorker.GetRewardsParameters(); mBraveRewardsNativeWorker.GetExternalWallet(); + mAdsStatementLayout.setAlpha(0.4f); + mAdsStatementProgress.setVisibility(View.VISIBLE); mBraveRewardsNativeWorker.getAdsAccountStatement(); mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + mBraveRewardsNativeWorker.GetAllNotifications(); } @Override @@ -824,11 +823,7 @@ public void onReconcileComplete(int resultCode, int rewardsType, double amount) Log.e("NTP", "onReconcileComplete : resultCode : " + resultCode + " : rewardsType : " + rewardsType + " : amouont : " + amount); - mBraveRewardsNativeWorker.GetAllNotifications(); - mBraveRewardsNativeWorker.GetRewardsParameters(); - mBraveRewardsNativeWorker.GetExternalWallet(); - mBraveRewardsNativeWorker.getAdsAccountStatement(); - mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + fetchRewardsData(); } OnCheckedChangeListener autoContributeSwitchListener = new OnCheckedChangeListener() { @@ -868,10 +863,7 @@ private void checkForRewardsOnboarding() { @Override public void OnStartProcess() { requestPublisherInfo(); - mBraveRewardsNativeWorker.GetRewardsParameters(); - mBraveRewardsNativeWorker.GetExternalWallet(); - mBraveRewardsNativeWorker.getAdsAccountStatement(); - mBraveRewardsNativeWorker.GetCurrentBalanceReport(); + fetchRewardsData(); setNotificationsControls(); if (mPopupView != null && PackageUtils.isFirstInstall(mActivity) && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { @@ -1152,7 +1144,7 @@ public void OnGetCurrentBalanceReport(double[] report) { // R.string.brave_ui_token_grant_claimed)); tv = mPopupView.findViewById(R.id.total_grants_claimed_bat_text); tvUSD = mPopupView.findViewById(R.id.total_grants_claimed_usd_text); - text = "" + value + " " + batText + text = "" + value + " " + batText + ""; textUSD = usdValue; break; @@ -1160,7 +1152,7 @@ public void OnGetCurrentBalanceReport(double[] report) { // tvTitle = (TextView)root.findViewById(R.id.br_earnings_ads_title); tv = mPopupView.findViewById(R.id.rewards_from_ads_bat_text); tvUSD = mPopupView.findViewById(R.id.rewards_from_ads_usd_text); - text = "" + value + " " + batText + text = "" + value + " " + batText + ""; textUSD = usdValue; break; @@ -1168,7 +1160,7 @@ public void OnGetCurrentBalanceReport(double[] report) { // tvTitle = (TextView)root.findViewById(R.id.br_auto_contribute_title); tv = mPopupView.findViewById(R.id.auto_contribute_bat_text); tvUSD = mPopupView.findViewById(R.id.auto_contribute_usd_text); - text = "" + value + " " + batText + text = "" + value + " " + batText + ""; textUSD = usdValue; break; @@ -1176,7 +1168,7 @@ public void OnGetCurrentBalanceReport(double[] report) { // tvTitle = (TextView)root.findViewById(R.id.br_recurring_donation_title); tv = mPopupView.findViewById(R.id.one_time_tip_bat_text); tvUSD = mPopupView.findViewById(R.id.one_time_tip_usd_text); - text = "" + value + " " + batText + text = "" + value + " " + batText + ""; textUSD = usdValue; break; @@ -1184,7 +1176,7 @@ public void OnGetCurrentBalanceReport(double[] report) { // tvTitle = (TextView)root.findViewById(R.id.br_one_time_donation_title); tv = mPopupView.findViewById(R.id.monthly_tips_bat_text); tvUSD = mPopupView.findViewById(R.id.monthly_tips_usd_text); - text = "" + value + " " + batText + text = "" + value + " " + batText + ""; textUSD = usdValue; break; @@ -1236,6 +1228,8 @@ public void OnGetPendingContributionsTotal(double amount) { @Override public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, int adsReceivedThisMonth, double earningsThisMonth, double earningsLastMonth) { + mAdsStatementLayout.setAlpha(1.0f); + mAdsStatementProgress.setVisibility(View.GONE); DecimalFormat df = new DecimalFormat("#.###"); df.setRoundingMode(RoundingMode.FLOOR); df.setMinimumFractionDigits(3); @@ -1252,6 +1246,8 @@ public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, @Override public void OnRewardsParameters(int errorCode) { Log.e(TAG, "OnRewardsParameters"); + mWalletBalanceLayout.setAlpha(1.0f); + mWalletBalanceProgress.setVisibility(View.GONE); // boolean formerWalletDetailsReceived = walletDetailsReceived; if (errorCode == BraveRewardsNativeWorker.LEDGER_OK) { // DismissNotification(REWARDS_NOTIFICATION_NO_INTERNET_ID); diff --git a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java index 34c30cb849eb..33f949a03304 100644 --- a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java +++ b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java @@ -403,7 +403,6 @@ public void onDidFinishNavigation(Tab tab, NavigationHandle navigation) { && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { showBraveRewardsOnboardingModal(); BraveRewardsHelper.updateBraveRewardsAppOpenCount(); - // BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); } } diff --git a/android/java/res/layout/brave_rewards_onboarding_layout.xml b/android/java/res/layout/brave_rewards_onboarding_layout.xml index a149d55a3b17..835e73b004a2 100644 --- a/android/java/res/layout/brave_rewards_onboarding_layout.xml +++ b/android/java/res/layout/brave_rewards_onboarding_layout.xml @@ -98,10 +98,10 @@ android:clickable="true" android:drawableStart="@drawable/ic_chevron_left" android:drawablePadding="4dp" - android:drawableTint="#868E96" + android:drawableTint="@color/settings_section_text_light_color" android:focusable="true" android:text="@string/go_back" - android:textColor="#868E96" /> + android:textColor="@color/settings_section_text_light_color" /> @@ -97,109 +97,138 @@ android:baselineAligned="false" android:orientation="horizontal"> - - - + android:layout_weight="0.5"> + android:paddingStart="16dp" + android:orientation="vertical"> + android:textSize="14sp" /> + + + + + + + + - - - + + - - - - - + android:layout_weight="0.5"> + android:paddingEnd="32dp" + android:orientation="vertical"> + + + android:textSize="14sp" /> + + + + + + + + - + - + diff --git a/android/java/res/layout/brave_rewards_panel_notification_layout.xml b/android/java/res/layout/brave_rewards_panel_notification_layout.xml index 0cb0464c35a4..a037d9ec77c1 100644 --- a/android/java/res/layout/brave_rewards_panel_notification_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_notification_layout.xml @@ -28,7 +28,6 @@ android:id="@+id/notification_day_text" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="MAY 5" android:drawablePadding="8dp" android:background="@drawable/unverified_48_rounded_bg" android:paddingTop="4dp" @@ -52,9 +51,8 @@ android:id="@+id/notification_title_text" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Ads earnings recieved" android:textSize="18sp" - android:textColor="#212529" + android:textColor="@color/settings_section_text_color" android:drawablePadding="4dp" android:layout_marginBottom="8dp" android:layout_gravity="center_horizontal" @@ -64,28 +62,25 @@ android:id="@+id/notification_subtitle_text" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="You earned 80.3 BAT from Brave Private Ads!" android:textSize="14sp" - android:textColor="#495057" + android:textColor="@color/rewards_secondary_layout_text_color" android:layout_marginBottom="16dp" android:layout_gravity="center_horizontal" /> + android:layout_height="48dp" + android:layout_marginBottom="16dp"> diff --git a/android/java/res/layout/brave_rewards_panel_publisher_layout.xml b/android/java/res/layout/brave_rewards_panel_publisher_layout.xml index 6498b0ec0467..fbcab4d1f1f3 100644 --- a/android/java/res/layout/brave_rewards_panel_publisher_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_publisher_layout.xml @@ -42,8 +42,7 @@ android:gravity="start" android:maxLines="1" android:layout_marginBottom="8dp" - android:text="washingtonpost.com" - android:textColor="#212529" + android:textColor="@color/settings_section_text_color" android:textSize="20sp" /> @@ -81,7 +80,7 @@ android:focusable="true" android:fontFamily="sans-serif" android:text="@string/refresh_status" - android:textColor="#4E56CD" + android:textColor="@color/rewards_refresh_button_color" android:layout_marginEnd="4dp" android:textSize="14sp" /> diff --git a/android/java/res/layout/brave_rewards_panel_settings_layout.xml b/android/java/res/layout/brave_rewards_panel_settings_layout.xml index c2933d954311..981a651c1871 100644 --- a/android/java/res/layout/brave_rewards_panel_settings_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_settings_layout.xml @@ -38,7 +38,7 @@ android:layout_height="wrap_content" android:text="@string/tip" android:textAllCaps="false" - android:textColor="#868E96" + android:textColor="@color/settings_section_text_light_color" android:textSize="16sp"/> @@ -68,7 +68,7 @@ android:layout_height="wrap_content" android:text="@string/summary" android:textAllCaps="false" - android:textColor="#868E96" + android:textColor="@color/settings_section_text_light_color" android:textSize="16sp"/> @@ -78,7 +78,7 @@ android:layout_height="match_parent" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" - android:background="#E9E9F4" /> + android:background="@color/rewards_divider_color" /> @@ -147,7 +145,6 @@ android:layout_weight="0.25" android:layout_marginEnd="4dp" android:fontFamily="sans-serif" - android:textColor="#C12D7C" android:textSize="14sp" /> @@ -208,7 +204,6 @@ android:layout_height="wrap_content" android:layout_weight="0.25" android:fontFamily="sans-serif" - android:text="0.25 USD" android:textColor="@color/settings_section_text_light_color" android:textSize="12sp" /> @@ -258,7 +253,6 @@ android:layout_height="wrap_content" android:layout_weight="0.25" android:fontFamily="sans-serif" - android:text="0.25 USD" android:textColor="@color/settings_section_text_light_color" android:textSize="12sp" /> @@ -308,7 +302,6 @@ android:layout_height="wrap_content" android:layout_weight="0.25" android:fontFamily="sans-serif" - android:text="0.25 USD" android:textColor="@color/settings_section_text_light_color" android:textSize="12sp" /> diff --git a/android/java/res/layout/brave_rewards_panel_tip_layout.xml b/android/java/res/layout/brave_rewards_panel_tip_layout.xml index e0383bb5104b..6efcf0543114 100644 --- a/android/java/res/layout/brave_rewards_panel_tip_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_tip_layout.xml @@ -35,7 +35,7 @@ android:layout_marginEnd="8dp" android:layout_weight="1" android:text="@string/attention" - android:textColor="#212529" + android:textColor="@color/settings_section_text_color" android:textSize="16sp" /> @@ -69,7 +68,7 @@ android:layout_marginEnd="8dp" android:layout_weight="1" android:text="@string/include_auto_contribute" - android:textColor="#868E96" + android:textColor="@color/settings_section_text_light_color" android:textSize="16sp" /> #E6E8F5 #868E96 #212529 + #495057 #4C54D2 + #4E56CD #80000000 + #FAFCFF + #E9E9F4 diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index f15f04a06aa6..052604c74d6b 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -2775,6 +2775,9 @@ If you don't accept this request, VPN will not reconnect and your internet conne Monthly contribution + + BAT + ≈ %1$s0.0 USD From e989f67d15d2feebc41fd95d3fb5f2e6e2445905 Mon Sep 17 00:00:00 2001 From: Deep Date: Mon, 13 Dec 2021 20:11:50 -0500 Subject: [PATCH 14/18] Refactor rewards panel --- .../chrome/browser/BraveWalletProvider.java | 7 - .../browser/rewards/BraveRewardsPanel.java | 429 +++--------------- ...rave_rewards_panel_notification_layout.xml | 3 +- 3 files changed, 63 insertions(+), 376 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java index 8a695dc7b3ac..5610521568ec 100644 --- a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java +++ b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java @@ -60,8 +60,6 @@ public void completeWalletProviderVerification( rewardsNativeProxy.AddObserver(this); String path = uri.getPath(); String query = uri.getQuery(); - Log.e("BraveRewards", "BraveWalletProvider : path : " + path); - Log.e("BraveRewards", "BraveWalletProvider : query : " + query); if (TextUtils.isEmpty(path) || TextUtils.isEmpty(query)) { rewardsNativeProxy.RemoveObserver(this); @@ -76,9 +74,6 @@ public void completeWalletProviderVerification( path = String.format(Locale.US, "/%s/%s", rewardsNativeProxy.getExternalWalletType(), path); query = String.format(Locale.US, "?%s", query); - Log.e("BraveRewards", "BraveWalletProvider : path : " + path); - Log.e("BraveRewards", "BraveWalletProvider : query : " + query); - rewardsNativeProxy.ProcessRewardsPageUrl(path, query); } @@ -91,7 +86,6 @@ public void OnProcessRewardsPageUrl( } String redirectUrl = parseJsonArgs(jsonArgs); - Log.e("BraveRewards", "BraveWalletProvider : " + redirectUrl); if (BraveRewardsNativeWorker.LEDGER_OK == errorCode && TextUtils.equals(action, ACTION_VALUE)) { // wallet is verified: redirect to chrome://rewards for now @@ -130,7 +124,6 @@ private void releaseDependencies() { private void showErrorMessageBox(int errorCode) { String message = ""; String messageTitle = ""; - Log.e("BraveRewards", "Error code : " + errorCode); Context context = ContextUtils.getApplicationContext(); AlertDialog.Builder builder = new AlertDialog.Builder( BraveRewardsHelper.getChromeTabbedActivity(), R.style.Theme_Chromium_AlertDialog); diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index 28b294be04a4..3aea051367cc 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -181,12 +181,10 @@ public class BraveRewardsPanel private boolean mClaimInProcess; private View braveRewardsOnboardingModalView; - // private View braveRewardsOptInView; private BraveRewardsOnboardingPagerAdapter braveRewardsOnboardingPagerAdapter; private HeightWrappingViewPager braveRewardsViewPager; private View braveRewardsOnboardingView; - // private View braveRewardsWelcomeView; private LinearLayout mWalletBalanceLayout; private LinearLayout mAdsStatementLayout; @@ -286,25 +284,10 @@ public void onClick(View v) { TextView btnSendTip = mPopupView.findViewById(R.id.btn_send_tip); btnSendTip.setOnClickListener(view -> { - // if (mTippingInProgress) { - // return; - // } - // mTippingInProgress = true; - Intent intent = new Intent( ContextUtils.getApplicationContext(), BraveRewardsSiteBannerActivity.class); intent.putExtra(BraveRewardsSiteBannerActivity.TAB_ID_EXTRA, mCurrentTabId); mActivity.startActivityForResult(intent, BraveActivity.SITE_BANNER_REQUEST_CODE); - - // BraveRewardsPanelPopup is not an Activity and onActivityResult is not available - // to dismiss mTippingInProgress. Post a delayed task to flip a mTippingInProgress flag. - // mHandler.postDelayed(new Runnable() { - // @Override - // public void run() { - // mTippingInProgress = false; - // } - // }, CLICK_DISABLE_INTERVAL); - // } }); mBtnAddFunds = mPopupView.findViewById(R.id.btn_add_funds); @@ -360,38 +343,42 @@ public void onClick(View v) { } private void showSummarySection() { - mTextTip.setTextColor(Color.parseColor("#868E96")); - mImgTip.setColorFilter( - new PorterDuffColorFilter(Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); - - mTextSummary.setTextColor(Color.parseColor("#4C54D2")); - mImgSummary.setColorFilter( - new PorterDuffColorFilter(Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); + mTextTip.setTextColor( + mActivity.getResources().getColor(R.color.settings_section_text_light_color)); + mImgTip.setColorFilter(new PorterDuffColorFilter( + mActivity.getResources().getColor(R.color.settings_section_text_light_color), + PorterDuff.Mode.SRC_IN)); + + mTextSummary.setTextColor( + mActivity.getResources().getColor(R.color.rewards_settings_button_color)); + mImgSummary.setColorFilter(new PorterDuffColorFilter( + mActivity.getResources().getColor(R.color.rewards_settings_button_color), + PorterDuff.Mode.SRC_IN)); mRewardsSummaryDetailLayout.setVisibility(View.VISIBLE); mRewardsTipLayout.setVisibility(View.GONE); } private void showTipSection() { - mTextTip.setTextColor(Color.parseColor("#4C54D2")); - mImgTip.setColorFilter( - new PorterDuffColorFilter(Color.parseColor("#4C54D2"), PorterDuff.Mode.SRC_IN)); - - mTextSummary.setTextColor(Color.parseColor("#868E96")); - mImgSummary.setColorFilter( - new PorterDuffColorFilter(Color.parseColor("#868E96"), PorterDuff.Mode.SRC_IN)); + mTextTip.setTextColor( + mActivity.getResources().getColor(R.color.rewards_settings_button_color)); + mImgTip.setColorFilter(new PorterDuffColorFilter( + mActivity.getResources().getColor(R.color.rewards_settings_button_color), + PorterDuff.Mode.SRC_IN)); + + mTextSummary.setTextColor( + mActivity.getResources().getColor(R.color.settings_section_text_light_color)); + mImgSummary.setColorFilter(new PorterDuffColorFilter( + mActivity.getResources().getColor(R.color.settings_section_text_light_color), + PorterDuff.Mode.SRC_IN)); mRewardsSummaryDetailLayout.setVisibility(View.GONE); mRewardsTipLayout.setVisibility(View.VISIBLE); } private void setNotificationsControls() { - // Check for notifications - mNotificationLayout = mPopupView.findViewById(R.id.brave_rewards_panel_notification_layout_id); - Log.e(TAG, "setNotificationsControls"); - ImageView btnCloseNotification = mPopupView.findViewById(R.id.btn_close_notification); if (btnCloseNotification != null) { btnCloseNotification.setOnClickListener((new View.OnClickListener() { @@ -399,7 +386,6 @@ private void setNotificationsControls() { public void onClick(View v) { if (mCurrentNotificationId.isEmpty()) { assert false; - return; } if (mBraveRewardsNativeWorker != null) { @@ -410,14 +396,8 @@ public void onClick(View v) { } } - /** - * Validates if a notification can be processed and has an expected - * number of arguments - */ private boolean isValidNotificationType(int type, int argsNum) { - Log.e(TAG, "isValidNotificationType : " + type); boolean valid = false; - switch (type) { case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_AUTO_CONTRIBUTE: valid = (argsNum >= 4) ? true : false; @@ -443,14 +423,11 @@ private boolean isValidNotificationType(int type, int argsNum) { } private void showNotification(String id, int type, long timestamp, String[] args) { - Log.e(TAG, "showNotification"); if (mBraveRewardsNativeWorker == null) { return; } - // don't process unknown notifications if (!isValidNotificationType(type, args.length) && mBraveRewardsNativeWorker != null) { - Log.e(TAG, "showNotification 1"); mBraveRewardsNativeWorker.DeleteNotification(id); return; } @@ -465,23 +442,11 @@ private void showNotification(String id, int type, long timestamp, String[] args mPopupView.findViewById(R.id.notification_subtitle_text); TextView actionNotificationButton = mPopupView.findViewById(R.id.btn_action_notification); - // LinearLayout hl = (LinearLayout)root.findViewById(R.id.header_layout); - // hl.setBackgroundResource(R.drawable.notification_header); - // GridLayout gl = (GridLayout)root.findViewById(R.id.wallet_info_gridlayout); - // gl.setVisibility(View.GONE); - // TimeZone utc = TimeZone.getTimeZone("UTC"); - // Calendar calTime = Calendar.getInstance(utc); - // calTime.setTimeInMillis(timestamp * 1000); - // String currentMonth = BraveRewardsHelper.getCurrentMonth(calTime, - // root.getResources(), false); - // String currentDay = Integer.toString(calTime.get(Calendar.DAY_OF_MONTH)); - // String notificationTime = currentMonth + " " + currentDay; String title = ""; String description = ""; - // Button btClaimOk = (Button)root.findViewById(R.id.br_claim_button); + int notificationIcon; View claimProgress = mPopupView.findViewById(R.id.claim_progress); - // hide or show 'Claim/OK' button if Grant claim is (not) in process mClaimInProcess = mBraveRewardsNativeWorker.IsGrantClaimInProcess(); if (mClaimInProcess) { BraveRewardsHelper.crossfade(actionNotificationButton, claimProgress, View.GONE, 1f, @@ -492,26 +457,9 @@ private void showNotification(String id, int type, long timestamp, String[] args BraveRewardsHelper.CROSS_FADE_DURATION); } - // TextView notificationClose = (TextView)root.findViewById(R.id.br_notification_close); - // notificationClose.setVisibility(View.VISIBLE); - // ImageView notification_icon = (ImageView)root.findViewById(R.id.br_notification_icon); - // LinearLayout nit = (LinearLayout)root.findViewById(R.id.notification_image_text); - // nit.setOrientation(LinearLayout.VERTICAL); - // LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)nit.getLayoutParams(); - // params.setMargins(params.leftMargin, 5, params.rightMargin, params.bottomMargin); - // nit.setLayoutParams(params); - // TextView tv = (TextView)root.findViewById(R.id.br_notification_description); - // tv.setGravity(Gravity.CENTER); - - // LinearLayout ll = (LinearLayout)root.findViewById(R.id.notification_info_layout); - // ll.setVisibility(View.VISIBLE); - - // TODO other types of notifications switch (type) { case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_AUTO_CONTRIBUTE: - // TODO find the case where it is used - // notification_icon.setImageResource(R.drawable.icon_validated_notification); - Log.e(TAG, "showNotification 2"); + notificationIcon = R.drawable.icon_validated_notification; String result = args[1]; switch (result) { case AUTO_CONTRIBUTE_SUCCESS: @@ -519,13 +467,11 @@ private void showNotification(String id, int type, long timestamp, String[] args mPopupView.getResources().getString(R.string.ok)); title = mPopupView.getResources().getString( R.string.brave_ui_rewards_contribute); - // notification_icon.setImageResource(R.drawable.contribute_icon); - // hl.setBackgroundResource(R.drawable.notification_header_normal); + notificationIcon = R.drawable.contribute_icon; double value = 0; String valueString = ""; String[] splittedValue = args[3].split("\\.", 0); - // 18 digits is a probi min digits count if (splittedValue.length != 0 && splittedValue[0].length() >= 18) { value = BraveRewardsHelper.probiToDouble(args[3]); valueString = Double.isNaN(value) @@ -542,46 +488,36 @@ private void showNotification(String id, int type, long timestamp, String[] args valueString); break; case AUTO_CONTRIBUTE_NOT_ENOUGH_FUNDS: - Log.e(TAG, "showNotification 3"); title = ""; - // notification_icon.setImageResource(R.drawable.icon_warning_notification); - // hl.setBackgroundResource(R.drawable.notification_header_warning); + notificationIcon = R.drawable.icon_warning_notification; description = mPopupView.getResources().getString( R.string.brave_ui_notification_desc_no_funds); break; case AUTO_CONTRIBUTE_TIPPING_ERROR: - Log.e(TAG, "showNotification 4"); title = ""; - // notification_icon.setImageResource(R.drawable.icon_error_notification); - // hl.setBackgroundResource(R.drawable.notification_header_error); + notificationIcon = R.drawable.icon_error_notification; description = mPopupView.getResources().getString( R.string.brave_ui_notification_desc_tip_error); break; default: title = ""; - // notification_icon.setImageResource(R.drawable.icon_error_notification); - // hl.setBackgroundResource(R.drawable.notification_header_error); + notificationIcon = R.drawable.icon_error_notification; description = mPopupView.getResources().getString( R.string.brave_ui_notification_desc_contr_error); } if (title.isEmpty()) { actionNotificationButton.setVisibility(View.GONE); - // nit.setOrientation(LinearLayout.HORIZONTAL); - // params.setMargins(params.leftMargin, 35, params.rightMargin, - // params.bottomMargin); nit.setLayoutParams(params); - // tv.setGravity(Gravity.START); } break; case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT: case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT_ADS: - Log.e(TAG, "showNotification 5"); actionNotificationButton.setText( mPopupView.getResources().getString(R.string.brave_ui_claim)); - // int grant_icon_id = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type - // ) ? - // R.drawable.grant_icon : R.drawable.notification_icon; - // notification_icon.setImageResource(grant_icon_id); + int grantIconId = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type) + ? R.drawable.ic_money_bag_coins + : R.drawable.notification_icon; + notificationIcon = grantIconId; title = (BraveRewardsNativeWorker.REWARDS_NOTIFICATION_GRANT == type) ? mPopupView.getResources().getString(R.string.brave_ui_new_token_grant) @@ -595,110 +531,85 @@ private void showNotification(String id, int type, long timestamp, String[] args : mPopupView.getResources().getString(R.string.brave_ads_you_earned); break; case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_INSUFFICIENT_FUNDS: - Log.e(TAG, "showNotification 6"); actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); - // notification_icon.setImageResource(R.drawable.notification_icon); + notificationIcon = R.drawable.notification_icon; title = mPopupView.getResources().getString( R.string.brave_ui_insufficient_funds_msg); description = mPopupView.getResources().getString( R.string.brave_ui_insufficient_funds_desc); break; case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET: - Log.e(TAG, "showNotification 7"); actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); - // notification_icon.setImageResource(R.drawable.notification_icon); + notificationIcon = R.drawable.notification_icon; title = mPopupView.getResources().getString(R.string.brave_ui_backup_wallet_msg); description = mPopupView.getResources().getString(R.string.brave_ui_backup_wallet_desc); break; case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_TIPS_PROCESSED: - Log.e(TAG, "showNotification 8"); actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); title = mPopupView.getResources().getString(R.string.brave_ui_contribution_tips); description = mPopupView.getResources().getString( R.string.brave_ui_tips_processed_notification); - // notification_icon.setImageResource(R.drawable.contribute_icon); + notificationIcon = R.drawable.contribute_icon; break; case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_ADS_ONBOARDING: - Log.e(TAG, "showNotification 9"); actionNotificationButton.setText( mPopupView.getResources().getString(R.string.brave_ui_turn_on_ads)); title = mPopupView.getResources().getString( R.string.brave_ui_brave_ads_launch_title); - description = ""; // TODO verify the text - // notification_icon.setImageResource(R.drawable.notification_icon); + description = ""; + notificationIcon = R.drawable.notification_icon; break; case BraveRewardsNativeWorker.REWARDS_NOTIFICATION_VERIFIED_PUBLISHER: - Log.e(TAG, "showNotification 10"); String pubName = args[0]; actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); title = mPopupView.getResources().getString( R.string.brave_ui_pending_contribution_title); description = mPopupView.getResources().getString( R.string.brave_ui_verified_publisher_notification, pubName); - // notification_icon.setImageResource(R.drawable.contribute_icon); + notificationIcon = R.drawable.contribute_icon; break; case REWARDS_NOTIFICATION_NO_INTERNET: - Log.e(TAG, "showNotification 11"); title = ""; - // notification_icon.setImageResource(R.drawable.icon_error_notification); - // hl.setBackgroundResource(R.drawable.notification_header_error); + notificationIcon = R.drawable.icon_error_notification; description = "" + mPopupView.getResources().getString(R.string.brave_rewards_local_uh_oh) + " " + mPopupView.getResources().getString( R.string.brave_rewards_local_server_not_responding); actionNotificationButton.setVisibility(View.GONE); - // notificationClose.setVisibility(View.GONE); - // nit.setOrientation(LinearLayout.HORIZONTAL); - // params.setMargins(params.leftMargin, 180, params.rightMargin, - // params.bottomMargin); nit.setLayoutParams(params); tv.setGravity(Gravity.START); break; case REWARDS_PROMOTION_CLAIM_ERROR: - Log.e(TAG, "showNotification 12"); title = ""; actionNotificationButton.setText(mPopupView.getResources().getString(R.string.ok)); description = "" + mPopupView.getResources().getString( R.string.brave_rewards_local_general_grant_error_title) + ""; - // notification_icon.setImageResource(R.drawable.coin_stack); - // hl.setBackgroundResource(R.drawable.notification_header_error); - // notificationClose.setVisibility(View.GONE); - // nit.setOrientation(LinearLayout.HORIZONTAL); - // params.setMargins(params.leftMargin, 180, params.rightMargin, - // params.bottomMargin); nit.setLayoutParams(params); tv.setGravity(Gravity.START); + notificationIcon = R.drawable.coin_stack; break; default: Log.e(TAG, "This notification type is either invalid or not handled yet: " + type); assert false; return; } - // String stringToInsert = (title.isEmpty() ? "" : ("" + title + "" + " | ")) + - // description + - // (title.isEmpty() ? "" : (" " + - // notificationTime + "")); - // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(stringToInsert); - // tv.setText(toInsert); notificationTitleText.setText(title); + notificationTitleText.setCompoundDrawablesWithIntrinsicBounds(notificationIcon, 0, 0, 0); notificationSubtitleText.setText(description); if (mNotificationLayout != null) { Log.e(TAG, "mNotificationLayout visible"); mNotificationLayout.setVisibility(View.VISIBLE); - // mRewardsMainLayout.setAlpha(0.4f); int foregroundColor = R.color.rewards_foreground_color; mRewardsMainLayout.setForeground( new ColorDrawable(ContextCompat.getColor(mActivity, foregroundColor))); - disableControls(false, mRewardsMainLayout); + enableControls(false, mRewardsMainLayout); } setNotificationButtoClickListener(); } - // TODO needs to be changed private void setNotificationButtoClickListener() { - Log.e(TAG, "setNotificationButtoClickListener"); TextView actionNotificationButton = mPopupView.findViewById(R.id.btn_action_notification); String strAction = (actionNotificationButton != null && mBraveRewardsNativeWorker != null) ? actionNotificationButton.getText().toString() @@ -707,9 +618,6 @@ private void setNotificationButtoClickListener() { actionNotificationButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Log.e(TAG, "setNotificationButtoClickListener 1"); - // This is custom Android notification and thus should be dismissed intead of - // deleting if (mCurrentNotificationId.equals(REWARDS_PROMOTION_CLAIM_ERROR_ID)) { dismissNotification(mCurrentNotificationId); return; @@ -721,10 +629,6 @@ public void onClick(View v) { actionNotificationButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Log.e(TAG, "setNotificationButtoClickListener 2"); - // disable and hide CLAIM button - // actionNotificationButton.setEnabled(false); - if (mClaimInProcess || mCurrentNotificationId.isEmpty()) { return; } @@ -748,8 +652,6 @@ public void onClick(View v) { mBraveRewardsNativeWorker.GetGrant(promId); mWalletBalanceLayout.setAlpha(0.4f); mWalletBalanceProgress.setVisibility(View.VISIBLE); - // walletDetailsReceived = false; //re-read wallet status - // EnableWalletDetails(false); } }); } else if (strAction.equals( @@ -770,7 +672,6 @@ public void onClick(View v) { } private void dismissNotification(String id) { - Log.e(TAG, "dismissNotification"); if (!mCurrentNotificationId.equals(id)) { return; } @@ -782,12 +683,10 @@ private void dismissNotification(String id) { } private void hideNotifications() { - Log.e(TAG, "hideNotifications"); if (mNotificationLayout != null) { mNotificationLayout.setVisibility(View.GONE); - // mRewardsMainLayout.setAlpha(1.0f); mRewardsMainLayout.setForeground(null); - disableControls(true, mRewardsMainLayout); + enableControls(true, mRewardsMainLayout); } } @@ -802,7 +701,6 @@ public void OnClaimPromotion(int responseCode) { @Override public void onUnblindedTokensReady() { - Log.e("NTP", "onUnblindedTokensReady"); fetchRewardsData(); } @@ -820,9 +718,6 @@ private void fetchRewardsData() { @Override public void onReconcileComplete(int resultCode, int rewardsType, double amount) { - Log.e("NTP", - "onReconcileComplete : resultCode : " + resultCode - + " : rewardsType : " + rewardsType + " : amouont : " + amount); fetchRewardsData(); } @@ -838,8 +733,6 @@ public void showLikePopDownMenu() { mPopupWindow.setFocusable(true); mPopupWindow.setOutsideTouchable(true); - // mPopupWindow.setContentView(this.root); - mPopupWindow.setAnimationStyle(R.style.OverflowMenuAnim); if (SysUtils.isLowEndDevice()) { @@ -866,25 +759,12 @@ public void OnStartProcess() { fetchRewardsData(); setNotificationsControls(); if (mPopupView != null && PackageUtils.isFirstInstall(mActivity) - && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) { - if (BraveRewardsHelper.shouldShowBraveRewardsOnboardingModal() - && !BraveAdsNativeHelper.nativeIsBraveAdsEnabled( - Profile.getLastUsedRegularProfile())) { - showBraveRewardsOnboardingModal(mPopupView); - BraveRewardsHelper.updateBraveRewardsAppOpenCount(); - // BraveRewardsHelper.setShowBraveRewardsOnboardingModal(false); - } else if (SharedPreferencesManager.getInstance().readInt( - BravePreferenceKeys.BRAVE_APP_OPEN_COUNT) - > BraveRewardsHelper.getBraveRewardsAppOpenCount() - && BraveRewardsHelper.shouldShowMiniOnboardingModal()) { - if (BraveAdsNativeHelper.nativeIsBraveAdsEnabled( - Profile.getLastUsedRegularProfile())) { - // showBraveRewardsWelcomeLayout(mPopupView); - } else { - // showBraveRewardsOptInLayout(mPopupView); - } - BraveRewardsHelper.setShowMiniOnboardingModal(false); - } + && ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS) + && BraveRewardsHelper.shouldShowBraveRewardsOnboardingModal() + && !BraveAdsNativeHelper.nativeIsBraveAdsEnabled( + Profile.getLastUsedRegularProfile())) { + showBraveRewardsOnboardingModal(mPopupView); + BraveRewardsHelper.updateBraveRewardsAppOpenCount(); } } @@ -892,11 +772,10 @@ private void showBraveRewardsOnboardingModal(View root) { braveRewardsOnboardingModalView = root.findViewById(R.id.brave_rewards_onboarding_modal_id); braveRewardsOnboardingModalView.setVisibility(View.VISIBLE); - // mRewardsMainLayout.setAlpha(0.4f); int foregroundColor = R.color.rewards_foreground_color; mRewardsMainLayout.setForeground( new ColorDrawable(ContextCompat.getColor(mActivity, foregroundColor))); - disableControls(false, mRewardsMainLayout); + enableControls(false, mRewardsMainLayout); String tosText = String.format(mActivity.getResources().getString(R.string.brave_rewards_tos_text), @@ -985,19 +864,17 @@ public void onClick(View v) { @Override public void onClick(View v) { braveRewardsOnboardingModalView.setVisibility(View.GONE); - // mRewardsMainLayout.setAlpha(1.0f); mRewardsMainLayout.setForeground(null); - disableControls(true, mRewardsMainLayout); + enableControls(true, mRewardsMainLayout); } })); } private void showBraveRewardsOnboarding(View root, boolean shouldShowMoreOption) { - // mRewardsMainLayout.setAlpha(0.4f); int foregroundColor = R.color.rewards_foreground_color; mRewardsMainLayout.setForeground( new ColorDrawable(ContextCompat.getColor(mActivity, foregroundColor))); - disableControls(false, mRewardsMainLayout); + enableControls(false, mRewardsMainLayout); braveRewardsOnboardingView = root.findViewById(R.id.brave_rewards_onboarding_layout_id); braveRewardsOnboardingView.setVisibility(View.VISIBLE); @@ -1057,9 +934,8 @@ public void onPageScrollStateChanged(int state) {} @Override public void onClick(View v) { braveRewardsOnboardingView.setVisibility(View.GONE); - // mRewardsMainLayout.setAlpha(1.0f); mRewardsMainLayout.setForeground(null); - disableControls(true, mRewardsMainLayout); + enableControls(true, mRewardsMainLayout); } })); braveRewardsOnboardingView.findViewById(R.id.onboarding_first_screen_layout) @@ -1085,13 +961,8 @@ public void onClick(View view) { == braveRewardsOnboardingPagerAdapter.getCount() - 1) { if (braveRewardsOnboardingView != null) { braveRewardsOnboardingView.setVisibility(View.GONE); - // mRewardsMainLayout.setAlpha(1.0f); mRewardsMainLayout.setForeground(null); - disableControls(true, mRewardsMainLayout); - } - if (BraveAdsNativeHelper.nativeIsBraveAdsEnabled( - Profile.getLastUsedRegularProfile())) { - // showBraveRewardsWelcomeLayout(mPopupView); + enableControls(true, mRewardsMainLayout); } } else { braveRewardsViewPager.setCurrentItem( @@ -1113,7 +984,6 @@ public void onClick(View view) { @Override public void OnGetCurrentBalanceReport(double[] report) { - Log.e(TAG, "OnGetCurrentBalanceReport : " + report); if (report == null) { return; } @@ -1139,9 +1009,6 @@ public void OnGetCurrentBalanceReport(double[] report) { switch (i) { case BALANCE_REPORT_GRANTS: - // tvTitle = (TextView)root.findViewById(R.id.br_grants_claimed_title); - // tvTitle.setText(BraveRewardsPanelPopup.this.root.getResources().getString( - // R.string.brave_ui_token_grant_claimed)); tv = mPopupView.findViewById(R.id.total_grants_claimed_bat_text); tvUSD = mPopupView.findViewById(R.id.total_grants_claimed_usd_text); text = "" + value + " " + batText @@ -1149,7 +1016,6 @@ public void OnGetCurrentBalanceReport(double[] report) { textUSD = usdValue; break; case BALANCE_REPORT_EARNING_FROM_ADS: - // tvTitle = (TextView)root.findViewById(R.id.br_earnings_ads_title); tv = mPopupView.findViewById(R.id.rewards_from_ads_bat_text); tvUSD = mPopupView.findViewById(R.id.rewards_from_ads_usd_text); text = "" + value + " " + batText @@ -1157,7 +1023,6 @@ public void OnGetCurrentBalanceReport(double[] report) { textUSD = usdValue; break; case BALANCE_REPORT_AUTO_CONTRIBUTE: - // tvTitle = (TextView)root.findViewById(R.id.br_auto_contribute_title); tv = mPopupView.findViewById(R.id.auto_contribute_bat_text); tvUSD = mPopupView.findViewById(R.id.auto_contribute_usd_text); text = "" + value + " " + batText @@ -1165,7 +1030,6 @@ public void OnGetCurrentBalanceReport(double[] report) { textUSD = usdValue; break; case BALANCE_REPORT_ONE_TIME_DONATION: - // tvTitle = (TextView)root.findViewById(R.id.br_recurring_donation_title); tv = mPopupView.findViewById(R.id.one_time_tip_bat_text); tvUSD = mPopupView.findViewById(R.id.one_time_tip_usd_text); text = "" + value + " " + batText @@ -1173,7 +1037,6 @@ public void OnGetCurrentBalanceReport(double[] report) { textUSD = usdValue; break; case BALANCE_REPORT_RECURRING_DONATION: - // tvTitle = (TextView)root.findViewById(R.id.br_one_time_donation_title); tv = mPopupView.findViewById(R.id.monthly_tips_bat_text); tvUSD = mPopupView.findViewById(R.id.monthly_tips_usd_text); text = "" + value + " " + batText @@ -1193,38 +1056,11 @@ public void OnGetCurrentBalanceReport(double[] report) { .setVisibility(walletType.equals(BraveWalletProvider.UPHOLD) ? View.VISIBLE : View.GONE); } - // if (tv != null && tvUSD != null && - // !text.isEmpty() && !textUSD.isEmpty()) { - // // tvTitle.setVisibility(hideControls ? View.GONE : View.VISIBLE); - // tv.setVisibility(hideControls ? View.GONE : View.VISIBLE); - // tvUSD.setVisibility(hideControls ? View.GONE : View.VISIBLE); - // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(text); - // tv.setText(toInsert); - // tvUSD.setText(textUSD); - // } } mBraveRewardsNativeWorker.GetPendingContributionsTotal(); } - @Override - public void OnGetPendingContributionsTotal(double amount) { - // if (amount > 0.0) { - // String non_verified_summary = - // String.format( - // root.getResources().getString(R.string.brave_ui_reserved_amount_text), - // String.format(Locale.getDefault(), "%.3f", amount)) - // + " " + - // root.getResources().getString(R.string.learn_more) - // + "."; - // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(non_verified_summary); - // tvPublisherNotVerifiedSummary.setText(toInsert); - // tvPublisherNotVerifiedSummary.setVisibility(View.VISIBLE); - // } else { - // tvPublisherNotVerifiedSummary.setVisibility(View.GONE); - // } - } - @Override public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, int adsReceivedThisMonth, double earningsThisMonth, double earningsLastMonth) { @@ -1245,25 +1081,16 @@ public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, @Override public void OnRewardsParameters(int errorCode) { - Log.e(TAG, "OnRewardsParameters"); mWalletBalanceLayout.setAlpha(1.0f); mWalletBalanceProgress.setVisibility(View.GONE); - // boolean formerWalletDetailsReceived = walletDetailsReceived; if (errorCode == BraveRewardsNativeWorker.LEDGER_OK) { - // DismissNotification(REWARDS_NOTIFICATION_NO_INTERNET_ID); - Log.e(TAG, "LEDGER_OK"); if (mBraveRewardsNativeWorker != null) { - Log.e(TAG, "mBraveRewardsNativeWorker != null"); BraveRewardsBalance walletBalanceObject = mBraveRewardsNativeWorker.GetWalletBalance(); double walletBalance = 0; if (walletBalanceObject != null) { walletBalance = walletBalanceObject.getTotal(); } - Log.e(TAG, "Wallet balance : " + walletBalance); - // if (walletBalance > 0 && braveRewardsWelcomeView != null) { - // braveRewardsWelcomeView.setVisibility(View.GONE); - // } DecimalFormat df = new DecimalFormat("#.###"); df.setRoundingMode(RoundingMode.FLOOR); @@ -1274,43 +1101,17 @@ public void OnRewardsParameters(int errorCode) { String usdText = String.format(mPopupView.getResources().getString(R.string.brave_ui_usd), String.format(Locale.getDefault(), "%.2f", usdValue)); - Log.e(TAG, "USd amount : " + usdText); TextView usdBalanceText = mPopupView.findViewById(R.id.usd_balance_text); usdBalanceText.setText(usdText); - - // Button btnVerifyWallet = (Button) root.findViewById(R.id.btn_verify_wallet); - // btnVerifyWallet.setBackgroundResource(R.drawable.wallet_verify_button); - // if (mExternalWallet != null - // && mExternalWallet.getType().equals(BraveWalletProvider.BITFLYER)) { - // btnVerifyWallet.setVisibility(View.INVISIBLE); - // } } - // walletDetailsReceived = true; } else if (errorCode == BraveRewardsNativeWorker.LEDGER_ERROR) { // No Internet connection String args[] = {}; Log.e(TAG, "LEDGER_ERROR"); - // ShowNotification(REWARDS_NOTIFICATION_NO_INTERNET_ID, - // REWARDS_NOTIFICATION_NO_INTERNET, 0, args); + showNotification( + REWARDS_NOTIFICATION_NO_INTERNET_ID, REWARDS_NOTIFICATION_NO_INTERNET, 0, args); } - Log.e(TAG, "Outside check"); - // else { - // walletDetailsReceived = false; - // } - - // if (formerWalletDetailsReceived != walletDetailsReceived) { - // EnableWalletDetails(walletDetailsReceived); - // } } - @Override - public void OnNotificationAdded(String id, int type, long timestamp, String[] args) { - // Do nothing here as we will receive the most recent notification - // in OnGetLatestNotification - } - - @Override - public void OnNotificationsCount(int count) {} - @Override public void OnGetLatestNotification(String id, int type, long timestamp, String[] args) { if (type == BraveRewardsNativeWorker.REWARDS_NOTIFICATION_BACKUP_WALLET) { @@ -1321,8 +1122,6 @@ public void OnGetLatestNotification(String id, int type, long timestamp, String[ return; } - // This is to make sure that user saw promotion error message before showing the - // rest of messages if (!mCurrentNotificationId.equals(REWARDS_PROMOTION_CLAIM_ERROR_ID)) { showNotification(id, type, timestamp, args); } @@ -1335,14 +1134,15 @@ public void OnNotificationDeleted(String id) { @Override public void OnGetExternalWallet(int errorCode, String externalWallet) { - Log.e(TAG, "OnGetExternalWallet"); int walletStatus = BraveRewardsExternalWallet.NOT_CONNECTED; if (!TextUtils.isEmpty(externalWallet)) { try { mExternalWallet = new BraveRewardsExternalWallet(externalWallet); walletStatus = mExternalWallet.getStatus(); + mWalletBalanceLayout.setAlpha(0.4f); + mWalletBalanceProgress.setVisibility(View.VISIBLE); + mBraveRewardsNativeWorker.GetRewardsParameters(); } catch (JSONException e) { - Log.e(TAG, "Error parsing external wallet status"); mExternalWallet = null; } } @@ -1350,7 +1150,6 @@ public void OnGetExternalWallet(int errorCode, String externalWallet) { } private void setVerifyWalletButton(@WalletStatus final int status) { - Log.e(TAG, "Status : " + status); TextView btnVerifyWallet = mPopupView.findViewById(R.id.btn_verify_wallet); SharedPreferences sharedPref = ContextUtils.getAppSharedPreferences(); SharedPreferences.Editor editor = sharedPref.edit(); @@ -1413,7 +1212,6 @@ private void setVerifyWalletButton(@WalletStatus final int status) { return; } - // tvYourWalletTitle.setVisibility(View.GONE); btnVerifyWallet.setVisibility(View.VISIBLE); btnVerifyWallet.setText(mPopupView.getResources().getString(text)); Log.e(TAG, "before onClick"); @@ -1492,7 +1290,6 @@ private void requestPublisherInfo() { if (currentActiveTab != null && !currentActiveTab.isIncognito()) { String url = currentActiveTab.getUrl().getSpec(); if (URLUtil.isValidUrl(url)) { - Log.e("NTP", "publisher : " + url); mBraveRewardsNativeWorker.GetPublisherInfo(currentActiveTab.getId(), url); mPublisherFetcher = new Timer(); mPublisherFetcher.schedule(new PublisherFetchTimer(currentActiveTab.getId(), url), @@ -1511,13 +1308,8 @@ private void requestPublisherInfo() { @Override public void OnPublisherInfo(int tabId) { - Log.e("NTP", "OnPublisherInfo"); mPublisherExist = true; mCurrentTabId = tabId; - // RemoveRewardsSummaryMonthYear(); - // if (btRewardsSummary != null) { - // btRewardsSummary.setClickable(true); - // } String publisherFavIconURL = mBraveRewardsNativeWorker.GetPublisherFavIconURL(mCurrentTabId); @@ -1549,17 +1341,8 @@ public void OnPublisherInfo(int tabId) { mBraveRewardsNativeWorker.GetPublisherExcluded(mCurrentTabId)); mSwitchAutoContribute.setOnCheckedChangeListener(autoContributeSwitchListener); } - updatePublisherStatus(mBraveRewardsNativeWorker.GetPublisherStatus(mCurrentTabId)); - - // tv = (TextView) root.findViewById(R.id.br_no_activities_yet); - // gl = (GridLayout) thisObject.root.findViewById(R.id.br_activities); - // if (tv != null && gl != null) { - // tv.setVisibility(View.GONE); - // gl.setVisibility(View.GONE); - // } mBraveRewardsNativeWorker.GetRecurringDonations(); - mBraveRewardsNativeWorker.GetAutoContributeProperties(); } @@ -1576,7 +1359,6 @@ public void OnGetAutoContributeProperties() { @Override public void onGetAutoContributionAmount(double amount) { - Log.e(TAG, "Auto contribution amount : " + amount); TextView monthlyContributionText = mPopupView.findViewById(R.id.monthly_contribution_set_text); monthlyContributionText.setText(String.format( @@ -1592,49 +1374,7 @@ public void onGetAutoContributionAmount(double amount) { }); } - @Override - public void OnOneTimeTip() { - // TODO add logic for refresh balance - // mBraveRewardsNativeWorker.GetExternalWallet(); - } - - /** - * OnRecurringDonationUpdated is fired after a publisher was added or removed to/from - * recurrent donation list - */ - @Override - public void OnRecurringDonationUpdated() { - String pubId = mBraveRewardsNativeWorker.GetPublisherId(mCurrentTabId); - // mPubInReccuredDonation = - // mBraveRewardsNativeWorker.IsCurrentPublisherInRecurrentDonations(pubId); - - // all (mPubInReccuredDonation, mAutoContributeEnabled) are false: exit - // one is true: ac_enabled_controls on - // mAutoContributeEnabled: attention_layout and include_in_ac_layout on - // mPubInReccuredDonation: auto_tip_layout is on - - // if (mAutoContributeEnabled || mPubInReccuredDonation) { - // root.findViewById(R.id.ac_enabled_controls).setVisibility(View.VISIBLE); - - // if (mAutoContributeEnabled) { - // root.findViewById(R.id.attention_layout).setVisibility(View.VISIBLE); - // root.findViewById(R.id.include_in_ac_layout).setVisibility(View.VISIBLE); - // root.findViewById(R.id.brave_ui_auto_contribute_separator_top).setVisibility(View.VISIBLE); - // root.findViewById(R.id.brave_ui_auto_contribute_separator_bottom).setVisibility(View.VISIBLE); - // } - - // Temporary commented out due to dropdown spinner inflating issue on PopupWindow (API 24) - /* - if (mPubInReccuredDonation){ - double amount = mBraveRewardsNativeWorker.GetPublisherRecurrentDonationAmount(pubId); - UpdateRecurentDonationSpinner(amount); - root.findViewById(R.id.auto_tip_layout).setVisibility(View.VISIBLE); - }*/ - // } - } - private void updatePublisherStatus(int pubStatus) { - // Set publisher verified/unverified status String verifiedText = ""; TextView publisherVerified = mPopupView.findViewById(R.id.publisher_verified); publisherVerified.setAlpha(1f); @@ -1667,46 +1407,6 @@ public void onClick(View v) { } publisherVerified.setText(verifiedText); publisherVerified.setVisibility(View.VISIBLE); - - // show |brave_ui_panel_connected_text| text if - // publisher is CONNECTED and user doesn't have any Brave funds (anonymous or - // blinded wallets) - // String verified_description = ""; - // if (pubStatus == BraveRewardsPublisher.CONNECTED) { - // BraveRewardsBalance balance_obj = mBraveRewardsNativeWorker.GetWalletBalance(); - // if (balance_obj != null) { - // double braveFunds = - // ((balance_obj.mWallets.containsKey(BraveRewardsBalance.WALLET_ANONYMOUS) - // && balance_obj.mWallets.get(BraveRewardsBalance.WALLET_ANONYMOUS) - // != null) - // ? balance_obj.mWallets.get( - // BraveRewardsBalance.WALLET_ANONYMOUS) - // : .0) - // + ((balance_obj.mWallets.containsKey(BraveRewardsBalance.WALLET_BLINDED) - // && balance_obj.mWallets.get(BraveRewardsBalance.WALLET_BLINDED) - // != null) - // ? balance_obj.mWallets.get( - // BraveRewardsBalance.WALLET_BLINDED) - // : .0); - // if (braveFunds <= 0) { - // verified_description = - // root.getResources().getString(R.string.brave_ui_panel_connected_text); - // } - // } - // } else if (pubStatus == BraveRewardsPublisher.NOT_VERIFIED) { - // verified_description = root.getResources().getString( - // R.string.brave_ui_not_verified_publisher_description); - // } - - // if (!TextUtils.isEmpty(verified_description)) { - // verified_description += "
" - // + root.getResources().getString(R.string.learn_more) + - // "."; - // Spanned toInsert = BraveRewardsHelper.spannedFromHtmlString(verified_description); - // TextView tv_note = (TextView) root.findViewById(R.id.publisher_not_verified); - // tv_note.setText(toInsert); - // tv_note.setVisibility(View.VISIBLE); - // } } @Override @@ -1804,12 +1504,10 @@ private boolean isVerifyWalletEnabled() { private void showUpholdLoginPopupWindow(final View view) { PopupWindow loginPopupWindow = new PopupWindow(mActivity); - - // mRewardsMainLayout.setAlpha(0.4f); int foregroundColor = R.color.rewards_foreground_color; mRewardsMainLayout.setForeground( new ColorDrawable(ContextCompat.getColor(mActivity, foregroundColor))); - disableControls(false, mRewardsMainLayout); + enableControls(false, mRewardsMainLayout); LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); @@ -1866,9 +1564,6 @@ public void updateDrawState(@NonNull TextPaint ds) { loginActionButton.setMovementMethod(LinkMovementMethod.getInstance()); loginActionButton.setText(verifiedAccountUpholdTextSS); - // Rect bgPadding = new Rect(); - // int popupWidth = mActivity.getResources().getDimensionPixelSize(R.dimen.menu_width) - // + bgPadding.left + bgPadding.right; mPopupView.measure( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); int popupWidth = mPopupView.getMeasuredWidth(); @@ -1939,12 +1634,12 @@ private Intent BuildVerifyWalletActivityIntent(@WalletStatus final int status) { return intent; } - private void disableControls(boolean enable, ViewGroup vg) { + private void enableControls(boolean enable, ViewGroup vg) { for (int i = 0; i < vg.getChildCount(); i++) { View child = vg.getChildAt(i); child.setEnabled(enable); if (child instanceof ViewGroup) { - disableControls(enable, (ViewGroup) child); + enableControls(enable, (ViewGroup) child); } } } diff --git a/android/java/res/layout/brave_rewards_panel_notification_layout.xml b/android/java/res/layout/brave_rewards_panel_notification_layout.xml index a037d9ec77c1..b90022b60c38 100644 --- a/android/java/res/layout/brave_rewards_panel_notification_layout.xml +++ b/android/java/res/layout/brave_rewards_panel_notification_layout.xml @@ -55,8 +55,7 @@ android:textColor="@color/settings_section_text_color" android:drawablePadding="4dp" android:layout_marginBottom="8dp" - android:layout_gravity="center_horizontal" - app:drawableStartCompat="@drawable/ic_money_bag_coins" /> + android:layout_gravity="center_horizontal" /> Date: Tue, 14 Dec 2021 14:04:42 -0500 Subject: [PATCH 15/18] Hide pending tips on Android --- .../resources/android_page/components/pageWallet.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/brave_rewards/resources/android_page/components/pageWallet.tsx b/components/brave_rewards/resources/android_page/components/pageWallet.tsx index 4e4f67833ad7..7bb1e574bdb1 100644 --- a/components/brave_rewards/resources/android_page/components/pageWallet.tsx +++ b/components/brave_rewards/resources/android_page/components/pageWallet.tsx @@ -862,7 +862,7 @@ class PageWallet extends React.Component { summaryData={summaryData} autoContributeEnabled={enabledContribute} onExternalWalletAction={this.onExternalWalletAction} - onViewPendingTips={this.onModalPendingToggle} + onViewPendingTips={undefined} /> { From 988e8741b49321d1e7348b0574018843c92c0a44 Mon Sep 17 00:00:00 2001 From: Emerick Rogul Date: Wed, 15 Dec 2021 12:11:57 -0500 Subject: [PATCH 16/18] Revert "Stub in non-fuctional production bitFlyer domain for now" This reverts commit 4ec8301409e74c9a9f0d2fc0d5232deb0b0fd99c. --- components/brave_rewards/browser/rewards_protocol_handler.cc | 2 +- .../src/bat/ledger/internal/bitflyer/bitflyer_util.h | 2 +- .../src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc | 2 +- .../internal/endpoint/bitflyer/bitflyer_utils_unittest.cc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/components/brave_rewards/browser/rewards_protocol_handler.cc b/components/brave_rewards/browser/rewards_protocol_handler.cc index 2666a67b11db..ec4bede690b8 100644 --- a/components/brave_rewards/browser/rewards_protocol_handler.cc +++ b/components/brave_rewards/browser/rewards_protocol_handler.cc @@ -69,7 +69,7 @@ void LoadRewardsURL( const std::string bitflyer_staging_host = bitflyer_staging_url.host(); const std::string gemini_staging_host = gemini_oauth_staging_url.host(); const char* kAllowedDomains[] = { - "dummy.com", // bitFlyer production + "bitflyer.com", // bitFlyer production bitflyer_staging_host.c_str(), // bitFlyer staging "gemini.com", // Gemini production gemini_staging_host.c_str(), // Gemini staging diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_util.h b/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_util.h index fd181193da15..d3eafd94a47b 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_util.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/bitflyer/bitflyer_util.h @@ -18,7 +18,7 @@ class LedgerImpl; namespace bitflyer { const char kUrlStaging[] = BITFLYER_STAGING_URL; -const char kUrlProduction[] = "https://dummy.com"; +const char kUrlProduction[] = "https://bitflyer.com"; const char kFeeAddressStaging[] = "068e675b-f137-48ed-8068-4ad34ca4f30f"; const char kFeeAddressProduction[] = "e77cacb4-c49c-4451-bc2d-5072c10e55d3"; const char kACAddressStaging[] = ""; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc index 2d5b56ac0784..cb6e1c0562b3 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils.cc @@ -15,7 +15,7 @@ namespace endpoint { namespace bitflyer { const char kUrlStaging[] = BITFLYER_STAGING_URL; -const char kUrlProduction[] = "https://dummy.com"; +const char kUrlProduction[] = "https://bitflyer.com"; std::string GetClientId() { return ::ledger::bitflyer::GetClientId(); diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils_unittest.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils_unittest.cc index c0c94a9da1ca..f16ef3fd35f5 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils_unittest.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/endpoint/bitflyer/bitflyer_utils_unittest.cc @@ -31,7 +31,7 @@ TEST(BitflyerUtilsTest, GetServerUrlStaging) { TEST(BitflyerUtilsTest, GetServerUrlProduction) { ledger::_environment = type::Environment::PRODUCTION; const std::string url = GetServerUrl("/test"); - ASSERT_EQ(url, "https://dummy.com/test"); + ASSERT_EQ(url, "https://bitflyer.com/test"); } } // namespace bitflyer From fddfef45d3539a877a6cbb7c9010eb7bea1dfcec Mon Sep 17 00:00:00 2001 From: Deep Date: Wed, 15 Dec 2021 17:42:23 -0500 Subject: [PATCH 17/18] Address PR comments --- .../chrome/browser/BraveWalletProvider.java | 3 ++- .../chrome/browser/app/BraveActivity.java | 2 +- .../browser/rewards/BraveRewardsPanel.java | 18 +++++++++--------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java index 5610521568ec..f9feafd883ff 100644 --- a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java +++ b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java @@ -35,7 +35,7 @@ public class BraveWalletProvider implements BraveRewardsObserver { public static final String REDIRECT_URL_KEY = "redirect_url"; public static final String UPHOLD_REDIRECT_URL = "rewards://uphold"; - public static final String UPHOLD_SUPPORT_URL = "http://uphold.com/en/brave/support"; + public static final String BRAVE_SUPPORT_URL = "https://community.brave.com"; public static final String UPHOLD_ORIGIN_URL = "http://uphold.com"; public static final String BITFLYER_REDIRECT_URL = "rewards://bitflyer"; @@ -112,6 +112,7 @@ private String parseJsonArgs(String jsonArgs) { redirect_url = jsonObj.getString(REDIRECT_URL_KEY); } } catch (JSONException e) { + Log.e("BraveRewards", e.getMessage()); } return redirect_url; } diff --git a/android/java/org/chromium/chrome/browser/app/BraveActivity.java b/android/java/org/chromium/chrome/browser/app/BraveActivity.java index 9cffb281ce22..2c6901a4ef34 100644 --- a/android/java/org/chromium/chrome/browser/app/BraveActivity.java +++ b/android/java/org/chromium/chrome/browser/app/BraveActivity.java @@ -170,7 +170,7 @@ public abstract class BraveActivity extends C public static final String ADD_FUNDS_URL = "chrome://rewards/#add-funds"; public static final String REWARDS_SETTINGS_URL = "chrome://rewards/"; public static final String BRAVE_REWARDS_SETTINGS_URL = "brave://rewards/"; - public static final String BRAVE_REWARDS_SETTINGS_WALLET_PROVIDER_URL = + public static final String BRAVE_REWARDS_SETTINGS_WALLET_VERIFICATION_URL = "brave://rewards/#verify"; public static final String REWARDS_AC_SETTINGS_URL = "chrome://rewards/contribute"; public static final String REWARDS_LEARN_MORE_URL = "https://brave.com/faq-rewards/#unclaimed-funds"; diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index 3aea051367cc..5426c01df93e 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -1106,7 +1106,7 @@ public void OnRewardsParameters(int errorCode) { } } else if (errorCode == BraveRewardsNativeWorker.LEDGER_ERROR) { // No Internet connection String args[] = {}; - Log.e(TAG, "LEDGER_ERROR"); + Log.e(TAG, "Failed to fetch rewards parameters from server"); showNotification( REWARDS_NOTIFICATION_NO_INTERNET_ID, REWARDS_NOTIFICATION_NO_INTERNET, 0, args); } @@ -1155,19 +1155,19 @@ private void setVerifyWalletButton(@WalletStatus final int status) { SharedPreferences.Editor editor = sharedPref.edit(); int rightDrawable = 0; int leftDrawable = 0; - int text = 0; + int textId = 0; String walletType = mBraveRewardsNativeWorker.getExternalWalletType(); switch (status) { case BraveRewardsExternalWallet.NOT_CONNECTED: rightDrawable = R.drawable.disclosure; - text = R.string.brave_ui_wallet_button_unverified; + textId = R.string.brave_ui_wallet_button_unverified; btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(0, 0, rightDrawable, 0); Log.e(TAG, "BraveRewardsExternalWallet.NOT_CONNECTED"); break; case BraveRewardsExternalWallet.CONNECTED: rightDrawable = R.drawable.verified_disclosure; - text = R.string.brave_ui_wallet_button_unverified; + textId = R.string.brave_ui_wallet_button_unverified; btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(0, 0, rightDrawable, 0); break; case BraveRewardsExternalWallet.PENDING: @@ -1175,7 +1175,7 @@ private void setVerifyWalletButton(@WalletStatus final int status) { editor.apply(); rightDrawable = R.drawable.verified_disclosure; - text = R.string.brave_ui_wallet_button_unverified; + textId = R.string.brave_ui_wallet_button_unverified; btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(0, 0, rightDrawable, 0); break; case BraveRewardsExternalWallet.VERIFIED: @@ -1186,7 +1186,7 @@ private void setVerifyWalletButton(@WalletStatus final int status) { ? R.drawable.uphold_white : R.drawable.ic_logo_bitflyer; rightDrawable = R.drawable.verified_disclosure; - text = R.string.brave_ui_wallet_button_verified; + textId = R.string.brave_ui_wallet_button_verified; btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds( leftDrawable, 0, rightDrawable, 0); btnVerifyWallet.setBackgroundColor(Color.TRANSPARENT); @@ -1201,7 +1201,7 @@ private void setVerifyWalletButton(@WalletStatus final int status) { leftDrawable = walletType.equals(BraveWalletProvider.UPHOLD) ? R.drawable.uphold_white : R.drawable.ic_logo_bitflyer; - text = R.string.brave_ui_wallet_button_disconnected; + textId = R.string.brave_ui_wallet_button_disconnected; btnVerifyWallet.setCompoundDrawablesWithIntrinsicBounds(leftDrawable, 0, 0, 0); btnVerifyWallet.setBackgroundDrawable(ResourcesCompat.getDrawable( ContextUtils.getApplicationContext().getResources(), @@ -1249,7 +1249,8 @@ public void onClick(View v) { } else { if (status == BraveRewardsExternalWallet.NOT_CONNECTED) { BraveActivity.class.cast(mActivity).openNewOrSelectExistingTab( - BraveActivity.BRAVE_REWARDS_SETTINGS_WALLET_PROVIDER_URL); + BraveActivity + .BRAVE_REWARDS_SETTINGS_WALLET_VERIFICATION_URL); dismiss(); } else { int requestCode = @@ -1601,7 +1602,6 @@ public void run() { } else { int[] location = new int[2]; view.getLocationOnScreen(location); - int x = location[0]; int y = location[1]; loginPopupWindow.showAtLocation(view, Gravity.NO_GRAVITY, 0, y); } From 7b2d7127079c54efd3dec6d5b82b3ded93eb205f Mon Sep 17 00:00:00 2001 From: Deep Date: Wed, 15 Dec 2021 19:29:14 -0500 Subject: [PATCH 18/18] Resolve CI error --- .../java/org/chromium/chrome/browser/BraveWalletProvider.java | 2 +- .../org/chromium/chrome/browser/rewards/BraveRewardsPanel.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java index f9feafd883ff..fdb3ac9301a6 100644 --- a/android/java/org/chromium/chrome/browser/BraveWalletProvider.java +++ b/android/java/org/chromium/chrome/browser/BraveWalletProvider.java @@ -143,7 +143,7 @@ private void showErrorMessageBox(int errorCode) { .setPositiveButton(R.string.ok, (DialogInterface dialog, int which) -> { mBraveExternalNavigationHandler.clobberCurrentTabWithFallbackUrl( - UPHOLD_SUPPORT_URL, mExternalNavigationParams); + BRAVE_SUPPORT_URL, mExternalNavigationParams); }) .setOnDismissListener((DialogInterface dialog) -> { releaseDependencies(); }); diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index 5426c01df93e..12d0ed79f84d 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -1213,7 +1213,7 @@ private void setVerifyWalletButton(@WalletStatus final int status) { } btnVerifyWallet.setVisibility(View.VISIBLE); - btnVerifyWallet.setText(mPopupView.getResources().getString(text)); + btnVerifyWallet.setText(mPopupView.getResources().getString(textId)); Log.e(TAG, "before onClick"); setVerifyWalletButtonClickEvent(btnVerifyWallet, status);