blob: 9a6c298a3d92489bf22b4db2aaebe9ed690b7c78 [file] [log] [blame]
// 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_settings_view_controller.h"
#include "base/mac/foundation_util.h"
#import "ios/chrome/browser/ui/settings/cells/settings_switch_cell.h"
#import "ios/chrome/browser/ui/settings/cells/sync_switch_item.h"
#import "ios/chrome/browser/ui/settings/google_services_settings_service_delegate.h"
#import "ios/chrome/browser/ui/settings/google_services_settings_view_controller_model_delegate.h"
#include "ios/chrome/grit/ios_strings.h"
#include "ui/base/l10n/l10n_util_mac.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
// Constants used to convert NSIndexPath into a tag. Used as:
// item + section * kSectionOffset
constexpr NSInteger kSectionOffset = 1000;
} // namespace
@implementation GoogleServicesSettingsViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.accessibilityIdentifier =
@"google_services_settings_view_controller";
self.title = l10n_util::GetNSString(IDS_IOS_GOOGLE_SERVICES_SETTINGS_TITLE);
}
#pragma mark - Private
- (NSInteger)tagForIndexPath:(NSIndexPath*)indexPath {
return indexPath.item + indexPath.section * kSectionOffset;
}
- (NSIndexPath*)indexPathForTag:(NSInteger)tag {
NSInteger section = tag / kSectionOffset;
NSInteger item = tag - (section * kSectionOffset);
return [NSIndexPath indexPathForItem:item inSection:section];
}
- (void)switchAction:(UISwitch*)sender {
NSIndexPath* indexPath = [self indexPathForTag:sender.tag];
SyncSwitchItem* syncSwitchItem = base::mac::ObjCCastStrict<SyncSwitchItem>(
[self.tableViewModel itemAtIndexPath:indexPath]);
[self.serviceDelegate toggleSwitchItem:syncSwitchItem withValue:sender.isOn];
}
#pragma mark - UITableViewDataSource
- (UITableViewCell*)tableView:(UITableView*)tableView
cellForRowAtIndexPath:(NSIndexPath*)indexPath {
UITableViewCell* cell = [super tableView:tableView
cellForRowAtIndexPath:indexPath];
if ([cell isKindOfClass:[SettingsSwitchCell class]]) {
SettingsSwitchCell* switchCell =
base::mac::ObjCCastStrict<SettingsSwitchCell>(cell);
[switchCell.switchView addTarget:self
action:@selector(switchAction:)
forControlEvents:UIControlEventValueChanged];
switchCell.switchView.tag = [self tagForIndexPath:indexPath];
}
return cell;
}
#pragma mark - GoogleServicesSettingsConsumer
- (void)insertSections:(NSIndexSet*)sections {
if (!self.tableViewModel) {
// No need to reload since the model has not been loaded yet.
return;
}
[self.tableView insertSections:sections
withRowAnimation:UITableViewRowAnimationNone];
}
- (void)deleteSections:(NSIndexSet*)sections {
if (!self.tableViewModel) {
// No need to reload since the model has not been loaded yet.
return;
}
[self.tableView deleteSections:sections
withRowAnimation:UITableViewRowAnimationNone];
}
- (void)reloadSections:(NSIndexSet*)sections {
if (!self.tableViewModel) {
// No need to reload since the model has not been loaded yet.
return;
}
[self.tableView reloadSections:sections
withRowAnimation:UITableViewRowAnimationNone];
}
- (void)reloadItem:(TableViewItem*)item {
if (!self.tableViewModel) {
// No need to reload since the model has not been loaded yet.
return;
}
NSIndexPath* indexPath = [self.tableViewModel indexPathForItem:item];
[self.tableView reloadRowsAtIndexPaths:@[ indexPath ]
withRowAnimation:UITableViewRowAnimationNone];
}
#pragma mark - CollectionViewController
- (void)loadModel {
[super loadModel];
[self.modelDelegate googleServicesSettingsViewControllerLoadModel:self];
}
#pragma mark - UIViewController
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self reloadData];
}
- (void)didMoveToParentViewController:(UIViewController*)parent {
[super didMoveToParentViewController:parent];
if (!parent) {
[self.presentationDelegate
googleServicesSettingsViewControllerDidRemove:self];
}
}
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView*)tableView
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
TableViewItem* item = [self.tableViewModel itemAtIndexPath:indexPath];
[self.serviceDelegate didSelectItem:item];
}
@end