[go: nahoru, domu]

blob: f85e8cbd73b8521e7fdc4f16b60ed31c1aee4da8 [file] [log] [blame]
// Copyright 2021 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/password/password_details/add_password_coordinator.h"
#import "base/apple/foundation_util.h"
#import "base/memory/scoped_refptr.h"
#import "base/metrics/histogram_functions.h"
#import "base/strings/sys_string_conversions.h"
#import "components/strings/grit/components_strings.h"
#import "ios/chrome/browser/passwords/ios_chrome_password_check_manager.h"
#import "ios/chrome/browser/passwords/ios_chrome_password_check_manager_factory.h"
#import "ios/chrome/browser/shared/coordinator/alert/alert_coordinator.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/public/commands/application_commands.h"
#import "ios/chrome/browser/shared/public/commands/command_dispatcher.h"
#import "ios/chrome/browser/shared/public/commands/open_new_tab_command.h"
#import "ios/chrome/browser/shared/public/features/features.h"
#import "ios/chrome/browser/sync/sync_service_factory.h"
#import "ios/chrome/browser/ui/settings/password/password_details/add_password_coordinator_delegate.h"
#import "ios/chrome/browser/ui/settings/password/password_details/add_password_handler.h"
#import "ios/chrome/browser/ui/settings/password/password_details/add_password_mediator.h"
#import "ios/chrome/browser/ui/settings/password/password_details/add_password_mediator_delegate.h"
#import "ios/chrome/browser/ui/settings/password/password_details/add_password_view_controller.h"
#import "ios/chrome/common/ui/reauthentication/reauthentication_module.h"
#import "ios/chrome/grit/ios_strings.h"
#import "ui/base/l10n/l10n_util.h"
#import "url/gurl.h"
@interface AddPasswordCoordinator () <AddPasswordHandler,
AddPasswordMediatorDelegate,
UIAdaptivePresentationControllerDelegate>
// Main view controller for this coordinator.
@property(nonatomic, strong) AddPasswordViewController* viewController;
// Main mediator for this coordinator.
@property(nonatomic, strong) AddPasswordMediator* mediator;
// Module containing the reauthentication mechanism for editing existing
// passwords.
@property(nonatomic, weak) ReauthenticationModule* reauthenticationModule;
// Modal alert for interactions with password.
@property(nonatomic, strong) AlertCoordinator* alertCoordinator;
// Dispatcher.
@property(nonatomic, weak) id<ApplicationCommands, BrowserCommands> dispatcher;
@end
@implementation AddPasswordCoordinator
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
browser:(Browser*)browser
reauthModule:
(ReauthenticationModule*)reauthModule {
self = [super initWithBaseViewController:viewController browser:browser];
if (self) {
DCHECK(viewController);
DCHECK(reauthModule);
_reauthenticationModule = reauthModule;
_dispatcher = static_cast<id<BrowserCommands, ApplicationCommands>>(
browser->GetCommandDispatcher());
}
return self;
}
- (void)start {
ChromeBrowserState* browserState = self.browser->GetBrowserState();
self.viewController = [[AddPasswordViewController alloc] init];
self.mediator = [[AddPasswordMediator alloc]
initWithDelegate:self
passwordCheckManager:IOSChromePasswordCheckManagerFactory::
GetForBrowserState(browserState)
.get()
prefService:browserState->GetPrefs()
syncService:SyncServiceFactory::GetForBrowserState(
browserState)];
self.mediator.consumer = self.viewController;
self.viewController.delegate = self.mediator;
self.viewController.addPasswordHandler = self;
self.viewController.reauthModule = self.reauthenticationModule;
UINavigationController* navigationController = [[UINavigationController alloc]
initWithRootViewController:self.viewController];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController.presentationController.delegate = self;
[self.baseViewController presentViewController:navigationController
animated:YES
completion:nil];
}
- (void)stop {
[self.viewController.navigationController dismissViewControllerAnimated:YES
completion:nil];
[self dismissAlertCoordinator];
self.mediator = nil;
self.viewController = nil;
}
#pragma mark - AddPasswordMediatorDelegate
- (void)dismissAddPasswordTableViewController {
[self.delegate passwordDetailsTableViewControllerDidFinish:self];
}
- (void)setUpdatedPassword:
(const password_manager::CredentialUIEntry&)credential {
[self.delegate setMostRecentlyUpdatedPasswordDetails:credential];
}
- (void)showPasswordDetailsControllerWithCredential:
(const password_manager::CredentialUIEntry&)credential {
[self.delegate dismissAddViewControllerAndShowPasswordDetails:credential
coordinator:self];
}
#pragma mark - AddPasswordHandler
- (void)showPasscodeDialog {
NSString* title =
l10n_util::GetNSString(IDS_IOS_SETTINGS_SET_UP_SCREENLOCK_TITLE);
NSString* message =
l10n_util::GetNSString(IDS_IOS_SETTINGS_SET_UP_SCREENLOCK_CONTENT);
self.alertCoordinator =
[[AlertCoordinator alloc] initWithBaseViewController:self.viewController
browser:self.browser
title:title
message:message];
__weak __typeof(self) weakSelf = self;
OpenNewTabCommand* command =
[OpenNewTabCommand commandWithURLFromChrome:GURL(kPasscodeArticleURL)];
[self.alertCoordinator addItemWithTitle:l10n_util::GetNSString(IDS_OK)
action:^{
[weakSelf dismissAlertCoordinator];
}
style:UIAlertActionStyleCancel];
[self.alertCoordinator
addItemWithTitle:l10n_util::GetNSString(
IDS_IOS_SETTINGS_SET_UP_SCREENLOCK_LEARN_HOW)
action:^{
[weakSelf.dispatcher closeSettingsUIAndOpenURL:command];
[weakSelf dismissAlertCoordinator];
}
style:UIAlertActionStyleDefault];
[self.alertCoordinator start];
}
#pragma mark - Private
- (void)dismissAlertCoordinator {
[self.alertCoordinator stop];
self.alertCoordinator = nil;
}
@end