• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_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 <memory>
22 #include <mutex>
23 #include <shared_mutex>
24 #include <string>
25 #include <type_traits>
26 
27 #include "base/memory/ace_type.h"
28 #include "base/resource/data_ability_helper.h"
29 #include "base/utils/noncopyable.h"
30 
31 namespace OHOS::Ace {
32 
33 struct Deleter {
operatorDeleter34     void operator()(uint8_t* p)
35     {
36         delete[] p;
37     }
38 };
39 
40 class DataProviderRes {
41 public:
DataProviderRes(std::unique_ptr<uint8_t[],Deleter> && data,int64_t size)42     DataProviderRes(std::unique_ptr<uint8_t[], Deleter>&& data, int64_t size) : data_(std::move(data)), size_(size) {}
43     ~DataProviderRes() = default;
44 
GetData()45     std::unique_ptr<uint8_t[], Deleter>&& GetData()
46     {
47         return std::move(data_);
48     }
GetSize()49     int64_t GetSize() const
50     {
51         return size_;
52     }
53 
54 private:
55     std::unique_ptr<uint8_t[], Deleter> data_;
56     int64_t size_ = 0;
57 
58     ACE_DISALLOW_COPY_AND_MOVE(DataProviderRes);
59 };
60 
61 class DataProviderManagerInterface : public AceType {
62     DECLARE_ACE_TYPE(DataProviderManagerInterface, AceType)
63 
64 public:
65     DataProviderManagerInterface() = default;
66     ~DataProviderManagerInterface() override = default;
67 
68     virtual std::unique_ptr<DataProviderRes> GetDataProviderResFromUri(const std::string& uriStr) = 0;
69     virtual void* GetDataProviderThumbnailResFromUri(const std::string& uriStr) = 0;
70     virtual int32_t GetDataProviderFile(const std::string& uriStr, const std::string& mode) = 0;
71 
72     ACE_DISALLOW_COPY_AND_MOVE(DataProviderManagerInterface);
73 };
74 
75 using DataProviderImpl = std::function<std::unique_ptr<DataProviderRes>(const std::string& uriStr)>;
76 class DataProviderManager : public DataProviderManagerInterface {
DECLARE_ACE_TYPE(DataProviderManager,DataProviderManagerInterface)77     DECLARE_ACE_TYPE(DataProviderManager, DataProviderManagerInterface)
78 public:
79     explicit DataProviderManager(DataProviderImpl dataProvider) : platformImpl_(std::move(dataProvider)) {}
80     ~DataProviderManager() override = default;
81 
82     std::unique_ptr<DataProviderRes> GetDataProviderResFromUri(const std::string& uriStr) override;
GetDataProviderThumbnailResFromUri(const std::string &)83     void* GetDataProviderThumbnailResFromUri(const std::string& /* uriStr */) override
84     {
85         return nullptr;
86     };
GetDataProviderFile(const std::string &,const std::string &)87     int32_t GetDataProviderFile(const std::string& /* uriStr */, const std::string& /* mode */) override
88     {
89         return -1;
90     }
91 
92 private:
93     DataProviderImpl platformImpl_;
94 
95     ACE_DISALLOW_COPY_AND_MOVE(DataProviderManager);
96 };
97 
98 using DataAbilityHelperImpl = std::function<RefPtr<DataAbilityHelper>()>;
99 class DataProviderManagerStandard : public DataProviderManagerInterface {
DECLARE_ACE_TYPE(DataProviderManagerStandard,DataProviderManagerInterface)100     DECLARE_ACE_TYPE(DataProviderManagerStandard, DataProviderManagerInterface)
101 
102 public:
103     explicit DataProviderManagerStandard(DataAbilityHelperImpl dataAbilityHelperImpl)
104         : dataAbilityHelperImpl_(std::move(dataAbilityHelperImpl))
105     {}
106 
107     ~DataProviderManagerStandard() override = default;
108 
109     std::unique_ptr<DataProviderRes> GetDataProviderResFromUri(const std::string& uriStr) override;
110     void* GetDataProviderThumbnailResFromUri(const std::string& uriStr) override;
111 
112     int32_t GetDataProviderFile(const std::string& uriStr, const std::string& mode) override;
113 
114 private:
115     void InitHelper();
116 
117     std::shared_mutex helperMutex_;
118     DataAbilityHelperImpl dataAbilityHelperImpl_;
119     RefPtr<DataAbilityHelper> helper_;
120 
121     ACE_DISALLOW_COPY_AND_MOVE(DataProviderManagerStandard);
122 };
123 
124 } // namespace OHOS::Ace
125 
126 #endif // FOUNDATION_ACE_ACE_ENGINE_FRAMEWORKS_BASE_RESOURCE_DATA_PROVIDER_MANAGER_H
127