diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java index 5e067213965..11855fe1df2 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java @@ -719,10 +719,11 @@ public class BraveRewardsNativeWorker { @CalledByNative public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, int adsReceivedThisMonth, double minEarningsThisMonth, double maxEarningsThisMonth, - double earningsLastMonth) { + double minEarningsLastMonth, double maxEarningsLastMonth) { for (BraveRewardsObserver observer : mObservers) { observer.OnGetAdsAccountStatement(success, nextPaymentDate, adsReceivedThisMonth, - minEarningsThisMonth, maxEarningsThisMonth, earningsLastMonth); + minEarningsThisMonth, maxEarningsThisMonth, minEarningsLastMonth, + maxEarningsLastMonth); } } diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java index 9f1537711d7..9136e35063e 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java @@ -34,7 +34,7 @@ public interface BraveRewardsObserver { default public void onSendContribution(boolean result){}; default public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, int adsReceivedThisMonth, double minEarningsThisMonth, double maxEarningsThisMonth, - double earningsLastMonth){}; + double minEarningsLastMonth, double maxEarningsLastMonth){}; default public void onPublisherBanner(String jsonBannerInfo){}; default public void onGetPublishersVisitedCount(int count){}; default public void onGetUserType(int userType){}; diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index a0ad84bcfef..cf0c542a05d 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -149,7 +149,7 @@ public class BraveRewardsPanel public static final String WALLET_GENERATION_DISABLED_ERROR = "wallet-generation-disabled"; // Payout status - private static final String PAYOUT_STATUS_PENDING = "pending"; + private static final String PAYOUT_STATUS_PENDING = "off"; private static final String PAYOUT_STATUS_PROCESSING = "processing"; private static final String PAYOUT_STATUS_COMPLETE = "complete"; @@ -1023,7 +1023,7 @@ public class BraveRewardsPanel @Override public void OnGetAdsAccountStatement(boolean success, double nextPaymentDate, int adsReceivedThisMonth, double minEarningsThisMonth, double maxEarningsThisMonth, - double earningsLastMonth) { + double minEarningsLastMonth, double maxEarningsLastMonth) { if (mExternalWallet != null && mExternalWallet.getStatus() == WalletStatus.NOT_CONNECTED && !PackageUtils.isFirstInstall(mActivity)) { mPopupView.findViewById(R.id.estimated_earnings_range_group).setVisibility(View.GONE); @@ -1048,31 +1048,73 @@ public class BraveRewardsPanel estimatedRange.setText(estimatedValue); } } - showPayoutStatusBanner(nextPaymentDate); + + if (minEarningsLastMonth > 0) { + showPayoutStatusBanner((long) nextPaymentDate); + } } - private void showPayoutStatusBanner(double nextPaymentDate) { + private double getDaysUntilRewardsPayment(long nextPaymentDateLong) { + Date nextPaymentDate = new Date(nextPaymentDateLong); + Calendar nextPaymentDateCalendar = Calendar.getInstance(); + nextPaymentDateCalendar.setTime(nextPaymentDate); + nextPaymentDateCalendar.set(Calendar.HOUR_OF_DAY, 0); + nextPaymentDateCalendar.set(Calendar.MINUTE, 0); + nextPaymentDateCalendar.set(Calendar.SECOND, 0); + + Calendar nowDateCalendar = Calendar.getInstance(); + if (nextPaymentDateCalendar.get(Calendar.MONTH) != nowDateCalendar.get(Calendar.MONTH)) { + return 0; + } + + long delta = + nextPaymentDateCalendar.getTime().getTime() - nowDateCalendar.getTime().getTime(); + double days = Math.ceil((double) delta / 24 / 60 / 60 / 1000); + + if (days < 1) { + return 0; + } + + return days; + } + + private String getPaymentMonth() { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MONTH, -1); + return (String) android.text.format.DateFormat.format("MMMM", calendar); + } + + private String formatPaymentDate(long nextPaymentDateLong) { + Date nextPaymentDate = new Date(nextPaymentDateLong); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(nextPaymentDate); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + + return (String) android.text.format.DateFormat.format("MMMM dd", calendar.getTime()); + } + + private void showPayoutStatusBanner(long nextPaymentDate) { String payoutStatus = mBraveRewardsNativeWorker.getPayoutStatus(); - if (mPayoutStatusBannerLayout != null && !TextUtils.isEmpty(payoutStatus) - && mExternalWallet != null + if (mPayoutStatusBannerLayout != null && mExternalWallet != null && mExternalWallet.getStatus() == WalletStatus.CONNECTED) { - String currentDate = (String) android.text.format.DateFormat.format("MMMM", new Date()); mPayoutStatusBannerLayout.setVisibility(View.VISIBLE); ImageView payoutBannerImg = mPopupView.findViewById(R.id.payout_banner_img); TextView payoutBannerText = mPopupView.findViewById(R.id.payout_banner_text); - if (payoutStatus.equals(PAYOUT_STATUS_PENDING)) { - if (nextPaymentDate > 0) { - String nextPayoutDate = (String) android.text.format.DateFormat.format( - "MMMM dd", new Date((long) nextPaymentDate)); - mPayoutStatusBannerLayout.setBackgroundDrawable(ResourcesCompat.getDrawable( - ContextUtils.getApplicationContext().getResources(), - R.drawable.rewards_panel_payout_processing_bg, null)); - payoutBannerImg.setImageResource(R.drawable.ic_payout_status_pending); - payoutBannerText.setText( - String.format(mPopupView.getResources().getString( - R.string.rewards_panel_payout_pending_text), - currentDate, nextPayoutDate)); - } + if (payoutStatus.equals(PAYOUT_STATUS_COMPLETE)) { + mPayoutStatusBannerLayout.setBackgroundDrawable(ResourcesCompat.getDrawable( + ContextUtils.getApplicationContext().getResources(), + R.drawable.rewards_panel_payout_complete_bg, null)); + payoutBannerImg.setImageResource(R.drawable.ic_payout_status_complete); + SpannableString spannableBannerText = spannableClickSpan( + String.format(mPopupView.getResources().getString( + R.string.rewards_panel_payout_complete_text), + getPaymentMonth(), + mPopupView.getResources().getString(R.string.support)), + mPopupView.getResources().getString(R.string.support), SUPPORT_URL); + payoutBannerText.setMovementMethod(LinkMovementMethod.getInstance()); + payoutBannerText.setText(spannableBannerText); } else if (payoutStatus.equals(PAYOUT_STATUS_PROCESSING)) { mPayoutStatusBannerLayout.setBackgroundDrawable(ResourcesCompat.getDrawable( ContextUtils.getApplicationContext().getResources(), @@ -1081,7 +1123,7 @@ public class BraveRewardsPanel SpannableString spannableBannerText = spannableClickSpan( String.format(mPopupView.getResources().getString( R.string.rewards_panel_payout_processing_text), - currentDate, + getPaymentMonth(), mPopupView.getResources().getString( R.string.rewards_panel_payout_check_status_text)), mPopupView.getResources().getString( @@ -1089,18 +1131,17 @@ public class BraveRewardsPanel ADS_PAYOUT_STATUS_URL); payoutBannerText.setMovementMethod(LinkMovementMethod.getInstance()); payoutBannerText.setText(spannableBannerText); - } else if (payoutStatus.equals(PAYOUT_STATUS_COMPLETE)) { + } else if ((payoutStatus.equals(PAYOUT_STATUS_PENDING) + || TextUtils.isEmpty(payoutStatus)) + && getDaysUntilRewardsPayment(nextPaymentDate) > 0) { mPayoutStatusBannerLayout.setBackgroundDrawable(ResourcesCompat.getDrawable( ContextUtils.getApplicationContext().getResources(), - R.drawable.rewards_panel_payout_complete_bg, null)); - payoutBannerImg.setImageResource(R.drawable.ic_payout_status_complete); - SpannableString spannableBannerText = spannableClickSpan( + R.drawable.rewards_panel_payout_processing_bg, null)); + payoutBannerImg.setImageResource(R.drawable.ic_payout_status_pending); + payoutBannerText.setText( String.format(mPopupView.getResources().getString( - R.string.rewards_panel_payout_complete_text), - currentDate, mPopupView.getResources().getString(R.string.support)), - mPopupView.getResources().getString(R.string.support), SUPPORT_URL); - payoutBannerText.setMovementMethod(LinkMovementMethod.getInstance()); - payoutBannerText.setText(spannableBannerText); + R.string.rewards_panel_payout_pending_text), + getPaymentMonth(), formatPaymentDate(nextPaymentDate))); } } } diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.cc b/browser/brave_rewards/android/brave_rewards_native_worker.cc index 08647b68c54..363273b97a4 100644 --- a/browser/brave_rewards/android/brave_rewards_native_worker.cc +++ b/browser/brave_rewards/android/brave_rewards_native_worker.cc @@ -450,7 +450,7 @@ void BraveRewardsNativeWorker::OnGetAdsAccountStatement( if (!statement) { Java_BraveRewardsNativeWorker_OnGetAdsAccountStatement( env, weak_java_brave_rewards_native_worker_.get(env), - /* success */ false, 0.0, 0, 0.0, 0.0, 0.0); + /* success */ false, 0.0, 0, 0.0, 0.0, 0.0, 0.0); return; } @@ -458,7 +458,8 @@ void BraveRewardsNativeWorker::OnGetAdsAccountStatement( env, weak_java_brave_rewards_native_worker_.get(env), /* success */ true, statement->next_payment_date.ToDoubleT() * 1000, statement->ads_received_this_month, statement->min_earnings_this_month, - statement->max_earnings_this_month, statement->max_earnings_last_month); + statement->max_earnings_this_month, statement->min_earnings_last_month, + statement->max_earnings_last_month); } bool BraveRewardsNativeWorker::CanConnectAccount(JNIEnv* env) {