Skip to content

Commit b1dd374

Browse files
sla8cstaskus
andauthored
Disable Local Notifications and Flow for Blogging Reminders (#19611)
* update SiteStatsPinnedItemStore.swift and added unittest to remove blogging reminders when feature not enabled * sync needed changes PR 19590 * updated Post code to abide by FeatureFlag blogging reminders * NotificationSettingDetailsViewController.swift - Blogging reminders row appearance determined by FeatureFlag for blogging reminders * FeatureFlag.swift blogging reminders now depends on NotificationFilteringService * update RELEASE-NOTES.txt * Update release note Co-authored-by: Povilas Staskus <[email protected]>
1 parent e474845 commit b1dd374

File tree

8 files changed

+63
-25
lines changed

8 files changed

+63
-25
lines changed

RELEASE-NOTES.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
21.3
22
-----
3-
* [*] [internal] Weekly roundup notifications and scheduling can be turned off for WordPress as part of Jetpack focus behind a feature flag. [#19590]
3+
* [*] [internal] Blogging Reminders notifications and scheduling can be turned off for WordPress as part of Jetpack focus behind a feature flag. [#19611]
4+
* [*] [internal] Weekly Roundup notifications and scheduling can be turned off for WordPress as part of Jetpack focus behind a feature flag. [#19590]
45
* [*] Fixed a minor UI issue where the segmented control under My SIte was being clipped when "Home" is selected. [#19595]
56

67
21.2

WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ enum FeatureFlag: Int, CaseIterable, OverrideableFlag {
6868
case .milestoneNotifications:
6969
return true
7070
case .bloggingReminders:
71-
return true
71+
return !NotificationFilteringService().shouldFilterWordPressNotifications()
7272
case .siteIconCreator:
7373
return BuildConfiguration.current != .appStore
7474
case .weeklyRoundup:

WordPress/Classes/ViewRelated/Blog/Blogging Reminders/BloggingRemindersFlow.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ class BloggingRemindersFlow {
1111
delegate: BloggingRemindersFlowDelegate? = nil,
1212
onDismiss: DismissClosure? = nil) {
1313

14+
guard Feature.enabled(.bloggingReminders) else {
15+
return
16+
}
17+
1418
guard alwaysShow || !hasShownWeeklyRemindersFlow(for: blog) else {
1519
return
1620
}

WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationSettingDetailsViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ class NotificationSettingDetailsViewController: UITableViewController {
143143
// Switch on stream type to provide descriptive text in footer for more context
144144
switch stream.kind {
145145
case .Device:
146-
if let blog = settings.blog {
146+
if FeatureFlag.bloggingReminders.enabled, let blog = settings.blog {
147147
// This should only be added for the device push notifications settings view
148148
rows.append(TextSettingsRow(kind: .Text, description: NSLocalizedString("Blogging Reminders", comment: "Label for the blogging reminders setting"), value: schedule(for: blog), onTap: { [weak self] in
149149
self?.presentBloggingRemindersFlow()

WordPress/Classes/ViewRelated/Post/PostEditor+Publish.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ extension PublishingEditor {
517517

518518
PostCoordinator.shared.save(post)
519519

520-
dismissOrPopView(presentBloggingReminders: true)
520+
dismissOrPopView(presentBloggingReminders: FeatureFlag.bloggingReminders.enabled)
521521

522522
self.postEditorStateContext.updated(isBeingPublished: false)
523523
}

WordPress/Classes/ViewRelated/Stats/Insights/SiteStatsPinnedItemStore.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import Foundation
44
protocol SiteStatsPinnable { /* not implemented */ }
55

66
final class SiteStatsPinnedItemStore {
7-
private lazy var items: [SiteStatsPinnable] = {
8-
return [
9-
GrowAudienceCell.HintType.social,
10-
GrowAudienceCell.HintType.bloggingReminders,
11-
GrowAudienceCell.HintType.readerDiscover,
12-
InsightType.customize
13-
]
7+
private(set) lazy var items: [SiteStatsPinnable] = {
8+
return FeatureFlag.bloggingReminders.enabled ?
9+
[GrowAudienceCell.HintType.social,
10+
GrowAudienceCell.HintType.bloggingReminders,
11+
GrowAudienceCell.HintType.readerDiscover,
12+
InsightType.customize] :
13+
[GrowAudienceCell.HintType.social,
14+
GrowAudienceCell.HintType.readerDiscover,
15+
InsightType.customize]
1416
}()
1517
private let lowSiteViewsCountThreshold = 3000
1618
private let siteId: NSNumber

WordPress/WordPress.xcodeproj/project.pbxproj

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2909,13 +2909,14 @@
29092909
DCF892CD282FA3BB00BB71E1 /* SiteStatsImmuTableRows.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCF892CB282FA3BB00BB71E1 /* SiteStatsImmuTableRows.swift */; };
29102910
DCF892D0282FA42A00BB71E1 /* SiteStatsImmuTableRowsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCF892CF282FA42A00BB71E1 /* SiteStatsImmuTableRowsTests.swift */; };
29112911
DCF892D2282FA45500BB71E1 /* StatsMockDataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCF892D1282FA45500BB71E1 /* StatsMockDataLoader.swift */; };
2912-
DCFC6A212924FD780062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2913-
DCFC6A222924FD790062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2914-
DCFC6A232924FD790062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2915-
DCFC6A242924FD7A0062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2916-
DCFC6A252924FD840062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2917-
DCFC6A262924FD840062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2918-
DCFC6A272924FD850062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2912+
DCFC6A29292523D20062D65B /* SiteStatsPinnedItemStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCFC6A28292523D20062D65B /* SiteStatsPinnedItemStoreTests.swift */; };
2913+
DCFC6A2A292524560062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2914+
DCFC6A2B292524590062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2915+
DCFC6A2C2925245B0062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2916+
DCFC6A2D292524620062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2917+
DCFC6A2E292524640062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2918+
DCFC6A2F292524670062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
2919+
DCFC6A30292524690062D65B /* NotificationFilteringService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010459E529153FFF000C7778 /* NotificationFilteringService.swift */; };
29192920
DF6D9E10C4CEE05331B4DAE5 /* Pods_WordPressNotificationServiceExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3B8D9C4DCD93C57C2B98CDC /* Pods_WordPressNotificationServiceExtension.framework */; };
29202921
E100C6BB1741473000AE48D8 /* WordPress-11-12.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = E100C6BA1741472F00AE48D8 /* WordPress-11-12.xcmappingmodel */; };
29212922
E10290741F30615A00DAC588 /* Role.swift in Sources */ = {isa = PBXBuildFile; fileRef = E10290731F30615A00DAC588 /* Role.swift */; };
@@ -7981,6 +7982,7 @@
79817982
DCF892CB282FA3BB00BB71E1 /* SiteStatsImmuTableRows.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteStatsImmuTableRows.swift; sourceTree = "<group>"; };
79827983
DCF892CF282FA42A00BB71E1 /* SiteStatsImmuTableRowsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteStatsImmuTableRowsTests.swift; sourceTree = "<group>"; };
79837984
DCF892D1282FA45500BB71E1 /* StatsMockDataLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsMockDataLoader.swift; sourceTree = "<group>"; };
7985+
DCFC6A28292523D20062D65B /* SiteStatsPinnedItemStoreTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SiteStatsPinnedItemStoreTests.swift; sourceTree = "<group>"; };
79847986
E100C6BA1741472F00AE48D8 /* WordPress-11-12.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = "WordPress-11-12.xcmappingmodel"; sourceTree = "<group>"; };
79857987
E10290731F30615A00DAC588 /* Role.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Role.swift; sourceTree = "<group>"; };
79867988
E102B78F1E714F24007928E8 /* RecentSitesService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentSitesService.swift; sourceTree = "<group>"; };
@@ -15406,6 +15408,7 @@
1540615408
DC772AFD28200A3600664C02 /* stats-visits-day-4.json */,
1540715409
DC772AFE28200A3600664C02 /* stats-visits-day-14.json */,
1540815410
DC772AFF28200A3600664C02 /* SiteStatsInsightViewModelTests.swift */,
15411+
DCFC6A28292523D20062D65B /* SiteStatsPinnedItemStoreTests.swift */,
1540915412
DC772B0028200A3600664C02 /* stats-visits-day-11.json */,
1541015413
);
1541115414
path = Insights;
@@ -19630,7 +19633,7 @@
1963019633
0107E0C928F97D5000DE87DB /* SiteListProvider.swift in Sources */,
1963119634
0107E0CA28F97D5000DE87DB /* HomeWidgetThisWeekData.swift in Sources */,
1963219635
0107E0CB28F97D5000DE87DB /* WordPressHomeWidgetAllTime.swift in Sources */,
19633-
DCFC6A272924FD850062D65B /* NotificationFilteringService.swift in Sources */,
19636+
DCFC6A2A292524560062D65B /* NotificationFilteringService.swift in Sources */,
1963419637
0107E0CC28F97D5000DE87DB /* KeyValueDatabase.swift in Sources */,
1963519638
0107E0CD28F97D5000DE87DB /* CocoaLumberjack.swift in Sources */,
1963619639
0107E0CE28F97D5000DE87DB /* ListRow.swift in Sources */,
@@ -21403,7 +21406,7 @@
2140321406
3F8B136D25D08F34004FAC0A /* HomeWidgetThisWeekData.swift in Sources */,
2140421407
3F5C86C025CA197500BABE64 /* WordPressHomeWidgetAllTime.swift in Sources */,
2140521408
3F6BC07E25B247A4007369D3 /* KeyValueDatabase.swift in Sources */,
21406-
DCFC6A232924FD790062D65B /* NotificationFilteringService.swift in Sources */,
21409+
DCFC6A2E292524640062D65B /* NotificationFilteringService.swift in Sources */,
2140721410
3F1FD27B2548AE900060C53A /* CocoaLumberjack.swift in Sources */,
2140821411
3FCF66FB25CAF8E00047F337 /* ListRow.swift in Sources */,
2140921412
8323789828526E6D003F4443 /* AppConfiguration.swift in Sources */,
@@ -21496,7 +21499,7 @@
2149621499
83A1B19B28AFE47D00E737AC /* KeychainUtils.swift in Sources */,
2149721500
436110DD22C41AFD000773AD /* FeatureFlag.swift in Sources */,
2149821501
436110DC22C41ADB000773AD /* UIColor+MurielColors.swift in Sources */,
21499-
DCFC6A242924FD7A0062D65B /* NotificationFilteringService.swift in Sources */,
21502+
DCFC6A2D292524620062D65B /* NotificationFilteringService.swift in Sources */,
2150021503
170BEC8A239153160017AEC1 /* FeatureFlagOverrideStore.swift in Sources */,
2150121504
433ADC1B223B2A7E00ED9DE1 /* TextBundleWrapper.m in Sources */,
2150221505
4326191622FCB9F8003C7642 /* MurielColor.swift in Sources */,
@@ -21626,7 +21629,7 @@
2162621629
74021A00202E12F4006CC39F /* MediaUploadOperation.swift in Sources */,
2162721630
74021A0E202E1358006CC39F /* Tracks.swift in Sources */,
2162821631
74BC35BA20499EEB00AC1525 /* RemotePostCategory+Extensions.swift in Sources */,
21629-
DCFC6A222924FD790062D65B /* NotificationFilteringService.swift in Sources */,
21632+
DCFC6A2F292524670062D65B /* NotificationFilteringService.swift in Sources */,
2163021633
74E44AD62031E85A00556205 /* ShareNoticeConstants.swift in Sources */,
2163121634
986FF29D2141971C005B28EC /* WPAnimatedBox.m in Sources */,
2163221635
986FF2A0214198D9005B28EC /* String+Ranges.swift in Sources */,
@@ -21702,7 +21705,7 @@
2170221705
8096210728E540D700940A5D /* FormatBarItemProviders.swift in Sources */,
2170321706
0107E11228FD7FE200DE87DB /* AppConfiguration.swift in Sources */,
2170421707
8096210828E540D700940A5D /* ShareSegueHandler.swift in Sources */,
21705-
DCFC6A252924FD840062D65B /* NotificationFilteringService.swift in Sources */,
21708+
DCFC6A2C2925245B0062D65B /* NotificationFilteringService.swift in Sources */,
2170621709
8096210928E540D700940A5D /* RemotePostCategory+Extensions.swift in Sources */,
2170721710
8096210A28E540D700940A5D /* WPReusableTableViewCells.swift in Sources */,
2170821711
8096210B28E540D700940A5D /* WPAnimatedBox.m in Sources */,
@@ -21778,7 +21781,7 @@
2177821781
8096216828E55C9400940A5D /* Tracks.swift in Sources */,
2177921782
0107E11328FD7FE300DE87DB /* AppConfiguration.swift in Sources */,
2178021783
8096216928E55C9400940A5D /* RemotePostCategory+Extensions.swift in Sources */,
21781-
DCFC6A262924FD840062D65B /* NotificationFilteringService.swift in Sources */,
21784+
DCFC6A2B292524590062D65B /* NotificationFilteringService.swift in Sources */,
2178221785
8096216A28E55C9400940A5D /* ShareNoticeConstants.swift in Sources */,
2178321786
8096216B28E55C9400940A5D /* WPAnimatedBox.m in Sources */,
2178421787
8096216C28E55C9400940A5D /* String+Ranges.swift in Sources */,
@@ -21918,7 +21921,7 @@
2191821921
B504F5F51C9C2BD000F8B1C6 /* Tracks+ShareExtension.swift in Sources */,
2191921922
74D06FE81FE076F700AF1788 /* FormatBarItemProviders.swift in Sources */,
2192021923
745EAF452003FD050066F415 /* ShareSegueHandler.swift in Sources */,
21921-
DCFC6A212924FD780062D65B /* NotificationFilteringService.swift in Sources */,
21924+
DCFC6A30292524690062D65B /* NotificationFilteringService.swift in Sources */,
2192221925
74BC35B920499EEB00AC1525 /* RemotePostCategory+Extensions.swift in Sources */,
2192321926
7455836B201A216C007809BB /* WPReusableTableViewCells.swift in Sources */,
2192421927
986FF29E2141971D005B28EC /* WPAnimatedBox.m in Sources */,
@@ -22040,6 +22043,7 @@
2204022043
4A266B91282B13A70089CF3D /* CoreDataTestCase.swift in Sources */,
2204122044
24B1AE3124FEC79900B9F334 /* RemoteFeatureFlagTests.swift in Sources */,
2204222045
E135965D1E7152D1006C6606 /* RecentSitesServiceTests.swift in Sources */,
22046+
DCFC6A29292523D20062D65B /* SiteStatsPinnedItemStoreTests.swift in Sources */,
2204322047
D88A64AC208D9B09008AE9BC /* StockPhotosPageableTests.swift in Sources */,
2204422048
40C403F82215D88100E8C894 /* TopViewedStatsTests.swift in Sources */,
2204522049
0148CC2B2859C87000CF5D96 /* BlogServiceMock.swift in Sources */,
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import XCTest
2+
@testable import WordPress
3+
4+
final class SiteStatsPinnedItemStoreTests: XCTestCase {
5+
6+
let store = SiteStatsPinnedItemStore(siteId: 1)
7+
let featureFlags = FeatureFlagOverrideStore()
8+
9+
func testPinnedItemsShouldContainBloggingRemindersWhenFeatureFlagEnabled() throws {
10+
try featureFlags.override(FeatureFlag.bloggingReminders, withValue: true)
11+
XCTAssertTrue(itemsContainsBloggingReminders())
12+
}
13+
14+
func testPinnedItemsShouldNotContainBloggingRemindersWhenFeatureFlagDisabled() throws {
15+
try featureFlags.override(FeatureFlag.bloggingReminders, withValue: false)
16+
XCTAssertFalse(itemsContainsBloggingReminders())
17+
}
18+
19+
func itemsContainsBloggingReminders() -> Bool {
20+
return store.items.contains(where: { item in
21+
if case is GrowAudienceCell.HintType = item {
22+
return item as! GrowAudienceCell.HintType == .bloggingReminders
23+
}
24+
return false
25+
})
26+
}
27+
}

0 commit comments

Comments
 (0)