// // XPRoomActivityView.m // xplan-ios // // Created by 冯硕 on 2021/10/12. // #import "XPRoomActivityContainerView.h" ///Third #import #import ///Tool #import "AccountInfoStorage.h" #import "Api+Room.h" #import "ClientConfig.h" #import "NetImageView.h" #import "TTPopup.h" ///Model #import "UserInfoModel.h" #import "RoomInfoModel.h" #import "ActivityInfoModel.h" #import "AttachmentModel.h" #import "FirstRechargeModel.h" ///View #import "XPRoomHalfWebView.h" #import "XPCandyTreeViewController.h" #import "XPWebViewController.h" #import "XPRoomViewController.h" #import "XPFirstRechargeViewController.h" #import "XPFirstRechargeSuccessView.h" #import "XPArrangeMicViewController.h" @interface XPRoomActivityContainerView () ///容器 @property (nonatomic,strong) UIStackView *stackView; ///轮播图 @property (nonatomic,strong) SDCycleScrollView *cycleScrollView; /// @property (nonatomic,strong) UIView * placeHolderView; ///糖果树 @property (nonatomic,strong) NetImageView *candyTreeImageView; ///首充的 @property (nonatomic,strong) UIImageView *firstRechargeImageView; ///参加相亲 @property (nonatomic,strong) UIImageView *joinDatingView; ///host 代理 @property (nonatomic,weak) idhostDelegate; ///房间活动的列表 @property (nonatomic,copy) NSArray *activityList; @end @implementation XPRoomActivityContainerView - (instancetype)initWithdelegate:(id)delegate { self = [super init]; if (self) { self.hostDelegate = delegate; [self initSubViews]; [self initSubViewConstraints]; [self requestActivityList]; [self configCandyTree]; } return self; } #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.stackView]; [self.stackView addArrangedSubview:self.cycleScrollView]; [self.stackView addArrangedSubview:self.placeHolderView]; [self.stackView addArrangedSubview:self.firstRechargeImageView]; [self.stackView addArrangedSubview:self.candyTreeImageView]; [self.stackView addArrangedSubview:self.joinDatingView]; } - (void)initSubViewConstraints { [self.stackView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self); }]; [self.cycleScrollView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(65, 65)); }]; [self.firstRechargeImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(65, 65)); }]; [self.candyTreeImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(65, 65)); }]; [self.joinDatingView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(35); }]; } - (void)requestActivityList { NSString * roomId = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]; [Api roomActivityList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200) { NSArray * array = [ActivityInfoModel modelsWithArray:data.data]; if (array.count <=0) return; self.cycleScrollView.hidden = NO; self.activityList = array; NSMutableArray * picList = [NSMutableArray array]; [array enumerateObjectsUsingBlock:^(ActivityInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (obj.bannerPic.length > 0) { [picList addObject:obj.bannerPic]; } }]; self.cycleScrollView.imageURLStringsGroup = picList; if (array.count > 1) { [self.cycleScrollView setAutoScroll:YES]; self.cycleScrollView.autoScrollTimeInterval = 3; } else { [self.cycleScrollView setAutoScroll:NO]; } } } roomId:roomId type:@"2"]; } - (void)configCandyTree { UserInfoModel * userInfo = self.hostDelegate.getUserInfo; RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; if (userInfo.userLevelVo.experLevelSeq >= [ClientConfig shareConfig].openCandyTreeLimitLevel && [ClientConfig shareConfig].openCandyTree && roomInfo.boxSwitchVo.openBoxSwitch) { self.candyTreeImageView.hidden = NO; if (roomInfo.boxSwitchVo.openBoxIcon.length > 0) { self.candyTreeImageView.imageUrl = roomInfo.boxSwitchVo.openBoxIcon; } else { self.candyTreeImageView.image = [UIImage imageNamed:@"openBoxIcon"]; } } else { self.candyTreeImageView.hidden = YES; } } #pragma mark - RoomGuestDelegate - (void)onRoomEntered { [self onRoomUpdate]; } - (void)onRoomUpdate { [self configCandyTree]; self.firstRechargeImageView.hidden = !self.hostDelegate.getUserInfo.isFirstCharge; RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; if (roomInfo.roomModeType == RoomModeType_Open_Blind) { NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { if (error == nil) { NIMChatroomMember * member = members.firstObject; if (member.type == NIMTeamMemberTypeOwner || member.type == NIMTeamMemberTypeManager) { self.joinDatingView.hidden = YES; return; } } self.joinDatingView.hidden = NO; }]; } else { self.joinDatingView.hidden = YES; } } - (void)handleNIMCustomMessage:(NIMMessage *)message { NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { AttachmentModel *attachment = (AttachmentModel *)obj.attachment; if (attachment.first == CustomMessageType_First_Recharge_Reward && attachment.second == Custom_Message_Sub_Room_First_Recharge_Reward) { FirstRechargeModel *model = [FirstRechargeModel modelWithJSON:attachment.data]; XPFirstRechargeSuccessView * firstRechargeView= [[XPFirstRechargeSuccessView alloc] init]; firstRechargeView.rechargeInfo = model; [TTPopup popupView:firstRechargeView style:TTPopupStyleAlert]; } } } - (void)handleNIMNotificationMessage:(NIMMessage *)message { NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject; NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content; switch (content.eventType) { case NIMChatroomEventTypeAddManager: { if (self.hostDelegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind) { for (NIMChatroomNotificationMember * member in content.targets) { if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) { self.joinDatingView.hidden = YES; break; } } } } break; case NIMChatroomEventTypeRemoveManager: { if (self.hostDelegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind) { for (NIMChatroomNotificationMember * member in content.targets) { if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) { self.joinDatingView.hidden = NO; break; } } } } break; default: break; } } #pragma mark - SDCycleScrollViewDelegate - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index { if (self.activityList.count > index) { ActivityInfoModel * info = [self.activityList objectAtIndex:index]; if (info.skipType == ActivitySkipType_Room) { [self.hostDelegate exitRoom]; [XPRoomViewController openRoom:info.skipUri viewController:self.hostDelegate.getCurrentNav]; } else if(info.skipType == ActivitySkipType_Web) { if (info.showType == ActivityShowType_Half) { XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init]; webView.url = info.skipUri; [TTPopup popupView:webView style:TTPopupStyleActionSheet]; return; } XPWebViewController * webVC = [[XPWebViewController alloc] init]; webVC.roomUid = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid]; webVC.url = info.skipUri; [self.hostDelegate.getCurrentNav pushViewController:webVC animated:YES]; } } } #pragma mark - Event Response - (void)candyTreeTapRecognizer { XPCandyTreeViewController * candyTreeVC = [[XPCandyTreeViewController alloc] initWithDelegate:self.hostDelegate]; candyTreeVC.modalPresentationStyle = UIModalPresentationOverFullScreen; [self.hostDelegate.getCurrentNav presentViewController:candyTreeVC animated:YES completion:nil]; } - (void)firstRechargeTapRecognizer { XPFirstRechargeViewController * firstRechargeVC = [[XPFirstRechargeViewController alloc] initWithNavigation:self.hostDelegate.getCurrentNav]; [self.hostDelegate.getCurrentNav presentViewController:firstRechargeVC animated:YES completion:nil]; } - (void)didTapJoinDatingRecognizer { NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init]; request.roomId = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.roomId]; request.userIds = @[[AccountInfoStorage instance].getUid]; [[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray * _Nullable members) { NIMChatroomMember * member; if (error == nil) { member = members.firstObject; } RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo; XPArrangeMicInfoModel * info = [[XPArrangeMicInfoModel alloc] init]; info.roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid]; info.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId]; info.nick = roomInfo.nick; info.roomAvatar = roomInfo.avatar; info.roomTitle = roomInfo.title; info.micQueue = [self.hostDelegate getMicroQueue]; info.isManager = (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager); info.type = ArrangeMicType_Dating; XPArrangeMicViewController * arrangeMicVC = [[XPArrangeMicViewController alloc] initWithInfo:info]; [self.hostDelegate.getCurrentNav presentViewController:arrangeMicVC animated:YES completion:nil]; }]; } #pragma mark - Getters And Setters - (SDCycleScrollView *)cycleScrollView { if (!_cycleScrollView) { _cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectZero delegate:self placeholderImage:nil]; _cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentCenter; _cycleScrollView.currentPageDotColor = [UIColor whiteColor]; _cycleScrollView.pageDotColor = [UIColor colorWithWhite:1 alpha:0.15]; _cycleScrollView.currentPageDotImage = [UIImage imageNamed:@"room_activity_banner_select"]; _cycleScrollView.pageDotImage = [UIImage imageNamed:@"room_activity_banner_normal"]; _cycleScrollView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.00]; _cycleScrollView.bannerImageViewContentMode = UIViewContentModeScaleAspectFit; _cycleScrollView.pageControlBottomOffset = -10; _cycleScrollView.hidden = YES; } return _cycleScrollView; } - (UIView *)placeHolderView { if (!_placeHolderView) { _placeHolderView = [[UIView alloc] init]; _placeHolderView.backgroundColor = [UIColor clearColor]; [_placeHolderView setContentHuggingPriority:UILayoutPriorityDragThatCanResizeScene forAxis:UILayoutConstraintAxisHorizontal]; [_placeHolderView setContentCompressionResistancePriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal]; } return _placeHolderView; } - (UIStackView *)stackView { if (!_stackView) { _stackView = [[UIStackView alloc] init]; _stackView.axis = UILayoutConstraintAxisVertical; _stackView.distribution = UIStackViewDistributionFill; _stackView.alignment = UIStackViewAlignmentCenter; _stackView.spacing = 5; } return _stackView; } - (UIImageView *)candyTreeImageView { if (!_candyTreeImageView) { NetImageConfig * config = [[NetImageConfig alloc] init]; config.placeHolder = [UIImage imageNamed:@"room_candy_tree_enter"]; config.imageType = ImageTypeUserIcon; _candyTreeImageView = [[NetImageView alloc] initWithConfig:config]; _candyTreeImageView.userInteractionEnabled = YES; _candyTreeImageView.hidden = YES; _candyTreeImageView.image = [UIImage imageNamed:@"room_candy_tree_enter"]; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(candyTreeTapRecognizer)]; [_candyTreeImageView addGestureRecognizer:tap]; } return _candyTreeImageView; } - (UIImageView *)firstRechargeImageView { if (!_firstRechargeImageView) { _firstRechargeImageView = [[UIImageView alloc] init]; _firstRechargeImageView.image = [UIImage imageNamed:@"room_first_recharge_enter"]; _firstRechargeImageView.userInteractionEnabled = YES; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(firstRechargeTapRecognizer)]; [_firstRechargeImageView addGestureRecognizer:tap]; } return _firstRechargeImageView; } - (UIImageView *)joinDatingView { if (!_joinDatingView) { _joinDatingView = [[UIImageView alloc] init]; _joinDatingView.image = [UIImage imageNamed:@"room_mode_dating_enter"]; _joinDatingView.userInteractionEnabled = YES; _joinDatingView.hidden = YES; _joinDatingView.contentMode = UIViewContentModeScaleAspectFit; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapJoinDatingRecognizer)]; [_joinDatingView addGestureRecognizer:tap]; } return _joinDatingView; } @end