From c6228a967f704b61155fbf3c020cfc368fc4aecc Mon Sep 17 00:00:00 2001 From: fanchenxuan Date: Tue, 17 Jan 2023 16:32:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=89=E8=B5=B7=E6=8C=87=E5=AE=9A=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E6=8C=91=E5=8D=95monthly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: fanchenxuan --- .../src/main/ets/MainAbility/MainAbility.ts | 23 +++++- .../main/ets/pages/application-secondary.ets | 73 ++++++++++++++++--- .../main/ets/pages/authority-management.ets | 6 +- .../src/main/ets/pages/dialogPlus.ets | 6 ++ .../ets/pages/permission-access-record.ets | 2 +- 5 files changed, 93 insertions(+), 17 deletions(-) diff --git a/permissionmanager/src/main/ets/MainAbility/MainAbility.ts b/permissionmanager/src/main/ets/MainAbility/MainAbility.ts index 2d21c8e..7e6f839 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 447dafb..c698f85 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 '@system.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,57 @@ 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 */ 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]; @@ -154,9 +194,8 @@ struct appNamePlusPage { if(this.routerData.api >= Constants.API_VERSION_SUPPORT_STAGE && permission == PRECISE_LOCATION_PERMISSION) { continue } - let res = await abilityAccessCtrl.createAtManager().verifyAccessToken( - this.routerData.tokenId, permission); - if (res != 0) { + let res = abilityAccessCtrl.createAtManager().verifyAccessTokenSync(this.routerData.tokenId, permission); + if (res != abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { isGranted = false; } } @@ -188,6 +227,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(){ GridContainer({ gutter: Constants.GUTTER, margin: Constants.GRID_MARGIN }) { diff --git a/permissionmanager/src/main/ets/pages/authority-management.ets b/permissionmanager/src/main/ets/pages/authority-management.ets index 5929715..d2e8f5b 100644 --- a/permissionmanager/src/main/ets/pages/authority-management.ets +++ b/permissionmanager/src/main/ets/pages/authority-management.ets @@ -601,10 +601,8 @@ struct applicationItem { } } }.onClick(() => { - router.push({ - uri: 'pages/application-secondary', - params: { routerData: item } - }); + globalThis.applicationInfo = item + router.push({ uri: 'pages/application-secondary', }); }) } }.padding({ diff --git a/permissionmanager/src/main/ets/pages/dialogPlus.ets b/permissionmanager/src/main/ets/pages/dialogPlus.ets index bf24d72..870b6de 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 328468d..e5a74f4 100644 --- a/permissionmanager/src/main/ets/pages/permission-access-record.ets +++ b/permissionmanager/src/main/ets/pages/permission-access-record.ets @@ -405,7 +405,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) { -- Gitee