Index: remoting/ios/app/remoting_view_controller.mm |
diff --git a/remoting/ios/app/remoting_view_controller.mm b/remoting/ios/app/remoting_view_controller.mm |
index 5d560a1b1fc8249661db30959a24c5c78992fb57..db5ec7981cf6d97b790c678e5e05f00abec225e9 100644 |
--- a/remoting/ios/app/remoting_view_controller.mm |
+++ b/remoting/ios/app/remoting_view_controller.mm |
@@ -12,10 +12,13 @@ |
#import "ios/third_party/material_components_ios/src/components/AnimationTiming/src/MaterialAnimationTiming.h" |
#import "ios/third_party/material_components_ios/src/components/AppBar/src/MaterialAppBar.h" |
#import "ios/third_party/material_components_ios/src/components/Dialogs/src/MaterialDialogs.h" |
+#import "ios/third_party/material_components_ios/src/components/ShadowElevations/src/MaterialShadowElevations.h" |
+#import "ios/third_party/material_components_ios/src/components/ShadowLayer/src/MaterialShadowLayer.h" |
#import "ios/third_party/material_components_ios/src/components/Snackbar/src/MaterialSnackbar.h" |
#import "remoting/ios/app/app_delegate.h" |
#import "remoting/ios/app/client_connection_view_controller.h" |
#import "remoting/ios/app/host_collection_view_controller.h" |
+#import "remoting/ios/app/host_setup_view_controller.h" |
#import "remoting/ios/app/host_view_controller.h" |
#import "remoting/ios/app/remoting_menu_view_controller.h" |
#import "remoting/ios/app/remoting_theme.h" |
@@ -36,6 +39,7 @@ static CGFloat kHostInset = 5.f; |
MDCDialogTransitionController* _dialogTransitionController; |
MDCAppBar* _appBar; |
HostCollectionViewController* _collectionViewController; |
+ HostSetupViewController* _setupViewController; |
RemotingService* _remotingService; |
} |
@end |
@@ -54,20 +58,22 @@ static CGFloat kHostInset = 5.f; |
CGFloat sectionInset = kHostInset * 2.f; |
[layout setSectionInset:UIEdgeInsetsMake(sectionInset, sectionInset, |
sectionInset, sectionInset)]; |
- HostCollectionViewController* collectionVC = [ |
- [HostCollectionViewController alloc] initWithCollectionViewLayout:layout]; |
- self = [super initWithContentViewController:collectionVC]; |
+ self = [super init]; |
if (self) { |
_remotingService = RemotingService.instance; |
- _collectionViewController = collectionVC; |
- _collectionViewController.flexHeaderContainerViewController = self; |
+ _collectionViewController = [[HostCollectionViewController alloc] |
+ initWithCollectionViewLayout:layout]; |
_collectionViewController.delegate = self; |
+ _collectionViewController.scrollViewDelegate = self.headerViewController; |
+ |
+ _setupViewController = [[HostSetupViewController alloc] init]; |
+ _setupViewController.scrollViewDelegate = self.headerViewController; |
_appBar = [[MDCAppBar alloc] init]; |
[self addChildViewController:_appBar.headerViewController]; |
- self.navigationItem.title = @"Chrome Remote Desktop"; |
+ self.navigationItem.title = @"chrome remote desktop"; |
UIBarButtonItem* menuButton = |
[[UIBarButtonItem alloc] initWithImage:RemotingTheme.menuIcon |
@@ -90,6 +96,17 @@ static CGFloat kHostInset = 5.f; |
MDCNavigationBarTextColorAccessibilityMutator* mutator = |
[[MDCNavigationBarTextColorAccessibilityMutator alloc] init]; |
[mutator mutate:_appBar.navigationBar]; |
+ |
+ MDCFlexibleHeaderView* headerView = self.headerViewController.headerView; |
+ headerView.backgroundColor = [UIColor clearColor]; |
+ |
+ // Use a custom shadow under the flexible header. |
+ MDCShadowLayer* shadowLayer = [MDCShadowLayer layer]; |
+ [headerView setShadowLayer:shadowLayer |
+ intensityDidChangeBlock:^(CALayer* layer, CGFloat intensity) { |
+ CGFloat elevation = MDCShadowElevationAppBar * intensity; |
+ [(MDCShadowLayer*)layer setElevation:elevation]; |
+ }]; |
} |
return self; |
} |
@@ -116,8 +133,8 @@ static CGFloat kHostInset = 5.f; |
[[NSNotificationCenter defaultCenter] |
addObserver:self |
- selector:@selector(hostsDidUpdateNotification:) |
- name:kHostsDidUpdate |
+ selector:@selector(hostListStateDidChangeNotification:) |
+ name:kHostListStateDidChange |
object:nil]; |
[[NSNotificationCenter defaultCenter] |
addObserver:self |
@@ -151,8 +168,8 @@ static CGFloat kHostInset = 5.f; |
#pragma mark - Remoting Service Notifications |
-- (void)hostsDidUpdateNotification:(NSNotification*)notification { |
- [_collectionViewController.collectionView reloadData]; |
+- (void)hostListStateDidChangeNotification:(NSNotification*)notification { |
+ [self refreshContent]; |
} |
- (void)userDidUpdateNotification:(NSNotification*)notification { |
@@ -172,15 +189,7 @@ static CGFloat kHostInset = 5.f; |
[MDCSnackbarManager showMessage:message]; |
} |
_isAuthenticated = authenticated; |
- [_collectionViewController.collectionView reloadData]; |
-} |
- |
-#pragma mark - RemotingHostListDelegate |
- |
-// TODO(nicholss): these need to be a stats change like "none, loading, |
-// updated"... |
-- (void)hostListUpdated { |
- [_collectionViewController.collectionView reloadData]; |
+ [self refreshContent]; |
} |
#pragma mark - HostCollectionViewControllerDelegate |
@@ -262,4 +271,30 @@ animationControllerForDismissedController:(UIViewController*)dismissed { |
} |
} |
+- (void)refreshContent { |
+ if (_remotingService.hostListState == HostListStateNotFetched) { |
+ self.contentViewController = nil; |
+ return; |
+ } |
+ |
+ if (_remotingService.hostListState == HostListStateFetching) { |
+ NSLog(@"Fetching host list... TODO: Show fetching UI here."); |
+ return; |
+ } |
+ |
+ DCHECK(_remotingService.hostListState == HostListStateFetched); |
+ |
+ if (_remotingService.hosts.count > 0) { |
+ [_collectionViewController.collectionView reloadData]; |
+ self.headerViewController.headerView.trackingScrollView = |
+ _collectionViewController.collectionView; |
+ self.contentViewController = _collectionViewController; |
+ } else { |
+ self.contentViewController = _setupViewController; |
+ self.headerViewController.headerView.trackingScrollView = |
+ _setupViewController.collectionView; |
+ } |
+ self.contentViewController.view.frame = self.view.bounds; |
+} |
+ |
@end |