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 struct WorkerPath { 41 std::string packagePathStr; 42 std::vector<std::string> assetBasePathStr; 43 }; 44 45 struct PaContainerOptions { 46 BackendType type; 47 SrcLanguage language = SrcLanguage::ETS; 48 std::string hapPath = ""; 49 std::shared_ptr<WorkerPath> workerPath = nullptr; 50 }; 51 52 class PaContainer : public Container { 53 DECLARE_ACE_TYPE(PaContainer, Container); 54 55 public: 56 PaContainer(int32_t instanceId, void* paAbility, const PaContainerOptions& options, 57 std::unique_ptr<PlatformEventCallback> callback); 58 ~PaContainer() override = default; 59 Initialize()60 void Initialize() override {} 61 62 void Destroy() override; 63 GetInstanceId()64 int32_t GetInstanceId() const override 65 { 66 return instanceId_; 67 } 68 GetAssetManager()69 RefPtr<AssetManager> GetAssetManager() const override 70 { 71 return assetManager_; 72 } 73 GetFrontend()74 RefPtr<Frontend> GetFrontend() const override 75 { 76 return nullptr; 77 } 78 GetPlatformResRegister()79 RefPtr<PlatformResRegister> GetPlatformResRegister() const override 80 { 81 return nullptr; 82 } 83 GetPipelineContext()84 RefPtr<PipelineBase> GetPipelineContext() const override 85 { 86 return nullptr; 87 } 88 GetViewWidth()89 int32_t GetViewWidth() const override 90 { 91 return 0; 92 } 93 GetViewHeight()94 int32_t GetViewHeight() const override 95 { 96 return 0; 97 } 98 GetViewPosX()99 int32_t GetViewPosX() const override 100 { 101 return 0; 102 } 103 GetViewPosY()104 int32_t GetViewPosY() const override 105 { 106 return 0; 107 } 108 GetWindowId()109 uint32_t GetWindowId() const override 110 { 111 return 0; 112 } 113 SetWindowId(uint32_t windowId)114 void SetWindowId(uint32_t windowId) override {} 115 GetAceView()116 RefPtr<AceView> GetAceView() const override 117 { 118 return nullptr; 119 } 120 GetView()121 void* GetView() const override 122 { 123 return nullptr; 124 } 125 GetBackend()126 RefPtr<Backend> GetBackend() const 127 { 128 return backend_; 129 } 130 GetTaskExecutor()131 RefPtr<TaskExecutor> GetTaskExecutor() const override 132 { 133 return nullptr; 134 } 135 OnFinish()136 void OnFinish() 137 { 138 if (platformEventCallback_) { 139 platformEventCallback_->OnFinish(); 140 } 141 } 142 GetHostClassName()143 std::string GetHostClassName() const override 144 { 145 return ""; 146 } 147 GetResourceConfiguration()148 ResourceConfiguration GetResourceConfiguration() const override 149 { 150 return ResourceConfiguration(); 151 } 152 153 static bool Register(); 154 static void CreateContainer(int32_t instanceId, void* paAbility, const PaContainerOptions& options, 155 std::unique_ptr<PlatformEventCallback> callback); 156 static void DestroyContainer(int32_t instanceId); 157 static RefPtr<PaContainer> GetContainer(int32_t instanceId); 158 static bool RunPa(int32_t instanceId, const std::string& content, const OHOS::AAFwk::Want& want); 159 static void AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::string& hapPath, 160 const std::vector<std::string>& paths); 161 static void AddLibPath(int32_t instanceId, const std::vector<std::string>& libPath); 162 static bool OnCreate(int32_t instanceId, const OHOS::AAFwk::Want& want); 163 static bool OnDelete(int32_t instanceId, int64_t formId); 164 static bool OnTriggerEvent(int32_t instanceId, int64_t formId, const std::string& message); 165 static int32_t OnAcquireFormState(int32_t instanceId, const OHOS::AAFwk::Want& want); 166 static bool OnUpdate(int32_t instanceId, int64_t formId); 167 static bool OnCastTemptoNormal(int32_t instanceId, int64_t formId); 168 static bool OnVisibilityChanged(int32_t instanceId, const std::map<int64_t, int32_t>& formEventsMap); 169 static AppExecFwk::FormProviderData GetFormData(int32_t instanceId); 170 static int32_t Insert(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value); 171 static std::shared_ptr<OHOS::NativeRdb::AbsSharedResultSet> Query(int32_t instanceId, const Uri& uri, 172 const std::vector<std::string>& columns, const OHOS::NativeRdb::DataAbilityPredicates& predicates); 173 static int32_t Update(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::ValuesBucket& value, 174 const OHOS::NativeRdb::DataAbilityPredicates& predicates); 175 static int32_t Delete(int32_t instanceId, const Uri& uri, const OHOS::NativeRdb::DataAbilityPredicates& predicates); 176 177 static int32_t BatchInsert( 178 int32_t instanceId, const Uri& uri, const std::vector<OHOS::NativeRdb::ValuesBucket>& values); 179 static std::string GetType(int32_t instanceId, const Uri& uri); 180 static std::vector<std::string> GetFileTypes(int32_t instanceId, const Uri& uri, const std::string& mimeTypeFilter); 181 static int32_t OpenFile(int32_t instanceId, const Uri& uri, const std::string& mode); 182 static int32_t OpenRawFile(int32_t instanceId, const Uri& uri, const std::string& mode); 183 static Uri NormalizeUri(int32_t instanceId, const Uri& uri); 184 static Uri DenormalizeUri(int32_t instanceId, const Uri& uri); 185 static sptr<IRemoteObject> OnConnect(int32_t instanceId, const OHOS::AAFwk::Want& want); 186 static void OnDisConnect(int32_t instanceId, const OHOS::AAFwk::Want& want); 187 static void OnCommand(const OHOS::AAFwk::Want &want, int startId, int32_t instanceId); 188 static bool OnShare(int32_t instanceId, int64_t formId, OHOS::AAFwk::WantParams &wantParams); 189 static std::shared_ptr<AppExecFwk::PacMap> Call(int32_t instanceId, const Uri& uri, 190 const std::string& method, const std::string& arg, const AppExecFwk::PacMap& pacMap); 191 192 private: 193 void InitializeBackend(SrcLanguage language); 194 void InitializeCallback(); 195 196 RefPtr<AssetManager> assetManager_; 197 RefPtr<Backend> backend_; 198 199 int32_t instanceId_ = 0; 200 BackendType type_ = BackendType::SERVICE; 201 std::unique_ptr<PlatformEventCallback> platformEventCallback_; 202 void* paAbility_ = nullptr; 203 std::string hapPath_; 204 std::shared_ptr<WorkerPath> workerPath_; 205 ACE_DISALLOW_COPY_AND_MOVE(PaContainer); 206 }; 207 208 } // namespace OHOS::Ace::Platform 209 210 #endif // FOUNDATION_ACE_ADAPTER_OHOS_CPP_PA_CONTAINER_H 211