diff --git a/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+Callout.swift b/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+Callout.swift index 41cae5be3fb..b5017195e91 100644 --- a/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+Callout.swift +++ b/Sources/Brave/Frontend/Browser/BrowserViewController/BrowserViewController+Callout.swift @@ -53,8 +53,6 @@ extension BrowserViewController { presentDefaultBrowserScreenCallout() case .rewards: presentBraveRewardsScreenCallout(skipSafeGuards: skipSafeGuards) - case .blockCookieConsentNotices: - presentCookieNotificationBlockingCallout(skipSafeGuards: skipSafeGuards) case .vpnPromotion: presentVPNPromotionCallout(skipSafeGuards: skipSafeGuards) case .vpnLinkReceipt: @@ -183,28 +181,6 @@ extension BrowserViewController { present(controller, animated: true) } - private func presentCookieNotificationBlockingCallout(skipSafeGuards: Bool = false) { - if !skipSafeGuards { - // Show Cookie Block Callout if setting is enabled and on second launch - // After Basic onboarding is shown - guard !Preferences.General.isFirstLaunch.value, - !FilterListStorage.shared.isEnabled(for: FilterList.cookieConsentNoticesComponentID), - Preferences.FullScreenCallout.omniboxCalloutCompleted.value else { - return - } - } - - let popover = PopoverController( - contentController: CookieNotificationBlockingConsentViewController(yesCallback: { - FilterListStorage.shared.enableFilterList(for: FilterList.cookieConsentNoticesComponentID, isEnabled: true) - }), - contentSizeBehavior: .preferredContentSize) - popover.addsConvenientDismissalMargins = false - - isOnboardingOrFullScreenCalloutPresented = true - popover.present(from: topToolbar.locationView.shieldsButton, on: self) - } - private func presentVPNPromotionCallout(skipSafeGuards: Bool = false) { if !skipSafeGuards { // Onboarding should be completed to show callouts diff --git a/Sources/Brave/Frontend/Settings/Debug/RetentionPreferencesDebugMenuViewController.swift b/Sources/Brave/Frontend/Settings/Debug/RetentionPreferencesDebugMenuViewController.swift index 1b1992a35ab..7ebbea1d8c6 100644 --- a/Sources/Brave/Frontend/Settings/Debug/RetentionPreferencesDebugMenuViewController.swift +++ b/Sources/Brave/Frontend/Settings/Debug/RetentionPreferencesDebugMenuViewController.swift @@ -159,14 +159,6 @@ class RetentionPreferencesDebugMenuViewController: TableViewController { } }, cellReuseId: "DefaultBrowserCalloutCell"), - .boolRow( - title: "Cookie consent notice blocking callout shown", - detailText: "Flag determining if callout to show the cookie consent blocking callout was shown", - toggleValue: Preferences.FullScreenCallout.blockCookieConsentNoticesCalloutCompleted.value, - valueChange: { - Preferences.FullScreenCallout.blockCookieConsentNoticesCalloutCompleted.value = $0 - }, - cellReuseId: "CookieConsentNoticeBlockingCalloutCell"), ], footer: .title("These are the preferences that stored in preferences for determining the If certain elements are shown to user.") ) diff --git a/Sources/Brave/WebFilters/FilterListStorage.swift b/Sources/Brave/WebFilters/FilterListStorage.swift index a0f7ad3fb34..b28887ca4c9 100644 --- a/Sources/Brave/WebFilters/FilterListStorage.swift +++ b/Sources/Brave/WebFilters/FilterListStorage.swift @@ -210,7 +210,10 @@ private extension AdblockFilterListCatalogEntry { /// This method returns the default value for this filter list if the user does not manually toggle it. /// - Warning: Make sure you use `componentID` to identify the filter list, as `uuid` will be deprecated in the future. var defaultToggle: Bool { - let componentIDsToOverride = [FilterList.mobileAnnoyancesComponentID] + let componentIDsToOverride = [ + FilterList.mobileAnnoyancesComponentID, + FilterList.cookieConsentNoticesComponentID + ] if componentIDsToOverride.contains(componentId) { return true diff --git a/Sources/BraveStrings/BraveStrings.swift b/Sources/BraveStrings/BraveStrings.swift index 11a56ee61b3..f61e67ab615 100644 --- a/Sources/BraveStrings/BraveStrings.swift +++ b/Sources/BraveStrings/BraveStrings.swift @@ -4731,32 +4731,6 @@ extension Strings { value: "Block Cookie Consent Notices", comment: "A title for a toggle that allows user to block cookie consent notices" ) - - /// A title for a popup that notifies the user that we can block cookie consent notices - public static let blockCookieConsentNoticesPopupTitle = NSLocalizedString( - "BlockCookieConsentNoticesPopupTitle", - tableName: "BraveShared", bundle: .module, - value: "Tired of cookie consent notices?", - comment: "A title for a popup that notifies the user that we can block cookie consent notices" - ) - /// A description for a popup that notifies the user that we can block cookie consent notices - public static let blockCookieConsentNoticesPopupDescription = NSLocalizedString( - "BlockCookieConsentNoticesPopupDescription", tableName: "BraveShared", bundle: .module, - value: "Brave already blocks third-party cookies. We can block cookie consent notices, too.", - comment: "A description for a popup that notifies the user that we can block cookie consent notices" - ) - /// An action (button title) that enables cookie consent blocking and dismisses the popup. - public static let yesBlockCookieConsentNotices = NSLocalizedString( - "YesBlockCookieConsentNotices", tableName: "BraveShared", bundle: .module, - value: "Yes, block cookie consent notices", - comment: "An action (button title) that enables cookie consent blocking and dismisses the popup" - ) - /// An action (button title) that does not block cookie consent notices and dismisses the popup - public static let noThanks = NSLocalizedString( - "NoThanks", tableName: "BraveShared", bundle: .module, - value: "No thanks", - comment: "An action (button title) that does not block cookie consent notices and dismisses the popup" - ) } // MARK: Hotkey Titles diff --git a/Sources/BraveUI/Images/GIFImage.swift b/Sources/BraveUI/Images/GIFImage.swift deleted file mode 100644 index 570c40b51db..00000000000 --- a/Sources/BraveUI/Images/GIFImage.swift +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 2022 The Brave Authors. All rights reserved. -// 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/. - -import UIKit -import SwiftUI - -public struct GIFImage: UIViewRepresentable { - private let asset: NSDataAsset - private let animationRepeatCount: Int - private let animate: Bool - - public init(asset: NSDataAsset, animationRepeatCount: Int = 1, animate: Bool) { - self.asset = asset - self.animationRepeatCount = animationRepeatCount - self.animate = animate - } - - public func makeUIView(context: Context) -> GIFImageView { - return GIFImageView(asset: asset) - } - - public func updateUIView(_ uiView: GIFImageView, context: Context) { - uiView.startAnimation(start: animate) - } -} - -public class GIFImageView: UIView, CAAnimationDelegate { - private var asset: NSDataAsset - private var animationRepeatCount: Int - - private let imageView = UIImageView() - private var firstFrame: UIImage? - private var lastFrame: UIImage? - private var framesCount: Int = 0 - private var animationStarted = false - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public init(asset: NSDataAsset, animationRepeatCount: Int = 1) { - self.asset = asset - self.animationRepeatCount = animationRepeatCount - - super.init(frame: .zero) - initView() - } - - public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - loadAsset() - } - - private func loadAsset() { - let frames = Self.getFramesFrom(asset: asset) - firstFrame = frames.first - lastFrame = frames.last - framesCount = frames.count - imageView.image = frames.first - imageView.animationImages = frames - imageView.animationRepeatCount = animationRepeatCount - } - - public override func layoutSubviews() { - super.layoutSubviews() - imageView.frame = bounds - self.addSubview(imageView) - } - - func startAnimation(start: Bool) { - if start { - imageView.image = lastFrame - imageView.startAnimating() - } else { - imageView.image = firstFrame - imageView.stopAnimating() - } - } - - private func initView() { - imageView.contentMode = .scaleAspectFit - loadAsset() - } - - /// Get `gif` image frames (an array of images) from an asset by its name - private class func getFramesFrom(asset: NSDataAsset) -> [UIImage] { - return getFrames(from: asset.data) - } - - /// Get `gif` image asset by its name. Will append `-dark` to the name when dark mode is enabled - private class func getAsset(name: String) -> NSDataAsset? { - switch UITraitCollection.current.userInterfaceStyle { - case .light, .unspecified: - return NSDataAsset(name: name, bundle: .module) - case .dark: - return NSDataAsset(name: [name, "dark"].joined(separator: "-"), bundle: .module) - @unknown default: - return NSDataAsset(name: name, bundle: .module) - } - } - - /// Get `gif` image frames (an array of images) from data - class func getFrames(from data: Data) -> [UIImage] { - guard let source = CGImageSourceCreateWithData(data as CFData, nil) else { - return [] - } - - let count = CGImageSourceGetCount(source) - let delays = (0.. [UIImage] in - guard let cgImage = CGImageSourceCreateImageAtIndex(source, index, nil) else { - return [] - } - let frame = UIImage(cgImage: cgImage) - let frameCount = delays[index] / gcd - - return (0.. UIImage in - return frame - } - } - } - - /// Return the greatest common divisor of two integers using recursive euklidean returning only an absolut value - /// https://github.com/raywenderlich/swift-algorithm-club/blob/master/GCD/README.markdown - private class func absoluteGCDEuklidean(_ firstValue: Int, _ secondValue: Int) -> Int { - let secondAbsolute = abs(secondValue) - let remainder = abs(firstValue) % secondAbsolute - if remainder != 0 { - return absoluteGCDEuklidean(secondAbsolute, remainder) - } else { - return secondAbsolute - } - } - - private class func delayForImage(at index: Int, source: CGImageSource) -> Double { - let defaultDelay = 1.0 - let cfProperties = CGImageSourceCopyPropertiesAtIndex(source, index, nil) - let gifPropertiesPointer = UnsafeMutablePointer.allocate(capacity: 0) - - defer { - gifPropertiesPointer.deallocate() - } - - let unsafePointer = Unmanaged.passUnretained(kCGImagePropertyGIFDictionary).toOpaque() - - guard CFDictionaryGetValueIfPresent(cfProperties, unsafePointer, gifPropertiesPointer) != false else { - return defaultDelay - } - - let gifProperties = unsafeBitCast(gifPropertiesPointer.pointee, to: CFDictionary.self) - var delayWrapper = unsafeBitCast(CFDictionaryGetValue( - gifProperties, - Unmanaged.passUnretained(kCGImagePropertyGIFUnclampedDelayTime).toOpaque() - ), to: AnyObject.self) - - if delayWrapper.doubleValue == 0 { - delayWrapper = unsafeBitCast(CFDictionaryGetValue( - gifProperties, - Unmanaged.passUnretained(kCGImagePropertyGIFDelayTime).toOpaque() - ), to: AnyObject.self) - } - - if let delay = delayWrapper as? Double, delay > 0 { - return delay - } else { - return defaultDelay - } - } -} diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/Contents.json b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/Contents.json deleted file mode 100644 index 73c00596a7f..00000000000 --- a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation-dark.dataset/Contents.json b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation-dark.dataset/Contents.json deleted file mode 100644 index bfd1edc2bfb..00000000000 --- a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation-dark.dataset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "data" : [ - { - "filename" : "dark-mode.gif", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation-dark.dataset/dark-mode.gif b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation-dark.dataset/dark-mode.gif deleted file mode 100644 index e47b0ef39b1..00000000000 Binary files a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation-dark.dataset/dark-mode.gif and /dev/null differ diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation.dataset/Contents.json b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation.dataset/Contents.json deleted file mode 100644 index 80761b73c3b..00000000000 --- a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation.dataset/Contents.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "data" : [ - { - "filename" : "light-mode.gif", - "idiom" : "universal", - "universal-type-identifier" : "com.compuserve.gif" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation.dataset/light-mode.gif b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation.dataset/light-mode.gif deleted file mode 100644 index c164bc84ab4..00000000000 Binary files a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-animation.dataset/light-mode.gif and /dev/null differ diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@2x-1.png b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@2x-1.png deleted file mode 100644 index 5ed325db209..00000000000 Binary files a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@2x-1.png and /dev/null differ diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@2x.png b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@2x.png deleted file mode 100644 index 679762f8675..00000000000 Binary files a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@2x.png and /dev/null differ diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@3x-1.png b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@3x-1.png deleted file mode 100644 index 47b0d7296ce..00000000000 Binary files a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@3x-1.png and /dev/null differ diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@3x.png b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@3x.png deleted file mode 100644 index 8e702d47ec2..00000000000 Binary files a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Background@3x.png and /dev/null differ diff --git a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Contents.json b/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Contents.json deleted file mode 100644 index 6a3731a6ffb..00000000000 --- a/Sources/Onboarding/Assets/Images.xcassets/CookieConsent/cookie-consent-background.imageset/Contents.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "Background@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "Background@2x-1.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "Background@3x.png", - "idiom" : "universal", - "scale" : "3x" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "filename" : "Background@3x-1.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "original" - } -} diff --git a/Sources/Onboarding/OnboardingPreferences.swift b/Sources/Onboarding/OnboardingPreferences.swift index 69b27e9741e..a8fb0f3e725 100644 --- a/Sources/Onboarding/OnboardingPreferences.swift +++ b/Sources/Onboarding/OnboardingPreferences.swift @@ -39,11 +39,6 @@ extension Preferences { extension Preferences { public final class FullScreenCallout { - /// Whether the block cookie consent notices callout is shown. - public static let blockCookieConsentNoticesCalloutCompleted = Option( - key: "fullScreenCallout.full-screen-cookie-consent-notices-callout-completed", - default: false) - /// Whether the bottom bar callout is shown. public static let bottomBarCalloutCompleted = Option( key: "fullScreenCallout.full-screen-bottom-bar-callout-completed", diff --git a/Sources/Onboarding/ProductNotifications/CookieNotificationBlockingConsentView.swift b/Sources/Onboarding/ProductNotifications/CookieNotificationBlockingConsentView.swift deleted file mode 100644 index d5ace344006..00000000000 --- a/Sources/Onboarding/ProductNotifications/CookieNotificationBlockingConsentView.swift +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2022 The Brave Authors. All rights reserved. -// 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/. - -import SwiftUI -import Strings -import DesignSystem -import BraveShared -import Growth -import BraveUI - -public struct CookieNotificationBlockingConsentView: View { - public typealias YesCallback = () -> Void - public static let contentHeight = 480.0 - public static let contentWidth = 344.0 - private static let gifHeight = 328.0 - private static let bottomSectionHeight = contentHeight - gifHeight - private static let textPadding = 16.0 - - private let animation = Animation.easeOut(duration: 0.5).delay(0) - private let transition = AnyTransition.scale(scale: 1.1).combined(with: .opacity) - - @Environment(\.presentationMode) @Binding private var presentationMode - @State private var showAnimation = false - public let onYesButtonPressed: YesCallback - - private var yesButton: some View { - Button(Strings.yesBlockCookieConsentNotices, - action: { - withAnimation(animation) { - self.showAnimation = true - } - - Task { @MainActor in - recordCookieListPromptP3A(answer: .tappedYes) - onYesButtonPressed() - // Allow the animation to play before dismissing - try await Task.sleep(seconds: 3.5) - self.dismiss() - } - } - ) - .buttonStyle(BraveFilledButtonStyle(size: .large)) - .multilineTextAlignment(.center) - .transition(transition) - } - - private var noButton: some View { - Button(Strings.noThanks) { - recordCookieListPromptP3A(answer: .tappedNoThanks) - self.dismiss() - } - .font(Font.body.weight(.semibold)) - .foregroundColor(.accentColor) - .multilineTextAlignment(.center) - .transition(transition) - } - - public var body: some View { - ScrollView { - VStack { - if let asset = cookieConsentAnimation { - content - .background( - GIFImage(asset: asset, animate: showAnimation) - .frame(width: Self.contentWidth, height: Self.gifHeight, alignment: .top), - alignment: .top - ) - } else { - content - } - - VStack(spacing: Self.textPadding) { - if !showAnimation { - yesButton - noButton - } - } - .padding(Self.textPadding) - } - } - .frame(width: Self.contentWidth, height: Self.contentHeight) - .background( - Image("cookie-consent-background", bundle: .module), - alignment: .bottomLeading - ) - .background(Color(UIColor.braveBackground)) - .onAppear { - recordCookieListPromptP3A(answer: .seen) - } - } - - private var content: some View { - VStack { - if !showAnimation { - VStack(spacing: Self.textPadding) { - Text(Strings.blockCookieConsentNoticesPopupTitle).font(.title) - Text(Strings.blockCookieConsentNoticesPopupDescription).font(.body) - } - .transition(transition) - .padding(Self.textPadding) - .padding(.top, 80) - .foregroundColor(Color(UIColor.braveLabel)) - .multilineTextAlignment(.center) - .fixedSize(horizontal: false, vertical: true) - } - } - .frame(width: Self.contentWidth) - .frame(minHeight: Self.gifHeight) - } - - private func dismiss() { - presentationMode.dismiss() - } - - private enum P3AAnswer: Int, CaseIterable { - case notSeen = 0 - case seen = 1 - case tappedNoThanks = 2 - case tappedYes = 3 - } - - private func recordCookieListPromptP3A(answer: P3AAnswer) { - // Q68 If you have viewed the cookie consent block prompt, how did you react? - UmaHistogramEnumeration("Brave.Shields.CookieListPrompt", sample: answer) - } - - private var cookieConsentAnimation: NSDataAsset? { - guard let asset = getAsset(name: "cookie-consent-animation") else { - assertionFailure() - return nil - } - - return asset - } - - /// Get `gif` image asset by its name. Will append `-dark` to the name when dark mode is enabled - private func getAsset(name: String) -> NSDataAsset? { - switch UITraitCollection.current.userInterfaceStyle { - case .light, .unspecified: - return NSDataAsset(name: name, bundle: .module) - case .dark: - return NSDataAsset(name: [name, "dark"].joined(separator: "-"), bundle: .module) - @unknown default: - return NSDataAsset(name: name, bundle: .module) - } - } -} - -#if DEBUG -struct CookieNotificationBlockingConsentView_Previews: PreviewProvider { - static var previews: some View { - CookieNotificationBlockingConsentView(onYesButtonPressed: {}) - } -} -#endif - -public class CookieNotificationBlockingConsentViewController: UIHostingController, PopoverContentComponent { - public init(yesCallback: @escaping CookieNotificationBlockingConsentView.YesCallback) { - super.init(rootView: CookieNotificationBlockingConsentView(onYesButtonPressed: yesCallback)) - - self.preferredContentSize = CGSize( - width: CookieNotificationBlockingConsentView.contentWidth, - height: CookieNotificationBlockingConsentView.contentHeight - ) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public override func viewDidLoad() { - super.viewDidLoad() - view.backgroundColor = UIColor.braveBackground - } -} - -extension Task where Success == Never, Failure == Never { - public static func sleep(seconds: TimeInterval) async throws { - try await sleep(nanoseconds: NSEC_PER_MSEC * UInt64(seconds * 1000)) - } -} diff --git a/Sources/Onboarding/ProductNotifications/FullScreenCalloutManager.swift b/Sources/Onboarding/ProductNotifications/FullScreenCalloutManager.swift index d2b84f5cfbc..c49f64f57e7 100644 --- a/Sources/Onboarding/ProductNotifications/FullScreenCalloutManager.swift +++ b/Sources/Onboarding/ProductNotifications/FullScreenCalloutManager.swift @@ -22,7 +22,7 @@ public enum FullScreenCalloutType: CaseIterable { - Cookie Notification - VPN Link Receipt */ - case p3a, vpnUpdateBilling, bottomBar, vpnPromotion, defaultBrowser, rewards, blockCookieConsentNotices, vpnLinkReceipt + case p3a, vpnUpdateBilling, bottomBar, vpnPromotion, defaultBrowser, rewards, vpnLinkReceipt /// The number of days passed to show certain type of callout var period: Int { @@ -33,7 +33,6 @@ public enum FullScreenCalloutType: CaseIterable { case .vpnPromotion: return 4 case .defaultBrowser: return 10 case .rewards: return 8 - case .blockCookieConsentNotices: return 0 case .vpnLinkReceipt: return 0 } } @@ -53,8 +52,6 @@ public enum FullScreenCalloutType: CaseIterable { return Preferences.DefaultBrowserIntro.completed case .rewards: return Preferences.FullScreenCallout.rewardsCalloutCompleted - case .blockCookieConsentNotices: - return Preferences.FullScreenCallout.blockCookieConsentNoticesCalloutCompleted case .vpnLinkReceipt: return Preferences.Onboarding.vpnLinkReceiptShown }