diff --git a/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets b/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets index 0f685d4eb473a04ad27b422fcfaa70ab90450e44..7d1a0fb1b3e7723acb2212ea9abf05f14d199b1e 100644 --- a/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets +++ b/frameworks/ets/ani/accesstoken/ets/@ohos.abilityAccessCtrl.ets @@ -23,8 +23,6 @@ function PARAM_ERROR_MSG(param: string, type: string): string { return `Parameter Error. The type of "${param}" must be ${type}.`; } -export const LOG_TAG = 0xC05A01; - export { Permissions }; export type PermissionRequestResult = _PermissionRequestResult; @@ -189,33 +187,42 @@ export default namespace abilityAccessCtrl { requestPermissionsFromUser(context: Context, permissionList: Array, callback:AsyncCallback): void { validateRequestParams(context, permissionList); - let p2 = taskpool.execute((): PermissionRequestResult => { - return new AtManagerInner().requestPermissionsFromUserExecute(context, permissionList)}); - p2.then((e: NullishType) => { - hilog.info(LOG_TAG, 'requestPermissionsFromUser',`AsyncCallback success.`); - let retError = new BusinessError(); - callback(retError, e as PermissionRequestResult) - },(err: BusinessError): void=> { - hilog.info(LOG_TAG, 'requestPermissionsFromUser',`Promise failed.`); - callback(err, PermissionRequestResult) - }) + let fun = async() => { + try { + let work = new EAWorker(); + let job = work.run(() : PermissionRequestResult => { + return new AtManagerInner().requestPermissionsFromUserExecute(context, permissionList); + }) + let result = job.Await(); + let retError = new BusinessError(); + callback(retError, result as PermissionRequestResult); + } catch (err: BusinessError) { + const defaultResult: PermissionRequestResult = {}; + callback(err, defaultResult); + } + }; + fun(); } - requestPermissionsFromUser(context: Context, permissionList: Array): + requestPermissionsFromUser(context: Context, permissionList: Array): Promise { validateRequestParams(context, permissionList); - let p = new Promise((resolve: (v: PermissionRequestResult) => + + let p = new Promise((resolve: (v: PermissionRequestResult) => void, reject: (error: BusinessError) => void) => { - let p1 = taskpool.execute((): PermissionRequestResult => - { return new AtManagerInner().requestPermissionsFromUserExecute(context, permissionList)}); - p1.then((e: NullishType)=> { - hilog.info(LOG_TAG, 'requestPermissionsFromUser',`Promise success.`); - let r : PermissionRequestResult = e as PermissionRequestResult; - resolve(r); - }).catch((err: BusinessError): void => { - hilog.info(LOG_TAG, 'requestPermissionsFromUser',`Promise failed.`); - reject(err); - }); + let fun = async() => { + try { + let work = new EAWorker(); + let job = work.run((): PermissionRequestResult => { + return new AtManagerInner().requestPermissionsFromUserExecute(context, permissionList); + }); + let result = job.Await(); + resolve(result as PermissionRequestResult); + } catch (err: BusinessError) { + reject(err); + } + }; + fun(); }); return p; } diff --git a/frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp b/frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp index ed15891e1ad077479250d8a671274bac05eddcff..01eeecafdcf9e80a73169f60d656617ce7a545a2 100644 --- a/frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp +++ b/frameworks/ets/ani/accesstoken/src/ability_access_ctrl.cpp @@ -254,7 +254,12 @@ static ani_ref ConvertAniArrayString(ani_env* env, const std::vectorArray_New_Ref(aStringcls, length, nullptr, &aArrayRef) != ANI_OK) { + ani_ref undefinedRef = nullptr; + if (ANI_OK != env->GetUndefined(&undefinedRef)) { + ACCESSTOKEN_LOG_ERROR(LABEL, "ConvertAniArrayString GetUndefined failed"); + return nullptr; + } + if (env->Array_New_Ref(aStringcls, length, undefinedRef, &aArrayRef) != ANI_OK) { ACCESSTOKEN_LOG_ERROR(LABEL, "ConvertAniArrayString Array_New_Ref failed "); return nullptr; } @@ -276,7 +281,7 @@ static ani_ref ConvertAniArrayInt(ani_env* env, const std::vector& cArr ani_size length = cArray.size(); ani_array_int aArrayInt = nullptr; if (env->Array_New_Int(length, &aArrayInt) != ANI_OK) { - ACCESSTOKEN_LOG_ERROR(LABEL, "ConvertAniArrayInt Array_New_Ref failed "); + ACCESSTOKEN_LOG_ERROR(LABEL, "ConvertAniArrayInt Array_New_Int failed "); return nullptr; } for (ani_size i = 0; i < length; ++i) {