Files
2025-09-18 17:55:52 -04:00

206 lines
10 KiB
Plaintext

//
// 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