diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/components/dialog.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/components/dialog.ets index cd703a33dd37a8d8542be709f89f07f1a416a838..b90ce61bbf25d83125c200827125f97a5f60f44c 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/components/dialog.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/components/dialog.ets @@ -20,6 +20,7 @@ import featureAbility from '@ohos.ability.featureAbility' import abilityAccessCtrl from '@ohos.abilityAccessCtrl' import bundle from '@ohos.bundle' import Resmgr from '@ohos.resourceManager' +import { permissionGroups, showSubpermissionsGrop } from "../model/permissionGroup.ets"; var TAG = "PermissionManager_GrantAbility:" @@ -108,7 +109,9 @@ export struct privacyDialog { } .backgroundColor($r('app.color.default_background_color')) .borderRadius(Constants.DIALOG_BORDER_RADIUS) - .height(Constants.DIALOG_HEIGHT) + .constraintSize({ + minHeight: Constants.DIALOG_HEIGHT + }) .width(Constants.DIALOG_WIDTH) } @@ -151,22 +154,20 @@ export struct privacyDialog { this.initStatus = Constants.INIT_NEED_TO_TERMINATED }) bundle.getBundleInfo(data, Constants.PARMETER_BUNDLE_FLAG).then(bundleInfo => { - var indexGroup = new Array(this.grantGroups.length).fill(Constants.INITIAL_INDEX); this.grantGroups.forEach((group, idx) => { - bundleInfo.reqPermissionDetails.forEach(reqPermissionDetail => { - var index = group.permissions.indexOf(reqPermissionDetail.name) - if(index !== -1 && index < indexGroup[idx]) { - Resmgr.getResourceManager(data).then(item => { - item.getString(reqPermissionDetail.reasonId, (err, value) => { - this.initStatus = Constants.INIT_NEED_TO_VERIFY - if (value !== undefined) { - group.description = value - } + if(group.description) { + Resmgr.getResourceManager(Constants.BUNDLE_NAME).then(item => { + Promise.all([item.getString($r("app.string.separator").id), + item.getString($r("app.string.reason_suffix").id)]) + .then(values => { + group.description = group.description.join(values[0]) + group.description += values[1] + this.getReason(group, bundleInfo, data) }) - }) - indexGroup[idx] = index - } - }) + }) + }else { + this.getReason(group, bundleInfo, data) + } }) }) }).catch(err => { @@ -175,19 +176,61 @@ export struct privacyDialog { }) } + getReason(group, bundleInfo, bundleName) { + group.permissions.forEach(permission => { + if(this.reqPerms.indexOf(permission) != -1) { + bundleInfo.reqPermissionDetails.forEach(reqPermissionDetail => { + if(reqPermissionDetail.name == permission) { + Resmgr.getResourceManager(bundleName).then(item => { + item.getString(reqPermissionDetail.reasonId, (err, value) => { + this.initStatus = Constants.INIT_NEED_TO_VERIFY + if (value !== undefined && !group.hasReason) { + group.description += value + group.hasReason = true + } + }) + }) + } + }) + } + }) + } + getgrantGroups(stateGroup) { this.reqPerms.forEach((permission, idx) => { + //已授权 if(stateGroup[idx] == Constants.PASS_OPER) { console.log(TAG + "permission has been fixed:" + permission) this.result[idx] = abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; + //待授权 }else if(stateGroup[idx] == Constants.DYNAMIC_OPER) { var group = getPermissionGroup(permission) if(!group) { console.log(TAG + "permission not find:" + permission) }else { var exist = this.grantGroups.find(grantGroup => grantGroup.name == group.name) - if(!exist) { - this.grantGroups.push(group) + //判断是否为需要展示子权限的权限组 + if(showSubpermissionsGrop.indexOf(group.groupName) != -1) { + var permissionDetail + permissionGroups.forEach(permissionGroup => { + if(permissionGroup.permissionName == permission) { + //获取授权的权限信息 + permissionDetail = permissionGroup + } + }) + //权限组已存在的情况 + if(!exist) { + group.description = [permissionDetail.label] + this.grantGroups.push(group) + }else { + if(exist.description.indexOf(permissionDetail.label) == -1) { + exist.description.push(permissionDetail.label) + } + } + }else { + if(!exist) { + this.grantGroups.push(group) + } } } } diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/model/permissionGroup.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/model/permissionGroup.ets index 86420ef53a52e9abde3503f8c8846873706e1e70..fae6188cf28094c566b83761203004755f851b8b 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/model/permissionGroup.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/model/permissionGroup.ets @@ -222,7 +222,7 @@ export const groups: any[] = [ "groupName": "电话", "icon": $r('app.media.ic_public_phone'), "label": "使用拨打电话", - "description": "包括拨打电话等权限。", + "description": "", "permissions": [ "ohos.permission.ANSWER_CALL", "ohos.permission.MANAGE_VOICEMAIL" @@ -233,7 +233,7 @@ export const groups: any[] = [ "groupName": "信息", "icon": $r('app.media.ic_public_message'), "label": "访问信息", - "description": "包括读取短信/彩信、接受短信、发送短信等权限。", + "description": "", "permissions": [ "ohos.permission.READ_CELL_MESSAGES", "ohos.permission.READ_MESSAGES", @@ -248,7 +248,7 @@ export const groups: any[] = [ "groupName": "通讯录", "icon": $r('app.media.ic_public_contacts_group'), "label": "访问通讯录", - "description": "包括新建/修改/删除联系人、读取联系人等权限。", + "description": "", "permissions": [ "ohos.permission.READ_CONTACTS", "ohos.permission.WRITE_CONTACTS" @@ -259,7 +259,7 @@ export const groups: any[] = [ "groupName": "通话记录", "icon": $r('app.media.ic_call_logs'), "label": "访问通话记录", - "description": "包括读取通话记录、新建/修改/删除通话记录等权限。", + "description": "", "permissions": [ "ohos.permission.READ_CALL_LOG", "ohos.permission.WRITE_CALL_LOG" @@ -282,7 +282,7 @@ export const groups: any[] = [ "groupName": "日历", "icon": $r('app.media.ic_public_calendar'), "label": "访问日历", - "description": "包括读取日历和新建/修改/删除日历。", + "description": "", "permissions": [ "ohos.permission.READ_CALENDAR", "ohos.permission.WRITE_CALENDAR" @@ -344,4 +344,12 @@ export const userGrantPermissions: string[] = [ "ohos.permission.ACTIVITY_MOTION", "ohos.permission.READ_HEALTH_DATA", "ohos.permission.DISTRIBUTED_DATASYNC" -] \ No newline at end of file +] + +export const showSubpermissionsGrop: string[] = [ + "电话", + "日历", + "信息", + "通讯录", + "通话记录" +]; diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/utils/constant.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/utils/constant.ets index 340b98ec89691dbbe7668dd0b8ffadeae02726ef..07161d36968c56483869aa730a1143b009b6c565 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/utils/constant.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/utils/constant.ets @@ -59,4 +59,6 @@ export default class Constants { // static PARMETER_BUNDLE_FLAG = 16 static INITIAL_INDEX = 10 + + static BUNDLE_NAME = 'com.ohos.permissionmanager' } \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/utils/utils.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/utils/utils.ets index 4d289e9d902fa5cc358657479605a5871eacb98a..95a38fcbe1e91f0dde89cf2a4c344043da016292 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/utils/utils.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/common/utils/utils.ets @@ -23,7 +23,7 @@ export function getPermissionGroup(permission: string) { "groupName": permissionGroups[i].groupName, "label": permissionGroups[i].label, "icon": permissionGroups[i].icon, - "description": permissionGroups[i].description, + "description": "", "permissions": [ permissionGroups[i].permissionName ] diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/common/model/permissionGroup.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/common/model/permissionGroup.ets index 4cbd6467ec03d4c47fa7fd6343c650b8d22aadb7..6b0450a7815d6753b4f6f6dc34682ddaadfc07f1 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/common/model/permissionGroup.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/common/model/permissionGroup.ets @@ -452,4 +452,12 @@ export const otherPermissionsLabel: object = { export const noNeedDisplayApp: string[] = [ "com.ohos.launcher" -]; \ No newline at end of file +]; + +export const showSubpermissionsGrop: string[] = [ + "电话", + "日历", + "信息", + "通讯录", + "通话记录" +]; diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/common/utils/constant.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/common/utils/constant.ets index 6dd0f6b4f4061eabc14e38baba8c07a4fcff0d5a..8f832a0f61c40b02f1f10c15922160222afc5012 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/common/utils/constant.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/common/utils/constant.ets @@ -225,4 +225,6 @@ export default class Constants { static API_VERSION_SUPPORT_STAGE = 9; static PRE_AUTHORIZATION_NOT_MODIFIED = 4; + + static BUNDLE_NAME = 'com.ohos.permissionmanager' } \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/application-tertiary.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/application-tertiary.ets index f1c6f15639db6e687176f08973d86aa58fbec980..a2decde5dc6f9e9637ac7ea3739a6ec8630e803a 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/application-tertiary.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/application-tertiary.ets @@ -20,7 +20,7 @@ import { getAppLabel, getAppIcon, verifyAccessToken } from "../common/utils/util import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; import Resmgr from '@ohos.resourceManager' import { authorizeDialog } from "../common/components/dialog.ets"; -import { permissionDescriptions, permissionGroups } from "../common/model/permissionGroup.ets"; +import { permissionDescriptions, permissionGroups, showSubpermissionsGrop } from "../common/model/permissionGroup.ets"; import Constants from '../common/utils/constant.ets'; var TAG = 'PermissionManager_MainAbility:' @@ -33,7 +33,7 @@ let nowGrantResult = Constants.PERMISSION_NUM; // Authorization results now let nowRevokeResult = Constants.PERMISSION_NUM; // Now deauthorize results let GrantResultFlag = []; // Authorization result Flag let RevokeResultFlag = []; // Cancel authorization result Flag -let reason = "" // Authorized reason +let reason = null // Authorized reason class MeidaDocObj { name: string index: number @@ -177,17 +177,41 @@ struct mediaDocumentItem { */ aboutToAppear() { let permissionDescription = permissionDescriptions[backTitle]; + if(showSubpermissionsGrop.indexOf(backTitle) != -1) { + reason = [] + permissions.forEach(permission => { + permissionGroups.forEach(permissionGroup => { + if(permissionGroup.permissionName == permission) { + reason.push(permissionGroup.label) + } + }) + }) + Resmgr.getResourceManager(Constants.BUNDLE_NAME).then(item => { + Promise.all([item.getString($r("app.string.separator").id), + item.getString($r("app.string.reason_suffix").id)]) + .then(values => { + reason = reason.join(values[0]) + reason += values[1] + }) + }) + }else { + reason = '' + } + let hasReason = false bundle.getBundleInfo(routerData, Constants.PARMETER_BUNDLE_FLAG).then(res => { - res.reqPermissionDetails.forEach(reqPermissionDetail => { - if(reqPermissionDetail.name == permissions[0]) { - Resmgr.getResourceManager(routerData).then(item => { - item.getString(reqPermissionDetail.reasonId, (err, value) => { - if (value !== undefined) { - reason = value - } + permissions.forEach(permission => { + res.reqPermissionDetails.forEach(reqPermissionDetail => { + if(reqPermissionDetail.name == permission) { + Resmgr.getResourceManager(routerData).then(item => { + item.getString(reqPermissionDetail.reasonId, (err, value) => { + if (value !== undefined && !hasReason) { + reason += value + hasReason = true + } + }) }) - }) - } + } + }) }) Promise.all([getAppLabel(res.appInfo.labelId, res.name), getAppIcon(res.appInfo.iconId, res.name)]) @@ -251,7 +275,7 @@ struct mediaDocumentItem { .width(Constants.TERTIARY_HALF_WIDTH) Row() { Text(this.mediaListItem.versionName) - .fontSize(Constants.TEXT_SMALLER_FONT_SIZE) + .fontSize(Constants.TEXT_SMAL_FONT_SIZE) .textAlign(TextAlign.Start) } .width(Constants.TERTIARY_HALF_WIDTH) @@ -261,8 +285,8 @@ struct mediaDocumentItem { Row() { Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { Row() { - Text() - .fontSize(Constants.TEXT_SMALLER_FONT_SIZE) + Text(reason) + .fontSize(Constants.TEXT_SMAL_FONT_SIZE) .textAlign(TextAlign.Start) }.margin({ left: Constants.TERTIARY_IMAGE_MARGIN_LEFT, right: Constants.TERTIARY_IMAGE_MARGIN_RIGHT }) } @@ -271,7 +295,10 @@ struct mediaDocumentItem { Row() { Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { Row() { - Text(reason != "" ? reason : (backTitle + "访问权限")) + Text(backTitle) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .textAlign(TextAlign.Start) + Text($r('app.string.access_permission')) .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) .textAlign(TextAlign.Start) }.margin({ left: Constants.TERTIARY_IMAGE_MARGIN_LEFT, right: Constants.TERTIARY_IMAGE_MARGIN_RIGHT }) diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/string.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/string.json index 0b97e458cf01aee6881223f0324a81ab1b3bcefe..513221be924043fd4cf78f4a9dcd8bd920948fcb 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/string.json +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/string.json @@ -91,6 +91,14 @@ { "name": "other_permission_label_description", "value": "多设备协同访问权限" + }, + { + "name": "reason_suffix", + "value": "等权限。" + }, + { + "name": "separator", + "value": "、" } ] } \ No newline at end of file