From 68b42b0efc15f3ebf2c8d9c219618d01c4e611c7 Mon Sep 17 00:00:00 2001 From: zhouyan Date: Wed, 18 Jun 2025 10:32:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=91=8A=E8=AD=A6=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouyan Change-Id: I964896b7ecf5bae40413d2a2734798bf29a4fef1 --- frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp b/frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp index 41be0f49a..99f3b07b9 100644 --- a/frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp +++ b/frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp @@ -1407,16 +1407,16 @@ static ani_int GetVersionExecute([[maybe_unused]] ani_env* env, [[maybe_unused]] uint32_t version = -1; if (env == nullptr) { ACCESSTOKEN_LOG_ERROR(LABEL, "env null"); - return version; + return static_cast(version); } int32_t result = AccessTokenKit::GetVersion(version); if (result != RET_SUCCESS) { int32_t stsCode = BusinessErrorAni::GetStsErrorCode(result); BusinessErrorAni::ThrowError(env, stsCode, GetErrorMessage(stsCode)); - return version; + return static_cast(version); } - return version; + return static_cast(version); } static ani_ref GetPermissionsStatusExecute([[maybe_unused]] ani_env* env, -- Gitee From f0fcfa95c6ab971cec74783fe2cb8bc038346d78 Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Thu, 12 Jun 2025 19:33:22 +0800 Subject: [PATCH 2/2] add cpp GetPermissionUsedRecordToggleStatusExecute Signed-off-by: zhangzezhong --- .../src/ani_ability_access_ctrl.cpp | 6 +- .../ani/privacy/ets/@ohos.privacyManager.ets | 22 +-- .../ets/ani/privacy/src/privacy_manager.cpp | 155 ++++++------------ 3 files changed, 63 insertions(+), 120 deletions(-) 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 a933ddda4..a2db38009 100644 --- a/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp +++ b/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp @@ -1387,16 +1387,16 @@ static ani_int GetVersionExecute([[maybe_unused]] ani_env* env, [[maybe_unused]] uint32_t version = -1; if (env == nullptr) { ACCESSTOKEN_LOG_ERROR(LABEL, "env null"); - return static_cast(version); + return version; } int32_t result = AccessTokenKit::GetVersion(version); if (result != RET_SUCCESS) { int32_t stsCode = BusinessErrorAni::GetStsErrorCode(result); BusinessErrorAni::ThrowError(env, stsCode, GetErrorMessage(stsCode)); - return static_cast(version); + return version; } - return static_cast(version); + return version; } static ani_ref GetPermissionsStatusExecute([[maybe_unused]] ani_env* env, diff --git a/frameworks/ets/ani/privacy/ets/@ohos.privacyManager.ets b/frameworks/ets/ani/privacy/ets/@ohos.privacyManager.ets index 5ddd54b01..a51533d07 100644 --- a/frameworks/ets/ani/privacy/ets/@ohos.privacyManager.ets +++ b/frameworks/ets/ani/privacy/ets/@ohos.privacyManager.ets @@ -218,11 +218,11 @@ export default namespace privacyManager { }); } - export function getPermissionUsedTypeInfos(tokenId?: int, permissionName?: Permissions): Promise>{ - let tokenIdIn = tokenId ? tokenId : 0; + export function getPermissionUsedTypeInfos(tokenId?: int, permissionName?: Permissions): Promise> { + let tokenIdIn = tokenId ?? 0; let permissionNameIn = permissionName ?? ""; - return new Promise>( - (resolve: (v: Array) => void, reject: (err:BusinessError) => void): Array => { + return new Promise> ( + (resolve: (v: Array) => void, reject: (err: BusinessError) => void): Array => { let p1 = taskpool.execute((): Array => { return getPermissionUsedTypeInfosExecute(tokenIdIn, permissionNameIn); }); @@ -230,12 +230,12 @@ export default namespace privacyManager { resolve(e as Array); }).catch((err: Error): void => { reject(err as BusinessError); - }) + }); }); } - export function setPermissionUsedRecordToggleStatus(status: boolean): Promise{ - return new Promise( + export function setPermissionUsedRecordToggleStatus(status: boolean): Promise { + return new Promise ( (resolve: (v: undefined) => void, reject: (err: BusinessError) => void): void => { let p1 = taskpool.execute((): void => { setPermissionUsedRecordToggleStatusExecute(status); @@ -244,13 +244,13 @@ export default namespace privacyManager { resolve(undefined); }).catch((err: Error): void => { reject(err as BusinessError); - }) + }); }); } export function getPermissionUsedRecordToggleStatus(): Promise{ - return new Promise( - (resolve: (v: boolean) => void, reject: (err:BusinessError) => void): void => { + return new Promise ( + (resolve: (v: boolean) => void, reject: (err: BusinessError) => void): void => { let p1 = taskpool.execute((): boolean => { return getPermissionUsedRecordToggleStatusExecute(); }); @@ -258,7 +258,7 @@ export default namespace privacyManager { resolve(e as boolean); }).catch((err: Error): void =>{ reject(err as BusinessError); - }) + }); }); } diff --git a/frameworks/ets/ani/privacy/src/privacy_manager.cpp b/frameworks/ets/ani/privacy/src/privacy_manager.cpp index e624aed66..b451facd5 100644 --- a/frameworks/ets/ani/privacy/src/privacy_manager.cpp +++ b/frameworks/ets/ani/privacy/src/privacy_manager.cpp @@ -688,141 +688,89 @@ static ani_object GetPermissionUsedRecordExecute([[maybe_unused]] ani_env* env, return nullptr; } -bool AniParseStringAndNull(ani_env* env, const ani_string& ani_str, std::string& out) -{ - ani_size strSize; - if (env->String_GetUTF8Size(ani_str, &strSize) != ANI_OK) { - ACCESSTOKEN_LOG_ERROR(LABEL, "String_GetUTF8Size failed!"); - return false; - } - - std::vector buffer(strSize + 1); // +1 for null terminator - char* utf8Buffer = buffer.data(); - ani_size bytesWritten = 0; - if (env->String_GetUTF8(ani_str, utf8Buffer, strSize + 1, &bytesWritten) != ANI_OK) { - ACCESSTOKEN_LOG_ERROR(LABEL, "String_GetUTF8 failed!"); - return false; - } - if (bytesWritten == 0) { - out = std::string(""); - return true; - } - utf8Buffer[bytesWritten] = '\0'; - - out = std::string(utf8Buffer); - return true; -} - -static bool SetPermissionUsedTypeInfo(ani_env* env, ani_object& ret, const PermissionUsedTypeInfo &cArray) -{ - ACCESSTOKEN_LOG_INFO(LABEL, "SetPermissionUsedTypeInfo in"); - if (env == nullptr) { - ACCESSTOKEN_LOG_INFO(LABEL, "null env"); - return false; - } - ani_status status = ANI_ERROR; - if ((status = env->Object_SetPropertyByName_Double(ret, "tokenId", cArray.tokenId)) != ANI_OK) { - ACCESSTOKEN_LOG_INFO(LABEL, "tokenId status:%{public}d", status); - return false; - } - status = env->Object_SetPropertyByName_Ref(ret, "permissionName", StringToAniRef(env, cArray.permissionName)); - if (status != ANI_OK) { - ACCESSTOKEN_LOG_INFO(LABEL, "permissionName failed status:%{public}d", status); - return false; - } - ani_enum_item typeret = nullptr; - if (!EnumConvertNativeToSts(env, "L@ohos/privacyManager/privacyManager/PermissionUsedType;", cArray.type, typeret)) { - ACCESSTOKEN_LOG_INFO(LABEL, "EnumConvertNativeToSts failed"); - return false; - } - ani_ref typeRef = nullptr; - if (env->GlobalReference_Create(typeret, &typeRef) != ANI_OK) { - ACCESSTOKEN_LOG_ERROR(LABEL, "ConvertAniArrayString GlobalReference_Create failed "); - return false; - } - status = env->Object_SetPropertyByName_Ref(ret, "usedType", typeRef); - if (status != ANI_OK) { - ACCESSTOKEN_LOG_INFO(LABEL, "type status:%{public}d", status); - return false; - } - return true; -} - -ani_object GetPermissionUsedTypeInfoData(ani_env *env, const PermissionUsedTypeInfo &info) +ani_object ConvertPermissionUsedTypeInfo(ani_env *env, const PermissionUsedTypeInfo &info) { ani_class cls {}; - ani_status status = RET_FAIL; + ani_status status = ANI_ERROR; ani_method method {}; ani_object object = nullptr; if (env == nullptr) { - ACCESSTOKEN_LOG_INFO(LABEL, "env null"); + ACCESSTOKEN_LOG_ERROR(LABEL, "Env is null."); return nullptr; } - if ((status = env->FindClass("L@ohos/privacyManager/privacyManager/PermissionUsedTypeInfoInner;", - &cls)) != ANI_OK) { - ACCESSTOKEN_LOG_INFO(LABEL, "status : %{public}d", status); + if (!AniFindClass(env, "L@ohos/privacyManager/privacyManager/PermissionUsedTypeInfoInner;", cls)) { + ACCESSTOKEN_LOG_ERROR(LABEL, "FindClass is failed."); return nullptr; } if (cls == nullptr) { - ACCESSTOKEN_LOG_INFO(LABEL, "null cls"); + ACCESSTOKEN_LOG_ERROR(LABEL, "FindClass is failed."); return nullptr; } - if ((status = env->Class_FindMethod(cls, "", ":V", &method)) != ANI_OK) { - ACCESSTOKEN_LOG_INFO(LABEL, "status : %{public}d", status); + if (!AniClassFindMethod(env, cls, "", ":V", method)) { + ACCESSTOKEN_LOG_ERROR(LABEL, "FindMethod is failed."); return nullptr; } if ((status = env->Object_New(cls, method, &object)) != ANI_OK) { - ACCESSTOKEN_LOG_INFO(LABEL, "status : %{public}d", status); + ACCESSTOKEN_LOG_ERROR(LABEL, "ObjectNew is failed."); return nullptr; } if (object == nullptr) { - ACCESSTOKEN_LOG_INFO(LABEL, "null object"); + ACCESSTOKEN_LOG_ERROR(LABEL, "ObjectNew is failed."); + return nullptr; + } + if (!SetIntProperty(env, object, "tokenId", info.tokenId)) { + ACCESSTOKEN_LOG_ERROR(LABEL, "tokenId set fail."); return nullptr; } - if (!SetPermissionUsedTypeInfo(env, object, info)) { - ACCESSTOKEN_LOG_INFO(LABEL, "SetPermissionUsedTypeInfo failed"); + if (!SetStringProperty(env, object, "permissionName", info.permissionName)) { + ACCESSTOKEN_LOG_ERROR(LABEL, "PermissionName set fail."); + return nullptr; + } + const char* permUsedTypeDes = "L@ohos/privacyManager/privacyManager/PermissionUsedType;"; + if (!SetEnumProperty(env, object, permUsedTypeDes, "usedType", static_cast(info.type))) { + ACCESSTOKEN_LOG_ERROR(LABEL, "UsedType set fail."); return nullptr; } return object; } -static ani_ref ProcessPermissionUsedTypeInfoResult(ani_env* env,const std::vector& infos) +static ani_ref ConvertPermissionUsedTypeInfos(ani_env* env, const std::vector& infos) { - ani_class arrayCls = nullptr; - ani_status status = ANI_OK; - if (env == nullptr) { - ACCESSTOKEN_LOG_ERROR(LABEL, "null env"); + ACCESSTOKEN_LOG_ERROR(LABEL, "Env is null."); return nullptr; } - status = env->FindClass("Lescompat/Array;", &arrayCls); - if (status != ANI_OK) { - ACCESSTOKEN_LOG_ERROR(LABEL, "status : %{public}d", status); + ani_class arrayCls = nullptr; + if (!AniFindClass(env, "Lescompat/Array;", arrayCls)) { + ACCESSTOKEN_LOG_ERROR(LABEL, "FindClass is failed."); + return nullptr; + } + if (arrayCls == nullptr) { + ACCESSTOKEN_LOG_ERROR(LABEL, "FindClass is failed."); return nullptr; } ani_method arrayCtor; - status = env->Class_FindMethod(arrayCls, "", "I:V", &arrayCtor); - if (status != ANI_OK) { - ACCESSTOKEN_LOG_ERROR(LABEL, "status : %{public}d", status); + if (!AniClassFindMethod(env, arrayCls, "", ":V", arrayCtor)) { + ACCESSTOKEN_LOG_ERROR(LABEL, "FindMethod is failed."); return nullptr; } ani_object arrayObj; - status = env->Object_New(arrayCls, arrayCtor, &arrayObj, infos.size()); + ani_status status = env->Object_New(arrayCls, arrayCtor, &arrayObj, infos.size()); if (status != ANI_OK) { ACCESSTOKEN_LOG_ERROR(LABEL, "status : %{public}d", status); return arrayObj; } ani_size index = 0; - for (auto &instanceInfo : infos) { - ani_ref ani_info = GetPermissionUsedTypeInfoData(env, instanceInfo); + for (const auto &instanceInfo : infos) { + ani_ref ani_info = ConvertPermissionUsedTypeInfo(env, instanceInfo); if (ani_info == nullptr) { - ACCESSTOKEN_LOG_ERROR(LABEL, "null ani_info"); + ACCESSTOKEN_LOG_ERROR(LABEL, "GetPermissionUsedTypeInfoData is failed."); break; } status = env->Object_CallMethodByName_Void(arrayObj, "$_set", "ILstd/core/Object;:V", index, ani_info); if (status != ANI_OK) { - ACCESSTOKEN_LOG_ERROR(LABEL, "status : %{public}d", status); + ACCESSTOKEN_LOG_ERROR(LABEL, "CallMethodByName is failed."); break; } ++index; @@ -835,54 +783,49 @@ static ani_ref GetPermissionUsedTypeInfosExecute([[maybe_unused]] ani_env* env, { if (env == nullptr) { ACCESSTOKEN_LOG_ERROR(LABEL, "Env is null"); - } - - std::string permissionName; - if (!AniParseStringAndNull(env, aniPermissionName, permissionName)) { - BusinessErrorAni::ThrowParameterTypeError(env, STSErrorCode::STS_ERROR_PARAM_ILLEGAL, - GetParamErrorMsg("permissionName", "string")); return nullptr; } - + std::string permission = ParseAniString(env, static_cast(aniPermission)); int32_t retCode = ANI_ERROR; std::vector retVec; - retCode = PrivacyKit::GetPermissionUsedTypeInfos(tokenId, permissionName, retVec); - if(retCode != ANI_OK) { + AccessTokenID tokenID = static_cast(aniTokenID); + retCode = PrivacyKit::GetPermissionUsedTypeInfos(tokenID, permission, retVec); + if (retCode != RET_SUCCESS) { BusinessErrorAni::ThrowError(env, GetStsErrorCode(retCode), GetErrorMessage(GetStsErrorCode(retCode))); return nullptr; } - return ProcessPermissionUsedTypeInfoResult(env,retVec); + return ConvertPermissionUsedTypeInfos(env, retVec); } static void SetPermissionUsedRecordToggleStatusExecute([[maybe_unused]] ani_env* env, ani_boolean status) { - ACCESSTOKEN_LOG_INFO(LABEL, "SetPermissionUsedRecordToggleStatusExecute Call"); if (env == nullptr) { + ACCESSTOKEN_LOG_ERROR(LABEL, "Env is null"); return; } int32_t userID = 0; int32_t retCode = PrivacyKit::SetPermissionUsedRecordToggleStatus(userID, status); if (retCode != RET_SUCCESS) { - int32_t stscode = BusinessErrorAni::GetStsErrorCode(retCode); - BusinessErrorAni::ThrowError(env, stscode, GetErrorMessage(stscode)); + int32_t stsCode = BusinessErrorAni::GetStsErrorCode(retCode); + BusinessErrorAni::ThrowError(env, stsCode, GetErrorMessage(stsCode)); } } static ani_boolean GetPermissionUsedRecordToggleStatusExecute([[maybe_unused]] ani_env* env) { - if(env == nullptr) { + if (env == nullptr) { ACCESSTOKEN_LOG_ERROR(LABEL, "Env is null"); return false; } int32_t userID = 0; - bool toggleStatus = false; - int32_t retCode = PrivacyKit::GetPermissionUsedRecordToggleStatus(userID, toggleStatus); + bool isToggleStatus = false; + int32_t retCode = PrivacyKit::GetPermissionUsedRecordToggleStatus(userID, isToggleStatus); if (retCode != RET_SUCCESS) { BusinessErrorAni::ThrowError(env, GetStsErrorCode(retCode), GetErrorMessage(GetStsErrorCode(retCode))); return false; } - return toggleStatus; + return isToggleStatus; } void InitPrivacyFunction(ani_env *env) -- Gitee