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 #ifndef PASTE_BOARD_UTILS_H
16 #define PASTE_BOARD_UTILS_H
17 
18 #include "paste_data.h"
19 #include "paste_data_record.h"
20 #include "unified_data.h"
21 #include "unified_record.h"
22 namespace OHOS {
23 namespace MiscServices {
24 class API_EXPORT PasteboardUtils {
25 public:
26     using UnifiedRecord = UDMF::UnifiedRecord;
27     using UnifiedData = UDMF::UnifiedData;
28     using UnifiedDataProperties = UDMF::UnifiedDataProperties;
29     using UDType = UDMF::UDType;
30     using ShareOptions = UDMF::ShareOptions;
31     static PasteboardUtils& GetInstance();
32     std::shared_ptr<PasteData> Convert(const UnifiedData& unifiedData);
33     std::shared_ptr<UnifiedData> Convert(const PasteData& pasteData);
34     std::vector<std::string> DeduplicateVector(const std::vector<std::string> &vec);
35 
36 private:
37     using Convert2URecord = std::function<std::shared_ptr<UnifiedRecord>(std::shared_ptr<PasteDataRecord>)>;
38     using Convert2PRecord = std::function<std::shared_ptr<PasteDataRecord>(std::shared_ptr<UnifiedRecord>)>;
39 
40     PasteboardUtils();
41 
42     std::vector<std::shared_ptr<PasteDataRecord>> Convert(const std::vector<std::shared_ptr<UnifiedRecord>>& records);
43     static PasteDataProperty Convert(const UnifiedDataProperties& properties);
44     static std::shared_ptr<UnifiedDataProperties> Convert(const PasteDataProperty& properties);
45     static std::vector<std::string> Convert(const std::vector<std::string>& utdIds);
46     static std::string Convert(UDType uDType);
47     static UDType Convert(int32_t uDType, const std::string& mimeType);
48 
49     void InitDecodeMap();
50 
51     static std::shared_ptr<UnifiedRecord> PasteRecord2Text(std::shared_ptr<PasteDataRecord> record);
52     static std::shared_ptr<UnifiedRecord> PasteRecord2PlaintText(std::shared_ptr<PasteDataRecord> record);
53     static std::shared_ptr<UnifiedRecord> PasteRecord2Want(std::shared_ptr<PasteDataRecord> record);
54     static std::shared_ptr<UnifiedRecord> PasteRecord2Html(std::shared_ptr<PasteDataRecord> record);
55     static std::shared_ptr<UnifiedRecord> PasteRecord2Link(std::shared_ptr<PasteDataRecord> record);
56     static std::shared_ptr<UnifiedRecord> PasteRecord2File(std::shared_ptr<PasteDataRecord> record);
57     static std::shared_ptr<UnifiedRecord> PasteRecord2Image(std::shared_ptr<PasteDataRecord> record);
58     static std::shared_ptr<UnifiedRecord> PasteRecord2Video(std::shared_ptr<PasteDataRecord> record);
59     static std::shared_ptr<UnifiedRecord> PasteRecord2Audio(std::shared_ptr<PasteDataRecord> record);
60     static std::shared_ptr<UnifiedRecord> PasteRecord2Folder(std::shared_ptr<PasteDataRecord> record);
61     static std::shared_ptr<UnifiedRecord> PasteRecord2PixelMap(std::shared_ptr<PasteDataRecord> record);
62     static std::shared_ptr<UnifiedRecord> PasteRecord2SystemDefined(std::shared_ptr<PasteDataRecord> record);
63     static std::shared_ptr<UnifiedRecord> PasteRecord2AppItem(std::shared_ptr<PasteDataRecord> record);
64     static std::shared_ptr<UnifiedRecord> PasteRecord2Form(std::shared_ptr<PasteDataRecord> record);
65     static std::vector<std::shared_ptr<UnifiedRecord>> Custom2AppDefined(
66         std::shared_ptr<PasteDataRecord> record);
67 
68     static std::shared_ptr<PasteDataRecord> Text2PasteRecord(std::shared_ptr<UnifiedRecord> record);
69     static std::shared_ptr<PasteDataRecord> PlainText2PasteRecord(std::shared_ptr<UnifiedRecord> record);
70     static std::shared_ptr<PasteDataRecord> Want2PasteRecord(std::shared_ptr<UnifiedRecord> record);
71     static std::shared_ptr<PasteDataRecord> Html2PasteRecord(std::shared_ptr<UnifiedRecord> record);
72     static std::shared_ptr<PasteDataRecord> Link2PasteRecord(std::shared_ptr<UnifiedRecord> record);
73     static std::shared_ptr<PasteDataRecord> File2PasteRecord(std::shared_ptr<UnifiedRecord> record);
74     static std::shared_ptr<PasteDataRecord> Image2PasteRecord(std::shared_ptr<UnifiedRecord> record);
75     static std::shared_ptr<PasteDataRecord> Video2PasteRecord(std::shared_ptr<UnifiedRecord> record);
76     static std::shared_ptr<PasteDataRecord> Audio2PasteRecord(std::shared_ptr<UnifiedRecord> record);
77     static std::shared_ptr<PasteDataRecord> Folder2PasteRecord(std::shared_ptr<UnifiedRecord> record);
78     static std::shared_ptr<PasteDataRecord> PixelMap2PasteRecord(std::shared_ptr<UnifiedRecord> record);
79     static std::shared_ptr<PasteDataRecord> AppItem2PasteRecord(std::shared_ptr<UnifiedRecord> record);
80     static std::shared_ptr<PasteDataRecord> Form2PasteRecord(std::shared_ptr<UnifiedRecord> record);
81     static std::shared_ptr<PasteDataRecord> SystemDefined2PasteRecord(std::shared_ptr<UnifiedRecord> record);
82     static std::shared_ptr<PasteDataRecord> AppDefined2PasteRecord(std::shared_ptr<UnifiedRecord> record);
83 
84     std::map<int32_t, Convert2URecord> convert2URecordMap_;
85     std::map<int32_t, Convert2PRecord> convert2PRecordMap_;
86     static ShareOption UdmfOptions2PbOption(ShareOptions udmfOptions);
87     static ShareOptions PbOption2UdmfOptions(ShareOption pbOption);
88 };
89 } // namespace MiscServices
90 } // namespace OHOS
91 #endif // PASTE_BOARD_UTILS_H