1 /*
2  * Copyright (c) 2022-2023 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 #ifndef OHOS_ABILITY_RUNTIME_JS_APPLICATION_CONTEXT_UTILS_H
17 #define OHOS_ABILITY_RUNTIME_JS_APPLICATION_CONTEXT_UTILS_H
18 
19 #include <memory>
20 #include <mutex>
21 
22 #include "ability_lifecycle_callback.h"
23 #include "application_context.h"
24 #include "application_state_change_callback.h"
25 #include "js_ability_auto_startup_callback.h"
26 #include "native_engine/native_engine.h"
27 #include "running_process_info.h"
28 
29 namespace OHOS {
30 namespace AbilityRuntime {
31 struct NapiCallbackInfo;
32 namespace {
33 enum JsAppProcessState {
34     STATE_CREATE,
35     STATE_FOREGROUND,
36     STATE_ACTIVE,
37     STATE_BACKGROUND,
38     STATE_DESTROY
39 };
40 }
41 class JsApplicationContextUtils {
42 public:
JsApplicationContextUtils(std::weak_ptr<ApplicationContext> && applicationContext)43     explicit JsApplicationContextUtils(std::weak_ptr<ApplicationContext> &&applicationContext)
44         : applicationContext_(std::move(applicationContext))
45     {
46     }
47     virtual ~JsApplicationContextUtils() = default;
48     static void Finalizer(napi_env env, void *data, void *hint);
49     static napi_value RegisterAbilityLifecycleCallback(napi_env env, napi_callback_info info);
50     static napi_value UnregisterAbilityLifecycleCallback(napi_env env, napi_callback_info info);
51     static napi_value RegisterEnvironmentCallback(napi_env env, napi_callback_info info);
52     static napi_value UnregisterEnvironmentCallback(napi_env env, napi_callback_info info);
53     static napi_value On(napi_env env, napi_callback_info info);
54     static napi_value Off(napi_env env, napi_callback_info info);
55     static napi_value CreateBundleContext(napi_env env, napi_callback_info info);
56     static napi_value SwitchArea(napi_env env, napi_callback_info info);
57     static napi_value GetArea(napi_env env, napi_callback_info info);
58     static napi_value CreateModuleContext(napi_env env, napi_callback_info info);
59     static napi_value CreateSystemHspModuleResourceManager(napi_env env, napi_callback_info info);
60     static napi_value CreateModuleResourceManager(napi_env env, napi_callback_info info);
61     static napi_value SetAutoStartup(napi_env env, napi_callback_info info);
62     static napi_value CancelAutoStartup(napi_env env, napi_callback_info info);
63     static napi_value IsAutoStartup(napi_env env, napi_callback_info info);
64 
65     napi_value OnRegisterAbilityLifecycleCallback(napi_env env, NapiCallbackInfo& info);
66     napi_value OnUnregisterAbilityLifecycleCallback(napi_env env, NapiCallbackInfo& info);
67 
68     napi_value OnRegisterEnvironmentCallback(napi_env env, NapiCallbackInfo& info);
69     napi_value OnUnregisterEnvironmentCallback(napi_env env, NapiCallbackInfo& info);
70 
71     napi_value OnOn(napi_env env, NapiCallbackInfo& info);
72     napi_value OnOff(napi_env env, NapiCallbackInfo& info);
73     napi_value OnOnAbilityLifecycle(napi_env env, NapiCallbackInfo& info, bool isSync);
74     napi_value OnOffAbilityLifecycle(napi_env env, NapiCallbackInfo& info, int32_t callbackId);
75     napi_value OnOffAbilityLifecycleEventSync(napi_env env, NapiCallbackInfo& info, int32_t callbackId);
76     napi_value OnOnEnvironment(napi_env env, NapiCallbackInfo& info, bool isSync);
77     napi_value OnOffEnvironment(napi_env env, NapiCallbackInfo& info, int32_t callbackId);
78     napi_value OnOffEnvironmentEventSync(
79         napi_env env, NapiCallbackInfo& info, int32_t callbackId);
80     napi_value OnOnApplicationStateChange(napi_env env, NapiCallbackInfo& info);
81     napi_value OnOffApplicationStateChange(napi_env env, NapiCallbackInfo& info);
82 
83     napi_value OnGetCacheDir(napi_env env, NapiCallbackInfo& info);
84     napi_value OnGetTempDir(napi_env env, NapiCallbackInfo& info);
85     napi_value OnGetResourceDir(napi_env env, NapiCallbackInfo& info);
86     napi_value OnGetFilesDir(napi_env env, NapiCallbackInfo& info);
87     napi_value OnGetDistributedFilesDir(napi_env env, NapiCallbackInfo& info);
88     napi_value OnGetDatabaseDir(napi_env env, NapiCallbackInfo& info);
89     napi_value OnGetPreferencesDir(napi_env env, NapiCallbackInfo& info);
90     napi_value OnGetGroupDir(napi_env env, NapiCallbackInfo& info);
91     napi_value OnGetBundleCodeDir(napi_env env, NapiCallbackInfo& info);
92     napi_value OnGetCloudFileDir(napi_env env, NapiCallbackInfo& info);
93     napi_value OnKillProcessBySelf(napi_env env, NapiCallbackInfo& info);
94     napi_value OnGetRunningProcessInformation(napi_env env, NapiCallbackInfo& info);
95     napi_value OnSetColorMode(napi_env env, NapiCallbackInfo& info);
96     napi_value OnSetLanguage(napi_env env, NapiCallbackInfo& info);
97     napi_value OnSetFont(napi_env env, NapiCallbackInfo& info);
98     napi_value OnClearUpApplicationData(napi_env env, NapiCallbackInfo& info);
99     napi_value OnRestartApp(napi_env env, NapiCallbackInfo& info);
100     napi_value OnSetSupportedProcessCacheSelf(napi_env env, NapiCallbackInfo& info);
101     napi_value OnPreloadUIExtensionAbility(napi_env env, NapiCallbackInfo& info);
102     napi_value OnGetCurrentAppCloneIndex(napi_env env, NapiCallbackInfo& info);
103     napi_value OnGetCurrentInstanceKey(napi_env env, NapiCallbackInfo& info);
104     napi_value OnGetAllRunningInstanceKeys(napi_env env, NapiCallbackInfo& info);
105     napi_value OnSetFontSizeScale(napi_env env, NapiCallbackInfo& info);
106 
107     static napi_value GetCacheDir(napi_env env, napi_callback_info info);
108     static napi_value GetTempDir(napi_env env, napi_callback_info info);
109     static napi_value GetResourceDir(napi_env env, napi_callback_info info);
110     static napi_value GetFilesDir(napi_env env, napi_callback_info info);
111     static napi_value GetDistributedFilesDir(napi_env env, napi_callback_info info);
112     static napi_value GetDatabaseDir(napi_env env, napi_callback_info info);
113     static napi_value GetPreferencesDir(napi_env env, napi_callback_info info);
114     static napi_value GetGroupDir(napi_env env, napi_callback_info info);
115     static napi_value GetBundleCodeDir(napi_env env, napi_callback_info info);
116     static napi_value GetCloudFileDir(napi_env env, napi_callback_info info);
117     static napi_value GetApplicationContext(napi_env env, napi_callback_info info);
118     static napi_value KillProcessBySelf(napi_env env, napi_callback_info info);
119     static napi_value SetColorMode(napi_env env, napi_callback_info info);
120     static napi_value SetLanguage(napi_env env, napi_callback_info info);
121     static napi_value SetFont(napi_env env, napi_callback_info info);
122     static napi_value ClearUpApplicationData(napi_env env, napi_callback_info info);
123     static napi_value GetRunningProcessInformation(napi_env env, napi_callback_info info);
124     static napi_value CreateJsApplicationContext(napi_env env);
125     static napi_value RestartApp(napi_env env, napi_callback_info info);
126     static napi_value SetSupportedProcessCacheSelf(napi_env env, napi_callback_info info);
127     static napi_value PreloadUIExtensionAbility(napi_env env, napi_callback_info info);
128     static napi_value GetCurrentAppCloneIndex(napi_env env, napi_callback_info info);
129     static napi_value GetCurrentInstanceKey(napi_env env, napi_callback_info info);
130     static napi_value GetAllRunningInstanceKeys(napi_env env, napi_callback_info info);
131     static napi_value SetFontSizeScale(napi_env env, napi_callback_info info);
132 
133 protected:
134     std::weak_ptr<ApplicationContext> applicationContext_;
135 
136 private:
137     napi_value OnCreateBundleContext(napi_env env, NapiCallbackInfo& info);
138     napi_value OnCreateModuleResourceManager(napi_env env, NapiCallbackInfo& info);
139     napi_value OnSwitchArea(napi_env env, NapiCallbackInfo& info);
140     napi_value OnGetArea(napi_env env, NapiCallbackInfo& info);
141     napi_value OnCreateModuleContext(napi_env env, NapiCallbackInfo& info);
142     napi_value CreateJsModuleContext(napi_env env, const std::shared_ptr<Context>& moduleContext);
143     napi_value OnCreateSystemHspModuleResourceManager(napi_env env, NapiCallbackInfo& info);
144     napi_value OnGetApplicationContext(napi_env env, NapiCallbackInfo& info);
145     bool CheckCallerIsSystemApp();
146     static void BindNativeApplicationContextOne(napi_env env, napi_value object);
147     static void BindNativeApplicationContextTwo(napi_env env, napi_value object);
148     static JsAppProcessState ConvertToJsAppProcessState(
149         const AppExecFwk::AppProcessState &appProcessState, const bool &isFocused);
150     std::shared_ptr<JsAbilityLifecycleCallback> callback_;
151     std::shared_ptr<JsEnvironmentCallback> envCallback_;
152     std::shared_ptr<JsApplicationStateChangeCallback> applicationStateCallback_;
153     std::mutex applicationStateCallbackLock_;
154     sptr<JsAbilityAutoStartupCallBack> jsAutoStartupCallback_;
155 };
156 }  // namespace AbilityRuntime
157 }  // namespace OHOS
158 #endif  // OHOS_ABILITY_RUNTIME_JS_APPLICATION_CONTEXT_UTILS_H
159