// // MainViewController.m // kneet2 // // StoryBoard - page 8. // // Created by Jason Lee on 10/2/15. // Copyright © 2015 ntels. All rights reserved. // #import "JDObject.h" #import "RequestHandler.h" #import "CustomButton.h" #import "UIButton+WebCache.h" #import "ImageUtil.h" #import "ThingsViewController.h" #import "RulesViewController.h" #import "HomeMemberViewController.h" #import "MainViewController.h" #import "HomeModeUpdateViewController.h" #import "HomeModeSettingsViewController.h" #import "CustomLabelButton.h" #import "CustomImageView.h" #import "PwdPopupView.h" @interface MainViewController () { RulesViewController *_rvc; HomeMemberViewController *_mvc; ImageUtil *_imageUtil; NSDate *_readDateTime; DashboardModel *_dashboard; BOOL _isNotFirstLoading; } @property (strong, nonatomic) JDViewController *currentChildViewController; @property (strong, nonatomic) UIView *thingsContainerView; @property (strong, nonatomic) UIView *rulesContainerView; @property (strong, nonatomic) UIView *membersContainerView; @end #pragma mark - Class Definition @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self initUI]; [self prepareViewDidLoad]; } - (void)initUI { //1. init tabBar //1-1. scroll top bottom //2. init scrollView CGFloat height = IPHONE_HEIGHT - kfMainTabBarHeight; [_scrollView setContentSize:CGSizeMake(IPHONE_WIDTH * 3, height)]; _scrollView.pagingEnabled = YES; _scrollView.scrollEnabled = NO; CGRect sr = CGRectMake(0, 0, IPHONE_WIDTH, height); //init child view for childViewController _thingsContainerView = [[UIView alloc] initWithFrame:sr]; _rulesContainerView = [[UIView alloc] initWithFrame:sr]; _membersContainerView = [[UIView alloc] initWithFrame:sr]; [_scrollView addSubview:_thingsContainerView]; _rulesContainerView.x = IPHONE_WIDTH; [_scrollView addSubview:_rulesContainerView]; _membersContainerView.x = IPHONE_WIDTH * 2; [_scrollView addSubview:_membersContainerView]; _constraintExpandViewTop.constant = -IPHONE_HEIGHT; _constraintExpandViewHeight.constant = IPHONE_HEIGHT; [self.view layoutIfNeeded]; [self testSocket]; } -(void)testSocket { return; // [[SocketServiceHandler sharedManager] connect]; // [[SocketServiceHandler sharedManager] connectServer]; // [[SocketServiceHandler sharedManager] initWithDelegate:self]; } - (void)initThingsViewController { if (!_tvc) { _tvc = (ThingsViewController *)[CommonUtil instantiateViewControllerWithIdentifier:@"ThingsViewController" storyboardName:@"Things"]; } [self addChildViewController:_tvc]; [_tvc didMoveToParentViewController:self]; if ([self isViewLoaded]) { [_tvc beginAppearanceTransition:YES animated:NO]; [_thingsContainerView addSubview:_tvc.view]; [_tvc endAppearanceTransition]; } } - (void)initRulesViewController { if (!_rvc) { _rvc = (RulesViewController *)[CommonUtil instantiateViewControllerWithIdentifier:@"RulesViewController" storyboardName:@"Rules"]; } [self addChildViewController:_rvc]; [_rvc didMoveToParentViewController:self]; if ([self isViewLoaded]) { [_rvc beginAppearanceTransition:YES animated:NO]; [_rulesContainerView addSubview:_rvc.view]; [_rvc endAppearanceTransition]; } } - (void)initMembersViewController { if (!_mvc) { _mvc = (HomeMemberViewController *)[CommonUtil instantiateViewControllerWithIdentifier:@"HomeMemberViewController" storyboardName:@"HomeMember"]; } [self addChildViewController:_mvc]; [_mvc didMoveToParentViewController:self]; if ([self isViewLoaded]) { [_mvc beginAppearanceTransition:YES animated:NO]; [_membersContainerView addSubview:_mvc.view]; [_mvc endAppearanceTransition]; } } - (void)viewWillAppear:(BOOL)animated { [self requestDashboard:nil]; } - (void)prepareViewDidLoad { // [self requestDashboard:nil]; // [[JDFacade facade] requestPollingHomeHubStatusInBackground]; // TODO: 웹소켓 연결해서 정보 받아오는 형식으로 전환할것 } - (void)setCurrentChildViewController:(JDViewController *)currentChildViewController { _currentChildViewController = currentChildViewController; if (![_currentChildViewController isEqual:_tvc]) { [_tvc releaseDevicesTimer]; } } #pragma mark - Main Logic - (void)updateHomeHubStatusToChildViewController { [self setContents]; if (_tvc) { [_tvc updateHomeHubStatusToDevices]; } if (_rvc) { [_rvc updateHomeHubStatusToRules]; } if (_mvc) { [_mvc updateHomeHubStatusToMembers]; } } - (void)updateCurrentViewController { if ([_currentChildViewController isEqual:_tvc]) { [_tvc prepareViewDidLoad]; } else if ([_currentChildViewController isEqual:_rvc]) { [_rvc prepareViewDidLoad]; } else if ([_currentChildViewController isEqual:_mvc]) { [_mvc prepareViewDidLoad]; } } - (void)requestDashboard:(JDFacadeCompletionCallBackHandler)completion { //parameters NSDictionary *parameter = @{@"device_id": [JDFacade facade].loginUser.noticeReadTime ? [JDFacade facade].loginUser.noticeReadTime : ksEmptyString}; NSString *path = [NSString stringWithFormat:API_GET_DASHBOARD, [[JDFacade facade].loginUser custId], [[JDFacade facade].loginUser ctrtGrpId]]; [[RequestHandler handler] sendAsyncGetRequestAPIPath:path parameters:parameter modelClass:[DashboardModel class] completion:^(id responseObject) { if (!responseObject) {//응답결과가 잘못되었거나 없을 경우, return; } DashboardModel *dashboard = (DashboardModel *) responseObject; NSLog(@"DashBoard Info : %@", responseObject); if (dashboard) {//API 성공 , _dashboard = dashboard; if (!_isNotFirstLoading) { _isNotFirstLoading = YES; // FIXME : 이부분이 어떤 내용인지 파악해야 한다. // [JDFacade facade].loginUser.homehubDeviceId = _dashboard.deviceId; //초대에서 넘어오는 경우, //when first loading this view. [self initThingsViewController]; self.currentChildViewController = _tvc; [_btnThings setHighlighted:YES]; } [self setContents]; } if (completion) { completion(); } } failure:^(id errorObject) { JDErrorModel *error = (JDErrorModel *)errorObject; [[JDFacade facade] alert:error.errorMessage]; }]; } - (void)requestUpdateHomeGroupImage:(UIImage *)profileImage { //parameters NSDictionary *parameter = @{@"image_file": profileImage}; NSString *path = [NSString stringWithFormat:API_POST_HOMEGROUP_UPDATE_IMAGE]; [[RequestHandler handler] sendAsyncPostRequestAPIPath:path parameters:parameter modelClass:[LoginModel class] completion:^(id responseObject) { if (!responseObject) {//응답결과가 잘못되었거나 없을 경우, return; } LoginModel *response = (LoginModel *)responseObject; if (response) {//API 성공 , _dashboard.imageFileName = response.imageFileName; [_btnHomegrpImage sd_setImageWithURL:[NSURL URLWithString:response.imageFileName] forState:UIControlStateNormal placeholderImage:nil options:SDWebImageRefreshCached]; [[JDFacade facade] toast:@"홈 이미지를 변경했습니다"]; } } failure:^(id errorObject) { JDErrorModel *error = (JDErrorModel *)errorObject; [[JDFacade facade] alert:error.errorMessage]; }]; } //extendView 컨텐츠 설정 - (void)setContents { _lblNoticeCount.text = _dashboard.noticeCount; _lblPushCount.text = _dashboard.pushCount; _imgvHomehubOff.hidden = [JDFacade facade].loginUser.isHomehubOnline; _btnHomeHub.enabled = [JDFacade facade].loginUser.hasHomeHub; _btnHomeHub.alpha = _btnHomeHub.enabled ? 1.0f : 0.4f; //don't delete - FOR KNEET2.0 // [_btnHomegrpImage sd_setImageWithURL:[NSURL URLWithString:_dashboard.imageFileName] forState:UIControlStateNormal placeholderImage:nil options:SDWebImageRefreshCached]; NSInteger i = 0; for (ModeModel *mode in _dashboard.modeList) {//모드버튼 설정 CustomLabelButton *btn = _btnModes[i]; [btn setTitle:mode.modeName]; if (![JDFacade facade].loginUser.hasHomeHub) {//비활성모드 : 홈허브가 없을 경우, 또는 삭제된 경우, [btn sd_setImageWithURL:[NSURL URLWithString:mode.imageFileDisableName] forState:UIControlStateNormal]; btn.label.textColor = kUITextColor04; btn.label.alpha = 0.4f; btn.enabled = NO; } else { if ([mode.useYn boolValue]) {//활성모드 [btn sd_setImageWithURL:[NSURL URLWithString:mode.imageFileActiveName] forState:UIControlStateNormal]; btn.label.textColor = kUITextColor01; btn.label.alpha = 1.0f; btn.enabled = YES; } else {//일반모드 [btn sd_setImageWithURL:[NSURL URLWithString:mode.imageFileName] forState:UIControlStateNormal]; btn.label.textColor = kUITextColor04; btn.label.alpha = 1.0f; btn.enabled = YES; } } i++; } [self checkTempPassword]; } // TODO : 임시 비밀번호 변경관련 작업 할것. - (void)checkTempPassword { if ([JDFacade facade].loginUser.tempPasswordYn && [[JDFacade facade].loginUser.tempPasswordYn boolValue]) { [[JDFacade facade] confirm:@"임시 비밀번호를 변경해주세요" completion:^(CustomAlertView *alertView, NSInteger buttonIndex) { if (buttonIndex == 0) {//OK PwdPopupView *popup = [[PwdPopupView alloc] initFromNib]; [popup show]; } }]; } } - (void)updateRulesListRecently { [_rvc prepareViewDidLoad]; } #pragma mark - ImageUtil delegate - (void)didFinishPickingImage:(UIImage *)image { [self requestUpdateHomeGroupImage:image]; } #pragma mark - SocketServiceHandler delegate -(void)socketConnectComplete { // NSMutableDictionary *data = [[NSMutableDictionary alloc] init]; // // data[@"message_type"] = @"auth"; // data[@"member_id"] = @"100"; // data[@"password"] = @"1234"; // data[@"os_type"] = @"MA"; // data[@"cust_id"] = @"1002"; // data[@"ctrt_grp_id"] = @"1002"; // // // [[SocketServiceHandler sharedManager] sendData:data]; } #pragma mark - UI Control - (void)loadThingsViewController { [[JDFacade facade] showLoadingWhileExecutingBlock:^{ if (!_tvc) { dispatch_async(dispatch_get_main_queue(), ^{ [self initThingsViewController]; }); } } completionHandler:^{ CGPoint cpoint = CGPointMake(0, 0); [_scrollView setContentOffset:cpoint animated:NO]; [_btnThings setHighlighted:YES]; [_btnRules setHighlighted:NO]; [_btnMembers setHighlighted:NO]; [_tvc prepareViewDidLoad]; self.currentChildViewController = _tvc; }]; } - (void)loadRulesViewController { [[JDFacade facade] showLoadingWhileExecutingBlock:^{ if (!_rvc) { dispatch_async(dispatch_get_main_queue(), ^{ [self initRulesViewController]; }); } } completionHandler:^{ CGPoint cpoint = CGPointMake(IPHONE_WIDTH, 0); [_scrollView setContentOffset:cpoint animated:NO]; [_btnThings setHighlighted:NO]; [_btnRules setHighlighted:YES]; [_btnMembers setHighlighted:NO]; [_rvc prepareViewDidLoad]; self.currentChildViewController = _rvc; }]; } - (void)loadMembersViewController { [[JDFacade facade] showLoadingWhileExecutingBlock:^{ if (!_mvc) { dispatch_async(dispatch_get_main_queue(), ^{ [self initMembersViewController]; }); } } completionHandler:^{ CGPoint cpoint = CGPointMake(IPHONE_WIDTH * 2, 0); [_scrollView setContentOffset:cpoint animated:NO]; [_btnThings setHighlighted:NO]; [_btnRules setHighlighted:NO]; [_btnMembers setHighlighted:YES]; [_mvc prepareViewDidLoad]; self.currentChildViewController = _mvc; }]; } #pragma mark - UI Events - (IBAction)btnThingsTouched:(id)sender { [self loadThingsViewController]; } - (IBAction)btnRuleTouched:(id)sender { [self loadRulesViewController]; } - (IBAction)btnMemberTouched:(id)sender { [self loadMembersViewController]; } - (IBAction)btnExtendTouched:(id)sender { _constraintExpandViewTop.constant = -IPHONE_HEIGHT; [UIView animateWithDuration:kfAnimationDur animations:^{ [self.view layoutIfNeeded]; } completion:^(BOOL finished) { [self requestDashboard:nil]; }]; } - (IBAction)btnCollapseTouched:(id)sender { _constraintExpandViewTop.constant = 0; [UIView animateWithDuration:kfAnimationDur animations:^{ [self.view layoutIfNeeded]; } completion:^(BOOL finished) { if ([_currentChildViewController isEqual:_tvc]) { [_tvc prepareViewDidLoad]; } }]; } - (IBAction)btnProfileTouched:(id)sender { if (!_imageUtil) { _imageUtil = [[ImageUtil alloc] init]; _imageUtil.delegate = self; } [_imageUtil prepareImagePicker:self]; } - (IBAction)btnNoticeTouched:(id)sender { UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"NoticeViewController" storyboardName:@"Main"]; [self presentViewController:vc animated:YES completion:nil]; } - (void)btnMessageBoxTouched:(id)sender { UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"MessageBoxViewController" storyboardName:@"Main"]; [self presentViewController:vc animated:YES completion:nil]; } - (void)btnHomeHubTouched:(id)sender { UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"HomeHubViewController" storyboardName:@"Main"]; [self presentViewController:vc animated:YES completion:nil]; } - (IBAction)btnSettingsTouched:(id)sender { UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"SettingsViewController" storyboardName:@"Settings"]; [self presentViewController:vc animated:YES completion:nil]; } - (IBAction)btnModeHomeTouched:(id)sender { [self doChangeHomeMode:HOME_MODE_HOME]; } - (IBAction)btnModeAwayTouched:(id)sender { [self doChangeHomeMode:HOME_MODE_AWAY]; } - (IBAction)btnModeMorningTouched:(id)sender { [self doChangeHomeMode:HOME_MODE_MORNING]; } - (IBAction)btnModeNightTouched:(id)sender { [self doChangeHomeMode:HOME_MODE_NIGHT]; } - (void)doChangeHomeMode:(NSString *)modeCode { if (![JDFacade facade].loginUser.isHomehubOnline || ![JDFacade facade].loginUser.hasHomeHub) { [[JDFacade facade] toast:@"홈허브가 온라인 상태로\n연결되어 있을 때 시도해주세요"]; return; } ModeModel *mode = [_dashboard.modeList objectKey:@"basicModeCode" eqaulToString:modeCode]; //로직 변경 // if (!mode.homegrpSceneId || [mode.homegrpSceneId isEmptyString]) { // // if ([JDFacade facade].loginUser.level < 90) {//일반 멤버 // [[JDFacade facade] toast:@"아직 선택된 장치가 없습니다.\r장치선택은 마스터만 할 수 있습니다."]; // } else { // HomeModeSettingsViewController *vc = (HomeModeSettingsViewController *)[CommonUtil instantiateViewControllerWithIdentifier:@"HomeModeSettingsViewController" storyboardName:@"Main"]; // vc.mode = mode; // // [self presentViewController:vc animated:YES completion:nil]; // } // return; // } HomeModeUpdateViewController *vc = (HomeModeUpdateViewController *)[CommonUtil instantiateViewControllerWithIdentifier:@"HomeModeUpdateViewController" storyboardName:@"Main"]; vc.mode = mode; [self presentViewController:vc animated:YES completion:nil]; } - (IBAction)btnDashboardRefresh:(id)sender { [self requestDashboard:nil]; } #pragma mark - MemoryWarning - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end