diff --git a/SampleCode/iOS/NEMeetingDemo/Section/EnterMeetingVC.m b/SampleCode/iOS/NEMeetingDemo/Section/EnterMeetingVC.m index 2f8a87f..0b74e02 100644 --- a/SampleCode/iOS/NEMeetingDemo/Section/EnterMeetingVC.m +++ b/SampleCode/iOS/NEMeetingDemo/Section/EnterMeetingVC.m @@ -56,14 +56,22 @@ - (void)setupUI { [_configCheckBox setItemTitleWithArray:@[ @"入会时打开摄像头", @"入会时打开麦克风", @"显示会议持续时间" ]]; [_settingCheckBox setItemTitleWithArray:@[ - @"入会时关闭聊天菜单", @"入会时关闭邀请菜单", @"入会时隐藏最小化", @"使用默认会议设置", - @"入会时关闭画廊模式", @"仅显示会议ID长号", @"仅显示会议ID短号", @"关闭摄像头切换", - @"关闭音频模式切换", @"显示白板窗口", @"隐藏白板菜单按钮", @"关闭会中改名", - @"隐藏Sip菜单", @"显示用户角色标签", @"显示会议结束提醒", @"聊天室文件消息", - @"聊天室图片消息", @"开启静音检测", @"关闭静音包", @"显示屏幕共享者画面", - @"显示白板共享者画面", @"设置白板透明", @"前置摄像头镜像", @"显示麦克风浮窗", - @"入会时隐藏直播菜单", @"开启音频共享", @"开启加密", @"显示云录制菜单按钮", - @"显示云录制过程UI", @"允许音频设备切换" + @"入会时关闭聊天菜单", @"入会时关闭邀请菜单", + @"入会时隐藏最小化", @"使用默认会议设置", + @"入会时关闭画廊模式", @"仅显示会议ID长号", + @"仅显示会议ID短号", @"关闭摄像头切换", + @"关闭音频模式切换", @"显示白板窗口", + @"隐藏白板菜单按钮", @"关闭会中改名", + @"隐藏Sip菜单", @"显示用户角色标签", + @"显示会议结束提醒", @"聊天室文件消息", + @"聊天室图片消息", @"开启静音检测", + @"关闭静音包", @"显示屏幕共享者画面", + @"显示白板共享者画面", @"设置白板透明", + @"前置摄像头镜像", @"显示麦克风浮窗", + @"入会时隐藏直播菜单", @"开启音频共享", + @"开启加密", @"显示云录制菜单按钮", + @"显示云录制过程UI", @"自动画中画", + @"展示未入会成员", @"主持人直接开关成员音视频" ]]; _settingCheckBox.delegate = self; [self.settingCheckBox setItemSelected:YES index:MeetingSettingTypeChatroomEnableFile]; @@ -76,7 +84,10 @@ - (void)setupUI { [self.settingCheckBox setItemSelected:YES index:MeetingSettingTypeJoinOffLive]; [self.settingCheckBox setItemSelected:YES index:MeetingSettingTypeShowCloudRecordingUI]; [self.settingCheckBox setItemSelected:YES index:MeetingSettingTypeShowCloudRecordMenuItem]; - [self.settingCheckBox setItemSelected:NO index:MeetingSettingTypeEnableAudioDeviceSwitch]; + [self.settingCheckBox setItemSelected:YES index:MeetingSettingTypeEnablePIP]; + [self.settingCheckBox setItemSelected:YES index:MeetingSettingTypeShowNotYetJoinedMembers]; + [self.settingCheckBox setItemSelected:NO + index:MeetingSettingTypeEnableDirectMemberMediaControlByHost]; } - (IBAction)onLeaveCurrentMeeting:(id)sender { @@ -194,6 +205,11 @@ - (IBAction)onEnterMeetingAction:(id)sender { [self selectedSetting:MeetingSettingTypeShowCloudRecordMenuItem]; // 配置是否展示云录制过程中的UI提示 options.showCloudRecordingUI = [self selectedSetting:MeetingSettingTypeShowCloudRecordingUI]; + options.enablePictureInPicture = [self selectedSetting:MeetingSettingTypeEnablePIP]; + options.showNotYetJoinedMembers = + [self selectedSetting:MeetingSettingTypeShowNotYetJoinedMembers]; + options.enableDirectMemberMediaControlByHost = + [self selectedSetting:MeetingSettingTypeEnableDirectMemberMediaControlByHost]; WEAK_SELF(weakSelf); [SVProgressHUD show]; // 匿名入会 diff --git a/SampleCode/iOS/NEMeetingDemo/Section/MeetingConfigEnum.h b/SampleCode/iOS/NEMeetingDemo/Section/MeetingConfigEnum.h index b67daaf..bd2e715 100644 --- a/SampleCode/iOS/NEMeetingDemo/Section/MeetingConfigEnum.h +++ b/SampleCode/iOS/NEMeetingDemo/Section/MeetingConfigEnum.h @@ -42,7 +42,9 @@ typedef NS_ENUM(NSInteger, MeetingSettingType) { MeetingSettingTypeEnableEncryption, MeetingSettingTypeShowCloudRecordMenuItem, MeetingSettingTypeShowCloudRecordingUI, - MeetingSettingTypeEnableAudioDeviceSwitch + MeetingSettingTypeEnablePIP, + MeetingSettingTypeShowNotYetJoinedMembers, + MeetingSettingTypeEnableDirectMemberMediaControlByHost, }; /// 创建会议设置选项类型 @@ -83,8 +85,10 @@ typedef NS_ENUM(NSInteger, CreateMeetingSettingType) { CreateMeetingSettingTypeShowCloudRecordMenuItem, CreateMeetingSettingTypeShowCloudRecordingUI, CreateMeetingSettingTypeEnableWaitingRoom, - CreateMeetingSettingTypeEnableAudioDeviceSwitch, - CreateMeetingSettingTypeEnableGuestJoin + CreateMeetingSettingTypeEnableGuestJoin, + CreateMeetingSettingTypeEnablePIP, + CreateMeetingSettingTypeShowNotYetJoinedMembers, + CreateMeetingSettingTypeEnableDirectMemberMediaControlByHost, }; #endif /* MeetingConfigEnum_h */ diff --git a/SampleCode/iOS/NEMeetingDemo/Section/StartMeetingVC.m b/SampleCode/iOS/NEMeetingDemo/Section/StartMeetingVC.m index 742f27f..2f3f64b 100644 --- a/SampleCode/iOS/NEMeetingDemo/Section/StartMeetingVC.m +++ b/SampleCode/iOS/NEMeetingDemo/Section/StartMeetingVC.m @@ -38,6 +38,8 @@ @interface StartMeetingVC () - + - + @@ -17,6 +17,7 @@ + @@ -171,6 +172,14 @@ + + + + + + + + @@ -181,6 +190,7 @@ + @@ -197,6 +207,7 @@ + @@ -215,6 +226,7 @@ + @@ -234,7 +246,7 @@ - + diff --git a/SampleCode/iOS/NEMeetingDemo/Section/menu/view/MeetingMenuItemCell.m b/SampleCode/iOS/NEMeetingDemo/Section/menu/view/MeetingMenuItemCell.m index 22e6d3d..14ee37f 100644 --- a/SampleCode/iOS/NEMeetingDemo/Section/menu/view/MeetingMenuItemCell.m +++ b/SampleCode/iOS/NEMeetingDemo/Section/menu/view/MeetingMenuItemCell.m @@ -74,6 +74,24 @@ - (NSString *)getMenuItemText:(NEMeetingMenuItem *)item { return @"安全"; case DISCONNECT_AUDIO_MENU_ID: return @"断开音频"; + case SETTINGS_MENU_ID: + return @"设置"; + case FEEDBACK_MENU_ID: + return @"反馈"; + case SIP_CALL_MENU_ID: + return @"SIP"; + case CAPTIONS_MENU_ID: + return @"字幕"; + case TRANSCRIPTION_MENU_ID: + return @"实时转写"; + case INTERPRETATION_MENU_ID: + return @"同声传译"; + case BEAUTY_MENU_ID: + return @"美颜"; + case VIRTUAL_BACKGROUND_MENU_ID: + return @"虚拟背景"; + case LIVE_MENU_ID: + return @"直播"; default: break; } diff --git a/SampleCode/iOS/NEMeetingDemo/Section/menu/view/MeetingMenuSelectVC.m b/SampleCode/iOS/NEMeetingDemo/Section/menu/view/MeetingMenuSelectVC.m index 1d36ca5..eec4d90 100644 --- a/SampleCode/iOS/NEMeetingDemo/Section/menu/view/MeetingMenuSelectVC.m +++ b/SampleCode/iOS/NEMeetingDemo/Section/menu/view/MeetingMenuSelectVC.m @@ -6,51 +6,11 @@ #import "MeetingMenuItemCell.h" #import "SelectedMenuItemEditVC.h" -typedef NS_ENUM(NSInteger, NEMeetingMenuItemType) { - /// 静音 - NEMeetingMenuItemTypeMute = 0, - /// 停止视频 - NEMeetingMenuItemTypeCamera, - /// 屏幕共享 - NEMeetingMenuItemTypeScreenShare, - /// 视图布局 - NEMeetingMenuItemTypeLayout, - /// 参会者 - NEMeetingMenuItemTypeParticipant, - /// 管理参会者 - NEMeetingMenuItemTypeManagerParticipant, - /// 邀请 - NEMeetingMenuItemTypeInvitation, - /// 聊天 - NEMeetingMenuItemTypeChat, - /// 音频管理 - NEMeetingMenuItemTypeAudioManager, - /// 单选 - NEMeetingMenuItemTypeSingleMenu, - /// 多选 - NEMeetingMenuItemTypeCheckMenu, - /// 共享白板 - NEMeetingMenuItemTypeWhiteboard, - /// 云录制白板 - NEMeetingMenuItemTypeCloudRecord, - /// 安全 - NEMeetingMenuItemTypeSecurity, - /// 断开音频 - NEMeetingMenuItemTypeDisconnectAudio, - /// 测试修改单选菜单 - NEMeetingMenuItemTypeEditSingleMenu, - /// 测试修改多选菜单 - NEMeetingMenuItemTypeEditCheckMenu, - /// 获取账号信息 - NEMeetingMenuItemTypeGetAccountInfo -}; - @interface MeetingMenuSelectVC () @property(nonatomic, strong) UICollectionView *selectedCollectionView; @property(nonatomic, strong) UICollectionView *allItemCollectionView; @property(nonatomic, strong) NSMutableArray *allSeletedItems; -@property(nonatomic, strong) NSArray *allItems; -@property(nonatomic, assign) int itemID; +@property(nonatomic, strong) NSMutableArray *allItems; @end static NSString *cellIdentifier = @"selectedMenuItemCell"; @@ -81,106 +41,26 @@ - (void)setupUI { #pragma mark - data - (void)initData { - self.itemID = FIRST_INJECTED_MENU_ID + 3; if (self.seletedItems) { [self.allSeletedItems addObjectsFromArray:self.seletedItems]; } - self.allItems = @[ - [NEMenuItems mic], - [NEMenuItems camera], - [NEMenuItems screenShare], - [NEMenuItems switchShowType], - [NEMenuItems participants], - [NEMenuItems managerParticipants], - [NEMenuItems invite], - [NEMenuItems chat], - [self addAudioManagerMenuItem], - [self addSingleStateMenuItem], - [self addCheckableMenuItem], - [NEMenuItems whiteboard], - [NEMenuItems cloudRecord], - [NEMenuItems security], - [NEMenuItems disconnectAudio], - [self addEditSingleMenuItem], - [self addEditCheckableMenuItem], - [self addGetAccountInfoMenuItem], - ]; + self.allItems = [NSMutableArray array]; + [self.allItems addObjectsFromArray:[NEMenuItems defaultMoreMenuItems]]; + [self.allItems addObjectsFromArray:[NEMenuItems defaultToolbarMenuItems]]; + [self.allItems addObject:[self addSingleStateMenuItem]]; + [self.allItems addObject:[self addEditCheckableMenuItem]]; + [self.selectedCollectionView reloadData]; [self.allItemCollectionView reloadData]; } -- (NEMeetingMenuItem *)createItemWithType:(NEMeetingMenuItemType)itemType { - switch (itemType) { - case NEMeetingMenuItemTypeMute: - return [NEMenuItems mic]; - case NEMeetingMenuItemTypeCamera: - return [NEMenuItems camera]; - case NEMeetingMenuItemTypeScreenShare: - return [NEMenuItems screenShare]; - case NEMeetingMenuItemTypeLayout: - return [NEMenuItems switchShowType]; - case NEMeetingMenuItemTypeParticipant: - return [NEMenuItems participants]; - case NEMeetingMenuItemTypeManagerParticipant: - return [NEMenuItems managerParticipants]; - case NEMeetingMenuItemTypeInvitation: - return [NEMenuItems invite]; - case NEMeetingMenuItemTypeChat: - return [NEMenuItems chat]; - case NEMeetingMenuItemTypeCloudRecord: - return [NEMenuItems cloudRecord]; - case NEMeetingMenuItemTypeSecurity: - return [NEMenuItems security]; - case NEMeetingMenuItemTypeDisconnectAudio: - return [NEMenuItems disconnectAudio]; - case NEMeetingMenuItemTypeAudioManager: - return [self addAudioManagerMenuItem]; - case NEMeetingMenuItemTypeSingleMenu: - return [self addSingleStateMenuItem]; - case NEMeetingMenuItemTypeCheckMenu: - return [self addCheckableMenuItem]; - case NEMeetingMenuItemTypeEditSingleMenu: - return [self addEditSingleMenuItem]; - case NEMeetingMenuItemTypeEditCheckMenu: - return [self addEditCheckableMenuItem]; - case NEMeetingMenuItemTypeGetAccountInfo: - return [self addGetAccountInfoMenuItem]; - default: - return [NEMenuItems whiteboard]; - } -} - - (NEMeetingMenuItem *)addSingleStateMenuItem { - NESingleStateMenuItem *item = [[NESingleStateMenuItem alloc] init]; - item.itemId = self.itemID++; - item.visibility = VISIBLE_ALWAYS; - - NEMenuItemInfo *info = [[NEMenuItemInfo alloc] init]; - info.text = @"单选"; - info.icon = @"calendar"; - item.singleStateItem = info; - return item; -} - -- (NEMeetingMenuItem *)addAudioManagerMenuItem { - NESingleStateMenuItem *item = [[NESingleStateMenuItem alloc] init]; - item.itemId = FIRST_INJECTED_MENU_ID; - item.visibility = VISIBLE_ALWAYS; - - NEMenuItemInfo *info = [[NEMenuItemInfo alloc] init]; - info.text = @"音频管理"; - info.icon = @"calendar"; - item.singleStateItem = info; - return item; -} - -- (NEMeetingMenuItem *)addEditSingleMenuItem { NESingleStateMenuItem *item = [[NESingleStateMenuItem alloc] init]; item.itemId = FIRST_INJECTED_MENU_ID; item.visibility = VISIBLE_ALWAYS; NEMenuItemInfo *info = [[NEMenuItemInfo alloc] init]; - info.text = @"修改单选"; + info.text = @"自定义单选"; info.icon = @"calendar"; item.singleStateItem = info; return item; @@ -203,34 +83,6 @@ - (NEMeetingMenuItem *)addEditCheckableMenuItem { return item; } -- (NEMeetingMenuItem *)addGetAccountInfoMenuItem { - NESingleStateMenuItem *item = [[NESingleStateMenuItem alloc] init]; - item.itemId = FIRST_INJECTED_MENU_ID + 2; - item.visibility = VISIBLE_ALWAYS; - - NEMenuItemInfo *info = [[NEMenuItemInfo alloc] init]; - info.text = @"账号信息"; - info.icon = @"calendar"; - item.singleStateItem = info; - return item; -} - -- (NEMeetingMenuItem *)addCheckableMenuItem { - NECheckableMenuItem *item = [[NECheckableMenuItem alloc] init]; - item.itemId = self.itemID++; - item.visibility = VISIBLE_ALWAYS; - - NEMenuItemInfo *info = [[NEMenuItemInfo alloc] init]; - info.text = [NSString stringWithFormat:@"未选中-%@", @(item.itemId)]; - info.icon = @"checkbox_n"; - item.uncheckStateItem = info; - - info = [[NEMenuItemInfo alloc] init]; - info.text = [NSString stringWithFormat:@"选中-%@", @(item.itemId)]; - info.icon = @"checkbox_s"; - item.checkedStateItem = info; - return item; -} - (void)done { if (self.delegate && [self.delegate respondsToSelector:@selector(didSelectedItems:)]) { [self.delegate didSelectedItems:[self.allSeletedItems copy]]; @@ -281,17 +133,10 @@ - (void)collectionView:(UICollectionView *)collectionView vc.menuItem = self.allSeletedItems[indexPath.row]; [self.navigationController pushViewController:vc animated:YES]; return; + } else { + [self.allSeletedItems addObject:self.allItems[indexPath.row]]; + [self.selectedCollectionView reloadData]; } - NEMeetingMenuItem *item = [self createItemWithType:(NEMeetingMenuItemType)indexPath.row]; - [self.allSeletedItems addObject:item]; - [self.selectedCollectionView reloadData]; - // NEMeetingMenuItem *item = self.allItems[indexPath.row]; - // if (![self.allSeletedItems containsObject:item]) { - // [self.allSeletedItems addObject:item]; - // [self.selectedCollectionView reloadData]; - // }else { - // [self.view makeToast:@"已存在该选项"]; - // } } #pragma mark - get diff --git a/SampleCode/iOS/Podfile b/SampleCode/iOS/Podfile index 32a9a04..486e8d5 100644 --- a/SampleCode/iOS/Podfile +++ b/SampleCode/iOS/Podfile @@ -12,7 +12,7 @@ target 'NEMeetingDemo' do pod 'Masonry', '~> 1.1.0' pod 'Reachability' - pod 'NEMeetingKit', '~> 4.7.0' + pod 'NEMeetingKit', '~> 4.8.0' end post_install do |installer|