From 423eb8fd0e4897e298fd56cdfa69d0355c169cc8 Mon Sep 17 00:00:00 2001 From: xia-bubai Date: Sat, 21 Jun 2025 15:52:36 +0800 Subject: [PATCH] arkts1.2 add requestPermissionOnApplicationSetting Signed-off-by: xia-bubai Change-Id: I74b1f2522c526c8f72c0f1587ebc07d2363572e8 --- .../ets/@ohos.abilityAccessCtrl.ets | 18 ++++++++++++++++ .../include/ani_ability_access_ctrl.h | 2 +- .../src/ani_ability_access_ctrl.cpp | 21 ++++++++++++++++++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets b/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets index 0631672a2..dfe7daa38 100644 --- a/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets +++ b/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets @@ -112,6 +112,7 @@ export default namespace abilityAccessCtrl { getPermissionFlagsExecute(tokenID: int, permissionName: Permissions): int; setPermissionRequestToggleStatusExecute(permissionName: Permissions, status: int): void; getPermissionRequestToggleStatusExecute(permissionName: Permissions): int; + RequestAppPermOnSettingExecute(tokenID: int): undefined; checkAccessTokenSync(tokenID: int, permissionName: Permissions): GrantStatus; verifyAccessTokenSync(tokenID: int, permissionName: Permissions): GrantStatus; @@ -145,6 +146,7 @@ export default namespace abilityAccessCtrl { setPermissionRequestToggleStatus( permissionName: Permissions, status: PermissionRequestToggleStatus): Promise; getPermissionRequestToggleStatus(permissionName: Permissions): Promise; + requestPermissionOnApplicationSetting(tokenID: int): Promise; } class AtManagerInner implements AtManager { @@ -163,6 +165,7 @@ export default namespace abilityAccessCtrl { native getPermissionFlagsExecute(tokenID: int, permissionName: Permissions): int; native setPermissionRequestToggleStatusExecute(permissionName: Permissions, status: int): void; native getPermissionRequestToggleStatusExecute(permissionName: Permissions): int; + native RequestAppPermOnSettingExecute(tokenID: int): undefined; verifyAccessTokenSync(tokenID: int, permissionName: Permissions): GrantStatus { let result = this.checkAccessTokenExecute(tokenID, permissionName); @@ -405,5 +408,20 @@ export default namespace abilityAccessCtrl { }); return p; } + + requestPermissionOnApplicationSetting(tokenID: int): Promise { + let p = new Promise( + (resolve: (v: undefined) => void, reject: (error: BusinessError) => void): void => { + let p = taskpool.execute((): undefined => { + new AtManagerInner().RequestAppPermOnSettingExecute(tokenID); + }); + p.then((e: NullishType): void => { + resolve(undefined); + }).catch((err: Error): void => { + reject(err as BusinessError); + }) + }); + return p; + } } } diff --git a/frameworks/ets/ani/accesstoken/include/ani_ability_access_ctrl.h b/frameworks/ets/ani/accesstoken/include/ani_ability_access_ctrl.h index adb316d0f..179bd111a 100644 --- a/frameworks/ets/ani/accesstoken/include/ani_ability_access_ctrl.h +++ b/frameworks/ets/ani/accesstoken/include/ani_ability_access_ctrl.h @@ -34,7 +34,7 @@ struct AtManagerAsyncContext { }; struct PermissionParamCache { - int64_t sysCommitIdCache = PARAM_DEFAULT_VALUE; + long long sysCommitIdCache = PARAM_DEFAULT_VALUE; int32_t commitIdCache = PARAM_DEFAULT_VALUE; int32_t handle = PARAM_DEFAULT_VALUE; std::string sysParamCache; diff --git a/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp b/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp index 95a56c4fd..5e1a6d724 100644 --- a/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp +++ b/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp @@ -73,7 +73,7 @@ static ani_object CreateAtManager([[maybe_unused]] ani_env* env) static std::string GetPermParamValue() { - int64_t sysCommitId = GetSystemCommitId(); + long long sysCommitId = GetSystemCommitId(); if (sysCommitId == g_paramCache.sysCommitIdCache) { ACCESSTOKEN_LOG_DEBUG(LABEL, "SysCommitId = %{public}lld", sysCommitId); return g_paramCache.sysParamCache; @@ -362,6 +362,23 @@ static ani_int GetPermissionRequestToggleStatusExecute([[maybe_unused]] ani_env* return flag; } +static void RequestAppPermOnSettingExecute([[maybe_unused]] ani_env* env, + [[maybe_unused]] ani_object object, ani_int tokenID) +{ + if (env == nullptr) { + ACCESSTOKEN_LOG_ERROR(LABEL, "Env is null."); + return; + } + + int32_t result = AccessTokenKit::RequestAppPermOnSetting(static_cast(tokenID)); + if (result != RET_SUCCESS) { + ACCESSTOKEN_LOG_ERROR(LABEL, "Result = %{public}d, errcode = %{public}d.", + result, BusinessErrorAni::GetStsErrorCode(result)); + BusinessErrorAni::ThrowError(env, BusinessErrorAni::GetStsErrorCode(result), + GetErrorMessage(BusinessErrorAni::GetStsErrorCode(result))); + } +} + void InitAbilityCtrlFunction(ani_env *env) { if (env == nullptr) { @@ -406,6 +423,8 @@ void InitAbilityCtrlFunction(ani_env *env) nullptr, reinterpret_cast(SetPermissionRequestToggleStatusExecute) }, ani_native_function{ "getPermissionRequestToggleStatusExecute", nullptr, reinterpret_cast(GetPermissionRequestToggleStatusExecute) }, + ani_native_function{ "RequestAppPermOnSettingExecute", + nullptr, reinterpret_cast(RequestAppPermOnSettingExecute) }, }; if (ANI_OK != env->Class_BindNativeMethods(cls, claMethods.data(), claMethods.size())) { ACCESSTOKEN_LOG_ERROR(LABEL, "Cannot bind native methods to %{public}s", className); -- Gitee