[go: nahoru, domu]

blob: a9a3c5437e2d99d499c563835b1390716ba876f5 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/ui/settings/notifications/notifications_coordinator.h"
#import "base/apple/foundation_util.h"
#import "base/check.h"
#import "base/check_op.h"
#import "base/strings/sys_string_conversions.h"
#import "ios/chrome/browser/shared/model/browser/browser.h"
#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h"
#import "ios/chrome/browser/signin/authentication_service.h"
#import "ios/chrome/browser/signin/authentication_service_factory.h"
#import "ios/chrome/browser/ui/settings/notifications/notifications_mediator.h"
#import "ios/chrome/browser/ui/settings/notifications/notifications_navigation_commands.h"
#import "ios/chrome/browser/ui/settings/notifications/notifications_settings_observer.h"
#import "ios/chrome/browser/ui/settings/notifications/notifications_view_controller.h"
#import "ios/chrome/browser/ui/settings/notifications/tracking_price/tracking_price_coordinator.h"
@interface NotificationsCoordinator () <
NotificationsNavigationCommands,
NotificationsViewControllerPresentationDelegate,
TrackingPriceCoordinatorDelegate>
// View controller presented by coordinator.
@property(nonatomic, strong) NotificationsViewController* viewController;
// Notifications settings mediator.
@property(nonatomic, strong) NotificationsMediator* mediator;
// Coordinator for Tracking Price settings menu.
@property(nonatomic, strong) TrackingPriceCoordinator* trackingPriceCoordinator;
// An observer that tracks whether push notification permission settings have
// been modified.
@property(nonatomic, strong)
NotificationsSettingsObserver* notificationsObserver;
@end
@implementation NotificationsCoordinator
@synthesize baseNavigationController = _baseNavigationController;
- (instancetype)initWithBaseNavigationController:
(UINavigationController*)navigationController
browser:(Browser*)browser {
self = [super initWithBaseViewController:navigationController
browser:browser];
if (self) {
_baseNavigationController = navigationController;
}
return self;
}
- (void)start {
AuthenticationService* authService =
AuthenticationServiceFactory::GetForBrowserState(
self.browser->GetBrowserState());
id<SystemIdentity> identity =
authService->GetPrimaryIdentity(signin::ConsentLevel::kSignin);
const std::string& gaiaID = base::SysNSStringToUTF8(identity.gaiaID);
PrefService* prefService = self.browser->GetBrowserState()->GetPrefs();
_notificationsObserver =
[[NotificationsSettingsObserver alloc] initWithPrefService:prefService];
self.viewController = [[NotificationsViewController alloc]
initWithStyle:ChromeTableViewStyle()];
self.viewController.presentationDelegate = self;
self.mediator = [[NotificationsMediator alloc] initWithPrefService:prefService
gaiaID:gaiaID];
self.mediator.consumer = self.viewController;
self.mediator.handler = self;
_notificationsObserver.delegate = self.mediator;
self.viewController.modelDelegate = self.mediator;
[self.baseNavigationController pushViewController:self.viewController
animated:YES];
}
#pragma mark - NotificationsNavigationCommands
- (void)showTrackingPrice {
DCHECK(!self.trackingPriceCoordinator);
DCHECK(self.baseNavigationController);
self.trackingPriceCoordinator = [[TrackingPriceCoordinator alloc]
initWithBaseNavigationController:self.baseNavigationController
browser:self.browser];
self.trackingPriceCoordinator.delegate = self;
[self.trackingPriceCoordinator start];
}
#pragma mark - NotificationsViewControllerPresentationDelegate
- (void)notificationsViewControllerDidRemove:
(NotificationsViewController*)controller {
DCHECK_EQ(self.viewController, controller);
[self.delegate notificationsCoordinatorDidRemove:self];
}
#pragma mark - TrackingPriceCoordinatorDelegate
- (void)trackingPriceCoordinatorDidRemove:
(TrackingPriceCoordinator*)coordinator {
DCHECK_EQ(self.trackingPriceCoordinator, coordinator);
[self.trackingPriceCoordinator stop];
self.trackingPriceCoordinator.delegate = nil;
self.trackingPriceCoordinator = nil;
}
@end