/* * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "bridge/declarative_frontend/jsview/js_clipboard.h" #include #include "base/log/ace_scoring_log.h" #include "base/log/ace_trace.h" #include "core/common/clipboard/clipboard_proxy.h" #include "core/common/container.h" #include "frameworks/bridge/declarative_frontend/engine/functions/js_clipboard_function.h" namespace OHOS::Ace::Framework { void JSClipboard::JSBind(BindingTarget globalObj) { JSClass::Declare("JSClipboard"); JSClass::StaticMethod("get", &JSClipboard::Get); JSClass::StaticMethod("set", &JSClipboard::Set); JSClass::StaticMethod("clear", &JSClipboard::Clear); JSClass::Bind(globalObj); } void JSClipboard::Get(const JSCallbackInfo& info) { auto container = Container::Current(); if (!container) { LOGW("container is null"); return; } auto executor = container->GetTaskExecutor(); auto clipboard = ClipboardProxy::GetInstance()->GetClipboard(executor); if (info[0]->IsFunction()) { RefPtr callback = AceType::MakeRefPtr(JSRef::Cast(info[0])); auto function = [execCtx = info.GetExecutionContext(), callback](const std::string& str) { JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx); auto func = std::move(callback); ACE_SCORING_EVENT("clipboard.get"); func->Execute(str); }; if (clipboard) { clipboard->GetData(function); } } } void JSClipboard::Set(const std::string& data) { auto container = Container::Current(); if (!container) { LOGW("container is null"); return; } auto executor = container->GetTaskExecutor(); auto clipboard = ClipboardProxy::GetInstance()->GetClipboard(executor); if (clipboard) { clipboard->SetData(data); } } void JSClipboard::Clear() { auto container = Container::Current(); if (!container) { LOGW("container is null"); return; } auto executor = container->GetTaskExecutor(); auto clipboard = ClipboardProxy::GetInstance()->GetClipboard(executor); if (clipboard) { clipboard->Clear(); } } } // namespace OHOS::Ace::Framework