diff --git a/interfaces/kits/ani/common_event/ets/@ohos.commonEventManager.ets b/interfaces/kits/ani/common_event/ets/@ohos.commonEventManager.ets index 39e92f6e2863a3d44e8118afc533878f0455f3ec..2ef0ce617c674e1fcc0a5047627a9d2b11c9e76a 100644 --- a/interfaces/kits/ani/common_event/ets/@ohos.commonEventManager.ets +++ b/interfaces/kits/ani/common_event/ets/@ohos.commonEventManager.ets @@ -34,7 +34,7 @@ namespace commonEventManager { export native function publishAsUserExecute(event: string, userId: int):int; export native function publishAsUserWithOptionsExecute(event: string, userId: int, options: CommonEventPublishData):int; - export native function createSubscriberExecute(subscribeInfo: CommonEventSubscribeInfo):CommonEventSubscriber; + export native function createSubscriberExecute(subscribeInfo: CommonEventSubscribeInfo):CommonEventSubscriber|null; export native function subscribeExecute(subscriber: CommonEventSubscriber, callback: AsyncCallback):int; export native function subscribeToEventExecute(subscriber: CommonEventSubscriber, @@ -118,13 +118,11 @@ namespace commonEventManager { } export function createSubscriber(subscribeInfo: CommonEventSubscribeInfo, - callback: AsyncCallback): void { + callback: AsyncCallback): void { hilog.info(0x0000, TAG, 'createSubscriber callback call.'); let task = taskpool.execute(commonEventManager.createSubscriberExecute, subscribeInfo); - task.then((e: NullishType)=>{ - let result: CommonEventSubscriber = e as CommonEventSubscriber; - hilog.info(0x0000, TAG, 'createSubscriber result.'); - callback(null, result); + task.then((data: NullishType)=>{ + callback(null, data as CommonEventSubscriber|null); }, (error: Object): void => { hilog.error(0x0000, TAG, 'createSubscriber error.'); let err: BusinessError = error as BusinessError; @@ -132,23 +130,22 @@ namespace commonEventManager { }); } - export function createSubscriber(subscribeInfo: CommonEventSubscribeInfo):Promise { + export function createSubscriber(subscribeInfo: CommonEventSubscribeInfo):Promise { hilog.info(0x0000, TAG, 'createSubscriber Promise call'); - let p = new Promise((resolve: (v: CommonEventSubscriber) => void, + let p = new Promise((resolve: (v: CommonEventSubscriber|null) => void, reject: (error: Error) => void) => { let p1 = taskpool.execute(commonEventManager.createSubscriberExecute, subscribeInfo); - p1.then((e :NullishType)=>{ - hilog.info(0x0000, TAG, 'createSubscriber Promise result.'); - let result: CommonEventSubscriber = e as CommonEventSubscriber; - resolve(result); + p1.then((data :NullishType)=>{ + resolve(data as CommonEventSubscriber|null); }, (err:Error): void => { hilog.error(0x0000, TAG, 'createSubscriber Promise error'); + reject(err); }); }); return p; } - export function createSubscriberSync(subscribeInfo: CommonEventSubscribeInfo): CommonEventSubscriber{ + export function createSubscriberSync(subscribeInfo: CommonEventSubscribeInfo): CommonEventSubscriber|null{ hilog.info(0x0000, TAG, 'createSubscriberSync call'); return commonEventManager.createSubscriberExecute(subscribeInfo); } diff --git a/interfaces/kits/ani/common_event/ets/commonEvent/commonEventSubscriber.ets b/interfaces/kits/ani/common_event/ets/commonEvent/commonEventSubscriber.ets index fe348efd441f1b1414e75fb3f22a228d24dc7caf..a9a69d711d71f3e46f3b5180c09ccd65b5820ad0 100644 --- a/interfaces/kits/ani/common_event/ets/commonEvent/commonEventSubscriber.ets +++ b/interfaces/kits/ani/common_event/ets/commonEvent/commonEventSubscriber.ets @@ -66,9 +66,9 @@ export interface CommonEventSubscriber { getAbortCommonEvent(callback: AsyncCallback): void; getAbortCommonEvent(): Promise; getAbortCommonEventSync(): boolean; - getSubscribeInfo(callback: AsyncCallback): void; - getSubscribeInfo(): Promise; - getSubscribeInfoSync(): CommonEventSubscribeInfo; + getSubscribeInfo(callback: AsyncCallback): void; + getSubscribeInfo(): Promise; + getSubscribeInfoSync(): CommonEventSubscribeInfo|null; finishCommonEvent(callback: AsyncCallback): void; finishCommonEvent(): Promise; } @@ -87,7 +87,7 @@ class CommonEventSubscriberInner implements CommonEventSubscriber { public native nativeAbortCommonEvent(): int; public native nativeClearAbortCommonEvent(): int; public native nativeGetAbortCommonEvent(): boolean; - public native nativeGetSubscribeInfo(): CommonEventSubscribeInfo; + public native nativeGetSubscribeInfo(): CommonEventSubscribeInfo|null; public native nativeFinishCommonEvent(): int; private static native transferToDynamicSubscriber(input: Object): Any; @@ -433,25 +433,22 @@ class CommonEventSubscriberInner implements CommonEventSubscriber { } } - public getSubscribeInfo(callback: AsyncCallback): void { - let p = taskpool.execute((): CommonEventSubscribeInfo => { return this.nativeGetSubscribeInfo(); }); + public getSubscribeInfo(callback: AsyncCallback): void { + let p = taskpool.execute((): CommonEventSubscribeInfo|null => { return this.nativeGetSubscribeInfo(); }); p.then((data: NullishType): void => { - let ret : CommonEventSubscribeInfo = data as CommonEventSubscribeInfo; - callback(null, ret); + callback(null, data as CommonEventSubscribeInfo|null); }, (error: Error): void => { - let ret : CommonEventSubscribeInfo ; let err: BusinessError = error as BusinessError; - callback(err, ret); + callback(err, undefined); }) } - public getSubscribeInfo(): Promise { - let pPromise = new Promise((resolve: ResolveCallback, + public getSubscribeInfo(): Promise { + let pPromise = new Promise((resolve: ResolveCallback, reject: RejectCallback): void => { - let p = taskpool.execute((): CommonEventSubscribeInfo => { return this.nativeGetSubscribeInfo(); }); + let p = taskpool.execute((): CommonEventSubscribeInfo|null => { return this.nativeGetSubscribeInfo(); }); p.then((data: NullishType): void => { - let ret : CommonEventSubscribeInfo = data as CommonEventSubscribeInfo; - resolve(ret); + resolve(data as CommonEventSubscribeInfo|null); }, (error: Error): void => { reject(error); }); @@ -459,7 +456,7 @@ class CommonEventSubscriberInner implements CommonEventSubscriber { return pPromise; } - public getSubscribeInfoSync(): CommonEventSubscribeInfo { + public getSubscribeInfoSync(): CommonEventSubscribeInfo|null { return this.nativeGetSubscribeInfo(); } diff --git a/interfaces/kits/ani/common_event/include/ani_common_event_utils.h b/interfaces/kits/ani/common_event/include/ani_common_event_utils.h index 4a56433391ee84207df676d3e760a3b77de57526..cd61c3c90cbc084cf84071b786be1260e3c5a25d 100644 --- a/interfaces/kits/ani/common_event/include/ani_common_event_utils.h +++ b/interfaces/kits/ani/common_event/include/ani_common_event_utils.h @@ -56,6 +56,7 @@ public: static void CreateBusinessErrorObject(ani_env* env, ani_object &object, int32_t code, const std::string &message); static ani_object GetAniStringArray(ani_env *env, std::vector strs); static ani_object newArrayClass(ani_env *env, int length); + static ani_object GetNullObject(ani_env *env); }; } // namespace EventManagerFwkAni } // namespace OHOS diff --git a/interfaces/kits/ani/common_event/src/ani_common_event.cpp b/interfaces/kits/ani/common_event/src/ani_common_event.cpp index 5559c1e37081402393248ebe45974986e062db03..17441afa0642f4dd03d41406f532cc6c5b9d6582 100644 --- a/interfaces/kits/ani/common_event/src/ani_common_event.cpp +++ b/interfaces/kits/ani/common_event/src/ani_common_event.cpp @@ -131,20 +131,21 @@ ani_ref CreateSubscriberRef(ani_env* env, SubscriberInstanceWrapper *subscriberW static ani_ref createSubscriberExecute(ani_env* env, ani_object infoObject) { + ani_object nullObj = AniCommonEventUtils::GetNullObject(env); CommonEventSubscribeInfo subscribeInfo; AniCommonEventUtils::ConvertCommonEventSubscribeInfo(env, infoObject, subscribeInfo); subscribeInfo.SetThreadMode(EventFwk::CommonEventSubscribeInfo::ThreadMode::HANDLER); auto wrapper = new (std::nothrow) SubscriberInstanceWrapper(subscribeInfo); if (wrapper == nullptr) { EVENT_LOGE("null wrapper"); - return nullptr; + return nullObj; } ani_ref subscriberObj = CreateSubscriberRef(env, wrapper); if (subscriberObj == nullptr) { EVENT_LOGE("null subscriberObj"); delete wrapper; wrapper = nullptr; - return nullptr; + return nullObj; } return subscriberObj; } @@ -965,18 +966,15 @@ static ani_object getSubscribeInfo(ani_env *env, ani_object object) EVENT_LOGD("subscriberInstance getSubscribeInfo."); auto subscriberInstance = GetSubscriber(env, object); ani_object infoObject {}; + ani_object nullObj = AniCommonEventUtils::GetNullObject(env); if (subscriberInstance == nullptr) { EVENT_LOGE("subscriberInstance is null."); - ani_ref nullObject; - env->GetNull(&nullObject); - return static_cast(nullObject); + return nullObj; } AniCommonEventUtils::GetCommonEventSubscribeInfoToEts(env, subscriberInstance, infoObject); if (infoObject == nullptr) { EVENT_LOGE("infoObject is null."); - ani_ref nullObject; - env->GetNull(&nullObject); - return static_cast(nullObject); + return nullObj; } return infoObject; } @@ -1038,8 +1036,8 @@ static std::array commonEventManagerMethods = { "C{std.core.String}iC{commonEvent.commonEventPublishData.CommonEventPublishData}:i", reinterpret_cast(OHOS::EventManagerFwkAni::publishAsUserWithOptionsExecute) }, ani_native_function { "createSubscriberExecute", - "C{commonEvent.commonEventSubscribeInfo.CommonEventSubscribeInfo}:C{commonEvent.commonEventSubscriber." - "CommonEventSubscriber}", + "C{commonEvent.commonEventSubscribeInfo.CommonEventSubscribeInfo}:X{C{commonEvent.commonEventSubscriber." + "CommonEventSubscriber}N}", reinterpret_cast(OHOS::EventManagerFwkAni::createSubscriberExecute) }, ani_native_function { "subscribeExecute", nullptr, reinterpret_cast(OHOS::EventManagerFwkAni::subscribeExecute) }, diff --git a/interfaces/kits/ani/common_event/src/ani_common_event_utils.cpp b/interfaces/kits/ani/common_event/src/ani_common_event_utils.cpp index f7a09ab952735a40f50c444a69d3353f7c784972..5af452535c46d1dfd84bd25e2826b1a44f31dae8 100644 --- a/interfaces/kits/ani/common_event/src/ani_common_event_utils.cpp +++ b/interfaces/kits/ani/common_event/src/ani_common_event_utils.cpp @@ -26,6 +26,13 @@ using namespace OHOS::EventFwk; using namespace OHOS::AppExecFwk; using namespace arkts::ani_signature; +ani_object AniCommonEventUtils::GetNullObject(ani_env *env) +{ + ani_ref nullRef; + env->GetNull(&nullRef); + return static_cast(nullRef); +} + void AniCommonEventUtils::GetStdString(ani_env* env, ani_string str, std::string& result) { auto ret = ANI_ERROR;