• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2023 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 PASTE_BOARD_RECORD_H
17 #define PASTE_BOARD_RECORD_H
18 
19 #include "common/constant.h"
20 #include "paste_data_entry.h"
21 
22 namespace OHOS {
23 namespace UDMF {
24 class EntryGetter;
25 }
26 namespace MiscServices {
27 enum ResultCode : int32_t { OK = 0, IPC_NO_DATA, IPC_ERROR };
28 
29 struct RemoteRecordValue {
30     int32_t udType_ = UDMF::UD_BUTT;
31     std::string mimeType_;
32     std::shared_ptr<std::string> plainText_;
33     std::shared_ptr<std::string> htmlText_;
34     std::shared_ptr<OHOS::AAFwk::Want> want_;
35     std::shared_ptr<OHOS::Media::PixelMap> pixelMap_;
36     std::shared_ptr<OHOS::Uri> uri_;
37     EntryValue udmfValue_;
38     std::vector<std::shared_ptr<PasteDataEntry>> entries_;
39 };
40 
41 class API_EXPORT PasteDataRecord : public TLVWriteable, public TLVReadable {
42 public:
43     PasteDataRecord();
44     ~PasteDataRecord();
45     PasteDataRecord(const PasteDataRecord &record);
46     PasteDataRecord(std::string mimeType, std::shared_ptr<std::string> htmlText,
47         std::shared_ptr<OHOS::AAFwk::Want> want, std::shared_ptr<std::string> plainText,
48         std::shared_ptr<OHOS::Uri> uri);
49 
50     bool EncodeTLV(WriteOnlyBuffer &buffer) const override;
51     bool DecodeTLV(ReadOnlyBuffer &buffer) override;
52     size_t CountTLV() const override;
53     size_t CountTLVLocal() const;
54     size_t CountTLVRemote() const;
55     bool EncodeTLVLocal(WriteOnlyBuffer &buffer) const;
56     bool EncodeTLVRemote(WriteOnlyBuffer &buffer) const;
57 
58     static std::shared_ptr<PasteDataRecord> NewHtmlRecord(const std::string &htmlText);
59     static std::shared_ptr<PasteDataRecord> NewWantRecord(std::shared_ptr<OHOS::AAFwk::Want> want);
60     static std::shared_ptr<PasteDataRecord> NewPlainTextRecord(const std::string &text);
61     static std::shared_ptr<PasteDataRecord> NewPixelMapRecord(std::shared_ptr<OHOS::Media::PixelMap> pixelMap);
62     static std::shared_ptr<PasteDataRecord> NewUriRecord(const OHOS::Uri &uri);
63     static std::shared_ptr<PasteDataRecord> NewKvRecord(
64         const std::string &mimeType, const std::vector<uint8_t> &arrayBuffer);
65     static std::shared_ptr<PasteDataRecord> NewMultiTypeRecord(
66         std::shared_ptr<std::map<std::string, std::shared_ptr<EntryValue>>> values,
67         const std::string &recordMimeType = "");
68     static std::shared_ptr<PasteDataRecord> NewMultiTypeDelayRecord(
69         std::vector<std::string> mimeTypes, const std::shared_ptr<UDMF::EntryGetter> entryGetter);
70 
71     bool isConvertUriFromRemote = false;
72     std::string GetMimeType() const;
73     std::set<std::string> GetMimeTypes() const;
74     std::shared_ptr<std::string> GetHtmlTextV0() const;
75     std::shared_ptr<std::string> GetHtmlText();
76     std::shared_ptr<std::string> GetPlainTextV0() const;
77     std::shared_ptr<std::string> GetPlainText();
78     std::shared_ptr<OHOS::Media::PixelMap> GetPixelMapV0() const;
79     std::shared_ptr<OHOS::Media::PixelMap> GetPixelMap();
80     void ClearPixelMap();
81     std::shared_ptr<OHOS::Uri> GetUriV0() const;
82     std::shared_ptr<OHOS::Uri> GetUri();
83     void SetUri(std::shared_ptr<OHOS::Uri> uri);
84     std::shared_ptr<OHOS::Uri> GetOriginUri() const;
85     std::shared_ptr<OHOS::AAFwk::Want> GetWant() const;
86     std::shared_ptr<MineCustomData> GetCustomData() const;
87 
88     std::string ConvertToText() const;
89     void SetConvertUri(const std::string &value);
90     std::string GetConvertUri() const;
91     void SetGrantUriPermission(bool hasPermission);
92     bool HasGrantUriPermission();
93 
94     void SetTextContent(const std::string &content);
95     std::string GetTextContent() const;
96     void SetDetails(const Details &details);
97     std::shared_ptr<Details> GetDetails() const;
98     void SetSystemDefinedContent(const Details &contents);
99     std::shared_ptr<Details> GetSystemDefinedContent() const;
100     int32_t GetUDType() const;
101     void SetUDType(int32_t type);
102 
103     bool HasEmptyEntry() const;
104     void AddEntry(const std::string &utdType, std::shared_ptr<PasteDataEntry> value);
105     void AddEntryByMimeType(const std::string &mimeType, std::shared_ptr<PasteDataEntry> value);
106     std::shared_ptr<PasteDataEntry> GetEntry(const std::string &utdType);
107     std::shared_ptr<PasteDataEntry> GetEntryByMimeType(const std::string &mimeType);
108     std::vector<std::shared_ptr<PasteDataEntry>> GetEntries() const;
109     std::vector<std::string> GetValidTypes(const std::vector<std::string> &types) const;
110     std::vector<std::string> GetValidMimeTypes(const std::vector<std::string> &mimeTypes) const;
111 
112     void SetDelayRecordFlag(bool isDelay);
113     bool IsDelayRecord() const;
114     void SetDataId(uint32_t dataId);
115     uint32_t GetDataId() const;
116     void SetRecordId(uint32_t recordId);
117     uint32_t GetRecordId() const;
118 
119     void SetEntryGetter(const std::shared_ptr<UDMF::EntryGetter> entryGetter);
120     std::shared_ptr<UDMF::EntryGetter> GetEntryGetter();
121 
122     void SetFrom(uint32_t from);
123     uint32_t GetFrom() const;
124 
125     class Builder {
126     public:
127         explicit Builder(const std::string &mimeType);
128         Builder &SetHtmlText(std::shared_ptr<std::string> htmlText);
129         Builder &SetWant(std::shared_ptr<OHOS::AAFwk::Want> want);
130         Builder &SetPlainText(std::shared_ptr<std::string> plainText);
131         Builder &SetUri(std::shared_ptr<OHOS::Uri> uri);
132         Builder &SetPixelMap(std::shared_ptr<OHOS::Media::PixelMap> pixelMap);
133         Builder &SetCustomData(std::shared_ptr<MineCustomData> customData);
134         Builder &SetMimeType(std::string mimeType);
135         std::shared_ptr<PasteDataRecord> Build();
136 
137     private:
138         std::shared_ptr<PasteDataRecord> record_ = nullptr;
139     };
140 
141 private:
142     std::string GetPassUri();
143     void AddUriEntry();
144     std::set<std::string> GetUdtTypes() const;
145     bool DecodeItem1(uint16_t tag, ReadOnlyBuffer &buffer, TLVHead &head);
146     bool DecodeItem2(uint16_t tag, ReadOnlyBuffer &buffer, TLVHead &head);
147     std::shared_ptr<PasteDataEntry> Remote2Local() const;
148     std::shared_ptr<RemoteRecordValue> Local2Remote() const;
149 
150     bool isDelay_ = false;
151     bool hasGrantUriPermission_ = false;
152     int32_t udType_ = UDMF::UD_BUTT;
153     uint32_t dataId_ = 0;
154     uint32_t recordId_ = 0;
155     uint32_t from_ = 0;
156     std::string convertUri_;
157     std::string textContent_;
158     std::string mimeType_;
159     std::shared_ptr<std::string> htmlText_;
160     std::shared_ptr<OHOS::AAFwk::Want> want_;
161     std::shared_ptr<std::string> plainText_;
162     std::shared_ptr<OHOS::Uri> uri_;
163     std::shared_ptr<OHOS::Media::PixelMap> pixelMap_;
164     std::shared_ptr<MineCustomData> customData_;
165 
166     std::shared_ptr<Details> details_;
167     std::shared_ptr<Details> systemDefinedContents_;
168     std::shared_ptr<EntryValue> udmfValue_;
169     std::vector<std::shared_ptr<PasteDataEntry>> entries_;
170     std::shared_ptr<UDMF::EntryGetter> entryGetter_;
171 };
172 } // namespace MiscServices
173 } // namespace OHOS
174 #endif // PASTE_BOARD_RECORD_H
175