1 /* 2 * Copyright (c) 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 #include "ohos_adapter/bridge/ark_paste_board_client_adapter_wrapper.h" 17 18 #include "ohos_adapter/bridge/ark_paste_board_observer_adapter_impl.h" 19 #include "ohos_adapter/bridge/ark_paste_data_record_adapter_wrapper.h" 20 #include "ohos_adapter/ctocpp/ark_paste_data_record_adapter_ctocpp.h" 21 #include "ohos_adapter/ctocpp/ark_paste_record_vector_ctocpp.h" 22 23 #include "base/bridge/ark_web_bridge_macros.h" 24 25 namespace OHOS::ArkWeb { 26 ArkPasteRecordVectorClassToStruct(const NWeb::PasteRecordVector & class_value)27static ArkPasteRecordVector ArkPasteRecordVectorClassToStruct(const NWeb::PasteRecordVector& class_value) 28 { 29 ArkPasteRecordVector struct_value = { .size = class_value.size(), .ark_web_mem_free_func = ArkWebMemFree }; 30 if (struct_value.size > 0) { 31 struct_value.value = (ark_paste_data_record_adapter_t**)ArkWebMemMalloc( 32 sizeof(ark_paste_data_record_adapter_t*) * struct_value.size); 33 if (struct_value.value == nullptr) { 34 struct_value.size = 0; 35 return struct_value; 36 } 37 38 int count = 0; 39 for (auto it = class_value.begin(); it != class_value.end(); it++) { 40 std::shared_ptr<ArkPasteDataRecordAdapterWrapper> data = 41 std::static_pointer_cast<ArkPasteDataRecordAdapterWrapper>(*it); 42 struct_value.value[count] = ArkPasteDataRecordAdapterCToCpp::Revert(data->ctocpp_); 43 count++; 44 } 45 } 46 return struct_value; 47 } 48 ArkPasteBoardClientAdapterWrapper(ArkWebRefPtr<ArkPasteBoardClientAdapter> ref)49ArkPasteBoardClientAdapterWrapper::ArkPasteBoardClientAdapterWrapper(ArkWebRefPtr<ArkPasteBoardClientAdapter> ref) 50 : ctocpp_(ref) 51 {} 52 GetPasteData(NWeb::PasteRecordVector & data)53bool ArkPasteBoardClientAdapterWrapper::GetPasteData(NWeb::PasteRecordVector& data) 54 { 55 if (!ctocpp_) { 56 return false; 57 } 58 ArkPasteRecordVector ark_vector; 59 bool result = ctocpp_->GetPasteData(ark_vector); 60 data = ArkPasteRecordVectorStructToClass(ark_vector); 61 ArkPasteRecordVectorStructRelease(ark_vector); 62 return result; 63 } 64 SetPasteData(const NWeb::PasteRecordVector & data,NWeb::CopyOptionMode copyOption)65void ArkPasteBoardClientAdapterWrapper::SetPasteData( 66 const NWeb::PasteRecordVector& data, NWeb::CopyOptionMode copyOption) 67 { 68 if (!ctocpp_) { 69 return; 70 } 71 ArkPasteRecordVector ark_vector = ArkPasteRecordVectorClassToStruct(data); 72 ctocpp_->SetPasteData(ark_vector, (int32_t)copyOption); 73 ArkPasteRecordVectorStructRelease(ark_vector); 74 } 75 HasPasteData()76bool ArkPasteBoardClientAdapterWrapper::HasPasteData() 77 { 78 if (!ctocpp_) { 79 return false; 80 } 81 return ctocpp_->HasPasteData(); 82 } 83 Clear()84void ArkPasteBoardClientAdapterWrapper::Clear() 85 { 86 if (!ctocpp_) { 87 return; 88 } 89 ctocpp_->Clear(); 90 } 91 OpenRemoteUri(const std::string & path)92int32_t ArkPasteBoardClientAdapterWrapper::OpenRemoteUri(const std::string& path) 93 { 94 if (!ctocpp_) { 95 return -1; 96 } 97 ArkWebString str = ArkWebStringClassToStruct(path); 98 int32_t result = ctocpp_->OpenRemoteUri(str); 99 ArkWebStringStructRelease(str); 100 return result; 101 } 102 IsLocalPaste()103bool ArkPasteBoardClientAdapterWrapper::IsLocalPaste() 104 { 105 if (!ctocpp_) { 106 return false; 107 } 108 return ctocpp_->IsLocalPaste(); 109 } 110 GetTokenId()111uint32_t ArkPasteBoardClientAdapterWrapper::GetTokenId() 112 { 113 if (!ctocpp_) { 114 return 0; 115 } 116 return ctocpp_->GetTokenId(); 117 } 118 AddPasteboardChangedObserver(std::shared_ptr<NWeb::PasteboardObserverAdapter> callback)119int32_t ArkPasteBoardClientAdapterWrapper::AddPasteboardChangedObserver( 120 std::shared_ptr<NWeb::PasteboardObserverAdapter> callback) 121 { 122 if (!ctocpp_) { 123 return -1; 124 } 125 126 if (CHECK_SHARED_PTR_IS_NULL(callback)) { 127 return ctocpp_->AddPasteboardChangedObserver(nullptr); 128 } 129 130 return ctocpp_->AddPasteboardChangedObserver(new ArkPasteBoardObserverAdapterImpl(callback)); 131 } 132 RemovePasteboardChangedObserver(int32_t callbackId)133void ArkPasteBoardClientAdapterWrapper::RemovePasteboardChangedObserver(int32_t callbackId) 134 { 135 if (!ctocpp_) { 136 return; 137 } 138 ctocpp_->RemovePasteboardChangedObserver(callbackId); 139 } 140 141 } // namespace OHOS::ArkWeb 142