From 7ac4d9832c26ebe0cdac1c7532ad38d5ee5b1b15 Mon Sep 17 00:00:00 2001 From: LeechyLiang Date: Fri, 15 Aug 2025 18:12:17 +0800 Subject: [PATCH] rm Array APIs Signed-off-by: LeechyLiang Change-Id: I6d0dc73a8dc8e3961ee1b2b3af56d2da306fddd2 --- .../include/ani_request_permission.h | 2 +- .../ani_request_permission_on_setting.h | 2 +- .../src/ani_ability_access_ctrl.cpp | 8 +- .../src/ani_request_permission.cpp | 4 +- .../src/ani_request_permission_on_setting.cpp | 4 +- frameworks/ets/ani/common/include/ani_utils.h | 4 +- frameworks/ets/ani/common/src/ani_utils.cpp | 84 ++++++++++++++----- .../ets/ani/privacy/src/privacy_manager.cpp | 6 +- 8 files changed, 78 insertions(+), 36 deletions(-) diff --git a/frameworks/ets/ani/accesstoken/include/ani_request_permission.h b/frameworks/ets/ani/accesstoken/include/ani_request_permission.h index 6f29adb86..a217e21a4 100644 --- a/frameworks/ets/ani/accesstoken/include/ani_request_permission.h +++ b/frameworks/ets/ani/accesstoken/include/ani_request_permission.h @@ -115,7 +115,7 @@ struct ResultCallback { }; void RequestPermissionsFromUserExecute([[maybe_unused]] ani_env* env, [[maybe_unused]] ani_object object, - ani_object aniContext, ani_array_ref permissionList, ani_object callback); + ani_object aniContext, ani_array permissionList, ani_object callback); class RegisterPermStateChangeScopePtr : public std::enable_shared_from_this, public PermStateChangeCallbackCustomize { diff --git a/frameworks/ets/ani/accesstoken/include/ani_request_permission_on_setting.h b/frameworks/ets/ani/accesstoken/include/ani_request_permission_on_setting.h index 5d73f5817..cd809fb90 100644 --- a/frameworks/ets/ani/accesstoken/include/ani_request_permission_on_setting.h +++ b/frameworks/ets/ani/accesstoken/include/ani_request_permission_on_setting.h @@ -89,7 +89,7 @@ private: }; void RequestPermissionOnSettingExecute([[maybe_unused]] ani_env* env, - [[maybe_unused]] ani_object object, ani_object aniContext, ani_array_ref permissionList, ani_object callback); + [[maybe_unused]] ani_object object, ani_object aniContext, ani_array permissionList, ani_object callback); } // namespace AccessToken } // namespace Security } // namespace OHOS 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 3bb43e639..f87ea3816 100644 --- a/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp +++ b/frameworks/ets/ani/accesstoken/src/ani_ability_access_ctrl.cpp @@ -388,7 +388,7 @@ static ani_int GetVersionExecute([[maybe_unused]] ani_env* env, [[maybe_unused]] } static ani_ref GetPermissionsStatusExecute([[maybe_unused]] ani_env* env, - [[maybe_unused]] ani_object object, ani_int aniTokenID, ani_array_ref aniPermissionList) + [[maybe_unused]] ani_object object, ani_int aniTokenID, ani_array aniPermissionList) { LOGI(ATM_DOMAIN, ATM_TAG, "GetPermissionsStatusExecute begin."); if ((env == nullptr) || (aniPermissionList == nullptr)) { @@ -541,7 +541,7 @@ static bool SetupPermissionSubscriber( return true; } -static bool ParseInputToRegister(const ani_string& aniType, const ani_array_ref& aniId, const ani_array_ref& aniArray, +static bool ParseInputToRegister(const ani_string& aniType, const ani_array& aniId, const ani_array& aniArray, const ani_ref& aniCallback, RegisterPermStateChangeInf* context, bool isReg) { std::string type = ParseAniString(context->env, aniType); @@ -643,7 +643,7 @@ static bool IsExistRegister(const RegisterPermStateChangeInf* context) } static void RegisterPermStateChangeCallback([[maybe_unused]] ani_env* env, [[maybe_unused]] ani_object object, - ani_string aniType, ani_array_ref aniId, ani_array_ref aniArray, ani_ref callback) + ani_string aniType, ani_array aniId, ani_array aniArray, ani_ref callback) { if (env == nullptr) { BusinessErrorAni::ThrowError(env, STS_ERROR_INNER, GetErrorMessage(STSErrorCode::STS_ERROR_INNER)); @@ -766,7 +766,7 @@ static void DeleteRegisterFromVector(const RegisterPermStateChangeInf* context) } static void UnregisterPermStateChangeCallback([[maybe_unused]] ani_env* env, [[maybe_unused]] ani_object object, - ani_string aniType, ani_array_ref aniId, ani_array_ref aniArray, ani_ref callback) + ani_string aniType, ani_array aniId, ani_array aniArray, ani_ref callback) { LOGD(ATM_DOMAIN, ATM_TAG, "UnregisterPermStateChangeCallback In."); if (env == nullptr) { diff --git a/frameworks/ets/ani/accesstoken/src/ani_request_permission.cpp b/frameworks/ets/ani/accesstoken/src/ani_request_permission.cpp index 578a6cb4f..48b0d834f 100644 --- a/frameworks/ets/ani/accesstoken/src/ani_request_permission.cpp +++ b/frameworks/ets/ani/accesstoken/src/ani_request_permission.cpp @@ -417,7 +417,7 @@ static void RequestPermissionsFromUserProcess(std::shared_ptr& asyncContext) { ani_vm* vm; @@ -449,7 +449,7 @@ static bool ParseRequestPermissionFromUser(ani_env* env, ani_object aniContext, } void RequestPermissionsFromUserExecute([[maybe_unused]] ani_env* env, [[maybe_unused]] ani_object object, - ani_object aniContext, ani_array_ref aniPermissionList, ani_object callback) + ani_object aniContext, ani_array aniPermissionList, ani_object callback) { if (env == nullptr || aniPermissionList == nullptr || callback == nullptr) { LOGE(ATM_DOMAIN, ATM_TAG, "Env or aniPermissionList or callback is null."); diff --git a/frameworks/ets/ani/accesstoken/src/ani_request_permission_on_setting.cpp b/frameworks/ets/ani/accesstoken/src/ani_request_permission_on_setting.cpp index e65856d87..05856d182 100644 --- a/frameworks/ets/ani/accesstoken/src/ani_request_permission_on_setting.cpp +++ b/frameworks/ets/ani/accesstoken/src/ani_request_permission_on_setting.cpp @@ -90,7 +90,7 @@ static ani_status GetContext( return ANI_OK; } -static bool ParseRequestPermissionOnSetting(ani_env* env, ani_object& aniContext, ani_array_ref& aniPermissionList, +static bool ParseRequestPermissionOnSetting(ani_env* env, ani_object& aniContext, ani_array& aniPermissionList, ani_object callback, std::shared_ptr& asyncContext) { ani_vm* vm; @@ -558,7 +558,7 @@ void RequestOnSettingAsyncInstanceControl::CheckDynamicRequest( } void RequestPermissionOnSettingExecute([[maybe_unused]] ani_env* env, - [[maybe_unused]] ani_object object, ani_object aniContext, ani_array_ref permissionList, ani_object callback) + [[maybe_unused]] ani_object object, ani_object aniContext, ani_array permissionList, ani_object callback) { if (env == nullptr || permissionList == nullptr || callback == nullptr) { LOGE(ATM_DOMAIN, ATM_TAG, "Env or permissionList or callback is null."); diff --git a/frameworks/ets/ani/common/include/ani_utils.h b/frameworks/ets/ani/common/include/ani_utils.h index 8c7b6222b..2550d4d54 100644 --- a/frameworks/ets/ani/common/include/ani_utils.h +++ b/frameworks/ets/ani/common/include/ani_utils.h @@ -35,7 +35,7 @@ bool AniClassFindField(ani_env* env, const ani_class& aniClass, const std::strin bool AniParseCallback(ani_env* env, const ani_ref& ani_callback, ani_ref& out); bool AniIsRefUndefined(ani_env* env, const ani_ref& ref); bool AniParseUint32(ani_env* env, const ani_int& aniInt, uint32_t& out); -bool AniParseAccessTokenIDArray(ani_env* env, const ani_array_ref& array, std::vector& out); +bool AniParseAccessTokenIDArray(ani_env* env, const ani_array& array, std::vector& out); bool GetBoolProperty(ani_env* env, const ani_object& object, const std::string& property, bool& value); bool GetIntProperty(ani_env* env, const ani_object& object, const std::string& property, int32_t& value); @@ -62,7 +62,7 @@ bool AniFunctionalObjectCall(ani_env *env, const ani_fn_object& fn, ani_size siz // ani to naitive std::string ParseAniString(ani_env* env, ani_string aniStr); -std::vector ParseAniStringVector(ani_env* env, const ani_array_ref& aniStrArr); +std::vector ParseAniStringVector(ani_env* env, const ani_array& aniStrArr); // native to ani ani_string CreateAniString(ani_env *env, const std::string& str); diff --git a/frameworks/ets/ani/common/src/ani_utils.cpp b/frameworks/ets/ani/common/src/ani_utils.cpp index 85af81a7a..8641064ea 100644 --- a/frameworks/ets/ani/common/src/ani_utils.cpp +++ b/frameworks/ets/ani/common/src/ani_utils.cpp @@ -96,7 +96,7 @@ bool AniParseUint32(ani_env* env, const ani_ref& aniInt, uint32_t& out) return true; } -bool AniParseAccessTokenIDArray(ani_env* env, const ani_array_ref& array, std::vector& out) +bool AniParseAccessTokenIDArray(ani_env* env, const ani_array& array, std::vector& out) { if (env == nullptr) { LOGE(ATM_DOMAIN, ATM_TAG, "Env is null."); @@ -111,7 +111,7 @@ bool AniParseAccessTokenIDArray(ani_env* env, const ani_array_ref& array, std::v for (ani_size i = 0; i < size; ++i) { ani_ref elementRef; - if (env->Array_Get_Ref(array, i, &elementRef) != ANI_OK) { + if (env->Array_Get(array, i, &elementRef) != ANI_OK) { LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Array_Get_Ref at index %{public}zu!", i); return false; } @@ -127,7 +127,7 @@ bool AniParseAccessTokenIDArray(ani_env* env, const ani_array_ref& array, std::v return true; } -std::vector ParseAniStringVector(ani_env* env, const ani_array_ref& aniStrArr) +std::vector ParseAniStringVector(ani_env* env, const ani_array& aniStrArr) { std::vector out; if (env == nullptr) { @@ -142,7 +142,7 @@ std::vector ParseAniStringVector(ani_env* env, const ani_array_ref& for (ani_size i = 0; i < size; ++i) { ani_ref aniRef; - if (env->Array_Get_Ref(aniStrArr, i, &aniRef) != ANI_OK) { + if (env->Array_Get(aniStrArr, i, &aniRef) != ANI_OK) { LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Array_Get_Ref!"); return out; } @@ -272,25 +272,20 @@ ani_ref CreateAniArrayString(ani_env* env, const std::vector& cArra } ani_size length = cArray.size(); - ani_array_ref aArrayRef = nullptr; - ani_class aStringcls = nullptr; - if (env->FindClass("std.core.String", &aStringcls) != ANI_OK) { - LOGE(ATM_DOMAIN, ATM_TAG, "Failed to FindClass String."); - return nullptr; - } + ani_array aArrayRef = nullptr; ani_ref undefinedRef = nullptr; if (ANI_OK != env->GetUndefined(&undefinedRef)) { LOGE(ATM_DOMAIN, ATM_TAG, "Failed to GetUndefined."); return nullptr; } - if (env->Array_New_Ref(aStringcls, length, undefinedRef, &aArrayRef) != ANI_OK) { + if (env->Array_New(length, undefinedRef, &aArrayRef) != ANI_OK) { LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Array_New_Ref."); return nullptr; } ani_string aString = nullptr; for (ani_size i = 0; i < length; ++i) { env->String_NewUTF8(cArray[i].c_str(), cArray[i].size(), &aString); - env->Array_Set_Ref(aArrayRef, i, aString); + env->Array_Set(aArrayRef, i, aString); } ani_ref aRef = nullptr; if (env->GlobalReference_Create(aArrayRef, &aRef) != ANI_OK) { @@ -308,13 +303,37 @@ ani_ref CreateAniArrayInt(ani_env* env, const std::vector& cArray) } ani_size length = cArray.size(); - ani_array_int aArrayInt = nullptr; - if (env->Array_New_Int(length, &aArrayInt) != ANI_OK) { - LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Array_New_Int."); + ani_array aArrayInt = nullptr; + ani_ref undefinedRef = nullptr; + if (ANI_OK != env->GetUndefined(&undefinedRef)) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to GetUndefined."); + return nullptr; + } + if (env->Array_New(length, undefinedRef, &aArrayInt) != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Array_New."); return nullptr; } + ani_class intClass {}; + ani_method intCtor {}; + if (ANI_OK != env->FindClass("std.core.Int", &intClass)) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to FindClass std.core.Int."); + return nullptr; + } + if (ANI_OK != env->Class_FindMethod(intClass, "", "i:", &intCtor)) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Find constructor."); + return nullptr; + } + for (ani_size i = 0; i < length; ++i) { - env->Array_SetRegion_Int(aArrayInt, i, length, &cArray[i]); + ani_object intObj {}; + auto status = env->Object_New(intClass, intCtor, &intObj, static_cast(cArray[i])); + if (status != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to create Int."); + } + status = env->Array_Set(aArrayInt, i, intObj); + if (status != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Set Array."); + } } ani_ref aRef = nullptr; if (env->GlobalReference_Create(aArrayInt, &aRef) != ANI_OK) { @@ -332,17 +351,40 @@ ani_ref CreateAniArrayBool(ani_env* env, const std::vector& cArray) } ani_size length = cArray.size(); - ani_array_boolean aArrayBool = nullptr; - if (env->Array_New_Boolean(length, &aArrayBool) != ANI_OK) { - LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Array_New_Boolean."); + ani_array aArrayBool = nullptr; + ani_ref undefinedRef = nullptr; + if (ANI_OK != env->GetUndefined(&undefinedRef)) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to GetUndefined."); + return nullptr; + } + if (env->Array_New(length, undefinedRef, &aArrayBool) != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Array_New_int."); return nullptr; } std::vector boolArray(length); for (ani_size i = 0; i < length; ++i) { boolArray[i] = cArray[i]; } + ani_class booleanClass {}; + ani_method booleanCtor {}; + if (ANI_OK != env->FindClass("std.core.Boolean", &booleanClass)) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to FindClass std.core.Boolean."); + return nullptr; + } + if (ANI_OK != env->Class_FindMethod(booleanClass, "", "z:", &booleanCtor)) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Find constructor."); + return nullptr; + } for (ani_size i = 0; i < length; ++i) { - env->Array_SetRegion_Boolean(aArrayBool, i, length, &boolArray[i]); + ani_object booleanObj {}; + auto status = env->Object_New(booleanClass, booleanCtor, &booleanObj, boolArray[i]); + if (status != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to create Boolean."); + } + status = env->Array_Set(aArrayBool, i, booleanObj); + if (status != ANI_OK) { + LOGE(ATM_DOMAIN, ATM_TAG, "Failed to Set Array."); + } } ani_ref aRef = nullptr; if (env->GlobalReference_Create(aArrayBool, &aRef) != ANI_OK) { @@ -622,7 +664,7 @@ bool GetStringVecProperty( if (AniIsRefUndefined(env, ref)) { return true; } - ani_array_ref anirefArray = static_cast(ref); + ani_array anirefArray = static_cast(ref); value = ParseAniStringVector(env, anirefArray); return true; } diff --git a/frameworks/ets/ani/privacy/src/privacy_manager.cpp b/frameworks/ets/ani/privacy/src/privacy_manager.cpp index 50eff8881..b9c0b77b9 100644 --- a/frameworks/ets/ani/privacy/src/privacy_manager.cpp +++ b/frameworks/ets/ani/privacy/src/privacy_manager.cpp @@ -236,7 +236,7 @@ void PermActiveStatusPtr::ActiveStatusChangeCallback(ActiveChangeResponse& activ } } -static bool ParseInputToRegister(const ani_string& aniType, const ani_array_ref& aniArray, +static bool ParseInputToRegister(const ani_string& aniType, const ani_array& aniArray, const ani_ref& aniCallback, RegisterPermActiveChangeContext* context, bool isReg) { std::string type = ParseAniString(context->env, static_cast(aniType)); @@ -313,7 +313,7 @@ static bool IsExistRegister(const RegisterPermActiveChangeContext* context) } static void RegisterPermActiveStatusCallback([[maybe_unused]] ani_env* env, - ani_string aniType, ani_array_ref aniArray, ani_ref callback) + ani_string aniType, ani_array aniArray, ani_ref callback) { if (env == nullptr) { return; @@ -427,7 +427,7 @@ static void DeleteRegisterInVector(const RegisterPermActiveChangeContext* contex } static void UnRegisterPermActiveStatusCallback([[maybe_unused]] ani_env* env, - ani_string aniType, ani_array_ref aniArray, ani_ref callback) + ani_string aniType, ani_array aniArray, ani_ref callback) { if (env == nullptr) { return; -- Gitee