diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/components/dialog.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/components/dialog.ets index 388e7f1b2f7d0f6e6563432ede921e298cc53cf5..dd5ed3e8feda29e8fc5dc2a697d078bbf92942d3 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/components/dialog.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/components/dialog.ets @@ -14,7 +14,7 @@ */ import { getPermissionGroup } from '../utils/utils.ets' -import { BundleFlag, userId } from '../model/bundle.ets' +import { BundleFlag, USER_ID } from '../model/bundle.ets' import Constants from '../utils/constant.ets' import featureAbility from '@ohos.ability.featureAbility' import abilityAccessCtrl from '@ohos.abilityAccessCtrl' @@ -34,7 +34,7 @@ export struct privacyDialog { cancel: (group, accessTokenId, permissionList, userFixedFlag) => void confirm: (group, accessTokenId, permissionList, userFixedFlag) => void @State accessTokenId: number = 0 - @State hasPrepared: boolean = false + @State initStatus: number = Constants.INIT_NEED_TO_WAIT @State reqPerms: Array = [] @State grantGroups: Array = [] @State userFixedFlag: number = 2 // means user fixed @@ -42,7 +42,7 @@ export struct privacyDialog { build() { Column() { - if (this.hasPrepared && this.verify(this.reqPerms[this.count])) { + if ((this.initStatus != Constants.INIT_NEED_TO_WAIT) && this.verify(this.reqPerms[this.count])) { Image(this.grantGroups[this.count].icon) .width(Constants.DIALOG_ICON_WIDTH) .height(Constants.DIALOG_ICON_HEIGHT) @@ -60,6 +60,7 @@ export struct privacyDialog { Flex({ justifyContent: FlexAlign.Start }) { Text("是否允许" + this.appName + "访问" + this.grantGroups[this.count].groupName).fontSize(Constants.DIALOG_REQ_FONT_SIZE) + .fontColor($r('app.color.secondary_font_color')) .margin({ top: Constants.DIALOG_REQ_MARGIN_TOP, left: Constants.DIALOG_REQ_MARGIN_LEFT @@ -108,7 +109,7 @@ export struct privacyDialog { .width(Constants.DIALOG_WIDTH) } async verify(permission) { - if(this.count >= this.grantGroups.length) { + if((this.initStatus == Constants.INIT_NEED_TO_TERMINATED) || (this.count >= this.grantGroups.length)) { this.controller.close() this.aboutToDisappear() return false @@ -119,10 +120,15 @@ export struct privacyDialog { return false } var acManager = abilityAccessCtrl.createAtManager() - var ret = await acManager.verifyAccessToken(this.accessTokenId, permission) - if(ret == 0) { - console.log("GrantAbility permission has already been granted:" + permission) - this.result[this.count] = 0 + var flag = await acManager.getPermissionFlags(this.accessTokenId, permission) + if(flag == this.userFixedFlag) { + console.log("GrantAbility permission has been fixed:" + permission) + var ret = await acManager.verifyAccessToken(this.accessTokenId, permission) + if (ret == 0) { + this.result[this.count] = 0 + } else { + this.result[this.count] = -1 + } this.count ++ return false } @@ -130,13 +136,48 @@ export struct privacyDialog { return true } + getApplicationName(uid) { + bundle.getNameForUid(uid).then((data) => { + console.log("GrantAbility getApplicationName bundleName:" + data) + bundle.getApplicationInfo(data, BundleFlag.GET_BUNDLE_DEFAULT, USER_ID).then(applicationInfo => { + Resmgr.getResourceManager(data).then(item => { + item.getString(applicationInfo.labelId, (err, value) => { + if (value == undefined) { + this.appName = applicationInfo.label + } else { + this.appName = value + } + console.log("GrantAbility hap label:" + applicationInfo.label + ", value:"+this.appName) + }) + }) + }).catch(err => { + console.log("GrantAbility applicationInfo error :" + err) + this.initStatus = Constants.INIT_NEED_TO_TERMINATED + }) + }).catch(err => { + console.log("GrantAbility getNameForUid error :" + JSON.stringify(err)) + this.initStatus = Constants.INIT_NEED_TO_TERMINATED + }) + } + aboutToAppear() { this.count = 0; - this.hasPrepared = false; + this.initStatus = Constants.INIT_NEED_TO_WAIT + this.result = [] featureAbility.getWant((err, want) => { + if (err.code != 0) { + console.log("GrantAbility featureAbility.getWant err:" + err) + this.initStatus = Constants.INIT_NEED_TO_TERMINATED + return + } this.reqPerms = want.parameters['ohos.user.grant.permission'] this.accessTokenId = want.parameters['ohos.aafwk.param.callerToken'] - console.log("GrantAbility request permission=" + JSON.stringify(this.reqPerms) + " tokenId = " + this.accessTokenId) + if (this.reqPerms == undefined || this.accessTokenId == undefined || this.reqPerms.length == 0) { + console.log("GrantAbility invalid parameters") + this.initStatus = Constants.INIT_NEED_TO_TERMINATED + return + } + console.log("GrantAbility request permission=" + JSON.stringify(this.reqPerms) + ", tokenId = " + this.accessTokenId) this.reqPerms.forEach(item => { var group = getPermissionGroup(item) if(!group) { @@ -146,37 +187,19 @@ export struct privacyDialog { this.grantGroups.push(group) } }) - this.hasPrepared = true; - bundle.getNameForUid(want.parameters['ohos.aafwk.param.callerUid'], (err, data) => { - if(err) { - console.log("GrantAbility getNameForUid error :" + err) - return - } - console.log("GrantAbility getNameForUid data :" + data) - bundle.getApplicationInfo(data, BundleFlag.GET_BUNDLE_DEFAULT, userId).then(applicationInfo => { - console.log("GrantAbility applicationInfo :" + JSON.stringify(applicationInfo)) - Resmgr.getResourceManager(data).then(item => { - item.getString(applicationInfo.labelId, (err, value) => { - if (value == undefined) { - console.log("GrantAbility label :" ) - this.appName = applicationInfo.label.replace('$string:', '') - } else { - console.log("GrantAbility labelValue :" + value) - this.appName = value - } - }) - }) - }).catch(err => { - console.log("GrantAbility applicationInfo11 error :" + err) - }) - }) + this.initStatus = Constants.INIT_NEED_TO_VERIFY + this.getApplicationName(want.parameters['ohos.aafwk.param.callerUid']) }) } aboutToDisappear() { - console.log("GrantAbility result=" + JSON.stringify(this.result)) + var ret: number = Constants.RESULT_SUCCESS + if (this.initStatus == Constants.INIT_NEED_TO_TERMINATED) { + ret = Constants.RESULT_FAILURE + } + console.log("GrantAbility code:" + ret + ", result=" + JSON.stringify(this.result)) featureAbility.terminateSelfWithResult({ - resultCode: 1, + resultCode: ret, want: { parameters: { "ohos.user.grant.permission": this.reqPerms, diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/bundle.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/bundle.ets index 7c29c39fcb2aedd00dfede59d838ba0c2ccec155..2d34276d39d2cfb0e6b4a56dd09dc75dbcea7914 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/bundle.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/bundle.ets @@ -34,5 +34,5 @@ export const BundleFlag = { */ GET_ABILITY_INFO_SYSTEMAPP_ONLY : 0x00000080 } -export const userId: number = 100 +export const USER_ID: number = 100 \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/permissionGroup.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/permissionGroup.ets index 3e25678d68bf407af1e515001697c37f135a8317..087c521e3a0728fabc5cea08c975b085fccd0044 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/permissionGroup.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/permissionGroup.ets @@ -300,7 +300,7 @@ export const groups: any[] = [ "name": "OTHER", "groupName": "其他权限", "icon": $r('app.media.ic_more'), - "description": "访问您的位置信息", + "description": "访问您的其他权限", "permissions": [ "ohos.permission.DISTRIBUTED_DATASYNC" ] diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/constant.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/constant.ets index 700486b60f4ac53cf541e1811bc351d3119deb08..076e169609c8883a2e96741e8ec4165df90c5584 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/constant.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/constant.ets @@ -39,5 +39,13 @@ export default class Constants { static DIALOG_BORDER_RADIUS = 24; static DIALOG_HEIGHT = 186; - static DIALOG_WIDTH = 336; + static DIALOG_WIDTH = "100%"; + + // initial check status + static INIT_NEED_TO_WAIT = 0 + static INIT_NEED_TO_VERIFY = 1 + static INIT_NEED_TO_TERMINATED = 2 + + static RESULT_SUCCESS = 1 + static RESULT_FAILURE = 0 } \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/pages/dialogPlus.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/pages/dialogPlus.ets index aa0784455f88201fb7365f93e7ad205b53657aaf..b6ef9eb80a991b2cae80e76f42c6bbd737f7aad7 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/pages/dialogPlus.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/pages/dialogPlus.ets @@ -33,13 +33,14 @@ struct dialogPlusPage { const result = await acManager.grantUserGrantedPermission(accessTokenId, permission, userFixedFlag) var index = permissionList.indexOf(permission) if (index == -1) { - return; - } - if (result == 0) { - this.result[index] = 0 console.log("GrantAbility grant permission:" + permission) - } else { - console.log("GrantAbility failed to grant permission:" + permission + " ret:" + result) + }else { + if (result == 0) { + this.result[index] = 0 + console.log("GrantAbility grant permission:" + permission) + } else { + console.log("GrantAbility failed to grant permission:" + permission + " ret:" + result) + } } }) this.count ++ @@ -65,3 +66,4 @@ struct dialogPlusPage { build() { } } +