Commit 87981061 authored by Jérôme Lebel's avatar Jérôme Lebel Committed by Commit Bot

[iOS] Implementation of AdvancedSettingsSigninCoordinator

AdvancedSettingsSigninCoordinator present the advanced settings during
sign-in process.
This patch add the implementation of AdvancedSettingsSigninCoordinator,
and removes the old implementation.

See http://go/chrome-ios-signin-migration

Bug: 971989
Change-Id: Id60834f575284ba48cdafc4a3b9a8e227a2a43ee
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2050568
Commit-Queue: Jérôme Lebel <jlebel@chromium.org>
Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#746448}
parent ea2e86bb
......@@ -9,7 +9,34 @@ source_set("advanced_settings_signin") {
sources = [
"advanced_settings_signin_coordinator.h",
"advanced_settings_signin_coordinator.mm",
"advanced_settings_signin_mediator.h",
"advanced_settings_signin_mediator.mm",
"advanced_settings_signin_navigation_controller.h",
"advanced_settings_signin_navigation_controller.mm",
]
public_deps =
[ "//ios/chrome/browser/ui/authentication/signin:signin_headers" ]
deps = [
":constants",
"//components/sync",
"//components/unified_consent",
"//ios/chrome/app/strings",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/signin",
"//ios/chrome/browser/sync",
"//ios/chrome/browser/ui/alert_coordinator",
"//ios/chrome/browser/ui/authentication/signin:signin_protected",
"//ios/chrome/browser/ui/settings:settings_controller_protocol",
"//ios/chrome/browser/ui/settings/google_services:constants",
"//ios/web/public",
"//ui/base",
]
}
source_set("constants") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"advanced_settings_signin_constants.h",
"advanced_settings_signin_constants.mm",
]
}
......@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_CONSTANTS_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_CONSTANTS_H_
#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_CONSTANTS_H_
#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_CONSTANTS_H_
#import <Foundation/Foundation.h>
......@@ -13,4 +13,4 @@ extern NSString* const kSyncSettingsConfirmButtonId;
// The accessibility identifier for the navigation "Cancel" button.
extern NSString* const kSyncSettingsCancelButtonId;
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_CONSTANTS_H_
#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_CONSTANTS_H_
......@@ -2,7 +2,7 @@
// 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/google_services/advanced_signin_settings_constants.h"
#import "ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_constants.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_MEDIATOR_H_
#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_MEDIATOR_H_
#import <UIKit/UIKit.h>
#import "ios/chrome/browser/ui/authentication/signin/signin_enums.h"
@class AdvancedSettingsSigninMediator;
@class AdvancedSettingsSigninNavigationController;
class AuthenticationService;
class PrefService;
class SyncSetupService;
namespace syncer {
class SyncService;
}
// Mediator for the advanced settings sign-in flow.
@interface AdvancedSettingsSigninMediator : NSObject
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithSyncSetupService:(SyncSetupService*)syncSetupService
authenticationService:
(AuthenticationService*)authenticationService
syncService:(syncer::SyncService*)syncService
prefService:(PrefService*)prefService
NS_DESIGNATED_INITIALIZER;
// Saves the user sync preferences.
- (void)saveUserPreferenceForSigninResult:(SigninCoordinatorResult)signinResult;
@end
#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_MEDIATOR_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// 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/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator.h"
#import "base/metrics/user_metrics.h"
#import "components/sync/driver/sync_service.h"
#import "components/unified_consent/unified_consent_metrics.h"
#import "ios/chrome/browser/signin/authentication_service.h"
#import "ios/chrome/browser/sync/sync_setup_service.h"
#import "ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_navigation_controller.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
using base::RecordAction;
using base::UserMetricsAction;
using syncer::SyncFirstSetupCompleteSource;
using unified_consent::metrics::RecordSyncSetupDataTypesHistrogam;
@interface AdvancedSettingsSigninMediator ()
@property(nonatomic, assign, readonly) SyncSetupService* syncSetupService;
@property(nonatomic, assign, readonly)
AuthenticationService* authenticationService;
@property(nonatomic, assign, readonly) syncer::SyncService* syncService;
// Browser state preference service.
@property(nonatomic, assign, readonly) PrefService* prefService;
@end
@implementation AdvancedSettingsSigninMediator
#pragma mark - Public
- (instancetype)initWithSyncSetupService:(SyncSetupService*)syncSetupService
authenticationService:
(AuthenticationService*)authenticationService
syncService:(syncer::SyncService*)syncService
prefService:(PrefService*)prefService {
self = [super init];
if (self) {
DCHECK(syncSetupService);
DCHECK(authenticationService);
DCHECK(syncService);
DCHECK(prefService);
_syncSetupService = syncSetupService;
_authenticationService = authenticationService;
_syncService = syncService;
_prefService = prefService;
}
return self;
}
- (void)saveUserPreferenceForSigninResult:
(SigninCoordinatorResult)signinResult {
switch (signinResult) {
case SigninCoordinatorResultSuccess: {
RecordAction(
UserMetricsAction("Signin_Signin_ConfirmAdvancedSyncSettings"));
RecordSyncSetupDataTypesHistrogam(self.syncService->GetUserSettings(),
self.prefService);
if (self.syncSetupService->IsSyncEnabled()) {
// FirstSetupComplete flag should be only turned on when the user agrees
// to start Sync.
self.syncSetupService->PrepareForFirstSyncSetup();
self.syncSetupService->SetFirstSetupComplete(
SyncFirstSetupCompleteSource::ADVANCED_FLOW_CONFIRM);
}
break;
}
case SigninCoordinatorResultCanceledByUser:
RecordAction(
UserMetricsAction("Signin_Signin_ConfirmCancelAdvancedSyncSettings"));
self.syncSetupService->CommitSyncChanges();
self.authenticationService->SignOut(signin_metrics::ABORT_SIGNIN,
/*force_clear_browsing_data=*/false,
nil);
break;
case SigninCoordinatorResultInterrupted:
RecordAction(
UserMetricsAction("Signin_Signin_AbortAdvancedSyncSettings"));
break;
}
}
@end
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_NAVIGATION_CONTROLLER_H_
#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_NAVIGATION_CONTROLLER_H_
#import <UIKit/UIKit.h>
// Delegate for AdvancedSettingsSigninNavigationController to receive navigation
// button events.
@protocol
AdvancedSettingsSigninNavigationControllerNavigationDelegate <NSObject>
// Called when the navigation canceled button was tapped.
- (void)navigationCancelButtonWasTapped;
// Called when the navigation confirm button was tapped.
- (void)navigationConfirmButtonWasTapped;
@end
// View controller to present the Google services settings.
@interface AdvancedSettingsSigninNavigationController : UINavigationController
@property(nonatomic, weak)
id<AdvancedSettingsSigninNavigationControllerNavigationDelegate>
navigationDelegate;
@end
#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADVANCED_SETTINGS_SIGNIN_ADVANCED_SETTINGS_SIGNIN_NAVIGATION_CONTROLLER_H_
// Copyright 2018 The Chromium Authors. All rights reserved.
// 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/authentication/signin/advanced_settings_signin/advanced_settings_signin_navigation_controller.h"
#import "ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_constants.h"
#import "ios/chrome/browser/ui/settings/settings_controller_protocol.h"
#import "ios/chrome/grit/ios_strings.h"
#import "ui/base/l10n/l10n_util_mac.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
using l10n_util::GetNSString;
@implementation AdvancedSettingsSigninNavigationController
#pragma mark - UINavigationController
// Calls |viewControllerWasPopped| for the popped view controller.
- (UIViewController*)popViewControllerAnimated:(BOOL)animated {
UIViewController* poppedViewController =
[super popViewControllerAnimated:animated];
if ([poppedViewController
respondsToSelector:@selector(viewControllerWasPopped)]) {
[poppedViewController performSelector:@selector(viewControllerWasPopped)];
}
return poppedViewController;
}
- (void)pushViewController:(UIViewController*)viewController
animated:(BOOL)animated {
[super pushViewController:viewController animated:animated];
if (self.viewControllers.count == 1) {
viewController.navigationItem.leftBarButtonItem =
[self navigationCancelButton];
viewController.navigationItem.rightBarButtonItem =
[self navigationConfirmButton];
}
}
#pragma mark - Private
// Creates a cancel button for the navigation item.
- (UIBarButtonItem*)navigationCancelButton {
UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self
action:@selector(onNavigationCancelButton)];
cancelButton.accessibilityIdentifier = kSyncSettingsCancelButtonId;
return cancelButton;
}
// Creates a confirmation button for the navigation item.
- (UIBarButtonItem*)navigationConfirmButton {
UIBarButtonItem* confirmButton = [[UIBarButtonItem alloc]
initWithTitle:GetNSString(
IDS_IOS_ADVANCED_SIGNIN_SETTINGS_CONFIRM_MAIN_BUTTON)
style:UIBarButtonItemStyleDone
target:self
action:@selector(onNavigationConfirmButton)];
confirmButton.accessibilityIdentifier = kSyncSettingsConfirmButtonId;
return confirmButton;
}
#pragma mark - Button events
// Called by the cancel button from the navigation controller. Shows the cancel
// alert dialog.
- (void)onNavigationCancelButton {
[self.navigationDelegate navigationCancelButtonWasTapped];
}
// Called by the confirm button from tne navigation controller. Validates the
// sync preferences chosen by the user, starts the sync, close the completion
// callback and closes the advanced sign-in settings.
- (void)onNavigationConfirmButton {
[self.navigationDelegate navigationConfirmButtonWasTapped];
}
@end
......@@ -32,6 +32,12 @@ typedef void (^SigninCoordinatorCompletionCallback)(
// This completion needs to be set before calling -[SigninCoordinator start].
@property(nonatomic, copy) SigninCoordinatorCompletionCallback signinCompletion;
// Returns YES if the Google services settings view is presented.
// TODO(crbug.com/971989): This property exists for the implementation
// transition.
@property(nonatomic, assign, readonly, getter=isSettingsViewPresented)
BOOL settingsViewPresented;
// Returns a coordinator for user sign-in workflow.
// |viewController| presents the sign-in.
// |identity| is the identity preselected with the sign-in opens.
......
......@@ -118,6 +118,13 @@ using signin_metrics::PromoAction;
DCHECK(!self.signinCompletion);
}
#pragma mark - Properties
- (BOOL)isSettingsViewPresented {
// TODO(crbug.com/971989): Remove this method.
return NO;
}
#pragma mark - Private
- (void)runCompletionCallbackWithSigninResult:
......
......@@ -29,6 +29,7 @@ source_set("settings_root") {
"//ios/public/provider/chrome/browser/user_feedback",
"//ui/base",
]
public_deps = [ ":settings_controller_protocol" ]
}
source_set("settings_root_constants") {
......@@ -193,6 +194,12 @@ source_set("settings") {
]
}
source_set("settings_controller_protocol") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [ "settings_controller_protocol.h" ]
frameworks = [ "UIKit.framework" ]
}
source_set("constants") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
......
......@@ -7,10 +7,6 @@ source_set("google_services") {
sources = [
"accounts_table_view_controller.h",
"accounts_table_view_controller.mm",
"advanced_signin_settings_coordinator.h",
"advanced_signin_settings_coordinator.mm",
"advanced_signin_settings_navigation_controller.h",
"advanced_signin_settings_navigation_controller.mm",
"google_services_settings_command_handler.h",
"google_services_settings_consumer.h",
"google_services_settings_coordinator.h",
......@@ -60,6 +56,7 @@ source_set("google_services") {
"//ios/chrome/browser/ui/alert_coordinator",
"//ios/chrome/browser/ui/authentication",
"//ios/chrome/browser/ui/authentication/cells",
"//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/icons",
......@@ -79,8 +76,10 @@ source_set("google_services") {
"//ios/public/provider/chrome/browser/signin",
"//ui/base",
]
allow_circular_includes_from =
[ "//ios/chrome/browser/ui/signin_interaction" ]
allow_circular_includes_from = [
"//ios/chrome/browser/ui/signin_interaction",
"//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin",
]
}
source_set("constants") {
......@@ -88,8 +87,6 @@ source_set("constants") {
sources = [
"accounts_table_view_controller_constants.h",
"accounts_table_view_controller_constants.mm",
"advanced_signin_settings_constants.h",
"advanced_signin_settings_constants.mm",
"google_services_settings_constants.h",
"google_services_settings_constants.mm",
"manage_sync_settings_constants.h",
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_COORDINATOR_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_COORDINATOR_H_
#import "base/ios/block_types.h"
#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
@class AdvancedSigninSettingsCoordinator;
// AdvancedSigninSettingsCoordinator delegate.
@protocol AdvancedSigninSettingsCoordinatorDelegate <NSObject>
// Called when the user closes AdvancedSigninSettingsCoordinator.
// |signedin|, YES if the view is confirmed or aborted, and NO if the view is
// canceled.
- (void)advancedSigninSettingsCoordinatorDidClose:
(AdvancedSigninSettingsCoordinator*)coordinator
signedin:(BOOL)signedin;
@end
// Shows the Google services settings in a navigation controller, so the user
// can update their sync settings before sync starts (or sign-out).
@interface AdvancedSigninSettingsCoordinator : ChromeCoordinator
// Delegate.
@property(nonatomic, weak) id<AdvancedSigninSettingsCoordinatorDelegate>
delegate;
// Aborts the sign-in flow, and calls the delegate. Aborting the Advanced
// sync settings doesn't sign out the user. The sync is left unsetup and doesn't
// start. This method does nothing if called twice.
// |dismiss|, dismisses the view controller if YES.
// |animated|, the view is animated if YES.
// |completion|, this completion block is called after the view is dismissed.
// It will be called even the view is already dismissed. The value
// can be nil.
- (void)abortWithDismiss:(BOOL)dismiss
animated:(BOOL)animated
completion:(ProceduralBlock)completion;
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_COORDINATOR_H_
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_NAVIGATION_CONTROLLER_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_NAVIGATION_CONTROLLER_H_
#import <UIKit/UIKit.h>
#import "ios/chrome/browser/ui/settings/settings_navigation_controller.h"
// View controller to related to AdvancedSigninSettingsCoordinator.
@interface AdvancedSigninSettingsNavigationController
: SettingsNavigationController
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_GOOGLE_SERVICES_ADVANCED_SIGNIN_SETTINGS_NAVIGATION_CONTROLLER_H_
// Copyright 2018 The Chromium Authors. All rights reserved.
// 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/google_services/advanced_signin_settings_navigation_controller.h"
#import "ios/chrome/browser/ui/settings/settings_navigation_controller.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@implementation AdvancedSigninSettingsNavigationController
- (UIViewController*)popViewControllerAnimated:(BOOL)animated {
UIViewController* poppedViewController =
[super popViewControllerAnimated:animated];
if ([poppedViewController
respondsToSelector:@selector(viewControllerWasPopped)]) {
[poppedViewController performSelector:@selector(viewControllerWasPopped)];
}
return poppedViewController;
}
@end
......@@ -272,6 +272,7 @@
- (void)manageSyncSettingsCoordinatorWasPopped:
(ManageSyncSettingsCoordinator*)coordinator {
DCHECK_EQ(self.manageSyncSettingsCoordinator, coordinator);
[self.manageSyncSettingsCoordinator stop];
self.manageSyncSettingsCoordinator = nil;
}
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_SETTINGS_CONTROLLER_PROTOCOL_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_SETTINGS_CONTROLLER_PROTOCOL_H_
#import <UIKit/UIKit.h>
// Protocol for settings view controllers.
@protocol SettingsControllerProtocol <NSObject>
@optional
// Notifies the controller that the settings screen is being dismissed.
- (void)settingsWillBeDismissed;
// Notifies the controller that is popped out from the settings navigation
// controller.
- (void)viewControllerWasPopped;
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_SETTINGS_CONTROLLER_PROTOCOL_H_
......@@ -8,6 +8,7 @@
#import <UIKit/UIKit.h>
#import "ios/chrome/browser/ui/commands/application_commands.h"
#import "ios/chrome/browser/ui/settings/settings_controller_protocol.h"
class Browser;
@protocol BrowserCommands;
......@@ -18,19 +19,6 @@ class Browser;
// The accessibility identifier for the settings' "Done" button.
extern NSString* const kSettingsDoneButtonId;
@protocol SettingsControllerProtocol<NSObject>
@optional
// Notifies the controller that the settings screen is being dismissed.
- (void)settingsWillBeDismissed;
// Notifies the controller that is popped out from the settings navigation
// controller.
- (void)viewControllerWasPopped;
@end
@protocol SettingsNavigationControllerDelegate<NSObject>
// Informs the delegate that the settings navigation controller should be
......
......@@ -11,7 +11,6 @@
#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h"
#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h"
#import "ios/chrome/browser/ui/commands/application_commands.h"
#import "ios/chrome/browser/ui/settings/google_services/advanced_signin_settings_coordinator.h"
#import "ios/chrome/browser/ui/signin_interaction/signin_interaction_controller.h"
#import "ios/chrome/browser/ui/signin_interaction/signin_interaction_presenting.h"
......@@ -19,9 +18,7 @@
#error "This file requires ARC support."
#endif
@interface SigninInteractionCoordinator () <
AdvancedSigninSettingsCoordinatorDelegate,
SigninInteractionPresenting>
@interface SigninInteractionCoordinator () <SigninInteractionPresenting>
// Coordinator to present alerts.
@property(nonatomic, strong) AlertCoordinator* alertCoordinator;
......@@ -43,10 +40,6 @@
// Sign-in completion.
@property(nonatomic, copy) signin_ui::CompletionCallback signinCompletion;
// Advanced sign-in settings coordinator.
@property(nonatomic, strong)
AdvancedSigninSettingsCoordinator* advancedSigninSettingsCoordinator;
@end
@implementation SigninInteractionCoordinator
......@@ -130,28 +123,24 @@
- (void)cancel {
[self.controller cancel];
[self interrupSigninCoordinatorWithAction:
SigninCoordinatorInterruptActionNoDismiss];
[self.advancedSigninSettingsCoordinator abortWithDismiss:NO
animated:YES
completion:nil];
SigninCoordinatorInterruptActionNoDismiss
completion:nil];
}
- (void)cancelAndDismiss {
[self.controller cancelAndDismiss];
[self interrupSigninCoordinatorWithAction:
SigninCoordinatorInterruptActionDismissWithAnimation];
[self.advancedSigninSettingsCoordinator abortWithDismiss:YES
animated:YES
completion:nil];
SigninCoordinatorInterruptActionDismissWithAnimation
completion:nil];
}
- (void)abortAndDismissSettingsViewAnimated:(BOOL)animated
completion:(ProceduralBlock)completion {
DCHECK(!self.controller);
DCHECK(self.advancedSigninSettingsCoordinator);
[self.advancedSigninSettingsCoordinator abortWithDismiss:YES
animated:animated
completion:completion];
SigninCoordinatorInterruptAction action =
animated ? SigninCoordinatorInterruptActionDismissWithAnimation
: SigninCoordinatorInterruptActionDismissWithoutAnimation;
[self interrupSigninCoordinatorWithAction:action completion:completion];
}
#pragma mark - Properties
......@@ -161,17 +150,7 @@
}
- (BOOL)isSettingsViewPresented {
return self.advancedSigninSettingsCoordinator != nil;
}
#pragma mark - AdvancedSigninSettingsCoordinatorDelegate
- (void)advancedSigninSettingsCoordinatorDidClose:
(AdvancedSigninSettingsCoordinator*)coordinator
signedin:(BOOL)signedin {
DCHECK_EQ(self.advancedSigninSettingsCoordinator, coordinator);
self.advancedSigninSettingsCoordinator = nil;
[self signinDoneWithSuccess:signedin];
return self.coordinator.isSettingsViewPresented;
}
#pragma mark - SigninInteractionPresenting
......@@ -280,14 +259,25 @@
// Shows the advanced sign-in settings UI.
- (void)showAdvancedSigninSettings {
DCHECK(!self.advancedSigninSettingsCoordinator);
DCHECK(!self.coordinator);
DCHECK(self.presentingViewController);
self.advancedSigninSettingsCoordinator =
[[AdvancedSigninSettingsCoordinator alloc]
initWithBaseViewController:self.presentingViewController
browser:self.browser];
self.advancedSigninSettingsCoordinator.delegate = self;
[self.advancedSigninSettingsCoordinator start];
self.coordinator = [SigninCoordinator
advancedSettingsSigninCoordinatorWithBaseViewController:
self.presentingViewController
browser:self.browser];
__weak SigninInteractionCoordinator* weakSelf = self;
self.coordinator.signinCompletion =
^(SigninCoordinatorResult signinResult, ChromeIdentity* identity) {
[weakSelf advancedSigninDoneWithSigninResult:signinResult];
};
[self.coordinator start];
}
- (void)advancedSigninDoneWithSigninResult:
(SigninCoordinatorResult)signinResult {
[self.coordinator stop];
self.coordinator = nil;
[self signinDoneWithSuccess:signinResult == SigninCoordinatorResultSuccess];
}
// Called when the sign-in is done.
......@@ -299,18 +289,19 @@
self.signinCompletion(success);
self.signinCompletion = nil;
}
[self.advancedSigninSettingsCoordinator stop];
self.advancedSigninSettingsCoordinator = nil;
self.presentingViewController = nil;
}
- (void)interrupSigninCoordinatorWithAction:
(SigninCoordinatorInterruptAction)action {
(SigninCoordinatorInterruptAction)action
completion:(ProceduralBlock)completion {
__weak __typeof(self) weakSelf = self;
ProceduralBlock interruptCompletion = ^() {
// |weakSelf.coordinator.signinCompletion| is called before this interrupt
// block. The signin completion has to set |coordinator| to nil.
DCHECK(!weakSelf.coordinator);
if (completion) {
completion();
}
};
[self.coordinator interruptWithAction:action completion:interruptCompletion];
}
......
......@@ -253,6 +253,7 @@ source_set("test_support") {
"//ios/chrome/browser/ui:feature_flags",
"//ios/chrome/browser/ui/authentication:authentication",
"//ios/chrome/browser/ui/authentication/cells",
"//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin:constants",
"//ios/chrome/browser/ui/autofill:autofill_ui",
"//ios/chrome/browser/ui/autofill/manual_fill",
"//ios/chrome/browser/ui/autofill/manual_fill:manual_fill_ui",
......@@ -392,6 +393,7 @@ source_set("eg_app_support+eg2") {
"//ios/chrome/browser/ui:feature_flags",
"//ios/chrome/browser/ui/authentication:eg_app_support+eg2",
"//ios/chrome/browser/ui/authentication/cells",
"//ios/chrome/browser/ui/authentication/signin/advanced_settings_signin:constants",
"//ios/chrome/browser/ui/autofill:autofill_ui",
"//ios/chrome/browser/ui/autofill:eg_app_support+eg2",
"//ios/chrome/browser/ui/autofill/manual_fill",
......
......@@ -9,6 +9,7 @@
#include "components/strings/grit/components_strings.h"
#import "ios/chrome/browser/autofill/form_suggestion_constants.h"
#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h"
#import "ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_constants.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/address_view_controller.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/card_view_controller.h"
......@@ -38,7 +39,6 @@
#import "ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_ui_constants.h"
#import "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_view_controller.h"
#import "ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_constants.h"
#import "ios/chrome/browser/ui/settings/google_services/advanced_signin_settings_constants.h"
#import "ios/chrome/browser/ui/settings/google_services/google_services_settings_constants.h"
#import "ios/chrome/browser/ui/settings/import_data_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/password/passwords_table_view_constants.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment