diff --git a/DuckDuckGo/MainViewController+Segues.swift b/DuckDuckGo/MainViewController+Segues.swift index 844ec1dfce6..33511a3518f 100644 --- a/DuckDuckGo/MainViewController+Segues.swift +++ b/DuckDuckGo/MainViewController+Segues.swift @@ -277,7 +277,8 @@ extension MainViewController { syncPausedStateManager: syncPausedStateManager, privacyProDataReporter: privacyProDataReporter, textZoomCoordinator: textZoomCoordinator, - aiChatSettings: aiChatSettings) + aiChatSettings: aiChatSettings, + maliciousSiteProtectionPreferencesManager: maliciousSiteProtectionPreferencesManager) Pixel.fire(pixel: .settingsPresented) if let navigationController = self.presentedViewController as? UINavigationController, diff --git a/DuckDuckGo/MainViewController.swift b/DuckDuckGo/MainViewController.swift index 6076e6d694b..43f31b48145 100644 --- a/DuckDuckGo/MainViewController.swift +++ b/DuckDuckGo/MainViewController.swift @@ -187,6 +187,7 @@ class MainViewController: UIViewController { var viewCoordinator: MainViewCoordinator! var appDidFinishLaunchingStartTime: CFAbsoluteTime? + let maliciousSiteProtectionPreferencesManager: MaliciousSiteProtectionPreferencesManaging private lazy var aiChatViewControllerManager: AIChatViewControllerManager = { let manager = AIChatViewControllerManager() @@ -274,6 +275,7 @@ class MainViewController: UIViewController { self.textZoomCoordinator = textZoomCoordinator self.websiteDataManager = websiteDataManager self.appDidFinishLaunchingStartTime = appDidFinishLaunchingStartTime + self.maliciousSiteProtectionPreferencesManager = maliciousSiteProtectionPreferencesManager super.init(nibName: nil, bundle: nil) diff --git a/DuckDuckGo/MaliciousSiteProtection/Settings/MaliciousSiteProtectionSettingsViewModel.swift b/DuckDuckGo/MaliciousSiteProtection/Settings/MaliciousSiteProtectionSettingsViewModel.swift index fdbe3eb3bd6..626475384f2 100644 --- a/DuckDuckGo/MaliciousSiteProtection/Settings/MaliciousSiteProtectionSettingsViewModel.swift +++ b/DuckDuckGo/MaliciousSiteProtection/Settings/MaliciousSiteProtectionSettingsViewModel.swift @@ -35,7 +35,7 @@ final class MaliciousSiteProtectionSettingsViewModel: ObservableObject { private let urlOpener: URLOpener init( - manager: MaliciousSiteProtectionPreferencesManaging = AppDependencyProvider.shared.maliciousSiteProtectionPreferencesManager, + manager: MaliciousSiteProtectionPreferencesManaging, featureFlagger: MaliciousSiteProtectionFeatureFlagger = MaliciousSiteProtectionFeatureFlags(featureFlagger: AppDependencyProvider.shared.featureFlagger), urlOpener: URLOpener = UIApplication.shared ) { diff --git a/DuckDuckGo/SettingsGeneralView.swift b/DuckDuckGo/SettingsGeneralView.swift index 2e63dd124cf..ae6dffd89a2 100644 --- a/DuckDuckGo/SettingsGeneralView.swift +++ b/DuckDuckGo/SettingsGeneralView.swift @@ -86,7 +86,7 @@ struct SettingsGeneralView: View { accessory: .toggle(isOn: viewModel.universalLinksBinding)) } - SettingsMaliciousProtectionView() + SettingsMaliciousProtectionView(model: MaliciousSiteProtectionSettingsViewModel(manager: viewModel.maliciousSiteProtectionPreferencesManager)) } .applySettingsListModifiers(title: UserText.general, diff --git a/DuckDuckGo/SettingsMaliciousSiteProtectionView.swift b/DuckDuckGo/SettingsMaliciousSiteProtectionView.swift index a8cdd8ba723..a8be1deccf9 100644 --- a/DuckDuckGo/SettingsMaliciousSiteProtectionView.swift +++ b/DuckDuckGo/SettingsMaliciousSiteProtectionView.swift @@ -21,28 +21,32 @@ import SwiftUI import DuckUI struct SettingsMaliciousProtectionView: View { - @StateObject private var maliciousSiteProtectionSettingsModel = MaliciousSiteProtectionSettingsViewModel() + @ObservedObject private var model: MaliciousSiteProtectionSettingsViewModel + + init(model: MaliciousSiteProtectionSettingsViewModel) { + self.model = model + } var body: some View { - if maliciousSiteProtectionSettingsModel.shouldShowMaliciousSiteProtectionSection { + if model.shouldShowMaliciousSiteProtectionSection { Section( header: Text(UserText.MaliciousSiteProtectionSettings.header), footer: VStack(alignment: .leading, spacing: 10) { - Button(action: maliciousSiteProtectionSettingsModel.learnMoreAction) { + Button(action: model.learnMoreAction) { Text(UserText.MaliciousSiteProtectionSettings.footerLearnMore) .foregroundColor(.blueBase) } Text(UserText.MaliciousSiteProtectionSettings.footerDisabledMessage) - .opacity(maliciousSiteProtectionSettingsModel.isMaliciousSiteProtectionOn ? 0 : 1) + .opacity(model.isMaliciousSiteProtectionOn ? 0 : 1) .foregroundColor(.red) .font(.footnote) } ) { SettingsCellView( label: UserText.MaliciousSiteProtectionSettings.toggleMessage, - accessory: .toggle(isOn: $maliciousSiteProtectionSettingsModel.isMaliciousSiteProtectionOn) + accessory: .toggle(isOn: $model.isMaliciousSiteProtectionOn) ) } } else { @@ -51,6 +55,6 @@ struct SettingsMaliciousProtectionView: View { } } -#Preview { - SettingsMaliciousProtectionView() -} +//#Preview { +// SettingsMaliciousProtectionView(model: ) +//} diff --git a/DuckDuckGo/SettingsViewModel.swift b/DuckDuckGo/SettingsViewModel.swift index a35de32255c..e07f39ab4c6 100644 --- a/DuckDuckGo/SettingsViewModel.swift +++ b/DuckDuckGo/SettingsViewModel.swift @@ -47,6 +47,7 @@ final class SettingsViewModel: ObservableObject { let privacyProDataReporter: PrivacyProDataReporting? let textZoomCoordinator: TextZoomCoordinating let aiChatSettings: AIChatSettingsProvider + let maliciousSiteProtectionPreferencesManager: MaliciousSiteProtectionPreferencesManaging // Subscription Dependencies let subscriptionManager: SubscriptionManager @@ -416,7 +417,9 @@ final class SettingsViewModel: ObservableObject { syncPausedStateManager: any SyncPausedStateManaging, privacyProDataReporter: PrivacyProDataReporting, textZoomCoordinator: TextZoomCoordinating, - aiChatSettings: AIChatSettingsProvider) { + aiChatSettings: AIChatSettingsProvider, + maliciousSiteProtectionPreferencesManager: MaliciousSiteProtectionPreferencesManaging + ) { self.state = SettingsState.defaults self.legacyViewProvider = legacyViewProvider @@ -429,7 +432,7 @@ final class SettingsViewModel: ObservableObject { self.privacyProDataReporter = privacyProDataReporter self.textZoomCoordinator = textZoomCoordinator self.aiChatSettings = aiChatSettings - + self.maliciousSiteProtectionPreferencesManager = maliciousSiteProtectionPreferencesManager setupNotificationObservers() updateRecentlyVisitedSitesVisibility() }