• 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 <memory>
20 #include <string>
21 
22 #include "message_parcel.h"
23 #include "pixel_map.h"
24 #include "string_ex.h"
25 #include "tlv_object.h"
26 #include "uri.h"
27 #include "uri_handler.h"
28 #include "want.h"
29 
30 namespace OHOS {
31 namespace MiscServices {
32 namespace {
33 const std::string MIMETYPE_PIXELMAP = "pixelMap";
34 const std::string MIMETYPE_TEXT_HTML = "text/html";
35 const std::string MIMETYPE_TEXT_PLAIN = "text/plain";
36 const std::string MIMETYPE_TEXT_URI = "text/uri";
37 const std::string MIMETYPE_TEXT_WANT = "text/want";
38 } // namespace
39 
40 enum ResultCode : int32_t { OK = 0, IPC_NO_DATA, IPC_ERROR };
41 
42 class MineCustomData : public TLVObject {
43 public:
44     MineCustomData() = default;
45     std::map<std::string, std::vector<uint8_t>> GetItemData();
46     void AddItemData(const std::string &mimeType, const std::vector<uint8_t> &arrayBuffer);
47     bool Encode(std::vector<std::uint8_t> &buffer) override;
48     bool Decode(const std::vector<std::uint8_t> &buffer) override;
49     size_t Count() override;
50 
51 private:
52     std::map<std::string, std::vector<uint8_t>> itemData_;
53 };
54 
55 class FileDescriptor {
56 public:
57     FileDescriptor() = default;
58     ~FileDescriptor();
59     void SetFd(int32_t fd);
60     int32_t GetFd() const;
61 
62 private:
63     int32_t fd_ = -1;
64 };
65 
66 class PasteDataRecord : public TLVObject {
67 public:
68     PasteDataRecord();
69     PasteDataRecord(const PasteDataRecord &record);
70     PasteDataRecord(std::string mimeType, std::shared_ptr<std::string> htmlText,
71         std::shared_ptr<OHOS::AAFwk::Want> want, std::shared_ptr<std::string> plainText,
72         std::shared_ptr<OHOS::Uri> uri);
73 
74     static std::shared_ptr<PasteDataRecord> NewHtmlRecord(const std::string &htmlText);
75     static std::shared_ptr<PasteDataRecord> NewWantRecord(std::shared_ptr<OHOS::AAFwk::Want> want);
76     static std::shared_ptr<PasteDataRecord> NewPlaintTextRecord(const std::string &text);
77     static std::shared_ptr<PasteDataRecord> NewPixelMapRecord(std::shared_ptr<OHOS::Media::PixelMap> pixelMap);
78     static std::shared_ptr<PasteDataRecord> NewUriRecord(const OHOS::Uri &uri);
79     static std::shared_ptr<PasteDataRecord> NewKvRecord(
80         const std::string &mimeType, const std::vector<uint8_t> &arrayBuffer);
81 
82     bool isConvertUriFromRemote = false;
83     std::string GetMimeType() const;
84     std::shared_ptr<std::string> GetHtmlText() const;
85     std::shared_ptr<std::string> GetPlainText() const;
86     std::shared_ptr<OHOS::Media::PixelMap> GetPixelMap() const;
87     std::shared_ptr<OHOS::Uri> GetUri() const;
88     void SetUri(std::shared_ptr<OHOS::Uri> uri);
89     std::shared_ptr<OHOS::Uri> GetOrginUri() const;
90     std::shared_ptr<OHOS::AAFwk::Want> GetWant() const;
91     std::shared_ptr<MineCustomData> GetCustomData() const;
92 
93     std::string ConvertToText() const;
94 
95     bool Encode(std::vector<std::uint8_t> &buffer) override;
96     bool Decode(const std::vector<std::uint8_t> &buffer) override;
97     size_t Count() override;
98     bool WriteFd(MessageParcel &parcel, UriHandler &uriHandler, bool isClient);
99     bool ReadFd(MessageParcel &parcel, UriHandler &uriHandler);
100     bool NeedFd(const UriHandler &uriHandler);
101     void ReplaceShareUri(int32_t userId);
102     void SetConvertUri(const std::string &value);
103     std::string GetConvertUri() const;
104     void SetGrantUriPermission(bool hasPermission);
105     bool HasGrantUriPermission();
106 
107     class Builder {
108     public:
109         explicit Builder(const std::string &mimeType);
110         Builder &SetHtmlText(std::shared_ptr<std::string> htmlText);
111         Builder &SetWant(std::shared_ptr<OHOS::AAFwk::Want> want);
112         Builder &SetPlainText(std::shared_ptr<std::string> plainText);
113         Builder &SetUri(std::shared_ptr<OHOS::Uri> uri);
114         Builder &SetPixelMap(std::shared_ptr<OHOS::Media::PixelMap> pixelMap);
115         Builder &SetCustomData(std::shared_ptr<MineCustomData> customData);
116         Builder &SetMimeType(std::string mimeType);
117         std::shared_ptr<PasteDataRecord> Build();
118 
119     private:
120         std::shared_ptr<PasteDataRecord> record_ = nullptr;
121     };
122 
123 private:
CheckResult(ResultCode resultCode)124     inline static bool CheckResult(ResultCode resultCode)
125     {
126         return resultCode == ResultCode::OK;
127     }
128     std::string GetPassUri();
129     static std::shared_ptr<OHOS::Media::PixelMap> Vector2PixelMap(std::vector<std::uint8_t> &value);
130     static std::vector<std::uint8_t> PixelMap2Vector(std::shared_ptr<OHOS::Media::PixelMap> &pixelMap);
131 
132     std::string mimeType_;
133     std::shared_ptr<std::string> htmlText_;
134     std::shared_ptr<OHOS::AAFwk::Want> want_;
135     std::shared_ptr<std::string> plainText_;
136     std::shared_ptr<OHOS::Uri> uri_;
137     std::string convertUri_;
138     std::shared_ptr<OHOS::Media::PixelMap> pixelMap_;
139     std::shared_ptr<MineCustomData> customData_;
140     bool hasGrantUriPermission_ = false;
141     std::shared_ptr<FileDescriptor> fd_;
142     using Func = std::function<void(bool &ret, const std::vector<std::uint8_t> &buffer, TLVHead &head)>;
143     std::map<uint16_t, Func> decodeMap;
144     void InitDecodeMap();
145 };
146 } // namespace MiscServices
147 } // namespace OHOS
148 #endif // PASTE_BOARD_RECORD_H
149