Compute
Elastic Cloud Server
Huawei Cloud Flexus
Bare Metal Server
Auto Scaling
Image Management Service
Dedicated Host
FunctionGraph
Cloud Phone Host
Huawei Cloud EulerOS
Networking
Virtual Private Cloud
Elastic IP
Elastic Load Balance
NAT Gateway
Direct Connect
Virtual Private Network
VPC Endpoint
Cloud Connect
Enterprise Router
Enterprise Switch
Global Accelerator
Management & Governance
Cloud Eye
Identity and Access Management
Cloud Trace Service
Resource Formation Service
Tag Management Service
Log Tank Service
Config
OneAccess
Resource Access Manager
Simple Message Notification
Application Performance Management
Application Operations Management
Organizations
Optimization Advisor
IAM Identity Center
Cloud Operations Center
Resource Governance Center
Migration
Server Migration Service
Object Storage Migration Service
Cloud Data Migration
Migration Center
Cloud Ecosystem
KooGallery
Partner Center
User Support
My Account
Billing Center
Cost Center
Resource Center
Enterprise Management
Service Tickets
HUAWEI CLOUD (International) FAQs
ICP Filing
Support Plans
My Credentials
Customer Operation Capabilities
Partner Support Plans
Professional Services
Analytics
MapReduce Service
Data Lake Insight
CloudTable Service
Cloud Search Service
Data Lake Visualization
Data Ingestion Service
GaussDB(DWS)
DataArts Studio
Data Lake Factory
DataArts Lake Formation
IoT
IoT Device Access
Others
Product Pricing Details
System Permissions
Console Quick Start
Common FAQs
Instructions for Associating with a HUAWEI CLOUD Partner
Message Center
Security & Compliance
Security Technologies and Applications
Web Application Firewall
Host Security Service
Cloud Firewall
SecMaster
Anti-DDoS Service
Data Encryption Workshop
Database Security Service
Cloud Bastion Host
Data Security Center
Cloud Certificate Manager
Edge Security
Managed Threat Detection
Blockchain
Blockchain Service
Web3 Node Engine Service
Media Services
Media Processing Center
Video On Demand
Live
SparkRTC
MetaStudio
Storage
Object Storage Service
Elastic Volume Service
Cloud Backup and Recovery
Storage Disaster Recovery Service
Scalable File Service Turbo
Scalable File Service
Volume Backup Service
Cloud Server Backup Service
Data Express Service
Dedicated Distributed Storage Service
Containers
Cloud Container Engine
SoftWare Repository for Container
Application Service Mesh
Ubiquitous Cloud Native Service
Cloud Container Instance
Databases
Relational Database Service
Document Database Service
Data Admin Service
Data Replication Service
GeminiDB
GaussDB
Distributed Database Middleware
Database and Application Migration UGO
TaurusDB
Middleware
Distributed Cache Service
API Gateway
Distributed Message Service for Kafka
Distributed Message Service for RabbitMQ
Distributed Message Service for RocketMQ
Cloud Service Engine
Multi-Site High Availability Service
EventGrid
Dedicated Cloud
Dedicated Computing Cluster
Business Applications
Workspace
ROMA Connect
Message & SMS
Domain Name Service
Edge Data Center Management
Meeting
AI
Face Recognition Service
Graph Engine Service
Content Moderation
Image Recognition
Optical Character Recognition
ModelArts
ImageSearch
Conversational Bot Service
Speech Interaction Service
Huawei HiLens
Video Intelligent Analysis Service
Developer Tools
SDK Developer Guide
API Request Signing Guide
Terraform
Koo Command Line Interface
Content Delivery & Edge Computing
Content Delivery Network
Intelligent EdgeFabric
CloudPond
Intelligent EdgeCloud
Solutions
SAP Cloud
High Performance Computing
Developer Services
ServiceStage
CodeArts
CodeArts PerfTest
CodeArts Req
CodeArts Pipeline
CodeArts Build
CodeArts Deploy
CodeArts Artifact
CodeArts TestPlan
CodeArts Check
CodeArts Repo
Cloud Application Engine
MacroVerse aPaaS
KooMessage
KooPhone
KooDrive

Customizing the Bottom Menu Bar

Updated on 2024-07-30 GMT+08:00

You can add, delete, and customize menu items on the bottom menu bar of a meeting screen.

There are two types of bottom menu bars and customization methods:

1. ConfAudioToolbar: customizes the bottom menu bar for voice meetings (see Customizing a Menu for Voice Meetings).

2. ConfVideoToolbar: customizes the bottom menu bar for video meetings (see Customizing a Menu for Video Meetings).

Application Scenarios

Menu items on the bottom menu bar need to be adjusted.

Precautions

1. sdkConfig takes effect only when this configuration is passed during SDK initialization.

Customizing Menu Settings

Sample Code

1
2
3
4
ToolBarMenuProxy toolBarMenuProxy = new ToolBarMenuProxy();
toolBarMenuProxy.setConfAudioToolbarHandle(new CustomConfAudioToolbarHandle());
toolBarMenuProxy.setConfVideoToolbarHandle(new CustomConfVideoToolbarHandle());
sdkConfig.setToolBarMenuProxy(toolBarMenuProxy);

Customizing a Menu for Voice Meetings

Figure 1 Sample of a custom menu for voice meetings
Figure 2 Sample of a custom More menu for voice meetings
Figure 3 Sample of a custom Meeting settings menu for voice meetings

Sample Code
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/**
 * Demo of customizing a toolbar for voice meetings
 */
public class CustomConfAudioToolbarHandle implements IToolbarMenuStrategy {
    @Override
    public List<IConfMenu> buildMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new MicMenu());
        confMenus.add(new SpeakerMenu());
        confMenus.add(new ParticipantMenu());
        // [Demo] Add a custom menu.
        confMenus.add(new CustomMenu());
        confMenus.add(new MoreMenu());
        return confMenus;
    }
    @Override
    public List<IConfMenu> buildMoreMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new ConnectAudioMenu());
        confMenus.add(new DisconnectAudioMenu());
        confMenus.add(new ChatMenu());
        confMenus.add(new InterpretMenu());
        confMenus.add(new HandsUpOrDownMenu());
        confMenus.add(new InviteMoreMenu());
        confMenus.add(new OpenOrCloseRecordMenu());
        confMenus.add(new SubtitlesMenu());
        confMenus.add(new CloudLiveMenu());
        confMenus.add(new VoteMenu());
        confMenus.add(new ConfSettingMenu());
        // [Demo] Add a custom menu.
        confMenus.add(new CustomMenu());
        return confMenus;
    }
    @Override
    public List<IConfMenu> buildSettingMenuItems() {
        List<IConfMenu> menus = new ArrayList<>();

        List<IConfMenu> audioVideomenuChildren = new ArrayList<>();
        IConfMenu howlDetectMenu = new SwitchMenu(R.id.hwmconf_confsetting_whistle_detection, R.string.hwmconf_mine_calling_setting_howl_auto_mute, true);
        IConfMenu noiseReductionMenu = new SwitchMenu(R.id.hwmconf_confsetting_noise_reduction,
                R.string.hwmconf_audio_noise_reduction, true);
        audioVideomenuChildren.add(howlDetectMenu);
        audioVideomenuChildren.add(noiseReductionMenu);
        MenuContainer audioVideoMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_audio_video, R.string.hwmconf_setting_audio_video, audioVideomenuChildren);

        List<IConfMenu> securityMenuChildren = new ArrayList<>();
        // Lock the meeting.
        IConfMenu lockConfMenu = new SwitchMenu(R.id.hwmconf_confsetting_lock_meeting, R.string.hwmconf_lock, false);
        securityMenuChildren.add(lockConfMenu);
        // Set users who can join the meeting.
        IConfMenu allowJoinConfMenu = new TextMenu(R.id.hwmconf_confsetting_allow_join_conf, R.string.hwmconf_allow_incoming_call, R.string.hwmconf_everyone);
        securityMenuChildren.add(allowJoinConfMenu);
        // Enable the waiting room.
        IConfMenu enableWaitingRoomMenu = new SwitchMenu(R.id.hwmconf_confsetting_enable_waiting_room,
                R.string.hwmconf_enable_waiting_room, false);
        securityMenuChildren.add(enableWaitingRoomMenu);
        MenuContainer securityMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_security, R.string.hwmconf_setting_safe, securityMenuChildren);

        List<IConfMenu> attendeePermissionMenuChildren = new ArrayList<>();
        // Allow unmuting.
        IConfMenu allowReleaseMuteMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_unmute, R.string.hwmconf_allow_ummute_self, false);
        IConfMenu allowShareMuteMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_sharing, R.string.hwmconf_allow_sharing, false);
        // Set the sharing interruption permission.
        IConfMenu preemptShareTypeMenu = new TextMenu(R.id.hwmconf_confsetting_preempt_share_type,
                R.string.hwmconf_preempt_share_permission, R.string.hwmconf_preempt_share_only_host);
        // Set the chat permission.
        IConfMenu chatPermissionMenu = new TextMenu(R.id.hwmconf_confsetting_chat_permission,
                R.string.hwmconf_chat_settings, R.string.hwmconf_private_chat_free);
        // Allow renaming.
        IConfMenu allowRenameMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_rename, R.string.hwmconf_set_allow_rename, true);
        IConfMenu allowLocalRecordMenu = new RouterMenu(R.id.hwmconf_confsetting_local_record_permission, R.string.hwmconf_allow_record, "");
        attendeePermissionMenuChildren.add(allowReleaseMuteMenu);
        attendeePermissionMenuChildren.add(allowShareMuteMenu);
        attendeePermissionMenuChildren.add(preemptShareTypeMenu);
        attendeePermissionMenuChildren.add(chatPermissionMenu);
        attendeePermissionMenuChildren.add(allowRenameMenu);
        attendeePermissionMenuChildren.add(allowLocalRecordMenu);
        MenuContainer attendeePermissionMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_paticipant_permission, R.string.hwmconf_setting_participant_permission, attendeePermissionMenuChildren);

        List<IConfMenu> commonMenuChildren = new ArrayList<>();
        // Set the caption translation language.
        IConfMenu subtitlesLanguageMenu = new TextMenu(R.id.hwmconf_confsetting_subtitles_language, R.string.hwmconf_subtitle_translation_language, R.string.hwmconf_auto_no_translation);
        commonMenuChildren.add(subtitlesLanguageMenu);
        // Configure chat message notification.
        IConfMenu chatMessageRemindMenu = new TextMenu(R.id.hwmconf_confsetting_chat_message_remind,
                R.string.hwmconf_message_notify_mode, R.string.hwmconf_bubble_message_mode);
        commonMenuChildren.add(chatMessageRemindMenu);
        // Check the network quality.
        IConfMenu networkDetectMenu = new RouterMenu(R.id.hwmconf_confsetting_network_detect, R.string.hwmconf_network_check, "cloudlink://hwmeeting/networkdetection");
        commonMenuChildren.add(networkDetectMenu);
        MenuContainer commonMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_common, R.string.hwmconf_setting_common, commonMenuChildren);

        menus.add(audioVideoMenuContainer);
        menus.add(securityMenuContainer);
        menus.add(attendeePermissionMenuContainer);
        menus.add(commonMenuContainer);
        return menus;
    }
}

Customizing a Menu for Video Meetings

Figure 4 Sample of a custom menu for video meetings
Figure 5 Sample of a custom More menu for video meetings
Figure 6 Sample of a custom Meeting settings menu for video meetings

Sample Code

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/**
 * Demo of customizing a toolbar for video meetings
 */
public class CustomConfVideoToolbarHandle implements IToolbarMenuStrategy {
    @Override
    public List<IConfMenu> buildMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new MicMenu());
        confMenus.add(new CameraMenu());
        confMenus.add(new ParticipantMenu());
        // [Demo] Add a custom menu.
        confMenus.add(new CustomMenu());
        confMenus.add(new MoreMenu());
        return confMenus;
    }
    @Override
    public List<IConfMenu> buildMoreMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new ConnectAudioMenu());
        confMenus.add(new DisconnectAudioMenu());
        confMenus.add(new ChatMenu());
        confMenus.add(new InterpretMenu());
        confMenus.add(new HandsUpOrDownMenu());
        confMenus.add(new InviteMoreMenu());
        confMenus.add(new OpenOrCloseRecordMenu());
        confMenus.add(new SubtitlesMenu());
        confMenus.add(new CloudLiveMenu());
        confMenus.add(new SwitchCameraMenu());
        confMenus.add(new VirtualBackgroundMenu());
        confMenus.add(new VoteMenu());
        confMenus.add(new ConfSettingMenu());
        // [Demo] Add a custom menu for disabling voice prompts.
        confMenus.add(new CustomDisableVoicePromptsMenu());
        // [Demo] Add a custom menu.
        confMenus.add(new CustomMenu());
        return confMenus;
    }
    @Override
    public List<IConfMenu> buildSettingMenuItems() {
        List<IConfMenu> menus = new ArrayList<>();

        List<IConfMenu> audioVideomenuChildren = new ArrayList<>();
        IConfMenu howlDetectMenu = new SwitchMenu(R.id.hwmconf_confsetting_whistle_detection, R.string.hwmconf_mine_calling_setting_howl_auto_mute, true);
        IConfMenu beautyMenu = new SwitchMenu(R.id.hwmconf_confsetting_beauty, R.string.hwmconf_setting_beauty, true);
        IConfMenu mirrorMenu = new SwitchMenu(R.id.hwmconf_confsetting_video_mirror, R.string.hwmconf_video_mirroring, true);
        IConfMenu pipMenu = new SwitchMenu(R.id.hwmconf_confsetting_hide_self, R.string.hwmconf_setting_pip, true);
        IConfMenu directionMenu = new RouterMenu(R.id.hwmconf_confsetting_camera_direction,
            R.string.hwmconf_auto, "cloudlink://hwmeeting/cameradirection");
        IConfMenu noiseReductionMenu = new SwitchMenu(R.id.hwmconf_confsetting_noise_reduction,
                R.string.hwmconf_audio_noise_reduction, true);
        IConfMenu highResMenu = new SwitchMenu(R.id.hwmconf_confsetting_high_resolution,
                R.string.hwmconf_mine_calling_setting_high_resolution, true);
        IConfMenu enableBrightenMenu = new SwitchMenu(R.id.hwmconf_confsetting_enable_brighten,
                R.string.hwmconf_enhance_video_quality, false);
        IConfMenu pictureRatioMenu = new TextMenu(R.id.hwmconf_confsetting_picture_ratio,
                R.string.hwmconf_picture_ratio, R.string.hwmconf_picture_ratio_original_size);
        audioVideomenuChildren.add(directionMenu);
        audioVideomenuChildren.add(howlDetectMenu);
        audioVideomenuChildren.add(beautyMenu);
        audioVideomenuChildren.add(mirrorMenu);
        audioVideomenuChildren.add(pipMenu);
        audioVideomenuChildren.add(noiseReductionMenu);
        audioVideomenuChildren.add(highResMenu);
        audioVideomenuChildren.add(enableBrightenMenu);
        audioVideomenuChildren.add(pictureRatioMenu);
        MenuContainer audioVideoMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_audio_video, R.string.hwmconf_setting_audio_video, audioVideomenuChildren);

        List<IConfMenu> securityMenuChildren = new ArrayList<>();
        // Lock the meeting.
        IConfMenu lockConfMenu = new SwitchMenu(R.id.hwmconf_confsetting_lock_meeting, R.string.hwmconf_lock, false);
        securityMenuChildren.add(lockConfMenu);
        // Set users who can join the meeting.
        IConfMenu allowJoinConfMenu = new TextMenu(R.id.hwmconf_confsetting_allow_join_conf,
                R.string.hwmconf_allow_incoming_call, R.string.hwmconf_everyone);
        securityMenuChildren.add(allowJoinConfMenu);
        IConfMenu enableWaitingRoomMenu = new SwitchMenu(R.id.hwmconf_confsetting_enable_waiting_room,
            R.string.hwmconf_enable_waiting_room, false);
        securityMenuChildren.add(enableWaitingRoomMenu);
        MenuContainer securityMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_security, R.string.hwmconf_setting_safe, securityMenuChildren);

        List<IConfMenu> attendeePermissionMenuChildren = new ArrayList<>();
        // Allow unmuting.
        IConfMenu allowReleaseMuteMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_unmute, R.string.hwmconf_allow_ummute_self, false);
        // Allow participants to enable the camera.
        IConfMenu cameraRestrictionSwitch = new SwitchMenu(R.id.hwmconf_confsetting_allow_open_camera, R.string.hwmconf_allow_open_video, false);
        IConfMenu cameraRestrictionMenu = new RouterMenu(R.id.hwmconf_confsetting_camera_restriction, R.string.hwmconf_camera_restriction, "");
        IConfMenu allowShareMuteMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_sharing, R.string.hwmconf_allow_sharing, false);
        // Set the sharing interruption permission.
        IConfMenu preemptShareTypeMenu = new TextMenu(R.id.hwmconf_confsetting_preempt_share_type,
                R.string.hwmconf_preempt_share_permission, R.string.hwmconf_preempt_share_only_host);
        // Set the chat permission.
        IConfMenu chatPermissionMenu = new TextMenu(R.id.hwmconf_confsetting_chat_permission,
                R.string.hwmconf_chat_settings, R.string.hwmconf_private_chat_free);
        // Allow renaming.
        IConfMenu allowRenameMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_rename, R.string.hwmconf_set_allow_rename, true);
        IConfMenu allowLocalRecordMenu = new RouterMenu(R.id.hwmconf_confsetting_local_record_permission,
            R.string.hwmconf_allow_record, "");
        attendeePermissionMenuChildren.add(allowReleaseMuteMenu);
        attendeePermissionMenuChildren.add(cameraRestrictionSwitch);
        attendeePermissionMenuChildren.add(cameraRestrictionMenu);
        attendeePermissionMenuChildren.add(allowShareMuteMenu);
        attendeePermissionMenuChildren.add(preemptShareTypeMenu);
        attendeePermissionMenuChildren.add(chatPermissionMenu);
        attendeePermissionMenuChildren.add(allowRenameMenu);
        attendeePermissionMenuChildren.add(allowLocalRecordMenu);
        /*
         * [Demo] Add a setting item to Meeting settings.
         */
        IConfMenu customeSettingMenuTest1 = new SwitchMenu(R.id.conf_setting_menu_test1, R.string.menu_conf_setting_menu_test1, false);
        attendeePermissionMenuChildren.add(customeSettingMenuTest1);
        MenuContainer attendeePermissionMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_paticipant_permission, R.string.hwmconf_setting_participant_permission, attendeePermissionMenuChildren);

        List<IConfMenu> commonMenuChildren = new ArrayList<>();
        // Set the caption translation language.
        IConfMenu subtitlesLanguageMenu = new TextMenu(R.id.hwmconf_confsetting_subtitles_language, R.string.hwmconf_subtitle_translation_language, R.string.hwmconf_auto_no_translation);
        commonMenuChildren.add(subtitlesLanguageMenu);
        // Configure chat message notification.
        IConfMenu chatMessageRemindMenu = new TextMenu(R.id.hwmconf_confsetting_chat_message_remind,
                R.string.hwmconf_message_notify_mode, R.string.hwmconf_bubble_message_mode);
        commonMenuChildren.add(chatMessageRemindMenu);
        // Check the network quality.
        IConfMenu networkDetectMenu = new RouterMenu(R.id.hwmconf_confsetting_network_detect, R.string.hwmconf_network_check, "cloudlink://hwmeeting/networkdetection");
        commonMenuChildren.add(networkDetectMenu);
        MenuContainer commonMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_common, R.string.hwmconf_setting_common, commonMenuChildren);

        menus.add(audioVideoMenuContainer);
        menus.add(securityMenuContainer);
        menus.add(attendeePermissionMenuContainer);
        menus.add(commonMenuContainer);

        /*
         * [Demo] Add a group of setting items to Meeting settings.
         */
        List<IConfMenu> customChildren = new ArrayList<>();
        // Check the network quality.
        IConfMenu customSettingMenuTest2 = new RouterMenu(R.id.conf_setting_menu_test2, R.string.menu_conf_setting_menu_test1, "test");
        customChildren.add(customSettingMenuTest2);
        MenuContainer customContainer = new MenuContainer(R.id.conf_setting_menu_test_group, R.string.menu_conf_setting_menu_test_group, customChildren);
        menus.add(customContainer);
        return menus;
    }
}

Customizing a Menu for Webinars

Figure 7 Sample of a custom menu for webinars
Figure 8 Sample of a custom More menu for webinars
Figure 9 Sample of a custom meeting settings menu for webinars
Sample Code
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
/**
 * Demo of customizing a toolbar for webinars
 */
public class CustomConfWebinarToolbarHandle implements IToolbarMenuStrategy {

    @Override
    public List<IConfMenu> buildMenuItems() {

        if (!NativeSDK.getConfMgrApi().isInConf()) {
            return buildAllMenuItems();
        }

        if (NativeSDK.getConfStateApi().getSelfRole() == ConfRole.ROLE_AUDIENCE) {
            return buildAudienceMenuItems();
        }

        if (NativeSDK.getConfStateApi().getSelfRole() == ConfRole.ROLE_HOST) {
            return buildHostMenuItems();
        }

        return buildAttendeeMenuItems();
    }

    private List<IConfMenu> buildAllMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new MicMenu());
        confMenus.add(new CameraMenu());
        if (TupConfig.isNeedConfChat()) {
            confMenus.add(new ChatMenu());
        }
        confMenus.add(new HandsMenu());
        if (TupConfig.isNeedScreenShare() && CpuLevelUtil.isHigherThan(CpuLevel.CALL_CPU_LEVEL_SUPER_LOW)) {
            confMenus.add(new ShareMenu());
        }
        if (ConfUIConfig.getInstance().isAudience()) {
            confMenus.add(new VoteBtnMenu());
        }
        confMenus.add(new AudienceJoinMenu());
        confMenus.add(new ParticipantMenu());
        confMenus.add(new MoreMenu());
        return confMenus;
    }

    private List<IConfMenu> buildAudienceMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new MicMenu());
        if (TupConfig.isNeedConfChat()) {
            confMenus.add(new ChatMenu());
        }
        confMenus.add(new HandsMenu());
        if (ConfUIConfig.getInstance().isAudience()) {
            confMenus.add(new VoteBtnMenu());
        }
        confMenus.add(new MoreMenu());
        return confMenus;
    }

    private List<IConfMenu> buildAttendeeMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new MicMenu());
        confMenus.add(new CameraMenu());
        if (TupConfig.isNeedScreenShare() && CpuLevelUtil.isHigherThan(CpuLevel.CALL_CPU_LEVEL_SUPER_LOW)) {
            confMenus.add(new ShareMenu());
        }
        confMenus.add(new ParticipantMenu());
        if (ConfUIConfig.getInstance().isAudience()) {
            confMenus.add(new VoteBtnMenu());
        }
        confMenus.add(new MoreMenu());
        return confMenus;
    }

    private List<IConfMenu> buildHostMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new MicMenu());
        confMenus.add(new CameraMenu());
        confMenus.add(new AudienceJoinMenu());
        confMenus.add(new ParticipantMenu());
        confMenus.add(new MoreMenu());
        return confMenus;
    }

    @Override
    public List<IConfMenu> buildMoreMenuItems() {
        List<IConfMenu> confMenus = new ArrayList<>();
        confMenus.add(new ConnectAudioMenu());
        confMenus.add(new DisconnectAudioMenu());
        confMenus.add(new RenameMenu());
        confMenus.add(new StartOrStopShareMenu());
        confMenus.add(new ChatMenu());
        confMenus.add(new ShareConfLinkMenu());
        confMenus.add(new HandsUpOrDownMenu());
        confMenus.add(new InviteMoreMenu());
        confMenus.add(new OpenOrCloseRecordMenu());
        confMenus.add(new SubtitlesMenu());
        confMenus.add(new CloudLiveMenu());
        confMenus.add(new SwitchCameraMenu());
        confMenus.add(new VirtualBackgroundMenu());
        confMenus.add(new VoteMenu());
        confMenus.add(new ConfSettingMenu());
        // [Demo] Add a custom menu.
        confMenus.add(new CustomMenu());
        return confMenus;
    }


    @Override
    public List<IConfMenu> buildSettingMenuItems() {

        List<IConfMenu> menus = new ArrayList<>();

        List<IConfMenu> audioVideomenuChildren = new ArrayList<>();
        IConfMenu howlDetectMenu = new SwitchMenu(R.id.hwmconf_confsetting_whistle_detection, com.huawei.hwmdemo.R.string.hwmconf_mine_calling_setting_howl_auto_mute, true);
        IConfMenu beautyMenu = new SwitchMenu(R.id.hwmconf_confsetting_beauty, com.huawei.hwmdemo.R.string.hwmconf_setting_beauty, true);
        IConfMenu mirrorMenu = new SwitchMenu(R.id.hwmconf_confsetting_video_mirror, R.string.hwmconf_video_mirroring, true);
        IConfMenu pipMenu = new SwitchMenu(R.id.hwmconf_confsetting_hide_self, com.huawei.hwmdemo.R.string.hwmconf_setting_pip, true);
        IConfMenu directionMenu = new RouterMenu(R.id.hwmconf_confsetting_camera_direction,
                R.string.hwmconf_auto, "cloudlink://hwmeeting/cameradirection");
        IConfMenu noiseReductionMenu = new SwitchMenu(R.id.hwmconf_confsetting_noise_reduction,
                R.string.hwmconf_audio_noise_reduction, true);
        IConfMenu highResMenu = new SwitchMenu(R.id.hwmconf_confsetting_high_resolution,
                R.string.hwmconf_mine_calling_setting_high_resolution, true);
        IConfMenu enableBrightenMenu = new SwitchMenu(R.id.hwmconf_confsetting_enable_brighten,
                R.string.hwmconf_enhance_video_quality, false);
        IConfMenu pictureRatioMenu = new TextMenu(R.id.hwmconf_confsetting_picture_ratio,
                R.string.hwmconf_picture_ratio, R.string.hwmconf_picture_ratio_original_size);
        audioVideomenuChildren.add(howlDetectMenu);
        audioVideomenuChildren.add(beautyMenu);
        audioVideomenuChildren.add(mirrorMenu);
        audioVideomenuChildren.add(pipMenu);
        audioVideomenuChildren.add(directionMenu);
        audioVideomenuChildren.add(noiseReductionMenu);
        audioVideomenuChildren.add(highResMenu);
        audioVideomenuChildren.add(enableBrightenMenu);
        audioVideomenuChildren.add(pictureRatioMenu);
        MenuContainer audioVideoMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_audio_video, com.huawei.hwmdemo.R.string.hwmconf_setting_audio_video, audioVideomenuChildren);

        List<IConfMenu> securityMenuChildren = new ArrayList<>();
        // Lock the meeting.
        IConfMenu lockConfMenu = new SwitchMenu(R.id.hwmconf_confsetting_lock_meeting, com.huawei.hwmdemo.R.string.hwmconf_lock, false);
        securityMenuChildren.add(lockConfMenu);
        // Set users who can join the meeting.
        IConfMenu allowJoinConfMenu = new TextMenu(R.id.hwmconf_confsetting_allow_join_conf,
                R.string.hwmconf_allow_incoming_call, R.string.hwmconf_everyone);
        securityMenuChildren.add(allowJoinConfMenu);
        // Enable the waiting room.
        IConfMenu enableWaitingRoomMenu = new SwitchMenu(R.id.hwmconf_confsetting_enable_waiting_room,
                R.string.hwmconf_enable_waiting_room, false);
        securityMenuChildren.add(enableWaitingRoomMenu);
        MenuContainer securityMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_security, com.huawei.hwmdemo.R.string.hwmconf_setting_safe, securityMenuChildren);


        List<IConfMenu> attendeePermissionMenuChildren = new ArrayList<>();
        // Allow unmuting.
        IConfMenu allowReleaseMuteMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_unmute, com.huawei.hwmdemo.R.string.hwmconf_allow_ummute_self, false);
        // Allow participants to enable the camera.
        IConfMenu cameraRestrictionSwitch = new SwitchMenu(R.id.hwmconf_confsetting_allow_open_camera, R.string.hwmconf_allow_open_video, false);
        IConfMenu cameraRestrictionMenu = new RouterMenu(R.id.hwmconf_confsetting_camera_restriction, R.string.hwmconf_camera_restriction, "");
        IConfMenu allowShareMuteMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_sharing, com.huawei.hwmdemo.R.string.hwmconf_allow_sharing, false);
        // Set the sharing interruption permission.
        IConfMenu preemptShareTypeMenu = new TextMenu(R.id.hwmconf_confsetting_preempt_share_type,
                R.string.hwmconf_preempt_share_permission, R.string.hwmconf_preempt_share_only_host);
        // Set the chat permission.
        IConfMenu chatPermissionMenu = new TextMenu(R.id.hwmconf_confsetting_chat_permission,
                R.string.hwmconf_chat_settings, R.string.hwmconf_private_chat_free);// Allow renaming.
        // Allow renaming.
        IConfMenu allowRenameMenu = new SwitchMenu(R.id.hwmconf_confsetting_allow_rename, com.huawei.hwmdemo.R.string.hwmconf_set_allow_rename, true);
        IConfMenu allowLocalRecordMenu = new RouterMenu(R.id.hwmconf_confsetting_local_record_permission,
            R.string.hwmconf_allow_record, "");
        attendeePermissionMenuChildren.add(allowReleaseMuteMenu);
        attendeePermissionMenuChildren.add(cameraRestrictionSwitch);
        attendeePermissionMenuChildren.add(cameraRestrictionMenu);
        attendeePermissionMenuChildren.add(allowShareMuteMenu);
        attendeePermissionMenuChildren.add(preemptShareTypeMenu);
        attendeePermissionMenuChildren.add(chatPermissionMenu);
        attendeePermissionMenuChildren.add(allowRenameMenu);
        attendeePermissionMenuChildren.add(allowLocalRecordMenu);
        /*
         * [Demo] Add a setting item to Meeting settings.
         */
        IConfMenu customeSettingMenuTest1 = new SwitchMenu(com.huawei.hwmdemo.R.id.conf_setting_menu_test1, com.huawei.hwmdemo.R.string.menu_conf_setting_menu_test1, false);
        attendeePermissionMenuChildren.add(customeSettingMenuTest1);
        MenuContainer attendeePermissionMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_paticipant_permission, com.huawei.hwmdemo.R.string.hwmconf_setting_participant_permission, attendeePermissionMenuChildren);


        List<IConfMenu> commonMenuChildren = new ArrayList<>();
        // Set the caption translation language.
        IConfMenu subtitlesLanguageMenu = new TextMenu(R.id.hwmconf_confsetting_subtitles_language, R.string.hwmconf_subtitle_translation_language, R.string.hwmconf_auto_no_translation);
        commonMenuChildren.add(subtitlesLanguageMenu);
        // Configure chat message notification.
        IConfMenu chatMessageRemindMenu = new TextMenu(R.id.hwmconf_confsetting_chat_message_remind,
                R.string.hwmconf_message_notify_mode, R.string.hwmconf_bubble_message_mode);
        commonMenuChildren.add(chatMessageRemindMenu);
        // Check the network quality.
        IConfMenu networkDetectMenu = new RouterMenu(R.id.hwmconf_confsetting_network_detect, com.huawei.hwmdemo.R.string.hwmconf_network_check, "cloudlink://hwmeeting/networkdetection");
        commonMenuChildren.add(networkDetectMenu);
        MenuContainer commonMenuContainer = new MenuContainer(R.id.hwmconf_setting_menu_common, com.huawei.hwmdemo.R.string.hwmconf_setting_common, commonMenuChildren);

        menus.add(audioVideoMenuContainer);
        menus.add(securityMenuContainer);
        menus.add(attendeePermissionMenuContainer);
        menus.add(commonMenuContainer);

        /*
         * [Demo] Add a group of setting items to Meeting settings.
         */
        List<IConfMenu> customChildren = new ArrayList<>();
        // Check the network quality.
        IConfMenu customeSettingMenuTest2 = new RouterMenu(com.huawei.hwmdemo.R.id.conf_setting_menu_test2, com.huawei.hwmdemo.R.string.menu_conf_setting_menu_test1, "test");
        customChildren.add(customeSettingMenuTest2);
        MenuContainer customContainer = new MenuContainer(com.huawei.hwmdemo.R.id.conf_setting_menu_test_group, com.huawei.hwmdemo.R.string.menu_conf_setting_menu_test_group, customChildren);
        menus.add(customContainer);

        return menus;
    }
}

We use cookies to improve our site and your experience. By continuing to browse our site you accept our cookie policy. Find out more

Feedback

Feedback

Feedback

0/500

Selected Content

Submit selected content with the feedback