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