1c5c2eed7Sopenharmony_ci/* 2c5c2eed7Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3c5c2eed7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c5c2eed7Sopenharmony_ci * you may not use this file except in compliance with the License. 5c5c2eed7Sopenharmony_ci * You may obtain a copy of the License at 6c5c2eed7Sopenharmony_ci * 7c5c2eed7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c5c2eed7Sopenharmony_ci * 9c5c2eed7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c5c2eed7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c5c2eed7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c5c2eed7Sopenharmony_ci * See the License for the specific language governing permissions and 13c5c2eed7Sopenharmony_ci * limitations under the License. 14c5c2eed7Sopenharmony_ci */ 15c5c2eed7Sopenharmony_ci 16c5c2eed7Sopenharmony_ciimport abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; 17c5c2eed7Sopenharmony_ciimport { BusinessError } from '@ohos.base'; 18c5c2eed7Sopenharmony_ciimport audio from '@ohos.multimedia.audio'; 19c5c2eed7Sopenharmony_ciimport camera from '@ohos.multimedia.camera'; 20c5c2eed7Sopenharmony_ciimport { CustomContentDialog } from '@ohos.arkui.advanced.Dialog'; 21c5c2eed7Sopenharmony_ciimport { Log, PermissionDialogException, PermissionDialogReturn } from '../common/utils/utils'; 22c5c2eed7Sopenharmony_ciimport { GroupInfo, WantInfo } from '../common/model/typedef'; 23c5c2eed7Sopenharmony_ciimport { GlobalContext } from '../common/utils/globalContext'; 24c5c2eed7Sopenharmony_ciimport Constants from '../common/utils/constant'; 25c5c2eed7Sopenharmony_ciimport { globalGroup, groups } from '../common/model/permissionGroup'; 26c5c2eed7Sopenharmony_ciimport bundleManager from '@ohos.bundle.bundleManager'; 27c5c2eed7Sopenharmony_ciimport { getCallerBundleInfo } from './PermissionStateSheetDialog'; 28c5c2eed7Sopenharmony_ciimport UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; 29c5c2eed7Sopenharmony_ciimport common from '@ohos.app.ability.common'; 30c5c2eed7Sopenharmony_ci 31c5c2eed7Sopenharmony_ci 32c5c2eed7Sopenharmony_cilet globalIsOn: boolean; 33c5c2eed7Sopenharmony_cilet session: UIExtensionContentSession; 34c5c2eed7Sopenharmony_cilet storage = LocalStorage.getShared(); 35c5c2eed7Sopenharmony_cilet bundleName = ''; 36c5c2eed7Sopenharmony_ci 37c5c2eed7Sopenharmony_ci@Entry(storage) 38c5c2eed7Sopenharmony_ci@Component 39c5c2eed7Sopenharmony_cistruct GlobalSwitchSheetDialog { 40c5c2eed7Sopenharmony_ci @LocalStorageLink('want') want: Want | null = storage.get<Want>('want') || null; 41c5c2eed7Sopenharmony_ci @LocalStorageLink('session') session: UIExtensionContentSession = 42c5c2eed7Sopenharmony_ci storage.get<UIExtensionContentSession>('session') as UIExtensionContentSession; 43c5c2eed7Sopenharmony_ci private context = getContext(this) as common.ServiceExtensionContext; 44c5c2eed7Sopenharmony_ci private muteSuppoted = false; 45c5c2eed7Sopenharmony_ci private groupName: string = ''; 46c5c2eed7Sopenharmony_ci dialogController: CustomDialogController | null = new CustomDialogController({ 47c5c2eed7Sopenharmony_ci builder: CustomContentDialog({ 48c5c2eed7Sopenharmony_ci contentBuilder: () => { 49c5c2eed7Sopenharmony_ci this.buildDialog(); 50c5c2eed7Sopenharmony_ci }, 51c5c2eed7Sopenharmony_ci contentAreaPadding: {left: 0, right: 0} 52c5c2eed7Sopenharmony_ci }), 53c5c2eed7Sopenharmony_ci offset: { dx: 0, dy: `-${GlobalContext.load('avoidAreaHeight') as string}` }, // unit included in globalContext 54c5c2eed7Sopenharmony_ci alignment: DialogAlignment.Bottom, 55c5c2eed7Sopenharmony_ci customStyle: false, 56c5c2eed7Sopenharmony_ci isModal: true, 57c5c2eed7Sopenharmony_ci width: '100%', 58c5c2eed7Sopenharmony_ci autoCancel: false, 59c5c2eed7Sopenharmony_ci cornerRadius: { 60c5c2eed7Sopenharmony_ci topLeft: 32, 61c5c2eed7Sopenharmony_ci topRight: 32, 62c5c2eed7Sopenharmony_ci bottomLeft: 0, 63c5c2eed7Sopenharmony_ci bottomRight: 0 64c5c2eed7Sopenharmony_ci }, 65c5c2eed7Sopenharmony_ci cancel: () => { 66c5c2eed7Sopenharmony_ci PermissionDialogReturn([Constants.ERR_GLOBAL_SWITCH_EXCEPTION], session); 67c5c2eed7Sopenharmony_ci this.context.terminateSelf(); 68c5c2eed7Sopenharmony_ci this.dialogController?.close(); 69c5c2eed7Sopenharmony_ci } 70c5c2eed7Sopenharmony_ci }); 71c5c2eed7Sopenharmony_ci 72c5c2eed7Sopenharmony_ci @Builder 73c5c2eed7Sopenharmony_ci buildDialog() { 74c5c2eed7Sopenharmony_ci applicationItem({ 75c5c2eed7Sopenharmony_ci isMuteSupported: this.muteSuppoted, 76c5c2eed7Sopenharmony_ci currentGroup: this.groupName 77c5c2eed7Sopenharmony_ci }) 78c5c2eed7Sopenharmony_ci } 79c5c2eed7Sopenharmony_ci 80c5c2eed7Sopenharmony_ci async aboutToAppear() { 81c5c2eed7Sopenharmony_ci session = this.session; 82c5c2eed7Sopenharmony_ci Log.info('GlobalSwitchSheetDialog aboutToAppear'); 83c5c2eed7Sopenharmony_ci Log.info('GlobalSwitchSheetDialog getWant' + JSON.stringify(this.want)); 84c5c2eed7Sopenharmony_ci let callerBundle = getCallerBundleInfo(this.want as Object as WantInfo); 85c5c2eed7Sopenharmony_ci Log.info('GlobalSwitchSheetDialog bundleName ' + callerBundle.bundleName); 86c5c2eed7Sopenharmony_ci let globalSwitch = callerBundle.globSwitch; 87c5c2eed7Sopenharmony_ci bundleName = callerBundle.bundleName; 88c5c2eed7Sopenharmony_ci 89c5c2eed7Sopenharmony_ci if (globalSwitch === Constants.GLOBAL_SWITCH_CAMERA) { 90c5c2eed7Sopenharmony_ci this.groupName = 'CAMERA'; 91c5c2eed7Sopenharmony_ci } else if (globalSwitch === Constants.GLOBAL_SWITCH_MICROPHONE) { 92c5c2eed7Sopenharmony_ci this.groupName = 'MICROPHONE'; 93c5c2eed7Sopenharmony_ci } else { 94c5c2eed7Sopenharmony_ci Log.error('global switch not suppoted'); 95c5c2eed7Sopenharmony_ci PermissionDialogException(Constants.ERR_GLOBAL_SWITCH_NOT_SUPPORTED, session); 96c5c2eed7Sopenharmony_ci this.context.terminateSelf(); 97c5c2eed7Sopenharmony_ci return; 98c5c2eed7Sopenharmony_ci } 99c5c2eed7Sopenharmony_ci 100c5c2eed7Sopenharmony_ci if (this.groupName == 'MICROPHONE') { 101c5c2eed7Sopenharmony_ci let audioManager = audio.getAudioManager(); 102c5c2eed7Sopenharmony_ci let audioVolumeManager = audioManager.getVolumeManager(); 103c5c2eed7Sopenharmony_ci let groupid = audio.DEFAULT_VOLUME_GROUP_ID; 104c5c2eed7Sopenharmony_ci let audioVolumeGroupManager = await audioVolumeManager.getVolumeGroupManager(groupid); 105c5c2eed7Sopenharmony_ci this.muteSuppoted = true; 106c5c2eed7Sopenharmony_ci globalIsOn = !audioVolumeGroupManager.isPersistentMicMute(); 107c5c2eed7Sopenharmony_ci } else { 108c5c2eed7Sopenharmony_ci let cameraManager = camera.getCameraManager(GlobalContext.load('context')); 109c5c2eed7Sopenharmony_ci this.muteSuppoted = cameraManager.isCameraMuteSupported(); 110c5c2eed7Sopenharmony_ci globalIsOn = !cameraManager.isCameraMuted(); 111c5c2eed7Sopenharmony_ci } 112c5c2eed7Sopenharmony_ci 113c5c2eed7Sopenharmony_ci if (this.muteSuppoted == false) { 114c5c2eed7Sopenharmony_ci Log.error('global switch muted'); 115c5c2eed7Sopenharmony_ci PermissionDialogException(Constants.ERR_GLOBAL_SWITCH_NOT_SUPPORTED, session); 116c5c2eed7Sopenharmony_ci this.context.terminateSelf(); 117c5c2eed7Sopenharmony_ci return; 118c5c2eed7Sopenharmony_ci } 119c5c2eed7Sopenharmony_ci 120c5c2eed7Sopenharmony_ci if (globalIsOn) { 121c5c2eed7Sopenharmony_ci Log.error('global switch is on'); 122c5c2eed7Sopenharmony_ci PermissionDialogException(Constants.ERR_GLOBAL_SWITCH_IS_ON, session); 123c5c2eed7Sopenharmony_ci this.context.terminateSelf(); 124c5c2eed7Sopenharmony_ci return; 125c5c2eed7Sopenharmony_ci } 126c5c2eed7Sopenharmony_ci 127c5c2eed7Sopenharmony_ci Log.info('isMuted ' + globalIsOn); 128c5c2eed7Sopenharmony_ci this.dialogController?.open(); 129c5c2eed7Sopenharmony_ci } 130c5c2eed7Sopenharmony_ci 131c5c2eed7Sopenharmony_ci onPageShow(): void { 132c5c2eed7Sopenharmony_ci Log.info('GlobalSwitchSheetDialog onPageShow' ); 133c5c2eed7Sopenharmony_ci } 134c5c2eed7Sopenharmony_ci 135c5c2eed7Sopenharmony_ci build() { 136c5c2eed7Sopenharmony_ci } 137c5c2eed7Sopenharmony_ci} 138c5c2eed7Sopenharmony_ci 139c5c2eed7Sopenharmony_ci@CustomDialog 140c5c2eed7Sopenharmony_cistruct applicationItem { 141c5c2eed7Sopenharmony_ci private context = getContext(this) as common.ServiceExtensionContext; 142c5c2eed7Sopenharmony_ci @State globalIsOn: boolean = false; 143c5c2eed7Sopenharmony_ci @State backTitle: string = ''; 144c5c2eed7Sopenharmony_ci @State groupInfo: GroupInfo = new GroupInfo('', '', '', '', [], '', [], false); 145c5c2eed7Sopenharmony_ci @State currentGroup: string = ''; 146c5c2eed7Sopenharmony_ci @State isMuteSupported: boolean = false; 147c5c2eed7Sopenharmony_ci @State appName: ResourceStr = ''; 148c5c2eed7Sopenharmony_ci private controller: CustomDialogController; 149c5c2eed7Sopenharmony_ci 150c5c2eed7Sopenharmony_ci dialogController: CustomDialogController | null = new CustomDialogController({ 151c5c2eed7Sopenharmony_ci builder: CustomContentDialog({ 152c5c2eed7Sopenharmony_ci contentBuilder: () => { 153c5c2eed7Sopenharmony_ci this.buildContent(); 154c5c2eed7Sopenharmony_ci }, 155c5c2eed7Sopenharmony_ci contentAreaPadding: { left: Constants.PADDING_24, right: Constants.PADDING_24 }, 156c5c2eed7Sopenharmony_ci buttons: [ 157c5c2eed7Sopenharmony_ci { 158c5c2eed7Sopenharmony_ci value: $r('app.string.cancel'), 159c5c2eed7Sopenharmony_ci buttonStyle: ButtonStyleMode.TEXTUAL, 160c5c2eed7Sopenharmony_ci action: () => { 161c5c2eed7Sopenharmony_ci Log.info('global cancel'); 162c5c2eed7Sopenharmony_ci if (this.dialogController !== null) { 163c5c2eed7Sopenharmony_ci this.dialogController.close(); 164c5c2eed7Sopenharmony_ci } 165c5c2eed7Sopenharmony_ci } 166c5c2eed7Sopenharmony_ci }, 167c5c2eed7Sopenharmony_ci { 168c5c2eed7Sopenharmony_ci value: $r('app.string.close'), 169c5c2eed7Sopenharmony_ci buttonStyle: ButtonStyleMode.TEXTUAL, 170c5c2eed7Sopenharmony_ci action: () => { 171c5c2eed7Sopenharmony_ci Log.info('global accept'); 172c5c2eed7Sopenharmony_ci if (this.currentGroup == 'MICROPHONE') { 173c5c2eed7Sopenharmony_ci let audioManager = audio.getAudioManager(); 174c5c2eed7Sopenharmony_ci let audioVolumeManager = audioManager.getVolumeManager(); 175c5c2eed7Sopenharmony_ci audioVolumeManager.getVolumeGroupManager(audio.DEFAULT_VOLUME_GROUP_ID).then(audioVolumeGroupManager => { 176c5c2eed7Sopenharmony_ci audioVolumeGroupManager.setMicMutePersistent(true, audio.PolicyType.PRIVACY).then(() => { 177c5c2eed7Sopenharmony_ci Log.info('microphone muted'); 178c5c2eed7Sopenharmony_ci if (this.dialogController !== null) { 179c5c2eed7Sopenharmony_ci this.dialogController.close(); 180c5c2eed7Sopenharmony_ci } 181c5c2eed7Sopenharmony_ci }) 182c5c2eed7Sopenharmony_ci }) 183c5c2eed7Sopenharmony_ci } else { 184c5c2eed7Sopenharmony_ci let cameraManager = camera.getCameraManager(this.context); 185c5c2eed7Sopenharmony_ci cameraManager.muteCamera(true); 186c5c2eed7Sopenharmony_ci if (this.dialogController !== null) { 187c5c2eed7Sopenharmony_ci this.dialogController.close(); 188c5c2eed7Sopenharmony_ci } 189c5c2eed7Sopenharmony_ci } 190c5c2eed7Sopenharmony_ci } 191c5c2eed7Sopenharmony_ci } 192c5c2eed7Sopenharmony_ci ], 193c5c2eed7Sopenharmony_ci }), 194c5c2eed7Sopenharmony_ci autoCancel: false 195c5c2eed7Sopenharmony_ci }); 196c5c2eed7Sopenharmony_ci 197c5c2eed7Sopenharmony_ci globalListen() { 198c5c2eed7Sopenharmony_ci if (this.currentGroup == 'CAMERA') { 199c5c2eed7Sopenharmony_ci let cameraManager = camera.getCameraManager(GlobalContext.load('context')); 200c5c2eed7Sopenharmony_ci cameraManager.on('cameraMute', (err, curMuted) => { 201c5c2eed7Sopenharmony_ci Log.info('curMuted: ' + JSON.stringify(curMuted) + ' err: ' + JSON.stringify(err)); 202c5c2eed7Sopenharmony_ci this.globalIsOn = !curMuted; 203c5c2eed7Sopenharmony_ci }) 204c5c2eed7Sopenharmony_ci } else { 205c5c2eed7Sopenharmony_ci let audioManager = audio.getAudioManager(); 206c5c2eed7Sopenharmony_ci let audioVolumeManager = audioManager.getVolumeManager(); 207c5c2eed7Sopenharmony_ci let groupId = audio.DEFAULT_VOLUME_GROUP_ID; 208c5c2eed7Sopenharmony_ci audioVolumeManager.getVolumeGroupManager(groupId).then(audioVolumeGroupManager => { 209c5c2eed7Sopenharmony_ci audioVolumeGroupManager.on('micStateChange', micStateChange => { 210c5c2eed7Sopenharmony_ci Log.info('micStateChange: ' + JSON.stringify(micStateChange)); 211c5c2eed7Sopenharmony_ci this.globalIsOn = !micStateChange.mute; 212c5c2eed7Sopenharmony_ci }) 213c5c2eed7Sopenharmony_ci }) 214c5c2eed7Sopenharmony_ci } 215c5c2eed7Sopenharmony_ci } 216c5c2eed7Sopenharmony_ci 217c5c2eed7Sopenharmony_ci @Builder 218c5c2eed7Sopenharmony_ci buildContent(): void { 219c5c2eed7Sopenharmony_ci Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { 220c5c2eed7Sopenharmony_ci Column() { 221c5c2eed7Sopenharmony_ci Text(this.currentGroup == 'CAMERA' ? $r('app.string.close_camera') : $r('app.string.close_microphone')) 222c5c2eed7Sopenharmony_ci .fontSize(Constants.TEXT_BIG_FONT_SIZE) 223c5c2eed7Sopenharmony_ci .fontColor($r('sys.color.font_primary')) 224c5c2eed7Sopenharmony_ci .fontWeight(FontWeight.Medium) 225c5c2eed7Sopenharmony_ci .lineHeight(Constants.TEXT_BIG_LINE_HEIGHT) 226c5c2eed7Sopenharmony_ci .width(Constants.FULL_WIDTH) 227c5c2eed7Sopenharmony_ci .padding({ top: Constants.PADDING_14, bottom: Constants.PADDING_14 }) 228c5c2eed7Sopenharmony_ci Text( 229c5c2eed7Sopenharmony_ci this.currentGroup == 'CAMERA' ? 230c5c2eed7Sopenharmony_ci $r('app.string.close_camera_desc') : 231c5c2eed7Sopenharmony_ci $r('app.string.close_microphone_desc') 232c5c2eed7Sopenharmony_ci ) 233c5c2eed7Sopenharmony_ci .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) 234c5c2eed7Sopenharmony_ci .fontColor($r('sys.color.font_primary')) 235c5c2eed7Sopenharmony_ci .lineHeight(Constants.TEXT_LINE_HEIGHT) 236c5c2eed7Sopenharmony_ci } 237c5c2eed7Sopenharmony_ci .clip(true) 238c5c2eed7Sopenharmony_ci } 239c5c2eed7Sopenharmony_ci } 240c5c2eed7Sopenharmony_ci 241c5c2eed7Sopenharmony_ci /** 242c5c2eed7Sopenharmony_ci * Grant permissions to the app 243c5c2eed7Sopenharmony_ci * @param {Number} accessTokenId 244c5c2eed7Sopenharmony_ci * @param {String} permission permission name 245c5c2eed7Sopenharmony_ci * @param {Number} index Array index to modify permission status 246c5c2eed7Sopenharmony_ci */ 247c5c2eed7Sopenharmony_ci grantUserGrantedPermission(accessTokenId: number, permission: Permissions, resolve: (value: number) => void) { 248c5c2eed7Sopenharmony_ci abilityAccessCtrl.createAtManager().grantUserGrantedPermission(accessTokenId, permission, Constants.PERMISSION_FLAG) 249c5c2eed7Sopenharmony_ci .then(() => { 250c5c2eed7Sopenharmony_ci resolve(0); 251c5c2eed7Sopenharmony_ci }).catch((error: BusinessError) => { 252c5c2eed7Sopenharmony_ci resolve(-1); 253c5c2eed7Sopenharmony_ci Log.error('grantUserGrantedPermission failed. Cause: ' + JSON.stringify(error)); 254c5c2eed7Sopenharmony_ci }) 255c5c2eed7Sopenharmony_ci } 256c5c2eed7Sopenharmony_ci 257c5c2eed7Sopenharmony_ci /** 258c5c2eed7Sopenharmony_ci * Deauthorize the app 259c5c2eed7Sopenharmony_ci * @param {Number} accessTokenId 260c5c2eed7Sopenharmony_ci * @param {String} permission permission name 261c5c2eed7Sopenharmony_ci * @param {Number} index Array index to modify permission status 262c5c2eed7Sopenharmony_ci */ 263c5c2eed7Sopenharmony_ci revokeUserGrantedPermission(accessTokenId: number, permission: Permissions, resolve: (value: number) => void) { 264c5c2eed7Sopenharmony_ci abilityAccessCtrl.createAtManager().revokeUserGrantedPermission( 265c5c2eed7Sopenharmony_ci accessTokenId, permission, Constants.PERMISSION_FLAG 266c5c2eed7Sopenharmony_ci ).then(() => { 267c5c2eed7Sopenharmony_ci resolve(0); 268c5c2eed7Sopenharmony_ci }).catch((error: BusinessError) => { 269c5c2eed7Sopenharmony_ci resolve(-1); 270c5c2eed7Sopenharmony_ci Log.error('revokeUserGrantedPermission failed. Cause: ' + JSON.stringify(error)); 271c5c2eed7Sopenharmony_ci }) 272c5c2eed7Sopenharmony_ci } 273c5c2eed7Sopenharmony_ci 274c5c2eed7Sopenharmony_ci /** 275c5c2eed7Sopenharmony_ci * Lifecycle function, executed when the page is initialized 276c5c2eed7Sopenharmony_ci */ 277c5c2eed7Sopenharmony_ci async aboutToAppear() { 278c5c2eed7Sopenharmony_ci try { 279c5c2eed7Sopenharmony_ci let bundleInfo = await bundleManager.getBundleInfo( 280c5c2eed7Sopenharmony_ci bundleName, 281c5c2eed7Sopenharmony_ci bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); 282c5c2eed7Sopenharmony_ci let manager = this.context.createBundleContext(bundleName).resourceManager; 283c5c2eed7Sopenharmony_ci this.appName = await manager.getStringValue(bundleInfo.appInfo.labelId); 284c5c2eed7Sopenharmony_ci } catch (e) { 285c5c2eed7Sopenharmony_ci Log.error('get appName failed ' + JSON.stringify(e)); 286c5c2eed7Sopenharmony_ci } 287c5c2eed7Sopenharmony_ci groups.forEach(group => { 288c5c2eed7Sopenharmony_ci if (group.name === this.currentGroup) { 289c5c2eed7Sopenharmony_ci this.groupInfo = group; 290c5c2eed7Sopenharmony_ci } 291c5c2eed7Sopenharmony_ci }) 292c5c2eed7Sopenharmony_ci this.backTitle = this.groupInfo.label; 293c5c2eed7Sopenharmony_ci this.globalIsOn = globalIsOn; 294c5c2eed7Sopenharmony_ci if (globalGroup.indexOf(this.currentGroup) !== -1) { 295c5c2eed7Sopenharmony_ci this.globalListen(); 296c5c2eed7Sopenharmony_ci } 297c5c2eed7Sopenharmony_ci } 298c5c2eed7Sopenharmony_ci 299c5c2eed7Sopenharmony_ci aboutToDisappear() { 300c5c2eed7Sopenharmony_ci this.dialogController = null; 301c5c2eed7Sopenharmony_ci } 302c5c2eed7Sopenharmony_ci 303c5c2eed7Sopenharmony_ci build() { 304c5c2eed7Sopenharmony_ci Column() { 305c5c2eed7Sopenharmony_ci Row() { 306c5c2eed7Sopenharmony_ci Flex({ alignItems: ItemAlign.Start, justifyContent: FlexAlign.Start }) { 307c5c2eed7Sopenharmony_ci Column() { 308c5c2eed7Sopenharmony_ci Column() { 309c5c2eed7Sopenharmony_ci Text($r(this.backTitle, this.appName)) 310c5c2eed7Sopenharmony_ci .align(Alignment.Start) 311c5c2eed7Sopenharmony_ci .fontColor($r('sys.color.font_primary')) 312c5c2eed7Sopenharmony_ci .maxLines(Constants.MAXIMUM_HEADER_LINES) 313c5c2eed7Sopenharmony_ci .textOverflow({ overflow: TextOverflow.Ellipsis }) 314c5c2eed7Sopenharmony_ci .fontSize(Constants.TEXT_BIG_FONT_SIZE) 315c5c2eed7Sopenharmony_ci .flexGrow(Constants.FLEX_GROW) 316c5c2eed7Sopenharmony_ci .fontWeight(FontWeight.Bold) 317c5c2eed7Sopenharmony_ci .padding({left: Constants.PADDING_10, top: Constants.PADDING_20}) 318c5c2eed7Sopenharmony_ci } 319c5c2eed7Sopenharmony_ci .width(Constants.FULL_WIDTH) 320c5c2eed7Sopenharmony_ci .alignItems(HorizontalAlign.Start) 321c5c2eed7Sopenharmony_ci if (globalGroup.indexOf(this.currentGroup) !== -1 && this.isMuteSupported === true) { 322c5c2eed7Sopenharmony_ci Row() { 323c5c2eed7Sopenharmony_ci Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { 324c5c2eed7Sopenharmony_ci Text(this.currentGroup == 'CAMERA' ? $r('app.string.camera') : $r('app.string.microphone')) 325c5c2eed7Sopenharmony_ci .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE).fontColor($r('sys.color.font_primary')) 326c5c2eed7Sopenharmony_ci .fontWeight(FontWeight.Medium) 327c5c2eed7Sopenharmony_ci Row() { 328c5c2eed7Sopenharmony_ci Toggle({ type: ToggleType.Switch, isOn: this.globalIsOn }) 329c5c2eed7Sopenharmony_ci .selectedColor($r('sys.color.icon_emphasize')) 330c5c2eed7Sopenharmony_ci .switchPointColor($r('sys.color.comp_background_primary_contrary')) 331c5c2eed7Sopenharmony_ci .onChange((isOn: boolean) => { 332c5c2eed7Sopenharmony_ci if (isOn) { 333c5c2eed7Sopenharmony_ci if (this.currentGroup == 'CAMERA') { 334c5c2eed7Sopenharmony_ci let cameraManager = camera.getCameraManager(GlobalContext.load('context')); 335c5c2eed7Sopenharmony_ci cameraManager.muteCamera(false); 336c5c2eed7Sopenharmony_ci PermissionDialogReturn([Constants.PERMISSION_DIALOG_SUCCESS], session); 337c5c2eed7Sopenharmony_ci this.context.terminateSelf(); 338c5c2eed7Sopenharmony_ci } else { 339c5c2eed7Sopenharmony_ci let audioManager = audio.getAudioManager(); 340c5c2eed7Sopenharmony_ci let audioVolumeManager = audioManager.getVolumeManager(); 341c5c2eed7Sopenharmony_ci let groupId = audio.DEFAULT_VOLUME_GROUP_ID; 342c5c2eed7Sopenharmony_ci audioVolumeManager.getVolumeGroupManager(groupId).then(audioVolumeGroupManager => { 343c5c2eed7Sopenharmony_ci audioVolumeGroupManager.setMicMutePersistent(false, audio.PolicyType.PRIVACY); 344c5c2eed7Sopenharmony_ci PermissionDialogReturn([Constants.PERMISSION_DIALOG_SUCCESS], session); 345c5c2eed7Sopenharmony_ci this.context.terminateSelf(); 346c5c2eed7Sopenharmony_ci }) 347c5c2eed7Sopenharmony_ci } 348c5c2eed7Sopenharmony_ci } 349c5c2eed7Sopenharmony_ci }) 350c5c2eed7Sopenharmony_ci Row().onClick(() => { 351c5c2eed7Sopenharmony_ci if (this.dialogController !== null) { 352c5c2eed7Sopenharmony_ci this.dialogController.open(); 353c5c2eed7Sopenharmony_ci } 354c5c2eed7Sopenharmony_ci }) 355c5c2eed7Sopenharmony_ci .width(Constants.DEFAULT_SLIDER_WIDTH).height(Constants.DEFAULT_SLIDER_HEIGHT) 356c5c2eed7Sopenharmony_ci .position({ x: this.globalIsOn ? 0 : Constants.OFFSET, y: 0 }) 357c5c2eed7Sopenharmony_ci }.clip(true) 358c5c2eed7Sopenharmony_ci }.height(Constants.LISTITEM_ROW_HEIGHT) 359c5c2eed7Sopenharmony_ci .padding({ left: Constants.DEFAULT_PADDING_START, right: Constants.DEFAULT_PADDING_END }) 360c5c2eed7Sopenharmony_ci }.padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) 361c5c2eed7Sopenharmony_ci .backgroundColor($r('sys.color.comp_background_list_card')) 362c5c2eed7Sopenharmony_ci .borderRadius($r('sys.float.ohos_id_corner_radius_card')) 363c5c2eed7Sopenharmony_ci .margin({ top: Constants.MARGIN_16 }) 364c5c2eed7Sopenharmony_ci } 365c5c2eed7Sopenharmony_ci }.padding({ left: Constants.AUTHORITY_LISTITEM_PADDING_LEFT }) 366c5c2eed7Sopenharmony_ci }.flexGrow(Constants.FLEX_GROW) 367c5c2eed7Sopenharmony_ci } 368c5c2eed7Sopenharmony_ci } 369c5c2eed7Sopenharmony_ci } 370c5c2eed7Sopenharmony_ci}