diff --git a/permissionmanager/src/main/ets/MainAbility/MainAbility.ts b/permissionmanager/src/main/ets/MainAbility/MainAbility.ts index 2d21c8ecb72aea0c70adcf18b6066b5fde07be93..7e6f83958957cbe21a1a49ef207c7bf0577773a3 100644 --- a/permissionmanager/src/main/ets/MainAbility/MainAbility.ts +++ b/permissionmanager/src/main/ets/MainAbility/MainAbility.ts @@ -17,7 +17,7 @@ import UIAbility from '@ohos.app.ability.UIAbility' import bundle from "@ohos.bundle"; var TAG = "PermissionManager_MainAbility:"; -const PARMETER_BUNDLE_FLAG = 16; +const PARAMETER_BUNDLE_FLAG = 16; const USERID = 100; const noNeedDisplayApp: string[] = [ "com.ohos.launcher" @@ -32,13 +32,32 @@ export default class MainAbility extends UIAbility { globalThis.allGroups = [] globalThis.permissionLabels = {} globalThis.initialGroups = [] + globalThis.bundleName = want.parameters['bundleName'] + globalThis.applicationInfo = {} } onWindowStageCreate(windowStage) { // Main window is created, set main page for this ability console.log(TAG + "MainAbility onWindowStageCreate."); - bundle.getAllBundleInfo(PARMETER_BUNDLE_FLAG).then(async(bundleInfos) => { + if(globalThis.bundleName) { + bundle.getBundleInfo(globalThis.bundleName, PARAMETER_BUNDLE_FLAG).then(bundleInfo => { + let info = { + 'bundleName': bundleInfo.name, + 'api': bundleInfo.targetVersion, + 'tokenId': bundleInfo.appInfo.accessTokenId, + 'iconId': bundleInfo.appInfo.iconId, + 'labelId': bundleInfo.appInfo.labelId, + 'permissions': bundleInfo.reqPermissions, + 'groupId': [], + } + globalThis.applicationInfo = info + windowStage.setUIContent(this.context, "pages/application-secondary", null); + }) + return + } + + bundle.getAllBundleInfo(PARAMETER_BUNDLE_FLAG).then(async(bundleInfos) => { if (bundleInfos.length <= 0) { console.info(TAG + 'bundle.getAllBundleInfo result.length less than or equal to zero'); return; diff --git a/permissionmanager/src/main/ets/pages/application-secondary.ets b/permissionmanager/src/main/ets/pages/application-secondary.ets index f6ac1f8507ae12f6be0441a3a578571d25c281dd..19fac4339d087ef78d63d6fba28ac1338efdc139 100644 --- a/permissionmanager/src/main/ets/pages/application-secondary.ets +++ b/permissionmanager/src/main/ets/pages/application-secondary.ets @@ -16,10 +16,11 @@ import { backBar } from "../common/components/backBar"; import router from '@ohos.router'; import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; -import { groups } from "../common/model/permissionGroup"; +import { groups, permissionGroups, userGrantPermissions, permissionGroupIds } from "../common/model/permissionGroup"; import Constants from '../common/utils/constant'; var TAG = 'PermissionManager_MainAbility:' +const FUZZY_LOCATION_PERMISSION = 'ohos.permission.APPROXIMATELY_LOCATION' const allowedStatus = 0; // Status: Allowed const bannedStatus = 1; // Status: Banned @@ -40,7 +41,7 @@ class permissionObj { struct appNamePlusPage { @State allowedListItem: permissionObj[] = []; // Array of allowed permissions @State bannedListItem: permissionObj[] = []; // array of forbidden permissions - private routerData: any = router.getParams()['routerData']; // Routing jump data + @State routerData: any = globalThis.applicationInfo; // Routing jump data @Builder ListItemLayout(item, index, status) { ListItem() { @@ -124,18 +125,56 @@ struct appNamePlusPage { }.padding({ left: Constants.DEFAULT_PADDING_START, right: Constants.DEFAULT_PADDING_END }) } + async initApplicationInfo(info) { + let context = globalThis.context.createBundleContext(info.bundleName) + context.resourceManager.getString(info.labelId, (error, value) => { + info.labelId = value; + }) + var reqUserPermissions: string[] = []; + var acManager = abilityAccessCtrl.createAtManager() + if (info.permissions.length > 0) { + for (let j = 0; j < info.permissions.length; j++) { + var permission = info.permissions[j]; + if(userGrantPermissions.indexOf(permission) == -1) { + continue + } + if((info.api < Constants.API_VERSION_SUPPORT_STAGE) && (permission == FUZZY_LOCATION_PERMISSION)) { + continue + } + try { + var flag = await acManager.getPermissionFlags(info.tokenId, permission) + if(flag == Constants.PRE_AUTHORIZATION_NOT_MODIFIED) { + continue + } + } + catch(err) { + console.log(TAG + 'getPermissionFlags error: ' + JSON.stringify(err)) + } + reqUserPermissions.push(permission); + } + } + let groupIds = []; + for (let i = 0; i < reqUserPermissions.length; i++) { + if(groupIds.indexOf(permissionGroupIds[reqUserPermissions[i]]) == -1){ + groupIds.push(permissionGroupIds[reqUserPermissions[i]]); + } + } + info.permissions = reqUserPermissions + info.groupId = groupIds + } + /** * Initialize permission status information and group permission information */ - initialPermissions() { + async initialPermissions() { + if(globalThis.bundleName && !this.routerData.groupId.length) { + await this.initApplicationInfo(this.routerData) + } var reqPermissions = this.routerData.permissions; var reqGroupIds = this.routerData.groupId; - if (!reqGroupIds.length) { - this.allowedListItem = []; - this.bannedListItem = []; - return; - } + this.allowedListItem = []; + this.bannedListItem = []; for (let i = 0; i < reqGroupIds.length; i++) { let id = reqGroupIds[i]; @@ -187,6 +226,20 @@ struct appNamePlusPage { }, Constants.DELAY_TIME) } + aboutToAppear() { + if(globalThis.bundleName) { + globalThis.applicationInfo.permissions.forEach(userPermission => { + permissionGroups.forEach(permissionInfo => { + if(userPermission == permissionInfo.permissionName) { + globalThis.context.resourceManager.getString(permissionInfo.label.id).then(val => { + globalThis.permissionLabels[userPermission] = val + }) + } + }) + }) + } + } + build() { Column(){ GridRow({ gutter: Constants.GUTTER, columns: { diff --git a/permissionmanager/src/main/ets/pages/authority-management.ets b/permissionmanager/src/main/ets/pages/authority-management.ets index 65402e576eefd3b37ff7b595ca087912f00978d2..126403c9a270395d9a9693fcc0c2125be2f2f167 100644 --- a/permissionmanager/src/main/ets/pages/authority-management.ets +++ b/permissionmanager/src/main/ets/pages/authority-management.ets @@ -580,10 +580,8 @@ struct applicationItem { } } }.onClick(() => { - router.pushUrl({ - url: 'pages/application-secondary', - params: { routerData: item } - }); + globalThis.applicationInfo = item + router.pushUrl({ url: 'pages/application-secondary' }); }) } }.padding({ diff --git a/permissionmanager/src/main/ets/pages/dialogPlus.ets b/permissionmanager/src/main/ets/pages/dialogPlus.ets index d888e57cfd92d8ee1a565fdfbe1004f0fee3f1eb..88f867cbf62e761c13ec30d2bc2556d08887b933 100644 --- a/permissionmanager/src/main/ets/pages/dialogPlus.ets +++ b/permissionmanager/src/main/ets/pages/dialogPlus.ets @@ -374,6 +374,9 @@ struct PermissionDialog { this.getReason(group, info, bundleName) } }) + }).catch(err => { + Log.error("bundleManager.getBundleInfo error :" + err) + this.initStatus = Constants.INIT_NEED_TO_TERMINATED }) } @@ -450,6 +453,9 @@ struct PermissionDialog { this.bundleInfo = bundleInfo this.getgrantGroups(globalThis.abilityWant.parameters['ohos.user.grant.permission.state']); this.getApplicationName(data, uid) + }).catch(err => { + Log.error("getBundleInfo error :" + JSON.stringify(err)) + this.initStatus = Constants.INIT_NEED_TO_TERMINATED }) }).catch(err => { Log.error("getNameForUid error :" + JSON.stringify(err)) diff --git a/permissionmanager/src/main/ets/pages/permission-access-record.ets b/permissionmanager/src/main/ets/pages/permission-access-record.ets index be3a5f80ebdc09e96ccc5e8e3687f2c07dc82bab..b5d0763d01567bd6b2f8ae78d58881a418666f41 100644 --- a/permissionmanager/src/main/ets/pages/permission-access-record.ets +++ b/permissionmanager/src/main/ets/pages/permission-access-record.ets @@ -384,7 +384,7 @@ struct permissionRecordPage { } } for (let k = 0; k < info.reqPermissions.length; k++) { - var reqPermission = info.reqPermissions[k]; + var reqPermission: any = info.reqPermissions[k]; try { var reqFlag = await acManager.getPermissionFlags(info.appInfo.accessTokenId, reqPermission) if(reqFlag == Constants.PRE_AUTHORIZATION_NOT_MODIFIED) {