Skip to content

Commit 679fc8b

Browse files
Fix: Error in frequency tracker's logic
1 parent c9472e4 commit 679fc8b

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

WordPress/Classes/ViewRelated/Jetpack/Branding/Coordinator/JetpackOverlayFrequencyTracker.swift

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,26 +37,19 @@ class JetpackOverlayFrequencyTracker {
3737
}
3838

3939
func shouldShow() -> Bool {
40-
guard let lastSavedGenericDate = lastSavedGenericDate,
41-
let lastSavedSourceDate = lastSavedSourceDate else {
42-
return true
43-
}
44-
4540
switch source {
4641
case .stats:
4742
fallthrough
4843
case .notifications:
4944
fallthrough
5045
case .reader:
51-
// Check frequencies for features
52-
return frequenciesPassed(lastSavedGenericDate: lastSavedGenericDate,
53-
lastSavedSourceDate: lastSavedSourceDate)
46+
return frequenciesPassed()
5447
case .card:
55-
return true // Always show for card
48+
return true
5649
case .login:
5750
fallthrough
5851
case .appOpen:
59-
return false // Show once for login and app open
52+
return lastSavedSourceDate == nil
6053
}
6154
}
6255

@@ -66,12 +59,24 @@ class JetpackOverlayFrequencyTracker {
6659
lastSavedGenericDate = date
6760
}
6861

69-
private func frequenciesPassed(lastSavedGenericDate: Date, lastSavedSourceDate: Date) -> Bool {
70-
let secondsSinceLastSavedSourceDate = lastSavedSourceDate.timeIntervalSinceNow
62+
private func frequenciesPassed() -> Bool {
63+
guard let lastSavedGenericDate = lastSavedGenericDate else {
64+
return true // First overlay ever
65+
}
7166
let secondsSinceLastSavedGenericDate = lastSavedGenericDate.timeIntervalSinceNow
72-
let featureSpecificFreqPassed = secondsSinceLastSavedSourceDate > frequencyConfig.featureSpecificInSeconds
7367
let generalFreqPassed = secondsSinceLastSavedGenericDate > frequencyConfig.generalInSeconds
74-
return generalFreqPassed && featureSpecificFreqPassed
68+
if generalFreqPassed == false {
69+
return false // An overlay was shown recently so we can't show one now
70+
}
71+
72+
guard let lastSavedSourceDate = lastSavedSourceDate else {
73+
return true // This specific overlay was never shown, so we can show it
74+
}
75+
76+
let secondsSinceLastSavedSourceDate = lastSavedSourceDate.timeIntervalSinceNow
77+
let featureSpecificFreqPassed = secondsSinceLastSavedSourceDate > frequencyConfig.featureSpecificInSeconds
78+
// Check if this specific overlay was shown recently
79+
return featureSpecificFreqPassed
7580
}
7681
}
7782

WordPress/WordPressTest/JetpackOverlayFrequencyTrackerTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ final class JetpackOverlayFrequencyTrackerTests: XCTestCase {
133133

134134
// When & Then
135135
XCTAssertFalse(statsTracker.shouldShow()) // Before generic frequency have passed
136-
XCTAssertFalse(statsTracker.shouldShow()) // Before generic frequency have passed
136+
XCTAssertFalse(readerTracker.shouldShow()) // Before generic frequency have passed
137137

138138
// Given
139139
let threeDaysAgo = Date(timeInterval: Constants.threeDaysInSeconds, since: Date())

0 commit comments

Comments
 (0)