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_ABILITY_DELEGATOR_FFI_H 17 #define OHOS_ABILITY_RUNTIME_CJ_ABILITY_DELEGATOR_FFI_H 18 19 #include <cstdint> 20 21 #include "ability_delegator_registry.h" 22 #include "cj_ability_monitor.h" 23 #include "cj_ability_stage_monitor.h" 24 #include "cj_macro.h" 25 #include "ffi_remote_data.h" 26 #include "cj_ability_delegator_impl.h" 27 28 using WantHandle = void*; 29 namespace OHOS { 30 namespace AbilityDelegatorCJ { 31 32 class CJAbilityDelegator : public FFI::FFIData { 33 public: 34 explicit CJAbilityDelegator(const std::shared_ptr<AppExecFwk::CJAbilityDelegatorImpl>& abilityDelegator); 35 36 int32_t StartAbility(const AAFwk::Want& want); 37 std::shared_ptr<AppExecFwk::ShellCmdResult> ExecuteShellCommand(const char* cmd, int64_t timeoutSec); 38 std::shared_ptr<AbilityRuntime::ApplicationContext> GetAppContext(); 39 void FinishTest(const char* msg, int64_t code); 40 41 void AddAbilityMonitor(const std::shared_ptr<CJAbilityMonitor>& abilityMonitor); 42 void RemoveAbilityMonitor(const std::shared_ptr<CJAbilityMonitor>& abilityMonitor); 43 std::shared_ptr<AppExecFwk::ACJDelegatorAbilityProperty> WaitAbilityMonitor( 44 const std::shared_ptr<CJAbilityMonitor>& abilityMonitor); 45 std::shared_ptr<AppExecFwk::ACJDelegatorAbilityProperty> WaitAbilityMonitor( 46 const std::shared_ptr<CJAbilityMonitor>& abilityMonitor, int64_t timeout); 47 void AddAbilityStageMonitor(const std::shared_ptr<CJAbilityStageMonitor>& stageMonitor); 48 void RemoveAbilityStageMonitor(const std::shared_ptr<CJAbilityStageMonitor>& stageMonitor); 49 std::shared_ptr<AppExecFwk::CJDelegatorAbilityStageProperty> WaitAbilityStageMonitor( 50 const std::shared_ptr<CJAbilityStageMonitor>& stageMonitor); 51 std::shared_ptr<AppExecFwk::CJDelegatorAbilityStageProperty> WaitAbilityStageMonitor( 52 const std::shared_ptr<CJAbilityStageMonitor>& stageMonitor, int64_t timeout); 53 54 void Print(const std::string& msg); 55 int64_t GetAbilityState(const sptr<OHOS::IRemoteObject>& remoteObject); 56 std::shared_ptr<AppExecFwk::ACJDelegatorAbilityProperty> GetCurrentTopAbility(); 57 bool DoAbilityForeground(const sptr<OHOS::IRemoteObject>& remoteObject); 58 bool DoAbilityBackground(const sptr<OHOS::IRemoteObject>& remoteObject); 59 60 private: 61 std::shared_ptr<AppExecFwk::CJAbilityDelegatorImpl> delegator_; 62 }; 63 64 class CJShellCmdResult : public FFI::FFIData { 65 public: CJShellCmdResult(std::shared_ptr<AppExecFwk::ShellCmdResult> shellCmdResult)66 explicit CJShellCmdResult(std::shared_ptr<AppExecFwk::ShellCmdResult> shellCmdResult) 67 : shellCmdResultr_(shellCmdResult) {}; 68 int32_t GetExitCode(); 69 std::string GetStdResult(); 70 std::string Dump(); 71 72 private: 73 std::shared_ptr<AppExecFwk::ShellCmdResult> shellCmdResultr_; 74 }; 75 76 extern "C" { 77 struct CJAbilityInfo { 78 const char* abilityName; 79 const char* moduleName; 80 }; 81 82 struct CJAbilityStageInfo { 83 const char* moduleName; 84 const char* srcEntrance; 85 }; 86 87 CJ_EXPORT int32_t FFIAbilityDelegatorDoAbilityForeground(int64_t id, int64_t abilityId, bool* ret); 88 CJ_EXPORT int32_t FFIAbilityDelegatorDoAbilityBackground(int64_t id, int64_t abilityId, bool* ret); 89 CJ_EXPORT int32_t FFIAbilityDelegatorGetCurrentTopAbility(int64_t id, int64_t* abilityId); 90 CJ_EXPORT int32_t FFIAbilityDelegatorGetAbilityState(int64_t id, int64_t abilityId, int64_t* state); 91 CJ_EXPORT int32_t FFIAbilityDelegatorPrint(int64_t id, const char* msg); 92 CJ_EXPORT int32_t FFIAbilityDelegatorAddAbilityMonitor( 93 int64_t id, int64_t monitorId, const char* abilityName, const char* moduleName); 94 CJ_EXPORT int32_t FFIAbilityDelegatorRemoveAbilityMonitor( 95 int64_t id, int64_t monitorId, const char* abilityName, const char* moduleName); 96 CJ_EXPORT int32_t FFIAbilityDelegatorWaitAbilityMonitor( 97 int64_t id, int64_t monitorId, CJAbilityInfo abilityInfo, int64_t* abilityId); 98 CJ_EXPORT int32_t FFIAbilityDelegatorWaitAbilityMonitorWithTimeout( 99 int64_t id, int64_t monitorId, CJAbilityInfo abilityInfo, int64_t timeout, int64_t* abilityId); 100 CJ_EXPORT int32_t FFIAbilityDelegatorAddAbilityStageMonitor( 101 int64_t id, int64_t stageMonitorId, const char* moduleName, const char* srcEntrance); 102 CJ_EXPORT int32_t FFIAbilityDelegatorRemoveAbilityStageMonitor( 103 int64_t id, int64_t stageMonitorId, const char* moduleName, const char* srcEntrance); 104 CJ_EXPORT int32_t FFIAbilityDelegatorWaitAbilityStageMonitor( 105 int64_t id, int64_t stageMonitorId, CJAbilityStageInfo abilityStageInfo, int64_t* abilityStageId); 106 CJ_EXPORT int32_t FFIAbilityDelegatorWaitAbilityStageMonitorWithTimeout( 107 int64_t id, int64_t stageMonitorId, CJAbilityStageInfo abilityStageInfo, int64_t timeout, int64_t* abilityStageId); 108 109 CJ_EXPORT int64_t FFIAbilityDelegatorRegistryGetAbilityDelegator(); 110 CJ_EXPORT int32_t FFIAbilityDelegatorStartAbility(int64_t id, WantHandle want); 111 CJ_EXPORT int32_t FFIAbilityDelegatorExecuteShellCommand(int64_t id, const char* cmd, int64_t timeoutSec); 112 CJ_EXPORT int32_t FFIGetExitCode(int64_t id); 113 CJ_EXPORT const char* FFIGetStdResult(int64_t id); 114 CJ_EXPORT const char* FFIDump(int64_t id); 115 CJ_EXPORT int32_t FFIAbilityDelegatorApplicationContext(int64_t id); 116 CJ_EXPORT void FFIAbilityDelegatorFinishTest(int64_t id, const char* msg, int64_t code); 117 }; 118 } 119 } 120 #endif // OHOS_ABILITY_RUNTIME_CJ_ABILITY_DELEGATOR_FFI_H