Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: remoting/client/ios/app/remoting_view_controller.mm

Issue 2854273002: [CRD iOS] Implementing save to keychain and user defaults for login info. Refactor remoting service. (Closed)
Patch Set: Removing authenticate with refresh token from pub api. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #if !defined(__has_feature) || !__has_feature(objc_arc) 5 #if !defined(__has_feature) || !__has_feature(objc_arc)
6 #error "This file requires ARC support." 6 #error "This file requires ARC support."
7 #endif 7 #endif
8 8
9 #import "remoting/client/ios/app/remoting_view_controller.h" 9 #import "remoting/client/ios/app/remoting_view_controller.h"
10 10
11 #import "base/mac/bind_objc_block.h" 11 #import "base/mac/bind_objc_block.h"
12 #import "ios/third_party/material_components_ios/src/components/AnimationTiming/ src/MaterialAnimationTiming.h" 12 #import "ios/third_party/material_components_ios/src/components/AnimationTiming/ src/MaterialAnimationTiming.h"
13 #import "ios/third_party/material_components_ios/src/components/AppBar/src/Mater ialAppBar.h" 13 #import "ios/third_party/material_components_ios/src/components/AppBar/src/Mater ialAppBar.h"
14 #import "ios/third_party/material_components_ios/src/components/Dialogs/src/Mate rialDialogs.h" 14 #import "ios/third_party/material_components_ios/src/components/Dialogs/src/Mate rialDialogs.h"
15 #import "ios/third_party/material_components_ios/src/components/Snackbar/src/Mat erialSnackbar.h" 15 #import "ios/third_party/material_components_ios/src/components/Snackbar/src/Mat erialSnackbar.h"
16 #import "remoting/client/ios/app/client_connection_view_controller.h" 16 #import "remoting/client/ios/app/client_connection_view_controller.h"
17 #import "remoting/client/ios/app/host_collection_view_controller.h" 17 #import "remoting/client/ios/app/host_collection_view_controller.h"
18 #import "remoting/client/ios/app/host_view_controller.h" 18 #import "remoting/client/ios/app/host_view_controller.h"
19 #import "remoting/client/ios/app/remoting_settings_view_controller.h" 19 #import "remoting/client/ios/app/remoting_settings_view_controller.h"
20 #import "remoting/client/ios/domain/client_session_details.h" 20 #import "remoting/client/ios/domain/client_session_details.h"
21 #import "remoting/client/ios/facade/remoting_authentication.h"
21 #import "remoting/client/ios/facade/remoting_service.h" 22 #import "remoting/client/ios/facade/remoting_service.h"
22 #import "remoting/client/ios/session/remoting_client.h" 23 #import "remoting/client/ios/session/remoting_client.h"
23 24
24 #include "base/strings/sys_string_conversions.h" 25 #include "base/strings/sys_string_conversions.h"
25 #include "remoting/base/oauth_token_getter.h" 26 #include "remoting/base/oauth_token_getter.h"
26 #include "remoting/client/connect_to_host_info.h" 27 #include "remoting/client/connect_to_host_info.h"
27 28
28 static CGFloat kHostInset = 5.f; 29 static CGFloat kHostInset = 5.f;
29 30
30 @interface RemotingViewController ()<HostCollectionViewControllerDelegate, 31 @interface RemotingViewController ()<HostCollectionViewControllerDelegate,
(...skipping 21 matching lines...) Expand all
52 [[UICollectionViewFlowLayout alloc] init]; 53 [[UICollectionViewFlowLayout alloc] init];
53 layout.minimumInteritemSpacing = 0; 54 layout.minimumInteritemSpacing = 0;
54 CGFloat sectionInset = kHostInset * 2.f; 55 CGFloat sectionInset = kHostInset * 2.f;
55 [layout setSectionInset:UIEdgeInsetsMake(sectionInset, sectionInset, 56 [layout setSectionInset:UIEdgeInsetsMake(sectionInset, sectionInset,
56 sectionInset, sectionInset)]; 57 sectionInset, sectionInset)];
57 HostCollectionViewController* collectionVC = [ 58 HostCollectionViewController* collectionVC = [
58 [HostCollectionViewController alloc] initWithCollectionViewLayout:layout]; 59 [HostCollectionViewController alloc] initWithCollectionViewLayout:layout];
59 self = [super initWithContentViewController:collectionVC]; 60 self = [super initWithContentViewController:collectionVC];
60 if (self) { 61 if (self) {
61 _remotingService = [RemotingService SharedInstance]; 62 _remotingService = [RemotingService SharedInstance];
62 [_remotingService setAuthenticationDelegate:self];
63 63
64 _collectionViewController = collectionVC; 64 _collectionViewController = collectionVC;
65 _collectionViewController.flexHeaderContainerViewController = self; 65 _collectionViewController.flexHeaderContainerViewController = self;
66 _collectionViewController.delegate = self; 66 _collectionViewController.delegate = self;
67 67
68 _appBar = [[MDCAppBar alloc] init]; 68 _appBar = [[MDCAppBar alloc] init];
69 [self addChildViewController:_appBar.headerViewController]; 69 [self addChildViewController:_appBar.headerViewController];
70 70
71 _appBar.headerViewController.headerView.backgroundColor = 71 _appBar.headerViewController.headerView.backgroundColor =
72 [UIColor clearColor]; 72 [UIColor clearColor];
(...skipping 20 matching lines...) Expand all
93 object:nil]; 93 object:nil];
94 } 94 }
95 return self; 95 return self;
96 } 96 }
97 97
98 #pragma mark - UIViewController 98 #pragma mark - UIViewController
99 99
100 - (void)viewDidLoad { 100 - (void)viewDidLoad {
101 [super viewDidLoad]; 101 [super viewDidLoad];
102 [_appBar addSubviewsToParent]; 102 [_appBar addSubviewsToParent];
103
104 [[NSNotificationCenter defaultCenter]
105 addObserver:self
106 selector:@selector(hostsDidUpdateNotification:)
107 name:kHostsDidUpdate
108 object:nil];
109 [[NSNotificationCenter defaultCenter]
110 addObserver:self
111 selector:@selector(userDidUpdateNotification:)
112 name:kUserDidUpdate
113 object:nil];
114 }
115
116 - (void)viewWillAppear:(BOOL)animated {
117 [super viewWillAppear:animated];
118
119 [self nowAuthenticated:_remotingService.authentication.user.isAuthenticated];
103 [self presentStatus]; 120 [self presentStatus];
104 } 121 }
105 122
106 - (void)viewDidAppear:(BOOL)animated { 123 - (void)viewDidAppear:(BOOL)animated {
124 [super viewDidAppear:animated];
107 if (!_isAuthenticated) { 125 if (!_isAuthenticated) {
108 // TODO(nicholss): This is used as a demo of the app functionality for the 126 // TODO(nicholss): This is used as a demo of the app functionality for the
109 // moment but the real app will force the login flow if unauthenticated. 127 // moment but the real app will force the login flow if unauthenticated.
110 [self didSelectSettings]; 128 [self didSelectSettings];
111 // [self didSelectRefresh]; 129 // [self didSelectRefresh];
112 MDCSnackbarMessage* message = [[MDCSnackbarMessage alloc] init]; 130 MDCSnackbarMessage* message = [[MDCSnackbarMessage alloc] init];
113 message.text = @"Please login."; 131 message.text = @"Please login.";
114 [MDCSnackbarManager showMessage:message]; 132 [MDCSnackbarManager showMessage:message];
133 } else {
134 [_remotingService requestHostListFetch];
115 } 135 }
116 } 136 }
117 137
118 - (void)viewDidLayoutSubviews { 138 - (void)viewDidLayoutSubviews {
119 [super viewDidLayoutSubviews]; 139 [super viewDidLayoutSubviews];
120 140
121 // Adjust the collection view's position and size so that it doesn't get 141 // Adjust the collection view's position and size so that it doesn't get
122 // overlayed by the navigation bar. 142 // overlayed by the navigation bar.
123 CGFloat collectionOffsetY = 143 CGFloat collectionOffsetY =
124 _appBar.headerViewController.headerView.frame.size.height; 144 _appBar.headerViewController.headerView.frame.size.height;
125 CGFloat collectionHeight = self.view.bounds.size.height - collectionOffsetY; 145 CGFloat collectionHeight = self.view.bounds.size.height - collectionOffsetY;
126 CGRect oldFrame = _collectionViewController.collectionView.frame; 146 CGRect oldFrame = _collectionViewController.collectionView.frame;
127 _collectionViewController.collectionView.frame = 147 _collectionViewController.collectionView.frame =
128 CGRectMake(oldFrame.origin.x, collectionOffsetY, oldFrame.size.width, 148 CGRectMake(oldFrame.origin.x, collectionOffsetY, oldFrame.size.width,
129 collectionHeight); 149 collectionHeight);
130 } 150 }
131 151
152 #pragma mark - Remoting Service Notifications
153
154 - (void)hostsDidUpdateNotification:(NSNotification*)notification {
155 [_collectionViewController.collectionView reloadData];
156 }
157
158 - (void)userDidUpdateNotification:(NSNotification*)notification {
159 [self nowAuthenticated:_remotingService.authentication.user.isAuthenticated];
160 }
161
132 #pragma mark - RemotingAuthenticationDelegate 162 #pragma mark - RemotingAuthenticationDelegate
133 163
134 - (void)nowAuthenticated:(BOOL)authenticated { 164 - (void)nowAuthenticated:(BOOL)authenticated {
135 if (authenticated) { 165 if (authenticated) {
136 MDCSnackbarMessage* message = [[MDCSnackbarMessage alloc] init]; 166 MDCSnackbarMessage* message = [[MDCSnackbarMessage alloc] init];
137 message.text = @"Logged In!"; 167 message.text = @"Logged In!";
138 [MDCSnackbarManager showMessage:message]; 168 [MDCSnackbarManager showMessage:message];
139 [_remotingService setHostListDelegate:self];
140 } else { 169 } else {
141 MDCSnackbarMessage* message = [[MDCSnackbarMessage alloc] init]; 170 MDCSnackbarMessage* message = [[MDCSnackbarMessage alloc] init];
142 message.text = @"Not logged in."; 171 message.text = @"Not logged in.";
143 [MDCSnackbarManager showMessage:message]; 172 [MDCSnackbarManager showMessage:message];
144 [_remotingService setHostListDelegate:nil];
145 } 173 }
146 _isAuthenticated = authenticated; 174 _isAuthenticated = authenticated;
147 [_collectionViewController.collectionView reloadData]; 175 [_collectionViewController.collectionView reloadData];
148 } 176 }
149 177
150 #pragma mark - RemotingHostListDelegate 178 #pragma mark - RemotingHostListDelegate
151 179
152 // TODO(nicholss): these need to be a stats change like "none, loading, 180 // TODO(nicholss): these need to be a stats change like "none, loading,
153 // updated"... 181 // updated"...
154 - (void)hostListUpdated { 182 - (void)hostListUpdated {
(...skipping 14 matching lines...) Expand all
169 } 197 }
170 return nil; 198 return nil;
171 } 199 }
172 200
173 #pragma mark - HostCollectionViewControllerDelegate 201 #pragma mark - HostCollectionViewControllerDelegate
174 202
175 - (void)didSelectCell:(HostCollectionViewCell*)cell 203 - (void)didSelectCell:(HostCollectionViewCell*)cell
176 completion:(void (^)())completionBlock { 204 completion:(void (^)())completionBlock {
177 _client = [[RemotingClient alloc] init]; 205 _client = [[RemotingClient alloc] init];
178 206
179 [_remotingService 207 [_remotingService.authentication
180 callbackWithAccessToken:base::BindBlockArc(^( 208 callbackWithAccessToken:base::BindBlockArc(^(
181 remoting::OAuthTokenGetter::Status status, 209 remoting::OAuthTokenGetter::Status status,
182 const std::string& user_email, 210 const std::string& user_email,
183 const std::string& access_token) { 211 const std::string& access_token) {
184 // TODO(nicholss): Check status. 212 // TODO(nicholss): Check status.
185 HostInfo* hostInfo = cell.hostInfo; 213 HostInfo* hostInfo = cell.hostInfo;
186 [_client connectToHost:hostInfo 214 [_client connectToHost:hostInfo
187 username:base::SysUTF8ToNSString(user_email) 215 username:base::SysUTF8ToNSString(user_email)
188 accessToken:base::SysUTF8ToNSString(access_token)]; 216 accessToken:base::SysUTF8ToNSString(access_token)];
189 })]; 217 })];
190 218
191 ClientConnectionViewController* clientConnectionViewController = 219 ClientConnectionViewController* clientConnectionViewController =
192 [[ClientConnectionViewController alloc] init]; 220 [[ClientConnectionViewController alloc] init];
193 clientConnectionViewController.delegate = self; 221 clientConnectionViewController.delegate = self;
194 [self presentViewController:clientConnectionViewController 222 [self presentViewController:clientConnectionViewController
195 animated:YES 223 animated:YES
196 completion:nil]; 224 completion:nil];
197 completionBlock(); 225 completionBlock();
198 } 226 }
199 227
200 - (NSInteger)getHostCount { 228 - (NSInteger)getHostCount {
201 NSArray<HostInfo*>* hosts = [_remotingService getHosts]; 229 return _remotingService.hosts.count;
202 return [hosts count];
203 } 230 }
204 231
205 - (HostInfo*)getHostAtIndexPath:(NSIndexPath*)path { 232 - (HostInfo*)getHostAtIndexPath:(NSIndexPath*)path {
206 NSArray<HostInfo*>* hosts = [_remotingService getHosts]; 233 return _remotingService.hosts[path.row];
207 return hosts[path.row];
208 } 234 }
209 235
210 #pragma mark - UIViewControllerTransitioningDelegate 236 #pragma mark - UIViewControllerTransitioningDelegate
211 237
212 - (nullable id<UIViewControllerAnimatedTransitioning>) 238 - (nullable id<UIViewControllerAnimatedTransitioning>)
213 animationControllerForPresentedController:(UIViewController*)presented 239 animationControllerForPresentedController:(UIViewController*)presented
214 presentingController:(UIViewController*)presenting 240 presentingController:(UIViewController*)presenting
215 sourceController:(UIViewController*)source { 241 sourceController:(UIViewController*)source {
216 // TODO(nicholss): Not implemented yet. 242 // TODO(nicholss): Not implemented yet.
217 return nil; 243 return nil;
(...skipping 19 matching lines...) Expand all
237 263
238 - (void)hostSessionStatusChanged:(NSNotification*)notification { 264 - (void)hostSessionStatusChanged:(NSNotification*)notification {
239 NSLog(@"hostSessionStatusChanged: %@", [notification userInfo]); 265 NSLog(@"hostSessionStatusChanged: %@", [notification userInfo]);
240 } 266 }
241 267
242 - (void)closeViewController { 268 - (void)closeViewController {
243 [self dismissViewControllerAnimated:true completion:nil]; 269 [self dismissViewControllerAnimated:true completion:nil];
244 } 270 }
245 271
246 - (void)didSelectRefresh { 272 - (void)didSelectRefresh {
247 // TODO(nicholss) implement this. 273 // TODO(nicholss): Might want to rate limit this. Maybe remoting service
248 NSLog(@"Should refresh..."); 274 // controls that.
249 _dialogTransitionController = [[MDCDialogTransitionController alloc] init]; 275 [_remotingService requestHostListFetch];
250 } 276 }
251 277
252 - (void)didSelectSettings { 278 - (void)didSelectSettings {
253 RemotingSettingsViewController* settingsViewController = 279 RemotingSettingsViewController* settingsViewController =
254 [[RemotingSettingsViewController alloc] init]; 280 [[RemotingSettingsViewController alloc] init];
255 [self presentViewController:settingsViewController 281 [self presentViewController:settingsViewController
256 animated:YES 282 animated:YES
257 completion:nil]; 283 completion:nil];
258 } 284 }
259 285
260 - (void)presentStatus { 286 - (void)presentStatus {
261 MDCSnackbarMessage* message = [[MDCSnackbarMessage alloc] init]; 287 MDCSnackbarMessage* message = [[MDCSnackbarMessage alloc] init];
262 if (_isAuthenticated) { 288 if (_isAuthenticated) {
263 UserInfo* user = [_remotingService getUser];
264 message.text = [NSString 289 message.text = [NSString
265 stringWithFormat:@"Currently signed in as %@.", [user userEmail]]; 290 stringWithFormat:@"Currently signed in as %@.",
291 _remotingService.authentication.user.userEmail];
266 [MDCSnackbarManager showMessage:message]; 292 [MDCSnackbarManager showMessage:message];
267 } 293 }
268 } 294 }
269 295
270 @end 296 @end
OLDNEW
« no previous file with comments | « remoting/client/ios/app/remoting_view_controller.h ('k') | remoting/client/ios/domain/host_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698