diff --git a/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets b/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets index 0631672a23e5cd1492a11474bf81f2a8a30b8016..dfe7daa38b098aa2ad90bda6a2b434043c77d1d8 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 adb316d0fe4d3c6d462453349fde69cf62e4f846..179bd111ac08c6ed06c0b9db5002dd0bf4a67393 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 95a56c4fd9a2a34ae0bff03fb5e9e5df6bb8920b..5e1a6d724f4b4f6492f8028b06ef509139daf6ac 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);