• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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