1 /*
2 * Copyright (c) 2022-2024 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 "datetime_manager_addon.h"
16 #include "edm_log.h"
17
18 #include "napi_edm_adapter.h"
19 using namespace OHOS::EDM;
20
Init(napi_env env,napi_value exports)21 napi_value DatetimeManagerAddon::Init(napi_env env, napi_value exports)
22 {
23 napi_property_descriptor property[] = {
24 DECLARE_NAPI_FUNCTION("setDateTime", SetDateTime),
25 DECLARE_NAPI_FUNCTION("disallowModifyDateTime", DisallowModifyDateTime),
26 DECLARE_NAPI_FUNCTION("isModifyDateTimeDisallowed", IsModifyDateTimeDisallowed),
27 };
28 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(property) / sizeof(property[0]), property));
29 return exports;
30 }
31
SetDateTime(napi_env env,napi_callback_info info)32 napi_value DatetimeManagerAddon::SetDateTime(napi_env env, napi_callback_info info)
33 {
34 AddonMethodSign addonMethodSign;
35 addonMethodSign.name = "SetDateTime";
36 addonMethodSign.argsType = {EdmAddonCommonType::ELEMENT, EdmAddonCommonType::INT64};
37 addonMethodSign.methodAttribute = MethodAttribute::HANDLE;
38 addonMethodSign.apiVersionTag = EdmConstants::PERMISSION_TAG_VERSION_11;
39 return AddonMethodAdapter(env, info, addonMethodSign, NativeSetDateTime, NativeVoidCallbackComplete);
40 }
41
NativeSetDateTime(napi_env env,void * data)42 void DatetimeManagerAddon::NativeSetDateTime(napi_env env, void *data)
43 {
44 EDMLOGI("NAPI_NativeSetDateTime called");
45 if (data == nullptr) {
46 EDMLOGE("data is nullptr");
47 return;
48 }
49 AdapterAddonData *asyncCallbackInfo = static_cast<AdapterAddonData *>(data);
50 auto dateTimeManagerProxy = DatetimeManagerProxy::GetDatetimeManagerProxy();
51 if (dateTimeManagerProxy == nullptr) {
52 EDMLOGE("can not get DatetimeManagerProxy");
53 return;
54 }
55 asyncCallbackInfo->ret = dateTimeManagerProxy->SetDateTime(asyncCallbackInfo->data);
56 }
57
DisallowModifyDateTime(napi_env env,napi_callback_info info)58 napi_value DatetimeManagerAddon::DisallowModifyDateTime(napi_env env, napi_callback_info info)
59 {
60 AddonMethodSign addonMethodSign;
61 addonMethodSign.name = "DisallowModifyDateTime";
62 addonMethodSign.argsType = {EdmAddonCommonType::ELEMENT, EdmAddonCommonType::BOOLEAN};
63 addonMethodSign.methodAttribute = MethodAttribute::HANDLE;
64 addonMethodSign.apiVersionTag = EdmConstants::PERMISSION_TAG_VERSION_11;
65 return AddonMethodAdapter(env, info, addonMethodSign, NativeDisallowModifyDateTime, NativeVoidCallbackComplete);
66 }
67
NativeDisallowModifyDateTime(napi_env env,void * data)68 void DatetimeManagerAddon::NativeDisallowModifyDateTime(napi_env env, void *data)
69 {
70 EDMLOGI("NAPI_NativeDisallowModifyDateTime called");
71 if (data == nullptr) {
72 EDMLOGE("data is nullptr");
73 return;
74 }
75 AdapterAddonData *asyncCallbackInfo =
76 static_cast<AdapterAddonData *>(data);
77 auto dateTimeManagerProxy = DatetimeManagerProxy::GetDatetimeManagerProxy();
78 if (dateTimeManagerProxy == nullptr) {
79 EDMLOGE("can not get DatetimeManagerProxy");
80 return;
81 }
82 asyncCallbackInfo->ret = dateTimeManagerProxy->DisallowModifyDateTime(asyncCallbackInfo->data);
83 }
84
IsModifyDateTimeDisallowed(napi_env env,napi_callback_info info)85 napi_value DatetimeManagerAddon::IsModifyDateTimeDisallowed(napi_env env, napi_callback_info info)
86 {
87 AddonMethodSign addonMethodSign;
88 addonMethodSign.name = "IsModifyDateTimeDisallowed";
89 addonMethodSign.argsType = {EdmAddonCommonType::ELEMENT_NULL};
90 addonMethodSign.methodAttribute = MethodAttribute::GET;
91 addonMethodSign.apiVersionTag = EdmConstants::PERMISSION_TAG_VERSION_11;
92 return AddonMethodAdapter(env, info, addonMethodSign, NativeIsModifyDateTimeDisallowed, NativeBoolCallbackComplete);
93 }
94
NativeIsModifyDateTimeDisallowed(napi_env env,void * data)95 void DatetimeManagerAddon::NativeIsModifyDateTimeDisallowed(napi_env env, void *data)
96 {
97 EDMLOGI("NativeIsModifyDateTimeDisallowed called");
98 if (data == nullptr) {
99 EDMLOGE("data is nullptr");
100 return;
101 }
102 AdapterAddonData *asyncCallbackInfo =
103 static_cast<AdapterAddonData *>(data);
104 auto dateTimeManagerProxy = DatetimeManagerProxy::GetDatetimeManagerProxy();
105 if (dateTimeManagerProxy == nullptr) {
106 EDMLOGE("can not get DatetimeManagerProxy");
107 return;
108 }
109 asyncCallbackInfo->ret = dateTimeManagerProxy->IsModifyDateTimeDisallowed(asyncCallbackInfo->data,
110 asyncCallbackInfo->boolRet);
111 }
112
113 static napi_module g_dateTimeManagerModule = {
114 .nm_version = 1,
115 .nm_flags = 0,
116 .nm_filename = nullptr,
117 .nm_register_func = DatetimeManagerAddon::Init,
118 .nm_modname = "enterprise.dateTimeManager",
119 .nm_priv = ((void *)0),
120 .reserved = { 0 },
121 };
122
DateTimeManagerRegister()123 extern "C" __attribute__((constructor)) void DateTimeManagerRegister()
124 {
125 napi_module_register(&g_dateTimeManagerModule);
126 }