1 /* 2 * Copyright (c) 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 16 #ifndef OHOS_ABILITY_RUNTIME_CJ_APPLICATION_CONTEXT_H 17 #define OHOS_ABILITY_RUNTIME_CJ_APPLICATION_CONTEXT_H 18 19 #include <cstdint> 20 #include <shared_mutex> 21 22 #include "cj_macro.h" 23 #include "cj_environment_callback.h" 24 #include "cj_ability_lifecycle_callback.h" 25 #include "cj_application_state_change_callback.h" 26 #include "cj_common_ffi.h" 27 #include "ffi_remote_data.h" 28 #include "ability_delegator_registry.h" 29 30 namespace OHOS { 31 namespace ApplicationContextCJ { 32 using namespace OHOS::AbilityRuntime; 33 34 class CJApplicationContext : public FFI::FFIData { 35 public: CJApplicationContext(std::weak_ptr<AbilityRuntime::ApplicationContext> &&applicationContext)36 explicit CJApplicationContext(std::weak_ptr<AbilityRuntime::ApplicationContext> &&applicationContext) 37 : applicationContext_(std::move(applicationContext)) {}; 38 39 int GetArea(); 40 std::shared_ptr<AppExecFwk::ApplicationInfo> GetApplicationInfo(); 41 void RegisterAbilityLifecycleCallback(const std::shared_ptr<CjAbilityLifecycleCallback> &abilityLifecycleCallback); 42 void UnregisterAbilityLifecycleCallback( 43 const std::shared_ptr<CjAbilityLifecycleCallback> &abilityLifecycleCallback); 44 bool IsAbilityLifecycleCallbackEmpty(); 45 void DispatchOnAbilityCreate(const int64_t &ability); 46 void DispatchOnWindowStageCreate(const int64_t &ability, WindowStagePtr windowStage); 47 void DispatchWindowStageFocus(const int64_t &ability, WindowStagePtr windowStage); 48 void DispatchWindowStageUnfocus(const int64_t &ability, WindowStagePtr windowStage); 49 void DispatchOnWindowStageDestroy(const int64_t &ability, WindowStagePtr windowStage); 50 void DispatchOnAbilityDestroy(const int64_t &ability); 51 void DispatchOnAbilityForeground(const int64_t &ability); 52 void DispatchOnAbilityBackground(const int64_t &ability); 53 void DispatchOnAbilityContinue(const int64_t &ability); 54 // optional callbacks 55 void DispatchOnAbilityWillCreate(const int64_t &ability); 56 void DispatchOnWindowStageWillCreate(const int64_t &ability, WindowStagePtr windowStage); 57 void DispatchOnWindowStageWillDestroy(const int64_t &ability, WindowStagePtr windowStage); 58 void DispatchOnAbilityWillDestroy(const int64_t &ability); 59 void DispatchOnAbilityWillForeground(const int64_t &ability); 60 void DispatchOnAbilityWillBackground(const int64_t &ability); 61 void DispatchOnNewWant(const int64_t &ability); 62 void DispatchOnWillNewWant(const int64_t &ability); 63 void DispatchOnAbilityWillContinue(const int64_t &ability); 64 void DispatchOnWindowStageWillRestore(const int64_t &ability, WindowStagePtr windowStage); 65 void DispatchOnWindowStageRestore(const int64_t &ability, WindowStagePtr windowStage); 66 void DispatchOnAbilityWillSaveState(const int64_t &ability); 67 void DispatchOnAbilitySaveState(const int64_t &ability); 68 69 int32_t OnOnEnvironment(void (*cfgCallback)(AbilityRuntime::CConfiguration), 70 void (*memCallback)(int32_t), bool isSync, int32_t *errCode); 71 int32_t OnOnAbilityLifecycle(CArrI64 cFuncIds, bool isSync, int32_t *errCode); 72 int32_t OnOnApplicationStateChange(void (*foregroundCallback)(void), 73 void (*backgroundCallback)(void), int32_t *errCode); 74 void OnOffEnvironment(int32_t callbackId, int32_t *errCode); 75 void OnOffAbilityLifecycle(int32_t callbackId, int32_t *errCode); 76 void OnOffApplicationStateChange(int32_t callbackId, int32_t *errCode); 77 static CJApplicationContext* GetCJApplicationContext( 78 std::weak_ptr<AbilityRuntime::ApplicationContext> &&applicationContext); 79 private: 80 std::weak_ptr<AbilityRuntime::ApplicationContext> applicationContext_; 81 std::shared_ptr<AbilityRuntime::CjAbilityLifecycleCallback> callback_; 82 std::shared_ptr<AbilityRuntime::CjEnvironmentCallback> envCallback_; 83 std::shared_ptr<CjApplicationStateChangeCallback> applicationStateCallback_; 84 std::mutex applicationStateCallbackLock_; 85 std::recursive_mutex callbackLock_; 86 static std::vector<std::shared_ptr<CjAbilityLifecycleCallback>> callbacks_; 87 static CJApplicationContext* cjApplicationContext_; 88 }; 89 90 extern "C" { 91 struct CApplicationInfo { 92 const char* name; 93 const char* bundleName; 94 }; 95 96 CJ_EXPORT int64_t FFIGetArea(int64_t id); 97 CJ_EXPORT CApplicationInfo* FFICJApplicationInfo(int64_t id); 98 CJ_EXPORT int32_t FfiCJApplicationContextOnOnEnvironment(int64_t id, void (*cfgCallback)(CConfiguration), 99 void (*memCallback)(int32_t), int32_t *errCode); 100 CJ_EXPORT int32_t FfiCJApplicationContextOnOnAbilityLifecycle(int64_t id, CArrI64 cFuncIds, int32_t *errCode); 101 CJ_EXPORT int32_t FfiCJApplicationContextOnOnApplicationStateChange(int64_t id, void (*foregroundCallback)(void), 102 void (*backgroundCallback)(void), int32_t *errCode); 103 CJ_EXPORT void FfiCJApplicationContextOnOff(int64_t id, const char* type, int32_t callbackId, int32_t *errCode); 104 }; 105 } 106 } 107 #endif // OHOS_ABILITY_RUNTIME_CJ_APPLICATION_CONTEXT_H