1 /*
2 * Copyright (c) 2021 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
16 #include "bridge/declarative_frontend/jsview/js_environment.h"
17
18 #include "base/memory/referenced.h"
19 #include "core/common/ace_application_info.h"
20 #include "core/common/container.h"
21 #include "core/common/environment/environment_proxy.h"
22 #include "frameworks/base/i18n/localization.h"
23 #include "frameworks/bridge/declarative_frontend/engine/js_ref_ptr.h"
24 #include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h"
25
26 namespace OHOS::Ace::Framework {
27
JSBind(BindingTarget globalObj)28 void JSEnvironment::JSBind(BindingTarget globalObj)
29 {
30 JSClass<JSEnvironment>::Declare("EnvironmentSetting");
31 JSClass<JSEnvironment>::CustomMethod("getAccessibilityEnabled", &JSEnvironment::GetAccessibilityEnabled);
32 JSClass<JSEnvironment>::CustomMethod("getColorMode", &JSEnvironment::GetColorMode);
33 JSClass<JSEnvironment>::CustomMethod("getFontScale", &JSEnvironment::GetFontScale);
34 JSClass<JSEnvironment>::CustomMethod("getFontWeightScale", &JSEnvironment::GetFontWeightScale);
35 JSClass<JSEnvironment>::CustomMethod("getLayoutDirection", &JSEnvironment::GetLayoutDirection);
36 JSClass<JSEnvironment>::CustomMethod("getLanguageCode", &JSEnvironment::GetLanguageCode);
37 JSClass<JSEnvironment>::CustomMethod("onValueChanged", &JSEnvironment::onChange);
38 JSClass<JSEnvironment>::Bind(globalObj, JSEnvironment::ConstructorCallback, JSEnvironment::DestructorCallback);
39 }
40
ConstructorCallback(const JSCallbackInfo & args)41 void JSEnvironment::ConstructorCallback(const JSCallbackInfo& args)
42 {
43 auto environment = Referenced::MakeRefPtr<JSEnvironment>();
44 environment->IncRefCount();
45 args.SetReturnValue(Referenced::RawPtr(environment));
46 }
47
DestructorCallback(JSEnvironment * environment)48 void JSEnvironment::DestructorCallback(JSEnvironment* environment)
49 {
50 if (environment != nullptr) {
51 environment->DecRefCount();
52 }
53 }
54
GetAccessibilityEnabled(const JSCallbackInfo & args)55 void JSEnvironment::GetAccessibilityEnabled(const JSCallbackInfo& args)
56 {
57 std::string value;
58 #if defined(PREVIEW)
59 value = "false";
60 #else
61 auto container = Container::Current();
62 if (!container) {
63 LOGW("container is null");
64 return;
65 }
66 auto executor = container->GetTaskExecutor();
67 value = EnvironmentProxy::GetInstance()->GetEnvironment(executor)->GetAccessibilityEnabled();
68 #endif
69 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(args.GetExecutionContext());
70 auto returnValue = JSVal(ToJSValue(value));
71 auto returnPtr = JSRef<JSVal>::Make(returnValue);
72 args.SetReturnValue(returnPtr);
73 }
74
GetColorMode(const JSCallbackInfo & args)75 void JSEnvironment::GetColorMode(const JSCallbackInfo& args)
76 {
77 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(args.GetExecutionContext());
78 auto colorMode = SystemProperties::GetColorMode();
79 auto returnValue = JSVal(ToJSValue(static_cast<int32_t>(colorMode)));
80 auto returnPtr = JSRef<JSVal>::Make(returnValue);
81 args.SetReturnValue(returnPtr);
82 }
83
onChange(const JSCallbackInfo & args)84 void JSEnvironment::onChange(const JSCallbackInfo& args)
85 {
86 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(args.GetExecutionContext());
87 }
88
GetFontScale(const JSCallbackInfo & args)89 void JSEnvironment::GetFontScale(const JSCallbackInfo& args)
90 {
91 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(args.GetExecutionContext());
92 auto container = Container::Current();
93 if (!container) {
94 LOGW("container is null");
95 return;
96 }
97 auto context = container->GetPipelineContext();
98 CHECK_NULL_VOID(context);
99 auto returnValue = JSVal(ToJSValue(context->GetFontScale()));
100 auto returnPtr = JSRef<JSVal>::Make(returnValue);
101 args.SetReturnValue(returnPtr);
102 }
103
GetFontWeightScale(const JSCallbackInfo & args)104 void JSEnvironment::GetFontWeightScale(const JSCallbackInfo& args)
105 {
106 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(args.GetExecutionContext());
107 auto weightScale = SystemProperties::GetFontWeightScale();
108 auto returnValue = JSVal(ToJSValue(weightScale));
109 auto returnPtr = JSRef<JSVal>::Make(returnValue);
110 args.SetReturnValue(returnPtr);
111 }
112
GetLayoutDirection(const JSCallbackInfo & args)113 void JSEnvironment::GetLayoutDirection(const JSCallbackInfo& args)
114 {
115 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(args.GetExecutionContext());
116 auto isRTL = AceApplicationInfo::GetInstance().IsRightToLeft();
117 auto value = isRTL ? 0 : 1;
118 auto returnValue = JSVal(ToJSValue(value));
119 auto returnPtr = JSRef<JSVal>::Make(returnValue);
120 args.SetReturnValue(returnPtr);
121 }
122
GetLanguageCode(const JSCallbackInfo & args)123 void JSEnvironment::GetLanguageCode(const JSCallbackInfo& args)
124 {
125 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(args.GetExecutionContext());
126 auto container = Container::Current();
127 if (!container) {
128 LOGW("Initialize is not complete, cannot get the language");
129 return;
130 }
131 auto location = Localization::GetInstance();
132 auto language = location->GetLanguage();
133 auto returnValue = JSVal(ToJSValue(language));
134 auto returnPtr = JSRef<JSVal>::Make(returnValue);
135 args.SetReturnValue(returnPtr);
136 }
137
138 } // namespace OHOS::Ace::Framework
139