1// Copyright 2018 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#import "ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_cell.h" 6 7#include "base/feature_list.h" 8#include "base/i18n/rtl.h" 9#import "ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_view.h" 10#include "ios/chrome/browser/ui/ui_feature_flags.h" 11#import "ios/chrome/browser/ui/util/uikit_ui_util.h" 12#import "ios/chrome/common/ui/colors/semantic_color_names.h" 13#import "ios/chrome/common/ui/util/constraints_ui_util.h" 14#import "ios/chrome/common/ui/util/pointer_interaction_util.h" 15 16#if !defined(__has_feature) || !__has_feature(objc_arc) 17#error "This file requires ARC support." 18#endif 19 20namespace { 21// Identity view. 22const CGFloat kLeadingMargin = 8.; 23const CGFloat kIdentityViewVerticalMargin = 7.; 24// Checkmark margin. 25const CGFloat kCheckmarkMagin = 26.; 26} // namespace 27 28@interface IdentityChooserCell () 29@property(nonatomic, strong) IdentityView* identityView; 30@end 31 32@implementation IdentityChooserCell 33 34@synthesize identityView = _identityView; 35 36- (instancetype)initWithStyle:(UITableViewCellStyle)style 37 reuseIdentifier:(NSString*)reuseIdentifier { 38 self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 39 if (self) { 40 _identityView = [[IdentityView alloc] initWithFrame:CGRectZero]; 41 _identityView.translatesAutoresizingMaskIntoConstraints = NO; 42 _identityView.minimumVerticalMargin = kIdentityViewVerticalMargin; 43 [self.contentView addSubview:_identityView]; 44 LayoutSides sideFlags = LayoutSides::kLeading | LayoutSides::kTrailing | 45 LayoutSides::kBottom | LayoutSides::kTop; 46 ChromeDirectionalEdgeInsets insets = 47 ChromeDirectionalEdgeInsetsMake(0, kLeadingMargin, 0, 0); 48 AddSameConstraintsToSidesWithInsets(_identityView, self.contentView, 49 sideFlags, insets); 50#if defined(__IPHONE_13_4) 51 if (@available(iOS 13.4, *)) { 52 if (base::FeatureList::IsEnabled(kPointerSupport)) { 53 [self addInteraction:[[ViewPointerInteraction alloc] init]]; 54 } 55 } 56#endif // defined(__IPHONE_13_4) 57 } 58 return self; 59} 60 61- (void)configureCellWithTitle:(NSString*)title 62 subtitle:(NSString*)subtitle 63 image:(UIImage*)image 64 checked:(BOOL)checked { 65 [self.identityView setTitle:title subtitle:subtitle]; 66 [self.identityView setAvatar:image]; 67 self.accessoryType = checked ? UITableViewCellAccessoryCheckmark 68 : UITableViewCellAccessoryNone; 69 if (checked) { 70 self.directionalLayoutMargins = 71 NSDirectionalEdgeInsetsMake(0, 0, 0, kCheckmarkMagin); 72 } else { 73 self.directionalLayoutMargins = NSDirectionalEdgeInsetsZero; 74 } 75} 76 77- (void)prepareForReuse { 78 [super prepareForReuse]; 79 self.accessibilityIdentifier = nil; 80} 81 82@end 83