From 80380ebd6a40af16acc36a7348efba8475132622 Mon Sep 17 00:00:00 2001 From: zhouyan Date: Fri, 18 Mar 2022 09:21:10 +0800 Subject: [PATCH] update PermissionManager.hap code Signed-off-by: zhouyan --- .../com.ohos.permissionmanager/build.gradle | 3 +- .../entry/build.gradle | 9 +- .../entry/src/main/config.json | 2 +- frameworks/com.ohos.permissionmanager/gradlew | 204 +++++++++--------- .../permissionmanager/build.gradle | 9 +- .../permissionmanager/src/main/config.json | 8 +- .../GrantAbility/common/components/dialog.ets | 74 ++++--- .../ets/GrantAbility/pages/dialogPlus.ets | 10 +- .../ets/MainAbility/common/utils/constant.ets | 6 + .../pages/application-secondary.ets | 46 ++-- .../pages/authority-management.ets | 31 ++- .../pages/authority-tertiary-groups.ets | 117 +++++----- 12 files changed, 275 insertions(+), 244 deletions(-) diff --git a/frameworks/com.ohos.permissionmanager/build.gradle b/frameworks/com.ohos.permissionmanager/build.gradle index 924a888a1..f1b1a556a 100644 --- a/frameworks/com.ohos.permissionmanager/build.gradle +++ b/frameworks/com.ohos.permissionmanager/build.gradle @@ -3,7 +3,8 @@ apply plugin: 'com.huawei.ohos.app' //For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 ohos { - compileSdkVersion 7 + compileSdkVersion 8 + supportSystem "standard" } buildscript { diff --git a/frameworks/com.ohos.permissionmanager/entry/build.gradle b/frameworks/com.ohos.permissionmanager/entry/build.gradle index 0f0156791..05a33cd3a 100644 --- a/frameworks/com.ohos.permissionmanager/entry/build.gradle +++ b/frameworks/com.ohos.permissionmanager/entry/build.gradle @@ -1,10 +1,9 @@ apply plugin: 'com.huawei.ohos.hap' -apply plugin: 'com.huawei.ohos.decctest' //For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 ohos { - compileSdkVersion 7 + compileSdkVersion 8 defaultConfig { - compatibleSdkVersion 7 + compatibleSdkVersion 8 } buildTypes { release { @@ -19,8 +18,4 @@ ohos { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) testImplementation 'junit:junit:4.13.1' - ohosTestImplementation 'com.huawei.ohos.testkit:runner:2.0.0.200' -} -decc { - supportType = ['html','xml'] } diff --git a/frameworks/com.ohos.permissionmanager/entry/src/main/config.json b/frameworks/com.ohos.permissionmanager/entry/src/main/config.json index 30cec25f4..c49d18bd7 100644 --- a/frameworks/com.ohos.permissionmanager/entry/src/main/config.json +++ b/frameworks/com.ohos.permissionmanager/entry/src/main/config.json @@ -64,4 +64,4 @@ } ] } -} +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/gradlew b/frameworks/com.ohos.permissionmanager/gradlew index aa815eb87..29df50864 100644 --- a/frameworks/com.ohos.permissionmanager/gradlew +++ b/frameworks/com.ohos.permissionmanager/gradlew @@ -26,22 +26,22 @@ # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. -while [ -h "$PRG" ]; do - ls=$(ls -ld "$PRG") - link=$(expr "$ls" : '.*-> \(.*\)$') - if expr "$link" : '/.*' >/dev/null; then - PRG="$link" - else - PRG=$(dirname "$PRG")"/$link" - fi +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi done -SAVED="$(pwd)" -cd "$(dirname \"$PRG\")/" >/dev/null -APP_HOME="$(pwd -P)" +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" cd "$SAVED" >/dev/null APP_NAME="Gradle" -APP_BASE_NAME=$(basename "$0") +APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -49,15 +49,15 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn() { - echo "$*" +warn () { + echo "$*" } -die() { - echo - echo "$*" - echo - exit 1 +die () { + echo + echo "$*" + echo + exit 1 } # OS specific support (must be 'true' or 'false'). @@ -65,117 +65,117 @@ cygwin=false msys=false darwin=false nonstop=false -case "$(uname)" in -CYGWIN*) - cygwin=true - ;; -Darwin*) - darwin=true - ;; -MINGW*) - msys=true - ;; -NONSTOP*) - nonstop=true - ;; +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ]; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." - fi + fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ]; then - MAX_FD_LIMIT=$(ulimit -H -n) - if [ $? -eq 0 ]; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ]; then - warn "Could not set maximum file descriptor limit: $MAX_FD" +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ]; then - APP_HOME=$(cygpath --path --mixed "$APP_HOME") - CLASSPATH=$(cygpath --path --mixed "$CLASSPATH") - JAVACMD=$(cygpath --unix "$JAVACMD") - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=$(find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null) - SEP="" - for dir in $ROOTDIRSRAW; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ]; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@"; do - CHECK=$(echo "$arg" | egrep -c "$OURCYGPATTERN" -) - CHECK2=$(echo "$arg" | egrep -c "^-") ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ]; then ### Added a condition - eval $(echo args$i)=$(cygpath --path --ignore --mixed "$arg") - else - eval $(echo args$i)="\"$arg\"" +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi - i=$(expr $i + 1) - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac fi # Escape application args -save() { - for i; do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/"; done - echo " " +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/build.gradle b/frameworks/com.ohos.permissionmanager/permissionmanager/build.gradle index f6df7ecdb..a59c134a1 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/build.gradle +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/build.gradle @@ -1,10 +1,9 @@ apply plugin: 'com.huawei.ohos.hap' -apply plugin: 'com.huawei.ohos.decctest' //For instructions on signature configuration, see https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#section1112183053510 ohos { - compileSdkVersion 7 + compileSdkVersion 8 defaultConfig { - compatibleSdkVersion 7 + compatibleSdkVersion 8 } buildTypes { release { @@ -21,8 +20,4 @@ dependencies { entryImplementation project(':entry') implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) testImplementation 'junit:junit:4.13.1' - ohosTestImplementation 'com.huawei.ohos.testkit:runner:2.0.0.200' -} -decc { - supportType = ['html','xml'] } diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/config.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/config.json index 0b23d150f..cfb01755a 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/config.json +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/config.json @@ -52,11 +52,11 @@ "pages": [ "pages/authority-management", "pages/application-secondary", + "pages/application-tertiary", "pages/authority-secondary", "pages/authority-tertiary", - "pages/application-tertiary", - "pages/other-permissions", - "pages/authority-tertiary-groups" + "pages/authority-tertiary-groups", + "pages/other-permissions" ], "name": ".MainAbility", "window": { @@ -102,4 +102,4 @@ } ] } -} +} \ No newline at end of file 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 451678bfa..e76848bc4 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 @@ -21,7 +21,7 @@ import abilityAccessCtrl from '@ohos.abilityAccessCtrl' import bundle from '@ohos.bundle' import Resmgr from '@ohos.resourceManager' -var TAG = "PermissionManager_GrantAbility" +var TAG = "PermissionManager_GrantAbility:" @Extend(Button) function customizeButton() { .backgroundColor($r('app.color.default_background_color')) @@ -110,10 +110,20 @@ export struct privacyDialog { .height(Constants.DIALOG_HEIGHT) .width(Constants.DIALOG_WIDTH) } + + answerRequest() { + var ret: number = Constants.RESULT_SUCCESS + if (this.initStatus == Constants.INIT_NEED_TO_TERMINATED) { + ret = Constants.RESULT_FAILURE + } + this.answer(ret, this.reqPerms) + } + verify() { if((this.initStatus == Constants.INIT_NEED_TO_TERMINATED) || (this.count >= this.grantGroups.length)) { this.controller.close() - this.aboutToDisappear() + this.answerRequest() + this.initStatus = Constants.INIT_NEED_TO_WAIT return false } return true @@ -121,8 +131,8 @@ export struct privacyDialog { getApplicationName(uid) { bundle.getNameForUid(uid).then((data) => { - console.log(TAG + "GrantAbility getApplicationName bundleName:" + data) - console.log(TAG + "GrantAbility getApplicationName userId:" + Math.floor(uid/200000)) + console.log(TAG + "getApplicationName bundleName:" + data) + console.log(TAG + "getApplicationName userId:" + Math.floor(uid/200000)) bundle.getApplicationInfo(data, BundleFlag.GET_BUNDLE_DEFAULT, Math.floor(uid/200000)).then(applicationInfo => { Resmgr.getResourceManager(data).then(item => { item.getString(applicationInfo.labelId, (err, value) => { @@ -131,15 +141,15 @@ export struct privacyDialog { } else { this.appName = value } - console.log(TAG + "GrantAbility hap label:" + applicationInfo.label + ", value:"+this.appName) + console.log(TAG + "hap label:" + applicationInfo.label + ", value:"+this.appName) }) }) }).catch(err => { - console.log(TAG + "GrantAbility applicationInfo error :" + err) + console.log(TAG + "applicationInfo error :" + err) this.initStatus = Constants.INIT_NEED_TO_TERMINATED }) }).catch(err => { - console.log(TAG + "GrantAbility getNameForUid error :" + JSON.stringify(err)) + console.log(TAG + "getNameForUid error :" + JSON.stringify(err)) this.initStatus = Constants.INIT_NEED_TO_TERMINATED }) } @@ -150,7 +160,7 @@ export struct privacyDialog { this.reqPerms.forEach(async (permission, idx) => { var flag = await acManager.getPermissionFlags(this.accessTokenId, permission) if(flag == this.userFixedFlag) { - console.log(TAG + "GrantAbility permission has been fixed:" + permission) + console.log(TAG + "permission has been fixed:" + permission) var ret = await acManager.verifyAccessToken(this.accessTokenId, permission) if(ret == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { this.result[idx] = abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; @@ -158,7 +168,7 @@ export struct privacyDialog { }else { var group = getPermissionGroup(permission) if(!group) { - console.log(TAG + "GrantAbility permission not find:" + permission) + console.log(TAG + "permission not find:" + permission) }else { var exist = this.grantGroups.find(grantGroup => grantGroup.name == group.name) if(!exist) { @@ -168,10 +178,27 @@ export struct privacyDialog { } num ++ if(num == this.reqPerms.length) { - if(this.grantGroups.length == 0) { - this.initStatus = Constants.INIT_NEED_TO_TERMINATED - }else { - this.initStatus = Constants.INIT_NEED_TO_VERIFY + this.initStatus = Constants.INIT_NEED_TO_VERIFY + } + }) + } + + answer(ret, reqPerms) { + console.log(TAG + "code:" + ret + ", perms="+ JSON.stringify(reqPerms) +", result=" + JSON.stringify(this.result)) + var perms = [] + var results = [] + reqPerms.forEach(perm => { + perms.push(perm) + }) + this.result.forEach(result => { + results.push(result) + }) + featureAbility.terminateSelfWithResult({ + resultCode: ret, + want: { + parameters: { + "ohos.user.grant.permission": perms, + "ohos.user.grant.permission.result": results } } }) @@ -183,18 +210,18 @@ export struct privacyDialog { this.result = [] featureAbility.getWant((err, want) => { if (err.code != 0) { - console.log(TAG + "GrantAbility featureAbility.getWant err:" + err) + console.log(TAG + "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'] if (this.reqPerms == undefined || this.accessTokenId == undefined || this.reqPerms.length == 0) { - console.log(TAG + "GrantAbility invalid parameters") + console.log(TAG + "invalid parameters") this.initStatus = Constants.INIT_NEED_TO_TERMINATED return } - console.log(TAG + "GrantAbility request permission=" + JSON.stringify(this.reqPerms) + ", tokenId = " + this.accessTokenId) + console.log(TAG + "request permission=" + JSON.stringify(this.reqPerms) + ", tokenId = " + this.accessTokenId) this.result = new Array(this.reqPerms.length).fill(-1); this.getgrantGroups(); this.getApplicationName(want.parameters['ohos.aafwk.param.callerUid']) @@ -202,19 +229,6 @@ export struct privacyDialog { } aboutToDisappear() { - var ret: number = Constants.RESULT_SUCCESS - if (this.initStatus == Constants.INIT_NEED_TO_TERMINATED) { - ret = Constants.RESULT_FAILURE - } - console.log(TAG + "GrantAbility code:" + ret + ", result=" + JSON.stringify(this.result)) - featureAbility.terminateSelfWithResult({ - resultCode: ret, - want: { - parameters: { - "ohos.user.grant.permission": this.reqPerms, - "ohos.user.grant.permission.result": this.result - } - } - }) + console.log(TAG + "aboutToDisappear") } } diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/pages/dialogPlus.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/pages/dialogPlus.ets index cb5c9c93d..64cd55060 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/pages/dialogPlus.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/GrantAbility/pages/dialogPlus.ets @@ -16,7 +16,7 @@ import { privacyDialog } from "../common/components/dialog.ets" import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; -var TAG = "PermissionManager_GrantAbility" +var TAG = "PermissionManager_GrantAbility:" @Entry @Component @@ -35,16 +35,16 @@ struct dialogPlusPage { group.permissions.forEach(async permission => { const result = await acManager.grantUserGrantedPermission(accessTokenId, permission, userFixedFlag) num ++ - console.log(TAG + "GrantAbility grant permission result:" + result + "permission" + permission) + console.log(TAG + "grant permission result:" + result + "permission" + permission) if (result == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { permissionList.forEach((req, idx) => { if(req == permission) { this.result[idx] = abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; } }) - console.log(TAG + "GrantAbility grant permission success:" + permission) + console.log(TAG + "grant permission success:" + permission) } else { - console.log(TAG + "GrantAbility failed to grant permission:" + permission + " ret:" + result) + console.log(TAG + "failed to grant permission:" + permission + " ret:" + result) } if(num == group.permissions.length) { this.count ++ @@ -55,7 +55,7 @@ struct dialogPlusPage { var acManager = abilityAccessCtrl.createAtManager() group.permissions.forEach(async permission => { const result = await acManager.revokeUserGrantedPermission(accessTokenId, permission, userFixedFlag) - console.log(TAG + "GrantAbility revoke permission result:" + result + "permission" + permission); + console.log(TAG + "revoke permission result:" + result + "permission" + permission); }) this.count ++ } 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 cd7dceeae..fef09c54f 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 @@ -187,6 +187,12 @@ export default class Constants { static APPLICATION_ALPHABETINDEX_WIDTH = 24; static APPLICATION_TEXT_DECORATION_WIDTH = '83%'; static APPLICATION_TEXT_DECORATION_MARGIN_LEFT = 68; + static PERMISSION_GROUP_OTHER = '其他权限'; + static PERMISSION_GROUP_PHONE = '电话'; + static PERMISSION_GROUP_CONTACTS = '通讯录'; + static PERMISSION_GROUP_SMS = '信息'; + static PERMISSION_GROUP_CALL_LOG = '通话记录'; + static PERMISSION_GROUP_CALENDAR = '日历'; // slice static SLICE_START = 0; diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/application-secondary.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/application-secondary.ets index 4ec9944b5..baea56ee8 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/application-secondary.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/application-secondary.ets @@ -23,18 +23,19 @@ var TAG = 'PermissionManager_MainAbility:' const allowedStatus = 0; // Status: Allowed const bannedStatus = 1; // Status: Banned + class AllowedObj { groupName: string; - permission: string; - constructor(groupName: string, permission: string) { + permission: string[]; + constructor(groupName: string, permission: string[]) { this.groupName = groupName; this.permission = permission; } } // Class Allowed class BannedObj { groupName: string; - permission: string; - constructor(groupName: string, permission: string) { + permission: string[]; + constructor(groupName: string, permission: string[]) { this.groupName = groupName; this.permission = permission; } @@ -134,28 +135,39 @@ struct appNamePlusPage { * Initialize permission status information and group permission information */ async initialPermissions() { - var reqGroups = this.routerData.permissions; - if (!reqGroups.length) { + var reqPermissions = this.routerData.permissions; + var reqGroupIds = this.routerData.groupId; + + if (!reqGroupIds.length) { this.allowedListItem = []; this.bannedListItem = []; return; } - var ids = this.routerData.groupId; - for (var i = 0; i < reqGroups.length; i++) { - var isGranted = true; - var reqPermissions = groups[ids[i]].permissions; - for (var j = 0; j < reqPermissions.length; j++) { - var res = await abilityAccessCtrl.createAtManager().verifyAccessToken( - this.routerData.tokenId, reqPermissions[j]); + + for (let i = 0; i < reqGroupIds.length; i++) { + let id = reqGroupIds[i]; + let groupName = groups[id].groupName; + let groupReqPermissons = []; + for (let j = 0; j < reqPermissions.length; j++) { + let permission = reqPermissions[j]; + if (groups[id].permissions.indexOf(permission) != -1) { + groupReqPermissons.push(permission) + } + } + let isGranted = true; + for (let i = 0; i < groupReqPermissons.length; i++) { + let permission = groupReqPermissons[i] + let res = await abilityAccessCtrl.createAtManager().verifyAccessToken( + this.routerData.tokenId, permission); if (res != 0) { isGranted = false; - break; } } + if (isGranted) { - this.allowedListItem.push(new AllowedObj(groups[ids[i]].groupName, reqPermissions)); + this.allowedListItem.push(new AllowedObj(groupName, groupReqPermissons)); } else { - this.bannedListItem.push(new BannedObj(groups[ids[i]].groupName, reqPermissions)); + this.bannedListItem.push(new BannedObj(groupName, groupReqPermissons)); } } } @@ -164,6 +176,7 @@ struct appNamePlusPage { * Lifecycle function, triggered once when this page is displayed */ onPageShow() { + console.log(TAG + 'onPageShow') this.initialPermissions(); } @@ -171,6 +184,7 @@ struct appNamePlusPage { * Lifecycle function, triggered once when this page disappears */ onPageHide() { + console.log(TAG + 'onPageHide') setTimeout(()=> { this.allowedListItem = []; this.bannedListItem = []; diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/authority-management.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/authority-management.ets index 318e24e6a..ec92edfe0 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/authority-management.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/authority-management.ets @@ -90,27 +90,22 @@ struct authorityManagementPage { } } }.onClick(() => { - if (item.groupName === '其他权限') { + if (item.groupName === Constants.PERMISSION_GROUP_OTHER || item.groupName === Constants.PERMISSION_GROUP_PHONE || + item.groupName === Constants.PERMISSION_GROUP_CONTACTS || item.groupName === Constants.PERMISSION_GROUP_SMS || + item.groupName === Constants.PERMISSION_GROUP_CALL_LOG || item.groupName === Constants.PERMISSION_GROUP_CALENDAR) { router.push({ uri: 'pages/authority-secondary', params: { routerData: this.allPermissionApplications, backTitle: item.groupName } }) - }else if((item.groupName === '电话' || item.groupName === '通讯录' || item.groupName === '信息' - || item.groupName === '通话记录' || item.groupName === '日历')){ - router.push({ - uri: 'pages/authority-secondary', - params: { routerData: this.allPermissionApplications, backTitle: item.groupName } + } else { + var dataList = this.allPermissionApplications.filter((ele) => { + return ele.groupName === item.group }) - }else { - var dataList = this.allPermissionApplications.filter((ele) => { - return ele.groupName === item.group - }) - - router.push({ - uri: 'pages/authority-tertiary-groups', - params: { routerData: dataList, backTitle: item.groupName } - }) + router.push({ + uri: 'pages/authority-tertiary-groups', + params: { routerData: dataList, backTitle: item.groupName } + }) } }) } @@ -183,6 +178,7 @@ struct authorityManagementPage { entities: ["entity.system.home"] }, bundle.BundleFlag.GET_ABILITY_INFO_WITH_APPLICATION, Constants.USERID); } catch(e) { + console.log(TAG + 'queryAbilityByWant catch error: ' + JSON.stringify(e)) continue; } this.deduplicationPermissions(info, allPermissions, allApplicationPermissions); @@ -241,7 +237,7 @@ struct authorityManagementPage { var icon: string = permissionGroup.icon; var bundleNames: string[] = []; for (let j = 0; j < this_.allApplicationPermissions.length; j++) { - if (this_.allApplicationPermissions[j].permissions.indexOf(permissionGroup.name) != -1) { + if (this_.allApplicationPermissions[j].permissions.indexOf(this_.allUserPermissions[i]) != -1) { bundleNames.push(this_.allApplicationPermissions[j].bundleName); } } @@ -363,7 +359,7 @@ struct authorityManagementPage { 'tokenId': info.appInfo.accessTokenId, 'iconId': info.appInfo.iconId, 'labelId': info.appInfo.labelId, - 'permissions': dePermissions, + 'permissions': reqUserPermissions, 'groupId': groupIds }; allApplicationPermissions.push(ap); @@ -416,6 +412,7 @@ struct authorityManagementPage { * Lifecycle function, executed when the page is initialized */ aboutToAppear() { + console.log(TAG + 'on aboutToAppear, version 1.01'); this.getAllBundlePermissions(this.allPermissions, this.allApplicationPermissions); } diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/authority-tertiary-groups.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/authority-tertiary-groups.ets index b2dfa6ab7..4a1335120 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/authority-tertiary-groups.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/MainAbility/pages/authority-tertiary-groups.ets @@ -254,62 +254,71 @@ struct applicationItem { * Lifecycle function, executed when the page is initialized */ aboutToAppear() { - for (let i = 0; i < routerData[0].bundleNames.length; i++) { + var bundleNames = [] + routerData.forEach(permissionmanager => { + permissionmanager.bundleNames.forEach( bundleName => { + if (bundleNames.indexOf(bundleName) == -1) { + bundleNames.push(bundleName) + } + }) + }) + for (let i = 0; i < bundleNames.length; i++) { // Get BundleInfo based on bundle name - bundle.getBundleInfo(routerData[0].bundleNames[i], Constants.PARMETER_BUNDLE_FLAG).then(res => { - Promise.all([getAppLabel(res.appInfo.labelId, res.name), - getAppIcon(res.appInfo.iconId, res.name), - verifyAccessToken(res.appInfo.accessTokenId, routerData[0].permission) - ]) - .then((values) => { - this.applicationList.push( - new ApplicationObj( - String(values[0]), - String(values[1]), - i, - res.appInfo.accessTokenId, - routerData[0].permission, - makePy(values[0])[0].slice(0, 1)) // Get the first letter in the returned initials array - ); - this.oldApplicationItem.push( - new ApplicationObj( - String(values[0]), - String(values[1]), - i, - res.appInfo.accessTokenId, - routerData[0].permission, - makePy(values[0])[0].slice(0, 1)) // Get the first letter in the returned initials array - ); - this.applicationList.sort((a,b) => a.index - b.index) - this.oldApplicationItem.sort((a,b) => a.index - b.index) - }); - // 0: have permission; -1: no permission - var boole = true; - this.permissionNum++; - for (let j = 0; j < routerData.length; j++) { - verifyAccessToken(res.appInfo.accessTokenId, routerData[j].permission).then((access) => { - if (Number(access) === Constants.PERMISSION_INDEX) { - if(boole){ - this.toggleIsOn[i] = true; - } - } else { - if(boole){ - this.permissionNum-- - } - boole = false; - this.toggleIsOn[i] = false; - } - }); + bundle.getBundleInfo(bundleNames[i], Constants.PARMETER_BUNDLE_FLAG).then(res => { + Promise.all([getAppLabel(res.appInfo.labelId, res.name), + getAppIcon(res.appInfo.iconId, res.name) + ]) + .then((values) => { + this.applicationList.push( + new ApplicationObj( + String(values[0]), + String(values[1]), + i, + res.appInfo.accessTokenId, + routerData[0].permission, + makePy(values[0])[0].slice(0, 1)) // Get the first letter in the returned initials array + ); + this.oldApplicationItem.push( + new ApplicationObj( + String(values[0]), + String(values[1]), + i, + res.appInfo.accessTokenId, + routerData[0].permission, + makePy(values[0])[0].slice(0, 1)) // Get the first letter in the returned initials array + ); + this.applicationList.sort((a,b) => a.index - b.index) + this.oldApplicationItem.sort((a,b) => a.index - b.index) + }); + // 0: have permission; -1: no permission + var boole = true; + this.permissionNum++; + for (let j = 0; j < routerData.length; j++) { + if (res.reqPermissions.indexOf(routerData[j].permission) == -1) { + continue } - }).catch(() => { - this.applicationList.push( - new ApplicationObj('', '', 0, '', '', '') - ); - this.oldApplicationItem.push( - new ApplicationObj('', '', 0, '', '', '') - ); - }) - + verifyAccessToken(res.appInfo.accessTokenId, routerData[j].permission).then((access) => { + if (Number(access) === Constants.PERMISSION_INDEX) { + if(boole){ + this.toggleIsOn[i] = true; + } + } else { + if(boole){ + this.permissionNum-- + } + boole = false; + this.toggleIsOn[i] = false; + } + }); + } + }).catch(() => { + this.applicationList.push( + new ApplicationObj('', '', 0, '', '', '') + ); + this.oldApplicationItem.push( + new ApplicationObj('', '', 0, '', '', '') + ); + }) } } -- Gitee