[go: nahoru, domu]

blob: 5dd2f197a2ffae03b7aaebc9ec342f59be4a2444 [file] [log] [blame]
// Copyright 2018 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/authentication/unified_consent/identity_chooser/identity_chooser_view_controller.h"
#import "base/apple/foundation_util.h"
#import "base/check_op.h"
#import "base/notreached.h"
#import "ios/chrome/browser/shared/public/features/features.h"
#import "ios/chrome/browser/shared/ui/list_model/list_item+Controller.h"
#import "ios/chrome/browser/shared/ui/table_view/chrome_table_view_styler.h"
#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h"
#import "ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_add_account_item.h"
#import "ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_header_item.h"
#import "ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_view_controller_presentation_delegate.h"
#import "ios/chrome/common/ui/colors/semantic_color_names.h"
namespace {
const CGFloat kViewControllerWidth = 312.;
const CGFloat kViewControllerHeight = 230.;
// Footer height for "Add Account…" section.
const CGFloat kFooterHeight = 17.;
typedef NS_ENUM(NSInteger, SectionIdentifier) {
IdentitiesSectionIdentifier = kSectionIdentifierEnumZero,
};
typedef NS_ENUM(NSInteger, ItemType) {
IdentityItemType = kItemTypeEnumZero,
AddAccountItemType,
};
} // namespace
@implementation IdentityChooserViewController
@synthesize presentationDelegate = _presentationDelegate;
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.backgroundColor =
[UIColor colorNamed:kGroupedSecondaryBackgroundColor];
self.preferredContentSize =
CGSizeMake(kViewControllerWidth, kViewControllerHeight);
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, kFooterHeight, 0);
self.tableView.sectionFooterHeight = 0;
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self.presentationDelegate identityChooserViewControllerDidDisappear:self];
}
- (void)tableView:(UITableView*)tableView
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
DCHECK_EQ(0, indexPath.section);
ListItem* item = [self.tableViewModel itemAtIndexPath:indexPath];
switch ((ItemType)item.type) {
case IdentityItemType: {
TableViewIdentityItem* tableViewIdentityItem =
base::apple::ObjCCastStrict<TableViewIdentityItem>(item);
DCHECK(tableViewIdentityItem);
[self.presentationDelegate
identityChooserViewController:self
didSelectIdentityWithGaiaID:tableViewIdentityItem.gaiaID];
break;
}
case AddAccountItemType:
[self.presentationDelegate
identityChooserViewControllerDidTapOnAddAccount:self];
break;
default:
NOTREACHED();
break;
}
}
#pragma mark - IdentityChooserConsumer
- (void)setIdentityItems:(NSArray<TableViewItem*>*)items {
[self loadModel];
TableViewModel* tableViewModel = self.tableViewModel;
if ([tableViewModel
hasSectionForSectionIdentifier:IdentitiesSectionIdentifier]) {
[tableViewModel removeSectionWithIdentifier:IdentitiesSectionIdentifier];
}
[tableViewModel addSectionWithIdentifier:IdentitiesSectionIdentifier];
// Create the header item.
[tableViewModel setHeader:[[IdentityChooserHeaderItem alloc] init]
forSectionWithIdentifier:IdentitiesSectionIdentifier];
// Insert the items.
for (TableViewItem* item in items) {
item.type = IdentityItemType;
[tableViewModel addItem:item
toSectionWithIdentifier:IdentitiesSectionIdentifier];
}
// Insert "Add Account" item.
IdentityChooserAddAccountItem* addAccountItem =
[[IdentityChooserAddAccountItem alloc] initWithType:AddAccountItemType];
[tableViewModel addItem:addAccountItem
toSectionWithIdentifier:IdentitiesSectionIdentifier];
[self.tableView reloadData];
}
- (void)itemHasChanged:(TableViewItem*)changedItem {
if (![self.tableViewModel hasItem:changedItem])
return;
[self reconfigureCellsForItems:@[ changedItem ]];
}
- (TableViewIdentityItem*)tableViewIdentityItemWithGaiaID:(NSString*)gaiaID {
for (TableViewIdentityItem* item in [self.tableViewModel
itemsInSectionWithIdentifier:IdentitiesSectionIdentifier]) {
if (item.type != IdentityItemType)
continue;
TableViewIdentityItem* identityItem =
base::apple::ObjCCastStrict<TableViewIdentityItem>(item);
if ([identityItem.gaiaID isEqualToString:gaiaID])
return identityItem;
}
return nil;
}
#pragma mark - UIAccessibilityAction
- (BOOL)accessibilityPerformEscape {
[self dismissViewControllerAnimated:YES completion:nil];
return YES;
}
@end