chromium/ios/chrome/browser/ui/settings/tabs/tabs_settings_coordinator.mm

// Copyright 2023 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/tabs/tabs_settings_coordinator.h"

#import "ios/chrome/browser/shared/model/application_context/application_context.h"
#import "ios/chrome/browser/shared/model/browser/browser.h"
#import "ios/chrome/browser/sync/model/sync_service_factory.h"
#import "ios/chrome/browser/ui/settings/tabs/inactive_tabs/inactive_tabs_settings_coordinator.h"
#import "ios/chrome/browser/ui/settings/tabs/tabs_settings_mediator.h"
#import "ios/chrome/browser/ui/settings/tabs/tabs_settings_navigation_commands.h"
#import "ios/chrome/browser/ui/settings/tabs/tabs_settings_table_view_controller.h"

@interface TabsSettingsCoordinator () <TabsSettingsNavigationCommands>
@end

@implementation TabsSettingsCoordinator {
  // Mediator for the tab settings
  TabsSettingsMediator* _mediator;
  // View controller for the tabs settings.
  TabsSettingsTableViewController* _viewController;
  // Coordinator for the inactive tabs settings.
  InactiveTabsSettingsCoordinator* _inactiveTabsSettingsCoordinator;
}

@synthesize baseNavigationController = _baseNavigationController;

- (instancetype)initWithBaseNavigationController:
                    (UINavigationController*)navigationController
                                         browser:(Browser*)browser {
  if ((self = [super initWithBaseViewController:navigationController
                                        browser:browser])) {
    _baseNavigationController = navigationController;
  }
  return self;
}

- (void)start {
  _viewController = [[TabsSettingsTableViewController alloc] init];
  _mediator = [[TabsSettingsMediator alloc]
      initWithUserLocalPrefService:GetApplicationContext()->GetLocalState()
                          consumer:_viewController];

  _viewController.delegate = _mediator;
  _mediator.handler = self;

  [self.baseNavigationController pushViewController:_viewController
                                           animated:YES];
}

- (void)stop {
  [_inactiveTabsSettingsCoordinator stop];
  _inactiveTabsSettingsCoordinator = nil;

  _viewController.delegate = nil;
  _viewController = nil;

  [_mediator disconnect];
  _mediator.handler = nil;
  _mediator = nil;
}

#pragma mark - TabsSettingsNavigationCommands

- (void)showInactiveTabsSettings {
  _inactiveTabsSettingsCoordinator = [[InactiveTabsSettingsCoordinator alloc]
      initWithBaseNavigationController:self.baseNavigationController
                               browser:self.browser];
  [_inactiveTabsSettingsCoordinator start];
}

@end