Skip to content

Commit 022abcc

Browse files
authored
Remove FXIOS-6735 [v120] remove pocket feature flag (#16825)
* Remove .pocket feature flag * Show pocket settings even when the feature is turned off * Return directly * Adjust tests
1 parent b9d6833 commit 022abcc

File tree

12 files changed

+30
-43
lines changed

12 files changed

+30
-43
lines changed

Client/FeatureFlags/NimbusFlaggableFeature.swift

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ enum NimbusFeatureFlagID: String, CaseIterable {
2323
case isToolbarCFREnabled
2424
case jumpBackIn
2525
case libraryCoordinatorRefactor
26-
case pocket
2726
case qrCodeCoordinatorRefactor
2827
case recentlySaved
2928
case reduxIntegration
@@ -68,8 +67,6 @@ struct NimbusFlaggableFeature: HasNimbusSearchBar {
6867
return FlagKeys.InactiveTabs
6968
case .jumpBackIn:
7069
return FlagKeys.JumpBackInSection
71-
case .pocket:
72-
return FlagKeys.ASPocketStories
7370
case .recentlySaved:
7471
return FlagKeys.RecentlySavedSection
7572
case .topSites:
@@ -113,14 +110,7 @@ struct NimbusFlaggableFeature: HasNimbusSearchBar {
113110
return true
114111
}
115112

116-
let nimbusValue = nimbusLayer.checkNimbusConfigFor(featureID)
117-
118-
switch featureID {
119-
case .pocket:
120-
return nimbusValue && PocketProvider.islocaleSupported(Locale.current.identifier)
121-
default:
122-
return nimbusValue
123-
}
113+
return nimbusLayer.checkNimbusConfigFor(featureID)
124114
}
125115

126116
/// Returns whether or not the feature's state was changed by the user. If no

Client/Frontend/Home/HomepageViewModel.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,10 @@ class HomepageViewModel: FeatureFlaggable {
148148
historyHighlightsDataAdaptor: historyDataAdaptor,
149149
wallpaperManager: wallpaperManager)
150150

151-
let pocketDataAdaptor = PocketDataAdaptorImplementation(pocketAPI: PocketProvider())
151+
let pocketDataAdaptor = PocketDataAdaptorImplementation(pocketAPI: PocketProvider(prefs: profile.prefs))
152152
self.pocketViewModel = PocketViewModel(pocketDataAdaptor: pocketDataAdaptor,
153153
theme: theme,
154+
prefs: profile.prefs,
154155
wallpaperManager: wallpaperManager)
155156
pocketDataAdaptor.delegate = pocketViewModel
156157

Client/Frontend/Home/Pocket/PocketViewModel.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,17 @@ class PocketViewModel {
2929
private var dataAdaptor: PocketDataAdaptor
3030
private var pocketStoriesViewModels = [PocketStandardCellViewModel]()
3131
private var wallpaperManager: WallpaperManager
32+
private var prefs: Prefs
3233

3334
init(pocketDataAdaptor: PocketDataAdaptor,
3435
isZeroSearch: Bool = false,
3536
theme: Theme,
37+
prefs: Prefs,
3638
wallpaperManager: WallpaperManager) {
3739
self.dataAdaptor = pocketDataAdaptor
3840
self.isZeroSearch = isZeroSearch
3941
self.theme = theme
42+
self.prefs = prefs
4043
self.wallpaperManager = wallpaperManager
4144
}
4245

@@ -119,7 +122,7 @@ class PocketViewModel {
119122
}
120123

121124
// MARK: HomeViewModelProtocol
122-
extension PocketViewModel: HomepageViewModelProtocol, FeatureFlaggable {
125+
extension PocketViewModel: HomepageViewModelProtocol {
123126
var sectionType: HomepageSectionType {
124127
return .pocket
125128
}
@@ -184,10 +187,8 @@ extension PocketViewModel: HomepageViewModelProtocol, FeatureFlaggable {
184187
}
185188

186189
var isEnabled: Bool {
187-
// For Pocket, the user preference check returns a user preference if it exists in
188-
// UserDefaults, and, if it does not, it will return a default preference based on
189-
// a (nimbus pocket section enabled && Pocket.isLocaleSupported) check
190-
return featureFlags.isFeatureEnabled(.pocket, checking: .buildAndUser)
190+
let isFeatureEnabled = prefs.boolForKey(PrefsKeys.UserFeatureFlagPrefs.ASPocketStories) ?? true
191+
return isFeatureEnabled && PocketProvider.islocaleSupported(Locale.current.identifier)
191192
}
192193

193194
var hasData: Bool {

Client/Frontend/Settings/HomepageSettings/HomePageSettingViewController.swift

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class HomePageSettingViewController: SettingsTableViewController, FeatureFlaggab
2929
}
3030

3131
var isPocketSectionEnabled: Bool {
32-
return featureFlags.isFeatureEnabled(.pocket, checking: .buildOnly)
32+
return PocketProvider.islocaleSupported(Locale.current.identifier)
3333
}
3434

3535
var isHistoryHighlightsSectionEnabled: Bool {
@@ -133,11 +133,13 @@ class HomePageSettingViewController: SettingsTableViewController, FeatureFlaggab
133133
PocketAppName.shortName.rawValue)
134134

135135
let pocketSetting = BoolSetting(
136-
with: .pocket,
137-
titleText: NSAttributedString(string: .Settings.Homepage.CustomizeFirefoxHome.ThoughtProvokingStories),
138-
statusText: NSAttributedString(string: pocketStatusText)) { [weak self] _ in
139-
self?.tableView.reloadData()
140-
}
136+
prefs: profile.prefs,
137+
theme: themeManager.currentTheme,
138+
prefKey: PrefsKeys.UserFeatureFlagPrefs.ASPocketStories,
139+
defaultValue: true,
140+
titleText: .Settings.Homepage.CustomizeFirefoxHome.ThoughtProvokingStories,
141+
statusText: pocketStatusText
142+
)
141143

142144
let jumpBackInSetting = BoolSetting(with: .jumpBackIn,
143145
titleText: NSAttributedString(string: .Settings.Homepage.CustomizeFirefoxHome.JumpBackIn))

Client/Nimbus/NimbusFeatureFlagLayer.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ final class NimbusFeatureFlagLayer {
2323
return checkCredentialAutofillCoordinatorRefactorFeature(from: nimbus)
2424

2525
case .jumpBackIn,
26-
.pocket,
2726
.recentlySaved,
2827
.historyHighlights,
2928
.topSites:
@@ -117,7 +116,6 @@ final class NimbusFeatureFlagLayer {
117116
case .jumpBackIn: nimbusID = HomeScreenSection.jumpBackIn
118117
case .recentlySaved: nimbusID = HomeScreenSection.recentlySaved
119118
case .historyHighlights: nimbusID = HomeScreenSection.recentExplorations
120-
case .pocket: nimbusID = HomeScreenSection.pocket
121119
default: return false
122120
}
123121

@@ -173,10 +171,6 @@ final class NimbusFeatureFlagLayer {
173171
return config.configuration.version.rawValue
174172
}
175173

176-
private func checkNimbusForPocketSponsoredStoriesFeature(using nimbus: FxNimbus) -> Bool {
177-
return nimbus.features.homescreenFeature.value().pocketSponsoredStories
178-
}
179-
180174
private func checkReduxIntegrationFeature(from nimbus: FxNimbus) -> Bool {
181175
let config = nimbus.features.reduxIntegrationFeature.value()
182176
return config.enabled

Client/Telemetry/TelemetryWrapper.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ class TelemetryWrapper: TelemetryWrapperProtocol, FeatureFlaggable {
214214
func recordFinishedLaunchingPreferenceMetrics(notification: NSNotification) {
215215
guard let profile = self.profile else { return }
216216
// Pocket stories visible
217-
if let pocketStoriesVisible = profile.prefs.boolForKey(PrefsKeys.FeatureFlags.ASPocketStories) {
217+
if let pocketStoriesVisible = profile.prefs.boolForKey(PrefsKeys.UserFeatureFlagPrefs.ASPocketStories) {
218218
GleanMetrics.FirefoxHomePage.pocketStoriesVisible.set(pocketStoriesVisible)
219219
} else {
220220
GleanMetrics.FirefoxHomePage.pocketStoriesVisible.set(true)
@@ -324,7 +324,8 @@ class TelemetryWrapper: TelemetryWrapperProtocol, FeatureFlaggable {
324324
let isRecentlySavedEnabled = featureFlags.isFeatureEnabled(.recentlySaved, checking: .buildAndUser)
325325
GleanMetrics.Preferences.recentlySaved.set(isRecentlySavedEnabled)
326326

327-
let isPocketEnabled = featureFlags.isFeatureEnabled(.pocket, checking: .buildAndUser)
327+
let isFeatureEnabled = prefs.boolForKey(PrefsKeys.UserFeatureFlagPrefs.ASPocketStories) ?? true
328+
let isPocketEnabled = isFeatureEnabled && PocketProvider.islocaleSupported(Locale.current.identifier)
328329
GleanMetrics.Preferences.pocket.set(isPocketEnabled)
329330

330331
let startAtHomeOption = prefs.stringForKey(PrefsKeys.UserFeatureFlagPrefs.StartAtHome) ?? StartAtHomeSetting.afterFourHours.rawValue

Providers/Pocket/PocketProvider.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class PocketProvider: PocketStoriesProviding, FeatureFlaggable, URLCaching {
3333
private static let SupportedLocales = ["en_CA", "en_US", "en_GB", "en_ZA", "de_DE", "de_AT", "de_CH"]
3434

3535
private let pocketGlobalFeed: String
36+
private var prefs: Prefs
3637

3738
static let GlobalFeed = "https://getpocket.cdn.mozilla.net/v3/firefox/global-recs"
3839
static let MoreStoriesURL = {
@@ -45,8 +46,10 @@ class PocketProvider: PocketStoriesProviding, FeatureFlaggable, URLCaching {
4546
}()
4647

4748
// Allow endPoint to be overriden for testing
48-
init(endPoint: String = PocketProvider.GlobalFeed) {
49+
init(endPoint: String = PocketProvider.GlobalFeed,
50+
prefs: Prefs) {
4951
self.pocketGlobalFeed = endPoint
52+
self.prefs = prefs
5053
}
5154

5255
var urlCache: URLCache {
@@ -65,7 +68,7 @@ class PocketProvider: PocketStoriesProviding, FeatureFlaggable, URLCaching {
6568

6669
// Fetch items from the global pocket feed
6770
func fetchStories(items: Int, completion: @escaping (StoryResult) -> Void) {
68-
let isFeatureEnabled = featureFlags.isFeatureEnabled(.pocket, checking: .buildOnly)
71+
let isFeatureEnabled = prefs.boolForKey(PrefsKeys.UserFeatureFlagPrefs.ASPocketStories) ?? true
6972
let isCurrentLocaleSupported = PocketProvider.islocaleSupported(Locale.current.identifier)
7073

7174
// Check if we should use mock data

Shared/Prefs.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ public struct PrefsKeys {
6868

6969
// For ease of use, please list keys alphabetically.
7070
public struct FeatureFlags {
71-
public static let ASPocketStories = "ASPocketStoriesUserPrefsKey"
7271
public static let CustomWallpaper = "CustomWallpaperUserPrefsKey"
7372
public static let FirefoxSuggest = "FirefoxSuggest"
7473
public static let HistoryHighlightsSection = "HistoryHighlightsSectionUserPrefsKey"
@@ -81,6 +80,7 @@ public struct PrefsKeys {
8180
}
8281

8382
public struct UserFeatureFlagPrefs {
83+
public static let ASPocketStories = "ASPocketStoriesUserPrefsKey"
8484
public static let SponsoredShortcuts = "SponsoredShortcutsUserPrefsKey"
8585
public static let StartAtHome = "StartAtHomeUserPrefsKey"
8686
}

Tests/ClientTests/FeatureFlagManagerTests.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ class FeatureFlagManagerTests: XCTestCase, FeatureFlaggable {
4646
XCTAssertTrue(featureFlags.isFeatureEnabled(.inactiveTabs, checking: .userOnly))
4747
XCTAssertTrue(featureFlags.isFeatureEnabled(.jumpBackIn, checking: .buildOnly))
4848
XCTAssertTrue(featureFlags.isFeatureEnabled(.jumpBackIn, checking: .userOnly))
49-
XCTAssertTrue(featureFlags.isFeatureEnabled(.pocket, checking: .buildOnly))
50-
XCTAssertTrue(featureFlags.isFeatureEnabled(.pocket, checking: .userOnly))
5149
XCTAssertTrue(featureFlags.isFeatureEnabled(.recentlySaved, checking: .buildOnly))
5250
XCTAssertTrue(featureFlags.isFeatureEnabled(.recentlySaved, checking: .userOnly))
5351
XCTAssertTrue(featureFlags.isFeatureEnabled(.reportSiteIssue, checking: .buildOnly))

Tests/ClientTests/Frontend/Home/Pocket/PocketFeedTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import UIKit
66
import GCDWebServers
7+
import Shared
78
import XCTest
89

910
@testable import Client
@@ -41,7 +42,7 @@ class PocketStoriesTests: XCTestCase {
4142

4243
func testPocketStoriesCaching() {
4344
let expect = expectation(description: "Pocket")
44-
let pocketFeed = PocketProvider(endPoint: pocketAPI)
45+
let pocketFeed = PocketProvider(endPoint: pocketAPI, prefs: MockProfilePrefs())
4546
let feedNumber = 11
4647

4748
pocketFeed.fetchStories(items: feedNumber) { result in

Tests/ClientTests/Frontend/Home/Pocket/PocketViewModelTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ final class PocketViewModelTests: XCTestCase, FeatureFlaggable {
3838
}
3939

4040
func testFeatureFlagDisablesSection() {
41-
featureFlags.set(feature: .pocket, to: false)
41+
profile.prefs.setBool(false, forKey: PrefsKeys.UserFeatureFlagPrefs.ASPocketStories)
4242
let subject = createSubject()
4343
XCTAssertFalse(subject.isEnabled)
4444
}
@@ -218,6 +218,7 @@ extension PocketViewModelTests {
218218
let subject = PocketViewModel(pocketDataAdaptor: adaptor,
219219
isZeroSearch: isZeroSearch,
220220
theme: LightTheme(),
221+
prefs: profile.prefs,
221222
wallpaperManager: WallpaperManager())
222223
trackForMemoryLeaks(subject, file: file, line: line)
223224
return subject

nimbus-features/homescreenFeature.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ features:
1313
"jump-back-in": true,
1414
"recently-saved": true,
1515
"recent-explorations": true,
16-
"pocket": true
1716
}
1817
pocket-sponsored-stories:
1918
description: >
@@ -29,7 +28,6 @@ features:
2928
"jump-back-in": true,
3029
"recently-saved": true,
3130
"recent-explorations": true,
32-
"pocket": true
3331
},
3432
"pocket-sponsored-stories": true
3533
}
@@ -40,7 +38,6 @@ features:
4038
"jump-back-in": true,
4139
"recently-saved": true,
4240
"recent-explorations": true,
43-
"pocket": true
4441
},
4542
"pocket-sponsored-stories": false
4643
}
@@ -57,5 +54,3 @@ enums:
5754
description: The tabs the user was looking immediately before being interrupted.
5855
recent-explorations:
5956
description: The tab groups
60-
pocket:
61-
description: The pocket section. This should only be available in the US.

0 commit comments

Comments
 (0)