1/* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { BasePermissionStrategy } from '../base/BasePermissionStrategy'; 17import { ButtonStatus, Permission, PermissionGroup, PermissionOption } from '../model/definition'; 18import { CallerAppInfo, PermissionGroupConfig } from '../model/typedef'; 19 20const groupConfig: PermissionGroupConfig = new PermissionGroupConfig({ 21 groupName: PermissionGroup.CONTACTS, 22 permissions: [Permission.READ_CONTACTS, Permission.WRITE_CONTACTS], 23 icon: $r('app.media.ic_public_contacts_group'), 24 title: '', 25 reason: '', 26 buttonList: [] 27}) 28 29export class ContactsStrategy extends BasePermissionStrategy { 30 public override getPermissionGroupConfig(): PermissionGroupConfig { 31 return groupConfig; 32 } 33 34 public override getGroupTitle(appName: string, locationFlag: number): ResourceStr { 35 return $r('app.string.group_label_contacts', appName); 36 } 37 38 public override getReadAndWrite(permissions: Set<Permission>): ResourceStr { 39 let message: ResourceStr = ''; 40 let isRead: boolean = permissions.has(Permission.READ_CONTACTS); 41 let isWrite: boolean = permissions.has(Permission.WRITE_CONTACTS); 42 43 if (isRead) { 44 message = $r('sys.string.ohos_lab_read_contacts'); 45 } 46 if (isWrite) { 47 message = $r('sys.string.ohos_lab_write_contacts'); 48 } 49 if (isRead && isWrite) { 50 message = ''; 51 } 52 return message; 53 } 54 55 public override grantHandle( 56 permission: Permission, callerAppInfo: CallerAppInfo, locationFlag: number, buttonStatus: ButtonStatus 57 ): PermissionOption { 58 if (this.isPermissionPendingGrant(permission, callerAppInfo)) { 59 return PermissionOption.GRANT; 60 } 61 return PermissionOption.SKIP; 62 } 63 64 public override denyHandle( 65 permission: Permission, callerAppInfo: CallerAppInfo, locationFlag: number, buttonStatus: ButtonStatus 66 ): PermissionOption { 67 if (this.isPermissionPendingGrant(permission, callerAppInfo)) { 68 return PermissionOption.REVOKE; 69 } 70 return PermissionOption.SKIP; 71 } 72}