Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add setup form to rewards onboarding modal #7525

Merged
merged 1 commit into from
Jan 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions browser/extensions/api/brave_rewards_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,12 @@ void BraveRewardsGetRewardsParametersFunction::OnGet(
}
data.SetList("monthlyTipChoices", std::move(monthly_choices));

auto ac_choices = std::make_unique<base::ListValue>();
for (double const& choice : parameters->auto_contribute_choices) {
ac_choices->AppendDouble(choice);
}
data.SetList("autoContributeChoices", std::move(ac_choices));

Respond(OneArgument(std::move(data)));
}

Expand Down Expand Up @@ -1230,5 +1236,75 @@ BraveRewardsSaveOnboardingResultFunction::Run() {
return RespondNow(NoArguments());
}

BraveRewardsGetPrefsFunction::~BraveRewardsGetPrefsFunction() = default;

ExtensionFunction::ResponseAction BraveRewardsGetPrefsFunction::Run() {
auto* rewards_service = RewardsServiceFactory::GetForProfile(
Profile::FromBrowserContext(browser_context()));

if (!rewards_service)
return RespondNow(Error("Rewards service is not initialized"));

rewards_service->GetAutoContributeProperties(base::BindRepeating(
&BraveRewardsGetPrefsFunction::GetAutoContributePropertiesCallback,
this));

return RespondLater();
}

void BraveRewardsGetPrefsFunction::GetAutoContributePropertiesCallback(
ledger::type::AutoContributePropertiesPtr properties) {
base::Value prefs(base::Value::Type::DICTIONARY);
prefs.SetBoolKey("autoContributeEnabled", properties->enabled_contribute);
prefs.SetDoubleKey("autoContributeAmount", properties->amount);

auto* ads_service = AdsServiceFactory::GetForProfile(
Profile::FromBrowserContext(browser_context()));

if (ads_service) {
prefs.SetBoolKey("adsEnabled", ads_service->IsEnabled());
prefs.SetDoubleKey("adsPerHour",
static_cast<double>(ads_service->GetAdsPerHour()));
} else {
prefs.SetBoolKey("adsEnabled", false);
prefs.SetDoubleKey("adsPerHour", 0);
}

Respond(OneArgument(std::move(prefs)));
}

BraveRewardsUpdatePrefsFunction::~BraveRewardsUpdatePrefsFunction() = default;

ExtensionFunction::ResponseAction BraveRewardsUpdatePrefsFunction::Run() {
auto params = brave_rewards::UpdatePrefs::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);

auto* profile = Profile::FromBrowserContext(browser_context());
auto* rewards_service = RewardsServiceFactory::GetForProfile(profile);
auto* ads_service = AdsServiceFactory::GetForProfile(profile);

if (rewards_service) {
bool* ac_enabled = params->prefs.auto_contribute_enabled.get();
if (ac_enabled)
rewards_service->SetAutoContributeEnabled(*ac_enabled);

double* ac_amount = params->prefs.auto_contribute_amount.get();
if (ac_amount)
rewards_service->SetAutoContributionAmount(*ac_amount);
}

if (ads_service) {
bool* ads_enabled = params->prefs.ads_enabled.get();
if (ads_enabled)
ads_service->SetEnabled(*ads_enabled);

int* ads_per_hour = params->prefs.ads_per_hour.get();
if (ads_per_hour)
ads_service->SetAdsPerHour(*ads_per_hour);
}

return RespondNow(NoArguments());
}

} // namespace api
} // namespace extensions
24 changes: 24 additions & 0 deletions browser/extensions/api/brave_rewards_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,30 @@ class BraveRewardsSaveOnboardingResultFunction : public ExtensionFunction {
ResponseAction Run() override;
};

class BraveRewardsGetPrefsFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("braveRewards.getPrefs", UNKNOWN)

protected:
~BraveRewardsGetPrefsFunction() override;

ResponseAction Run() override;

private:
void GetAutoContributePropertiesCallback(
ledger::type::AutoContributePropertiesPtr properties);
};

class BraveRewardsUpdatePrefsFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("braveRewards.updatePrefs", UNKNOWN)

protected:
~BraveRewardsUpdatePrefsFunction() override;

ResponseAction Run() override;
};

} // namespace api
} // namespace extensions

Expand Down
90 changes: 88 additions & 2 deletions browser/ui/webui/brave_tip_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#include "brave/browser/brave_rewards/rewards_service_factory.h"
#include "brave/browser/profiles/profile_util.h"
#include "brave/browser/ui/webui/basic_ui.h"
#include "brave/components/brave_ads/browser/ads_service.h"
#include "brave/components/brave_ads/browser/ads_service_factory.h"
#include "brave/components/brave_rewards/browser/rewards_service.h"
#include "brave/components/brave_rewards/browser/rewards_service_observer.h"
#include "brave/components/brave_rewards/resources/grit/brave_rewards_resources.h"
Expand Down Expand Up @@ -79,6 +81,10 @@ class TipMessageHandler : public WebUIMessageHandler,
void OnTip(const base::ListValue* args);
void GetRecurringTips(const base::ListValue* args);
void GetReconcileStamp(const base::ListValue* args);
void GetAutoContributeAmount(const base::ListValue* args);
void SetAutoContributeAmount(const base::ListValue* args);
void GetAdsPerHour(const base::ListValue* args);
void SetAdsPerHour(const base::ListValue* args);
void TweetTip(const base::ListValue* args);
void GetOnlyAnonWallet(const base::ListValue* args);
void GetExternalWallet(const base::ListValue* args);
Expand All @@ -87,6 +93,8 @@ class TipMessageHandler : public WebUIMessageHandler,
// Rewards service callbacks
void GetReconcileStampCallback(uint64_t reconcile_stamp);

void GetAutoContributeAmountCallback(double amount);

void GetRecurringTipsCallback(ledger::type::PublisherInfoList list);

void GetUpholdWalletCallback(
Expand All @@ -105,6 +113,7 @@ class TipMessageHandler : public WebUIMessageHandler,
ledger::type::RewardsParametersPtr parameters);

RewardsService* rewards_service_ = nullptr; // NOT OWNED
brave_ads::AdsService* ads_service_ = nullptr; // NOT OWNED
base::WeakPtrFactory<TipMessageHandler> weak_factory_{this};
};

Expand Down Expand Up @@ -165,6 +174,24 @@ void TipMessageHandler::RegisterMessages() {
&TipMessageHandler::GetReconcileStamp,
base::Unretained(this)));

web_ui()->RegisterMessageCallback(
"getAutoContributeAmount",
base::BindRepeating(&TipMessageHandler::GetAutoContributeAmount,
base::Unretained(this)));

web_ui()->RegisterMessageCallback(
"setAutoContributeAmount",
base::BindRepeating(&TipMessageHandler::SetAutoContributeAmount,
base::Unretained(this)));

web_ui()->RegisterMessageCallback(
"getAdsPerHour", base::BindRepeating(&TipMessageHandler::GetAdsPerHour,
base::Unretained(this)));

web_ui()->RegisterMessageCallback(
"setAdsPerHour", base::BindRepeating(&TipMessageHandler::SetAdsPerHour,
base::Unretained(this)));

web_ui()->RegisterMessageCallback(
"tweetTip",
base::BindRepeating(
Expand Down Expand Up @@ -238,14 +265,19 @@ void TipMessageHandler::OnUnblindedTokensReady(
}

void TipMessageHandler::DialogReady(const base::ListValue* args) {
// Initialize rewards service pointer on first "dialogReady" message
Profile* profile = Profile::FromWebUI(web_ui());

if (!rewards_service_) {
Profile* profile = Profile::FromWebUI(web_ui());
rewards_service_ = RewardsServiceFactory::GetForProfile(profile);
if (rewards_service_) {
rewards_service_->AddObserver(this);
}
}

if (!ads_service_) {
ads_service_ = brave_ads::AdsServiceFactory::GetForProfile(profile);
}

AllowJavascript();
if (rewards_service_ && rewards_service_->IsInitialized()) {
FireWebUIListener("rewardsInitialized");
Expand Down Expand Up @@ -338,6 +370,47 @@ void TipMessageHandler::GetReconcileStamp(const base::ListValue* args) {
weak_factory_.GetWeakPtr()));
}

void TipMessageHandler::GetAutoContributeAmount(const base::ListValue* args) {
if (!rewards_service_) {
return;
}

rewards_service_->GetAutoContributionAmount(
base::Bind(&TipMessageHandler::GetAutoContributeAmountCallback,
weak_factory_.GetWeakPtr()));
}

void TipMessageHandler::SetAutoContributeAmount(const base::ListValue* args) {
CHECK_EQ(args->GetSize(), 1U);
double amount = args->GetList()[0].GetDouble();
if (!rewards_service_ || amount < 0) {
return;
}
AllowJavascript();
rewards_service_->SetAutoContributionAmount(amount);
FireWebUIListener("autoContributeAmountUpdated", base::Value(amount));
}

void TipMessageHandler::GetAdsPerHour(const base::ListValue* args) {
if (!ads_service_) {
return;
}
AllowJavascript();
double adsPerHour = static_cast<double>(ads_service_->GetAdsPerHour());
FireWebUIListener("adsPerHourUpdated", base::Value(adsPerHour));
}

void TipMessageHandler::SetAdsPerHour(const base::ListValue* args) {
CHECK_EQ(args->GetSize(), 1U);
const double adsPerHour = args->GetList()[0].GetDouble();
if (!ads_service_ || adsPerHour < 0) {
return;
}
AllowJavascript();
ads_service_->SetAdsPerHour(adsPerHour);
FireWebUIListener("adsPerHourUpdated", base::Value(adsPerHour));
}

void TipMessageHandler::TweetTip(const base::ListValue* args) {
CHECK_EQ(args->GetSize(), 2U);
const std::string name = args->GetList()[0].GetString();
Expand Down Expand Up @@ -412,9 +485,15 @@ void TipMessageHandler::GetRewardsParametersCallback(
monthly_choices.Append(item);
}

base::Value ac_choices(base::Value::Type::LIST);
for (const auto& item : parameters->auto_contribute_choices) {
ac_choices.Append(item);
}

data.SetDoubleKey("rate", parameters->rate);
data.SetKey("tipChoices", std::move(tip_choices));
data.SetKey("monthlyTipChoices", std::move(monthly_choices));
data.SetKey("autoContributeChoices", std::move(ac_choices));
}

FireWebUIListener("rewardsParametersUpdated", data);
Expand Down Expand Up @@ -480,6 +559,13 @@ void TipMessageHandler::GetReconcileStampCallback(uint64_t reconcile_stamp) {
FireWebUIListener("reconcileStampUpdated", base::Value(stamp));
}

void TipMessageHandler::GetAutoContributeAmountCallback(double amount) {
if (!IsJavascriptAllowed()) {
return;
}
FireWebUIListener("autoContributeAmountUpdated", base::Value(amount));
}

void TipMessageHandler::GetShareURLCallback(const std::string& url) {
GURL gurl(url);
if (!gurl.is_valid()) {
Expand Down
12 changes: 12 additions & 0 deletions browser/ui/webui/brave_webui_source.cc
Original file line number Diff line number Diff line change
Expand Up @@ -630,6 +630,10 @@ void CustomizeWebUIHTMLSource(const std::string &name,
{ "onboardingEarnText", IDS_BRAVE_REWARDS_ONBOARDING_EARN_TEXT },
{ "onboardingPromoHeader", IDS_BRAVE_REWARDS_ONBOARDING_PROMO_HEADER },
{ "onboardingPromoText", IDS_BRAVE_REWARDS_ONBOARDING_PROMO_TEXT },
{ "onboardingSetupAdsHeader", IDS_BRAVE_REWARDS_ONBOARDING_SETUP_ADS_HEADER }, // NOLINT
{ "onboardingSetupAdsSubheader", IDS_BRAVE_REWARDS_ONBOARDING_SETUP_ADS_SUBHEADER }, // NOLINT
{ "onboardingSetupContributeHeader", IDS_BRAVE_REWARDS_ONBOARDING_SETUP_CONTRIBUTE_HEADER }, // NOLINT
{ "onboardingSetupContributeSubheader", IDS_BRAVE_REWARDS_ONBOARDING_SETUP_CONTRIBUTE_SUBHEADER }, // NOLINT
{ "onboardingStartUsingRewards", IDS_BRAVE_REWARDS_ONBOARDING_START_USING_REWARDS }, // NOLINT
{ "onboardingTakeTour", IDS_BRAVE_REWARDS_ONBOARDING_TAKE_TOUR },
{ "onboardingTerms", IDS_BRAVE_REWARDS_ONBOARDING_TERMS },
Expand All @@ -651,6 +655,8 @@ void CustomizeWebUIHTMLSource(const std::string &name,
{ "onboardingPanelTippingText", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_TIPPING_TEXT }, // NOLINT
{ "onboardingPanelRedeemHeader", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_REDEEM_HEADER }, // NOLINT
{ "onboardingPanelRedeemText", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_REDEEM_TEXT }, // NOLINT
{ "onboardingPanelSetupHeader", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_SETUP_HEADER }, // NOLINT
{ "onboardingPanelSetupText", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_SETUP_TEXT }, // NOLINT
{ "onboardingPanelCompleteHeader", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_COMPLETE_HEADER }, // NOLINT
{ "onboardingPanelCompleteText", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_COMPLETE_TEXT }, // NOLINT
{ "oneTime", IDS_BRAVE_UI_ONE_TIME },
Expand Down Expand Up @@ -883,6 +889,10 @@ void CustomizeWebUIHTMLSource(const std::string &name,
{ "notEnoughTokensLink", IDS_BRAVE_UI_NOT_ENOUGH_TOKENS_LINK },
{ "on", IDS_BRAVE_UI_ON },
{ "onboardingMaybeLater", IDS_BRAVE_REWARDS_ONBOARDING_MAYBE_LATER },
{ "onboardingSetupAdsHeader", IDS_BRAVE_REWARDS_ONBOARDING_SETUP_ADS_HEADER }, // NOLINT
{ "onboardingSetupAdsSubheader", IDS_BRAVE_REWARDS_ONBOARDING_SETUP_ADS_SUBHEADER }, // NOLINT
{ "onboardingSetupContributeHeader", IDS_BRAVE_REWARDS_ONBOARDING_SETUP_CONTRIBUTE_HEADER }, // NOLINT
{ "onboardingSetupContributeSubheader", IDS_BRAVE_REWARDS_ONBOARDING_SETUP_CONTRIBUTE_SUBHEADER }, // NOLINT
{ "onboardingStartUsingRewards", IDS_BRAVE_REWARDS_ONBOARDING_START_USING_REWARDS }, // NOLINT
{ "onboardingTakeTour", IDS_BRAVE_REWARDS_ONBOARDING_TAKE_TOUR },
{ "onboardingTerms", IDS_BRAVE_REWARDS_ONBOARDING_TERMS },
Expand All @@ -906,6 +916,8 @@ void CustomizeWebUIHTMLSource(const std::string &name,
{ "onboardingPanelTippingText", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_TIPPING_TEXT }, // NOLINT
{ "onboardingPanelRedeemHeader", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_REDEEM_HEADER }, // NOLINT
{ "onboardingPanelRedeemText", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_REDEEM_TEXT }, // NOLINT
{ "onboardingPanelSetupHeader", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_SETUP_HEADER }, // NOLINT
{ "onboardingPanelSetupText", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_SETUP_TEXT }, // NOLINT
{ "onboardingPanelCompleteHeader", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_COMPLETE_HEADER }, // NOLINT
{ "onboardingPanelCompleteText", IDS_BRAVE_REWARDS_ONBOARDING_PANEL_COMPLETE_TEXT }, // NOLINT
{ "oneTimeTip", IDS_BRAVE_REWARDS_TIP_ONE_TIME_TIP },
Expand Down
Loading