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