diff --git a/components/brave_rewards/browser/rewards_service_impl.cc b/components/brave_rewards/browser/rewards_service_impl.cc index 0ef3571222c2..127d3dda8b62 100644 --- a/components/brave_rewards/browser/rewards_service_impl.cc +++ b/components/brave_rewards/browser/rewards_service_impl.cc @@ -1640,8 +1640,7 @@ void RewardsServiceImpl::SetAutoContributeEnabled(bool enabled) { } bool RewardsServiceImpl::ShouldShowOnboarding() const { - PrefService* prefs = profile_->GetPrefs(); - const base::Time onboard_time = prefs->GetTime(prefs::kOnboarded); + const bool legacy_enabled = profile_->GetPrefs()->GetBoolean(prefs::kEnabled); bool ads_enabled = false; bool ads_supported = true; @@ -1651,7 +1650,7 @@ bool RewardsServiceImpl::ShouldShowOnboarding() const { ads_supported = ads_service->IsSupportedLocale(); } - return onboard_time.is_null() && !ads_enabled && ads_supported; + return !legacy_enabled && !ads_enabled && ads_supported; } void RewardsServiceImpl::SaveOnboardingResult(OnboardingResult result) { diff --git a/components/brave_rewards/browser/test/common/rewards_browsertest_util.cc b/components/brave_rewards/browser/test/common/rewards_browsertest_util.cc index 1363c56827b3..cd4095ef2a2f 100644 --- a/components/brave_rewards/browser/test/common/rewards_browsertest_util.cc +++ b/components/brave_rewards/browser/test/common/rewards_browsertest_util.cc @@ -120,4 +120,12 @@ void CreateWallet(brave_rewards::RewardsServiceImpl* rewards_service) { ASSERT_TRUE(success); } +void SetOnboardingBypassed(Browser* browser, bool bypassed) { + DCHECK(browser); + // Rewards onboarding will be skipped if the legacy "enabled" pref + // is set to true. + PrefService* prefs = browser->profile()->GetPrefs(); + prefs->SetBoolean(brave_rewards::prefs::kEnabled, bypassed); +} + } // namespace rewards_browsertest_util diff --git a/components/brave_rewards/browser/test/common/rewards_browsertest_util.h b/components/brave_rewards/browser/test/common/rewards_browsertest_util.h index b71e730500bd..7d1dd4717adb 100644 --- a/components/brave_rewards/browser/test/common/rewards_browsertest_util.h +++ b/components/brave_rewards/browser/test/common/rewards_browsertest_util.h @@ -50,6 +50,8 @@ void WaitForLedgerStop(brave_rewards::RewardsServiceImpl* rewards_service); void CreateWallet(brave_rewards::RewardsServiceImpl* rewards_service); +void SetOnboardingBypassed(Browser* browser, bool bypassed = true); + } // namespace rewards_browsertest_util #endif // BRAVE_COMPONENTS_BRAVE_REWARDS_BROWSER_TEST_COMMON_REWARDS_BROWSERTEST_UTIL_H_ diff --git a/components/brave_rewards/browser/test/rewards_browsertest.cc b/components/brave_rewards/browser/test/rewards_browsertest.cc index 3358796f734c..2f6ac0571f47 100644 --- a/components/brave_rewards/browser/test/rewards_browsertest.cc +++ b/components/brave_rewards/browser/test/rewards_browsertest.cc @@ -71,9 +71,7 @@ class RewardsBrowserTest : public InProcessBrowserTest { contribution_->Initialize(browser(), rewards_service_); promotion_->Initialize(browser(), rewards_service_); - // Bypass onboarding UX by default - rewards_service_->SaveOnboardingResult( - brave_rewards::OnboardingResult::kDismissed); + rewards_browsertest_util::SetOnboardingBypassed(browser()); } void TearDown() override { diff --git a/components/brave_rewards/browser/test/rewards_contribution_browsertest.cc b/components/brave_rewards/browser/test/rewards_contribution_browsertest.cc index 0c679b99eaf0..8cbd4992984c 100644 --- a/components/brave_rewards/browser/test/rewards_contribution_browsertest.cc +++ b/components/brave_rewards/browser/test/rewards_contribution_browsertest.cc @@ -72,9 +72,7 @@ class RewardsContributionBrowserTest : public InProcessBrowserTest { promotion_->Initialize(browser(), rewards_service_); contribution_->Initialize(browser(), rewards_service_); - // Bypass onboarding UX by default - rewards_service_->SaveOnboardingResult( - brave_rewards::OnboardingResult::kDismissed); + rewards_browsertest_util::SetOnboardingBypassed(browser()); } void TearDown() override { diff --git a/components/brave_rewards/browser/test/rewards_flag_browsertest.cc b/components/brave_rewards/browser/test/rewards_flag_browsertest.cc index 1cf17bf085fe..e716c2af611c 100644 --- a/components/brave_rewards/browser/test/rewards_flag_browsertest.cc +++ b/components/brave_rewards/browser/test/rewards_flag_browsertest.cc @@ -55,9 +55,7 @@ class RewardsFlagBrowserTest : public InProcessBrowserTest { base::Unretained(this))); rewards_service_->SetLedgerEnvForTesting(); - // Bypass onboarding UX by default - rewards_service_->SaveOnboardingResult( - brave_rewards::OnboardingResult::kDismissed); + rewards_browsertest_util::SetOnboardingBypassed(browser()); } void GetTestResponse( diff --git a/components/brave_rewards/browser/test/rewards_notification_browsertest.cc b/components/brave_rewards/browser/test/rewards_notification_browsertest.cc index e036d57a460c..5e0c760d3890 100644 --- a/components/brave_rewards/browser/test/rewards_notification_browsertest.cc +++ b/components/brave_rewards/browser/test/rewards_notification_browsertest.cc @@ -75,9 +75,7 @@ class RewardsNotificationBrowserTest rewards_notification_service_ = rewards_service_->GetNotificationService(); rewards_notification_service_->AddObserver(this); - // Bypass onboarding UX by default - rewards_service_->SaveOnboardingResult( - brave_rewards::OnboardingResult::kDismissed); + rewards_browsertest_util::SetOnboardingBypassed(browser()); } void TearDown() override { diff --git a/components/brave_rewards/browser/test/rewards_promotion_browsertest.cc b/components/brave_rewards/browser/test/rewards_promotion_browsertest.cc index fc06e83a3250..82bc8436bc6b 100644 --- a/components/brave_rewards/browser/test/rewards_promotion_browsertest.cc +++ b/components/brave_rewards/browser/test/rewards_promotion_browsertest.cc @@ -61,9 +61,7 @@ class RewardsPromotionBrowserTest : public InProcessBrowserTest { // Other promotion_->Initialize(browser(), rewards_service_); - // Bypass onboarding UX by default - rewards_service_->SaveOnboardingResult( - brave_rewards::OnboardingResult::kDismissed); + rewards_browsertest_util::SetOnboardingBypassed(browser()); } void TearDown() override { diff --git a/components/brave_rewards/browser/test/rewards_publisher_browsertest.cc b/components/brave_rewards/browser/test/rewards_publisher_browsertest.cc index a56ecf839ec3..293b7c43cb18 100644 --- a/components/brave_rewards/browser/test/rewards_publisher_browsertest.cc +++ b/components/brave_rewards/browser/test/rewards_publisher_browsertest.cc @@ -59,9 +59,7 @@ class RewardsPublisherBrowserTest : public InProcessBrowserTest { base::Unretained(this))); rewards_service_->SetLedgerEnvForTesting(); - // Bypass onboarding UX by default - rewards_service_->SaveOnboardingResult( - brave_rewards::OnboardingResult::kDismissed); + rewards_browsertest_util::SetOnboardingBypassed(browser()); } void TearDown() override { diff --git a/components/brave_rewards/resources/extension/brave_rewards/background/reducers/rewards_panel_reducer.ts b/components/brave_rewards/resources/extension/brave_rewards/background/reducers/rewards_panel_reducer.ts index 5ba22556afab..c15dd3e85607 100644 --- a/components/brave_rewards/resources/extension/brave_rewards/background/reducers/rewards_panel_reducer.ts +++ b/components/brave_rewards/resources/extension/brave_rewards/background/reducers/rewards_panel_reducer.ts @@ -2,11 +2,14 @@ * 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 { OnboardingCompletedStore } from '../../../../shared/lib/onboarding_completed_store' import { types } from '../../constants/rewards_panel_types' import { Reducer } from 'redux' import { setBadgeText } from '../browserAction' import { isPublisherConnectedOrVerified } from '../../utils' +const onboardingCompletedStore = new OnboardingCompletedStore() + const getTabKey = (id: number) => { return `key_${id}` } @@ -242,12 +245,17 @@ export const rewardsPanelReducer: Reducer = break } case types.ON_SHOULD_SHOW_ONBOARDING: { - state = { ...state, showOnboarding: payload.showOnboarding } + const completed = onboardingCompletedStore.load() + state = { + ...state, + showOnboarding: payload.showOnboarding && !completed + } break } case types.SAVE_ONBOARDING_RESULT: { state = { ...state, showOnboarding: false } chrome.braveRewards.saveOnboardingResult(payload.result) + onboardingCompletedStore.save() break } case types.ON_PUBLISHER_LIST_NORMALIZED: { diff --git a/components/brave_rewards/resources/page/reducers/rewards_reducer.ts b/components/brave_rewards/resources/page/reducers/rewards_reducer.ts index 7dd54ab685a1..1893b45340e2 100644 --- a/components/brave_rewards/resources/page/reducers/rewards_reducer.ts +++ b/components/brave_rewards/resources/page/reducers/rewards_reducer.ts @@ -4,10 +4,14 @@ import { Reducer } from 'redux' +import { OnboardingCompletedStore } from '../../shared/lib/onboarding_completed_store' + // Constant import { types } from '../constants/rewards_types' import { defaultState } from '../storage' +const onboardingCompletedStore = new OnboardingCompletedStore() + const rewardsReducer: Reducer = (state: Rewards.State, action) => { if (!state) { return @@ -439,15 +443,17 @@ const rewardsReducer: Reducer = (state: Rewards.State break } case types.ON_ONBOARDING_STATUS: { + const completed = onboardingCompletedStore.load() state = { ...state, - showOnboarding: action.payload.showOnboarding + showOnboarding: action.payload.showOnboarding && !completed } break } case types.SAVE_ONBOARDING_RESULT: { chrome.send('brave_rewards.saveOnboardingResult', [action.payload.result]) chrome.send('brave_rewards.getAutoContributeProperties') + onboardingCompletedStore.save() state = { ...state, showOnboarding: false diff --git a/components/brave_rewards/resources/shared/lib/onboarding_completed_store.ts b/components/brave_rewards/resources/shared/lib/onboarding_completed_store.ts new file mode 100644 index 000000000000..acf4601deb91 --- /dev/null +++ b/components/brave_rewards/resources/shared/lib/onboarding_completed_store.ts @@ -0,0 +1,17 @@ +/* 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/. */ + +// An OnboardingCompletedStore can be used by apps that include +// rewards onboarding UX to store whether the user has interacted +// with the onboarding experience. +export class OnboardingCompletedStore { + + load () { + return Boolean(localStorage.rewardsOnboardingComplete) + } + + save () { + localStorage.rewardsOnboardingComplete = String(Date.now()) + } +} diff --git a/components/brave_rewards/resources/tip/lib/host.ts b/components/brave_rewards/resources/tip/lib/host.ts index ff01620a1a00..0d9a674a60b9 100644 --- a/components/brave_rewards/resources/tip/lib/host.ts +++ b/components/brave_rewards/resources/tip/lib/host.ts @@ -2,6 +2,8 @@ * 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 { OnboardingCompletedStore } from '../../shared/lib/onboarding_completed_store' + import { createStateManager } from './state_manager' import { @@ -58,6 +60,7 @@ function addWebUIListeners (listeners: Record) { export function createHost (): Host { const stateManager = createStateManager({}) const dialogArgs = getDialogArgs() + const onboardingCompleted = new OnboardingCompletedStore() addWebUIListeners({ @@ -95,7 +98,7 @@ export function createHost (): Host { onboardingStatusUpdated (result: { showOnboarding: boolean }) { stateManager.update({ - showOnboarding: result.showOnboarding + showOnboarding: result.showOnboarding && !onboardingCompleted.load() }) }, @@ -193,6 +196,7 @@ export function createHost (): Host { saveOnboardingResult (result: OnboardingResult) { chrome.send('saveOnboardingResult', [result]) stateManager.update({ showOnboarding: false }) + onboardingCompleted.save() }, processTip (amount: number, kind: TipKind) {