// // HomeScreenController.m // RobloxMobile // // Created by Ariel Lichtin on 5/23/14. // Copyright (c) 2014 ROBLOX. All rights reserved. // #import "HomeScreenController.h" #import "UserInfo.h" #import "SignUpScreenController.h" #import "Flurry.h" #import "RobloxInfo.h" #import "RBMobileWebViewController.h" #import "LoginManager.h" #import "ABTestManager.h" #import "RBMoreViewController.h" #import "RobloxNotifications.h" //---METRICS--- #define HSC_signUpControllerFromPlayNow @"HOME SCREEN - Sign Up Pressed While Guest" @interface HomeScreenController () @end @implementation HomeScreenController { NSInteger selectedIndexLogin; } -(void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gotLoginSuccessfulNotification:) name:RBX_NOTIFY_LOGIN_SUCCEEDED object:nil ]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gotLogoutNotification:) name:RBX_NOTIFY_LOGGED_OUT object:nil ]; } -(void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (void)viewDidLoad { [super viewDidLoad]; self.delegate = self; NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: [RobloxInfo getUserAgentString], @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; //check if the user is logged in, if not make the Games Page the landing page if ([UserInfo CurrentPlayer].userLoggedIn == NO) [self setSelectedIndex:1]; //set the images if ([RobloxInfo thisDeviceIsATablet]) { [((UIViewController*)self.viewControllers[0]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Home Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[0]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Home On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[1]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Game Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[1]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Game On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[2]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Catalog Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[2]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Catalog On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[3]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Friends Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[3]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Friends On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[4]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Messages Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[4]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Messages On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[5]).tabBarItem setImage:[[UIImage imageNamed:@"Icon More Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[5]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon More On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; } else { [((UIViewController*)self.viewControllers[0]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Home Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[0]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Home On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[1]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Game Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[1]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Game On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[2]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Friends Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[2]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Friends On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[3]).tabBarItem setImage:[[UIImage imageNamed:@"Icon Messages Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[3]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon Messages On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[4]).tabBarItem setImage:[[UIImage imageNamed:@"Icon More Off"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; [((UIViewController*)self.viewControllers[4]).tabBarItem setSelectedImage:[[UIImage imageNamed:@"Icon More On"] imageWithRenderingMode:[RobloxTheme iconColoringMode]]]; } } -(RBXAnalyticsCustomData) getCurrentTabContext { RBXAnalyticsCustomData currentTab = RBXACustomTabGames; if ([RobloxInfo thisDeviceIsATablet]) { switch (self.selectedIndex) { case 0 : { currentTab = RBXACustomTabHome; } break; case 1 : { currentTab = RBXACustomTabGames; } break; case 2 : { currentTab = RBXACustomTabCatalog; } break; case 3 : { currentTab = RBXACustomTabFriends; } break; case 4 : { currentTab = RBXACustomTabMessages; } break; case 5 : { currentTab = RBXACustomTabMore; if ([self.viewControllers[5] respondsToSelector:@selector(getMostRecentTab)]) currentTab = [((RBMoreViewController*)self.viewControllers[5]) getMostRecentTab]; } break; } } else { switch (self.selectedIndex) { case 0 : { currentTab = RBXACustomTabHome; } break; case 1 : { currentTab = RBXACustomTabGames; } break; case 2 : { currentTab = RBXACustomTabFriends; } break; case 3 : { currentTab = RBXACustomTabMessages; } break; case 4 : { currentTab = RBXACustomTabMore; if ([self.viewControllers[4] respondsToSelector:@selector(getMostRecentTab)]) currentTab = [((RBMoreViewController*)self.viewControllers[4]) getMostRecentTab]; } break; } } return currentTab; } - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { NSUInteger indexOfTab = [self.viewControllers indexOfObject:viewController]; if (self.selectedIndex == indexOfTab && self.viewControllers.count > 1) { //drill back to the original screen UINavigationController* tappedVC = (UINavigationController*)viewController; UIViewController* rootVC = tappedVC.viewControllers[0]; [tappedVC popToViewController:rootVC animated:YES]; //if it is a webview, reload the original url if ([rootVC isKindOfClass:[RBMobileWebViewController class]]) { [(RBMobileWebViewController*)rootVC reloadWebPage]; } else if ([viewController isEqual:[[self viewControllers] objectAtIndex:1]] && [RobloxInfo thisDeviceIsATablet]) { //if we are on the games page, reload the games if ([rootVC respondsToSelector:@selector(loadGames)]) [rootVC performSelector:@selector(loadGames)]; } //return NO; } UserInfo* userInfo = [UserInfo CurrentPlayer]; if(!userInfo.userLoggedIn && ![viewController isEqual:[[self viewControllers] objectAtIndex:1]]) { NSString* controllerName = [[LoginManager sharedInstance] isFacebookEnabled] ? @"SignUpScreenControllerWithSocial" : @"SignUpScreenController"; //ask the user to sign up or log in to see these pages [Flurry logEvent:HSC_signUpControllerFromPlayNow]; NSString* storyboardName = [RobloxInfo getStoryboardName]; UIStoryboard* storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; SignUpScreenController* controller = (SignUpScreenController*)[storyboard instantiateViewControllerWithIdentifier:controllerName]; controller.modalPresentationStyle = UIModalPresentationFormSheet; [self.navigationController presentViewController:controller animated:YES completion:nil]; selectedIndexLogin = [self.viewControllers indexOfObject:viewController]; return NO; } return YES; } -(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { [[RBXEventReporter sharedInstance] reportTabButtonClick:[self getCurrentTabContext]]; } -(void) gotLoginSuccessfulNotification:(NSNotification*) notification { dispatch_async(dispatch_get_main_queue(), ^{ [self setSelectedIndex:selectedIndexLogin]; }); } -(void) gotLogoutNotification:(NSNotification*) notification { if ([[ABTestManager sharedInstance] IsInTestMobileGuestMode]) { dispatch_async(dispatch_get_main_queue(), ^ { [self setSelectedIndex:1]; }); } } @end