1 /* 2 * Copyright (c) 2021 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_ACE_ENGINE_FRAMEWORKS_BASE_RESOURCE_DATA_PROVIDER_MANAGER_H 17 #define FOUNDATION_ACE_ACE_ENGINE_FRAMEWORKS_BASE_RESOURCE_DATA_PROVIDER_MANAGER_H 18 19 #include <cstdint> 20 #include <functional> 21 #include <vector> 22 23 #include "base/memory/ace_type.h" 24 #include "base/resource/data_ability_helper.h" 25 26 namespace OHOS::Ace { 27 28 class DataProviderRes { 29 public: DataProviderRes(std::vector<uint8_t> && data)30 explicit DataProviderRes(std::vector<uint8_t>&& data) : data_(std::move(data)) {} DataProviderRes(uint8_t * dataRes,int64_t size)31 DataProviderRes(uint8_t* dataRes, int64_t size) : data_(dataRes, dataRes + size) {} 32 ~DataProviderRes() = default; 33 GetData()34 const std::vector<uint8_t>& GetData() 35 { 36 return data_; 37 } 38 39 private: 40 std::vector<uint8_t> data_; 41 }; 42 43 class DataProviderManagerInterface : public AceType { 44 DECLARE_ACE_TYPE(DataProviderManagerInterface, AceType) 45 46 public: 47 DataProviderManagerInterface() = default; 48 ~DataProviderManagerInterface() override = default; 49 50 virtual std::unique_ptr<DataProviderRes> GetDataProviderResFromUri(const std::string& uriStr) = 0; 51 virtual void* GetDataProviderThumbnailResFromUri(const std::string& uriStr) = 0; 52 }; 53 54 using DataProviderImpl = std::function<std::unique_ptr<DataProviderRes>(const std::string& uriStr)>; 55 class DataProviderManager : public DataProviderManagerInterface { DECLARE_ACE_TYPE(DataProviderManager,DataProviderManagerInterface)56 DECLARE_ACE_TYPE(DataProviderManager, DataProviderManagerInterface) 57 public: 58 explicit DataProviderManager(const DataProviderImpl& dataProvider) : platformImpl_(dataProvider) {} 59 ~DataProviderManager() override = default; 60 61 std::unique_ptr<DataProviderRes> GetDataProviderResFromUri(const std::string& uriStr) override; GetDataProviderThumbnailResFromUri(const std::string & uriStr)62 void* GetDataProviderThumbnailResFromUri(const std::string& uriStr) override 63 { 64 return nullptr; 65 }; 66 67 private: 68 DataProviderImpl platformImpl_; 69 }; 70 71 using DataAbilityHelperImpl = std::function<RefPtr<DataAbilityHelper>()>; 72 class DataProviderManagerStandard : public DataProviderManagerInterface { DECLARE_ACE_TYPE(DataProviderManagerStandard,DataProviderManagerInterface)73 DECLARE_ACE_TYPE(DataProviderManagerStandard, DataProviderManagerInterface) 74 75 public: 76 explicit DataProviderManagerStandard(const DataAbilityHelperImpl& dataAbilityHelperImpl) : 77 dataAbilityHelperImpl_(dataAbilityHelperImpl) {} 78 ~DataProviderManagerStandard() override = default; 79 80 std::unique_ptr<DataProviderRes> GetDataProviderResFromUri(const std::string& uriStr) override; 81 void* GetDataProviderThumbnailResFromUri(const std::string& uriStr) override; 82 GetDataAbilityHelper()83 const RefPtr<DataAbilityHelper>& GetDataAbilityHelper() 84 { 85 InitHelper(); 86 return helper_; 87 } 88 89 private: 90 void InitHelper(); 91 92 DataAbilityHelperImpl dataAbilityHelperImpl_; 93 RefPtr<DataAbilityHelper> helper_; 94 }; 95 96 } // namespace OHOS::Ace 97 98 #endif // FOUNDATION_ACE_ACE_ENGINE_FRAMEWORKS_BASE_RESOURCE_DATA_PROVIDER_MANAGER_H 99