1 /* 2 * Copyright (c) 2021-2022 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 FOUNDATION_ACE_ADAPTER_OHOS_CPP_PA_CONTAINER_H 17 #define FOUNDATION_ACE_ADAPTER_OHOS_CPP_PA_CONTAINER_H 18 19 #include <memory> 20 21 #include "abs_shared_result_set.h" 22 #include "data_ability_predicates.h" 23 #include "form_provider_info.h" 24 #include "iremote_object.h" 25 #include "pac_map.h" 26 #include "values_bucket.h" 27 #include "want.h" 28 29 #include "adapter/ohos/entrance/platform_event_callback.h" 30 #include "base/resource/asset_manager.h" 31 #include "base/thread/task_executor.h" 32 #include "base/utils/noncopyable.h" 33 #include "core/common/ace_view.h" 34 #include "core/common/container.h" 35 #include "core/common/js_message_dispatcher.h" 36 #include "frameworks/core/common/backend.h" 37 38 namespace OHOS::Ace::Platform { 39 40 class PaContainer : public Container, public JsMessageDispatcher { 41 DECLARE_ACE_TYPE(PaContainer, Container, JsMessageDispatcher); 42 43 public: 44 PaContainer(int32_t instanceId, BackendType type, bool isArkApp, void* paAbility, 45 std::unique_ptr<PlatformEventCallback> callback); 46 ~PaContainer() override = default; 47 Initialize()48 void Initialize() override {} 49 Destroy()50 void Destroy() override {} 51 GetInstanceId()52 int32_t GetInstanceId() const override 53 { 54 return instanceId_; 55 } 56 GetAssetManager()57 RefPtr<AssetManager> GetAssetManager() const override 58 { 59 return assetManager_; 60 } 61 GetFrontend()62 RefPtr<Frontend> GetFrontend() const override 63 { 64 return nullptr; 65 } 66 GetPlatformResRegister()67 RefPtr<PlatformResRegister> GetPlatformResRegister() const override 68 { 69 return nullptr; 70 } 71 GetPipelineContext()72 RefPtr<PipelineBase> GetPipelineContext() const override 73 { 74 return nullptr; 75 } 76 GetViewWidth()77 int32_t GetViewWidth() const override 78 { 79 return 0; 80 } 81 GetViewHeight()82 int32_t GetViewHeight() const override 83 { 84 return 0; 85 } 86 GetViewPosX()87 int32_t GetViewPosX() const override 88 { 89 return 0; 90 } 91 GetViewPosY()92 int32_t GetViewPosY() const override 93 { 94 return 0; 95 } 96 GetWindowId()97 uint32_t GetWindowId() const override 98 { 99 return 0; 100 } 101 SetWindowId(uint32_t windowId)102 void SetWindowId(uint32_t windowId) override {} 103 GetView()104 void* GetView() const override 105 { 106 return nullptr; 107 } 108 GetBackend()109 RefPtr<Backend> GetBackend() const 110 { 111 return backend_; 112 } 113 GetTaskExecutor()114 RefPtr<TaskExecutor> GetTaskExecutor() const override 115 { 116 return taskExecutor_; 117 } 118 119 void Dispatch( 120 const std::string& group, std::vector<uint8_t>&& data, int32_t id, bool replyToComponent) const override; 121 122 void DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override; 123 124 bool Dump(const std::vector<std::string>& params) override; 125 DispatchSync(const std::string & group,std::vector<uint8_t> && data,uint8_t ** resData,int64_t & position)126 void DispatchSync( 127 const std::string& group, std::vector<uint8_t>&& data, uint8_t** resData, int64_t& position) const override 128 {} 129 OnFinish()130 void OnFinish() 131 { 132 if (platformEventCallback_) { 133 platformEventCallback_->OnFinish(); 134 } 135 } 136 GetHostClassName()137 std::string GetHostClassName() const override 138 { 139 return ""; 140 } 141 142 void DumpHeapSnapshot(bool isPrivate) override; 143 144 static bool Register(); 145 static void CreateContainer(int32_t instanceId, BackendType type, bool isArkApp, void* paAbility, 146 std::unique_ptr<PlatformEventCallback> callback); 147 static void DestroyContainer(int32_t instanceId); 148 static RefPtr<PaContainer> GetContainer(int32_t instanceId); 149 static bool RunPa(int32_t instanceId, const std::string& content, const OHOS::AAFwk::Want& want); 150 static void AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::string& hapPath, 151 const std::vector<std::string>& paths); 152 static void AddLibPath(int32_t instanceId, const std::vector<std::string>& libPath); 153 static bool OnCreate(int32_t instanceId, const OHOS::AAFwk::Want& want); 154 static bool OnDelete(int32_t instanceId, int64_t formId); 155 static bool OnTriggerEvent(int32_t instanceId, int64_t formId, const std::string& message); 156 static int32_t OnAcquireFormState(int32_t instanceId, const OHOS::AAFwk::Want& want); 157 static bool OnUpdate(int32_t instanceId, int64_t formId); 158 static bool OnCastTemptoNormal(int32_t instanceId, int64_t formId); 159 static bool OnVisibilityChanged(int32_t instanceId, const std::map<int64_t, int32_t>& formEventsMap); 160 static AppExecFwk::FormProviderData GetFormData(int32_t instanceId); 161 static int32_t Insert(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value); 162 static std::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> Query(int32_t instanceId, const Uri& uri, 163 const std::vector<std::string>& columns, const OHOS::NativeRdb::DataAbilityPredicates& predicates); 164 static int32_t Update(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value, 165 const OHOS::NativeRdb::DataAbilityPredicates& predicates); 166 static int32_t Delete(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::DataAbilityPredicates& predicates); 167 168 static int32_t BatchInsert( 169 int32_t instanceId, const Uri& uri, const std::vector<OHOS::NativeRdb::ValuesBucket>& values); 170 static std::string GetType(int32_t instanceId, const Uri& uri); 171 static std::vector<std::string> GetFileTypes(int32_t instanceId, const Uri& uri, const std::string& mimeTypeFilter); 172 static int32_t OpenFile(int32_t instanceId, const Uri& uri, const std::string& mode); 173 static int32_t OpenRawFile(int32_t instanceId, const Uri& uri, const std::string& mode); 174 static Uri NormalizeUri(int32_t instanceId, const Uri& uri); 175 static Uri DenormalizeUri(int32_t instanceId, const Uri& uri); 176 static sptr<IRemoteObject> OnConnect(int32_t instanceId, const OHOS::AAFwk::Want& want); 177 static void OnDisConnect(int32_t instanceId, const OHOS::AAFwk::Want& want); 178 static void OnCommand(const OHOS::AAFwk::Want &want, int startId, int32_t instanceId); 179 static bool OnShare(int32_t instanceId, int64_t formId, OHOS::AAFwk::WantParams &wantParams); 180 static std::shared_ptr<AppExecFwk::PacMap> Call(int32_t instanceId, const Uri& uri, 181 const std::string& method, const std::string& arg, const AppExecFwk::PacMap& pacMap); 182 183 private: 184 void InitializeBackend(); 185 void InitializeCallback(); 186 187 RefPtr<TaskExecutor> taskExecutor_; 188 RefPtr<AssetManager> assetManager_; 189 RefPtr<Backend> backend_; 190 191 int32_t instanceId_ = 0; 192 BackendType type_ = BackendType::SERVICE; 193 bool isArkApp_ = false; 194 std::unique_ptr<PlatformEventCallback> platformEventCallback_; 195 void* paAbility_ = nullptr; 196 197 ACE_DISALLOW_COPY_AND_MOVE(PaContainer); 198 }; 199 200 } // namespace OHOS::Ace::Platform 201 202 #endif // FOUNDATION_ACE_ADAPTER_OHOS_CPP_PA_CONTAINER_H 203