1 /*
2  * Copyright (c) 2021 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 "frameworks/bridge/js_frontend/engine/jsi/jsi_image_animator_bridge.h"
17 
18 namespace OHOS::Ace::Framework {
19 
JsGetState(const shared_ptr<JsRuntime> & runtime,NodeId nodeId)20 shared_ptr<JsValue> JsiImageAnimatorBridge::JsGetState(const shared_ptr<JsRuntime>& runtime, NodeId nodeId)
21 {
22     if (!runtime) {
23         LOGE("JsGetState failed. runtime is null.");
24         return nullptr;
25     }
26     auto engine = static_cast<JsiEngineInstance*>(runtime->GetEmbedderData());
27     if (!engine) {
28         LOGE("JsGetState failed. engine is null.");
29         return runtime->NewUndefined();
30     }
31     auto page = engine->GetRunningPage();
32     if (!page) {
33         LOGE("JsGetState failed. page is null.");
34         return runtime->NewUndefined();
35     }
36     const char* state = "";
37     auto task = [nodeId, page, &state]() {
38         auto domDoc = page->GetDomDocument();
39         if (!domDoc) {
40             return;
41         }
42         auto domImageAnimator = AceType::DynamicCast<DOMImageAnimator>(domDoc->GetDOMNodeById(nodeId));
43         if (!domImageAnimator) {
44             return;
45         }
46         state = domImageAnimator->GetState();
47     };
48     auto delegate = engine->GetFrontendDelegate();
49     if (!delegate) {
50         LOGE("JsGetCurrentOffset failed. delegate is null.");
51         return runtime->NewUndefined();
52     }
53     delegate->PostSyncTaskToPage(task, "ArkUIImageAnimatorGetState");
54     return runtime->NewString(state);
55 }
56 
57 } // namespace OHOS::Ace::Framework
58