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