1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "sts_template.h"
16
17 #include "sts_common.h"
18 #include "want_params.h"
19 #include "ani_common_want.h"
20
21 namespace OHOS {
22 namespace NotificationSts {
23 using namespace OHOS::AAFwk;
24 using namespace OHOS::AppExecFwk;
25
UnwrapNotificationTemplate(ani_env * env,ani_object aniObj,NotificationTemplate & tmplate)26 ani_status UnwrapNotificationTemplate(ani_env *env, ani_object aniObj, NotificationTemplate& tmplate)
27 {
28 if (env == nullptr || aniObj == nullptr) {
29 ANS_LOGE("invalid parameter value");
30 return ANI_ERROR;
31 }
32 ani_status status = ANI_ERROR;
33 ani_ref nameRef;
34 if (ANI_OK != (status = env->Object_CallMethodByName_Ref(aniObj, "<get>name", ":Lstd/core/String;", &nameRef))) {
35 ANS_LOGE("Object_CallMethodByName_Ref faild. status %{public}d", status);
36 return status;
37 }
38 std::string nameStr = "";
39 if (ANI_OK != (status = GetStringByAniString(env, static_cast<ani_string>(nameRef), nameStr))) {
40 ANS_LOGE("GetStringByAniString faild. status %{public}d", status);
41 return status;
42 }
43 ani_ref dataRef;
44 if (ANI_OK != (status = env->Object_GetPropertyByName_Ref(aniObj, "data", &dataRef))) {
45 ANS_LOGE("Object_GetPropertyByName_Ref 'data' faild. status %{public}d", status);
46 return status;
47 }
48 WantParams wantParams;
49 if (!UnwrapWantParams(env, dataRef, wantParams)) {
50 ANS_LOGE("UnwrapWantParams faild");
51 return ANI_ERROR;
52 }
53 tmplate.SetTemplateName(nameStr);
54 tmplate.SetTemplateData(std::make_shared<WantParams>(wantParams));
55 return status;
56 }
57
WrapNotificationTemplate(ani_env * env,const std::shared_ptr<NotificationTemplate> & templ)58 ani_object WrapNotificationTemplate(ani_env* env, const std::shared_ptr<NotificationTemplate> &templ)
59 {
60 if (templ == nullptr || env == nullptr) {
61 ANS_LOGE("invalid parameter value");
62 return nullptr;
63 }
64 ani_object templateObject = nullptr;
65 ani_class templateCls = nullptr;
66 ani_status status = ANI_OK;
67 if (!CreateClassObjByClassName(env,
68 "Lnotification/notificationTemplate/NotificationTemplateInner;", templateCls, templateObject)) {
69 ANS_LOGE("Create faild");
70 return nullptr;
71 }
72 // name: string;
73 ani_string stringValue = nullptr;
74 if (ANI_OK != (status = GetAniStringByString(env, templ->GetTemplateName(), stringValue))) {
75 ANS_LOGE("GetAniStringByString faild. status %{public}d", status);
76 return nullptr;
77 }
78 if (!CallSetter(env, templateCls, templateObject, "name", stringValue)) {
79 ANS_LOGE("set 'name' faild.");
80 return nullptr;
81 }
82 // data: Record<string, Object>;
83 std::shared_ptr<AAFwk::WantParams> data = templ->GetTemplateData();
84 if (data) {
85 ani_ref valueRef = OHOS::AppExecFwk::WrapWantParams(env, *data);
86 if (valueRef == nullptr) {
87 ANS_LOGE("WrapWantParams faild");
88 return nullptr;
89 }
90 if (!CallSetter(env, templateCls, templateObject, "data", valueRef)) {
91 ANS_LOGE("set 'data' faild");
92 return nullptr;
93 }
94 }
95 return templateObject;
96 }
97
98 } // namespace NotificationSts
99 } // OHOS
100