forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
session_reconnect_view.mm
146 lines (119 loc) · 4.91 KB
/
session_reconnect_view.mm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Copyright 2017 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.
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "remoting/ios/app/session_reconnect_view.h"
#import "ios/third_party/material_components_ios/src/components/Buttons/src/MaterialButtons.h"
#import "remoting/ios/app/remoting_theme.h"
#include "remoting/base/string_resources.h"
#include "ui/base/l10n/l10n_util.h"
static const CGFloat kPadding = 20.f;
static UIFont* const kErrorFont = [UIFont systemFontOfSize:13.f];
@interface SessionReconnectView () {
MDCFloatingButton* _reconnectButton;
UILabel* _errorLabel;
UILabel* _reportThisLabel;
}
@end
@implementation SessionReconnectView
@synthesize delegate = _delegate;
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
_reconnectButton =
[MDCFloatingButton floatingButtonWithShape:MDCFloatingButtonShapeMini];
[_reconnectButton
setImage:[RemotingTheme
.refreshIcon imageFlippedForRightToLeftLayoutDirection]
forState:UIControlStateNormal];
[_reconnectButton setBackgroundColor:RemotingTheme.buttonBackgroundColor
forState:UIControlStateNormal];
[_reconnectButton setElevation:4.0f forState:UIControlStateNormal];
[_reconnectButton setTitle:l10n_util::GetNSString(IDS_RECONNECT)
forState:UIControlStateNormal];
[_reconnectButton addTarget:self
action:@selector(didTapReconnect:)
forControlEvents:UIControlEventTouchUpInside];
_reconnectButton.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_reconnectButton];
_errorLabel = [[UILabel alloc] init];
_errorLabel.textColor = RemotingTheme.connectionViewForegroundColor;
_errorLabel.font = kErrorFont;
_errorLabel.numberOfLines = 0;
_errorLabel.lineBreakMode = NSLineBreakByWordWrapping;
_errorLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_errorLabel];
_reportThisLabel = [[UILabel alloc] init];
_reportThisLabel.accessibilityTraits = UIAccessibilityTraitLink;
_reportThisLabel.text = l10n_util::GetNSString(IDS_REPORT_THIS);
_reportThisLabel.textColor = RemotingTheme.hostErrorColor;
_reportThisLabel.font = kErrorFont;
_reportThisLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_reportThisLabel];
UITapGestureRecognizer* tapReportRecognizer =
[[UITapGestureRecognizer alloc] init];
tapReportRecognizer.numberOfTapsRequired = 1;
tapReportRecognizer.numberOfTouchesRequired = 1;
[tapReportRecognizer addTarget:self action:@selector(didTapReport:)];
_reportThisLabel.userInteractionEnabled = YES;
[_reportThisLabel addGestureRecognizer:tapReportRecognizer];
[self setupLayoutConstraints];
}
return self;
}
- (void)setupLayoutConstraints {
UILayoutGuide* errorTextLayoutGuide = [[UILayoutGuide alloc] init];
[self addLayoutGuide:errorTextLayoutGuide];
[NSLayoutConstraint activateConstraints:@[
[errorTextLayoutGuide.centerYAnchor
constraintEqualToAnchor:self.centerYAnchor],
[errorTextLayoutGuide.leadingAnchor
constraintEqualToAnchor:self.leadingAnchor],
[_errorLabel.topAnchor
constraintEqualToAnchor:errorTextLayoutGuide.topAnchor],
[_errorLabel.leadingAnchor
constraintEqualToAnchor:errorTextLayoutGuide.leadingAnchor],
[_errorLabel.trailingAnchor
constraintEqualToAnchor:errorTextLayoutGuide.trailingAnchor],
[_reportThisLabel.topAnchor
constraintEqualToAnchor:_errorLabel.bottomAnchor],
[_reportThisLabel.leadingAnchor
constraintEqualToAnchor:errorTextLayoutGuide.leadingAnchor],
[_reportThisLabel.bottomAnchor
constraintEqualToAnchor:errorTextLayoutGuide.bottomAnchor],
// _reportThisLabel's width should freely expand for its content.
[_reconnectButton.centerYAnchor constraintEqualToAnchor:self.centerYAnchor],
[_reconnectButton.leadingAnchor
constraintEqualToAnchor:errorTextLayoutGuide.trailingAnchor
constant:kPadding],
[_reconnectButton.trailingAnchor
constraintEqualToAnchor:self.trailingAnchor],
]];
}
#pragma mark - Properties
- (void)setErrorText:(NSString*)errorText {
if (errorText) {
_errorLabel.text = errorText;
_errorLabel.hidden = NO;
} else {
_errorLabel.hidden = YES;
}
}
- (NSString*)errorText {
return _errorLabel.text;
}
#pragma mark - Private
- (void)didTapReconnect:(id)sender {
if ([_delegate respondsToSelector:@selector(didTapReconnect)]) {
[_delegate didTapReconnect];
}
}
- (void)didTapReport:(UITapGestureRecognizer*)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
[self.delegate didTapReport];
}
}
@end