1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License.
5e0dac50fSopenharmony_ci * You may obtain a copy of the License at
6e0dac50fSopenharmony_ci *
7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8e0dac50fSopenharmony_ci *
9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and
13e0dac50fSopenharmony_ci * limitations under the License.
14e0dac50fSopenharmony_ci */
15e0dac50fSopenharmony_ci
16e0dac50fSopenharmony_ciconst pip = requireNapi('pip');
17e0dac50fSopenharmony_ciconst NodeController = requireNapi('arkui.node').NodeController;
18e0dac50fSopenharmony_ciconst FrameNode = requireNapi('arkui.node').FrameNode;
19e0dac50fSopenharmony_ci
20e0dac50fSopenharmony_ciconst TAG = 'PiPContent';
21e0dac50fSopenharmony_ciconst ABOUT_TO_STOP = 3;
22e0dac50fSopenharmony_ci
23e0dac50fSopenharmony_ciclass XCNodeController extends NodeController {
24e0dac50fSopenharmony_ci    constructor(k2) {
25e0dac50fSopenharmony_ci        super();
26e0dac50fSopenharmony_ci        this.node = null;
27e0dac50fSopenharmony_ci        this.mXComponent = k2;
28e0dac50fSopenharmony_ci    }
29e0dac50fSopenharmony_ci
30e0dac50fSopenharmony_ci    makeNode(i2) {
31e0dac50fSopenharmony_ci        let j2;
32e0dac50fSopenharmony_ci        this.node = new FrameNode(i2);
33e0dac50fSopenharmony_ci        this.node.appendChild(this.mXComponent);
34e0dac50fSopenharmony_ci        return this.node;
35e0dac50fSopenharmony_ci    }
36e0dac50fSopenharmony_ci
37e0dac50fSopenharmony_ci    removeNode() {
38e0dac50fSopenharmony_ci        let h2;
39e0dac50fSopenharmony_ci        (h2 = this.node) === null || h2 === void 0 ? void 0 : h2.removeChild(this.mXComponent);
40e0dac50fSopenharmony_ci    }
41e0dac50fSopenharmony_ci}
42e0dac50fSopenharmony_ci
43e0dac50fSopenharmony_ciexport class PiPContent extends ViewPU {
44e0dac50fSopenharmony_ci    constructor(b2, c2, d2, e2 = -1, f2 = undefined, g2) {
45e0dac50fSopenharmony_ci        super(b2, d2, e2, g2);
46e0dac50fSopenharmony_ci        if (typeof f2 === 'function') {
47e0dac50fSopenharmony_ci            this.paramsGenerator_ = f2;
48e0dac50fSopenharmony_ci        }
49e0dac50fSopenharmony_ci        this.xComponentController = new XComponentController;
50e0dac50fSopenharmony_ci        this.nodeController = null;
51e0dac50fSopenharmony_ci        this.mXCNodeController = null;
52e0dac50fSopenharmony_ci        this.useNode = false;
53e0dac50fSopenharmony_ci        this.xComponentId = 'pipContent';
54e0dac50fSopenharmony_ci        this.xComponentType = 'surface';
55e0dac50fSopenharmony_ci        this.xComponent = null;
56e0dac50fSopenharmony_ci        this.setInitiallyProvidedValue(c2);
57e0dac50fSopenharmony_ci    }
58e0dac50fSopenharmony_ci
59e0dac50fSopenharmony_ci    setInitiallyProvidedValue(a2) {
60e0dac50fSopenharmony_ci        if (a2.xComponentController !== undefined) {
61e0dac50fSopenharmony_ci            this.xComponentController = a2.xComponentController;
62e0dac50fSopenharmony_ci        }
63e0dac50fSopenharmony_ci        if (a2.nodeController !== undefined) {
64e0dac50fSopenharmony_ci            this.nodeController = a2.nodeController;
65e0dac50fSopenharmony_ci        }
66e0dac50fSopenharmony_ci        if (a2.mXCNodeController !== undefined) {
67e0dac50fSopenharmony_ci            this.mXCNodeController = a2.mXCNodeController;
68e0dac50fSopenharmony_ci        }
69e0dac50fSopenharmony_ci        if (a2.useNode !== undefined) {
70e0dac50fSopenharmony_ci            this.useNode = a2.useNode;
71e0dac50fSopenharmony_ci        }
72e0dac50fSopenharmony_ci        if (a2.xComponentId !== undefined) {
73e0dac50fSopenharmony_ci            this.xComponentId = a2.xComponentId;
74e0dac50fSopenharmony_ci        }
75e0dac50fSopenharmony_ci        if (a2.xComponentType !== undefined) {
76e0dac50fSopenharmony_ci            this.xComponentType = a2.xComponentType;
77e0dac50fSopenharmony_ci        }
78e0dac50fSopenharmony_ci        if (a2.xComponent !== undefined) {
79e0dac50fSopenharmony_ci            this.xComponent = a2.xComponent;
80e0dac50fSopenharmony_ci        }
81e0dac50fSopenharmony_ci    }
82e0dac50fSopenharmony_ci
83e0dac50fSopenharmony_ci    updateStateVars(z1) {
84e0dac50fSopenharmony_ci    }
85e0dac50fSopenharmony_ci
86e0dac50fSopenharmony_ci    purgeVariableDependenciesOnElmtId(y1) {
87e0dac50fSopenharmony_ci    }
88e0dac50fSopenharmony_ci
89e0dac50fSopenharmony_ci    aboutToAppear() {
90e0dac50fSopenharmony_ci        this.nodeController = pip.getCustomUIController();
91e0dac50fSopenharmony_ci        this.xComponent = pip.getTypeNode();
92e0dac50fSopenharmony_ci        if (this.xComponent === null || this.xComponent === undefined) {
93e0dac50fSopenharmony_ci            console.error(TAG, `xComponent node is null`);
94e0dac50fSopenharmony_ci            return;
95e0dac50fSopenharmony_ci        }
96e0dac50fSopenharmony_ci        let u1 = this.xComponent.getNodeType();
97e0dac50fSopenharmony_ci        if (u1 !== 'XComponent') {
98e0dac50fSopenharmony_ci            console.error(`xComponent type mismatch: ${u1}`);
99e0dac50fSopenharmony_ci            return;
100e0dac50fSopenharmony_ci        }
101e0dac50fSopenharmony_ci        this.useNode = true;
102e0dac50fSopenharmony_ci        let parent = this.xComponent.getParent();
103e0dac50fSopenharmony_ci        if (parent === null || parent === undefined) {
104e0dac50fSopenharmony_ci            pip.setPipNodeType(this.xComponent, false);
105e0dac50fSopenharmony_ci        } else {
106e0dac50fSopenharmony_ci            pip.setPipNodeType(this.xComponent, true);
107e0dac50fSopenharmony_ci            parent.removeChild(this.xComponent);
108e0dac50fSopenharmony_ci        }
109e0dac50fSopenharmony_ci        pip.setTypeNodeEnabled();
110e0dac50fSopenharmony_ci        this.mXCNodeController = new XCNodeController(this.xComponent);
111e0dac50fSopenharmony_ci        console.info(TAG, 'use Node Controller');
112e0dac50fSopenharmony_ci        pip.on('stateChange', (w1) => {
113e0dac50fSopenharmony_ci            let x1;
114e0dac50fSopenharmony_ci            console.info(TAG, `stateChange state: ${w1}`);
115e0dac50fSopenharmony_ci            if (w1 === ABOUT_TO_STOP) {
116e0dac50fSopenharmony_ci                (x1 = this.mXCNodeController) === null || x1 === void 0 ? void 0 : x1.removeNode();
117e0dac50fSopenharmony_ci            }
118e0dac50fSopenharmony_ci        });
119e0dac50fSopenharmony_ci    }
120e0dac50fSopenharmony_ci
121e0dac50fSopenharmony_ci    aboutToBeDeleted() {
122e0dac50fSopenharmony_ci        SubscriberManager.Get().delete(this.id__());
123e0dac50fSopenharmony_ci        this.aboutToBeDeletedInternal();
124e0dac50fSopenharmony_ci    }
125e0dac50fSopenharmony_ci
126e0dac50fSopenharmony_ci    aboutToDisappear() {
127e0dac50fSopenharmony_ci        pip.off('stateChange');
128e0dac50fSopenharmony_ci    }
129e0dac50fSopenharmony_ci
130e0dac50fSopenharmony_ci    initialRender() {
131e0dac50fSopenharmony_ci        this.observeComponentCreation2((s1, t1) => {
132e0dac50fSopenharmony_ci            Stack.create();
133e0dac50fSopenharmony_ci            Stack.size({ width: '100%', height: '100%' });
134e0dac50fSopenharmony_ci        }, Stack);
135e0dac50fSopenharmony_ci        this.observeComponentCreation2((h1, i1) => {
136e0dac50fSopenharmony_ci            If.create();
137e0dac50fSopenharmony_ci            if (this.useNode) {
138e0dac50fSopenharmony_ci                this.ifElseBranchUpdateFunction(0, () => {
139e0dac50fSopenharmony_ci                    this.buildNode.bind(this)();
140e0dac50fSopenharmony_ci                });
141e0dac50fSopenharmony_ci            } else {
142e0dac50fSopenharmony_ci                this.ifElseBranchUpdateFunction(1, () => {
143e0dac50fSopenharmony_ci                    this.buildXComponent.bind(this)();
144e0dac50fSopenharmony_ci                });
145e0dac50fSopenharmony_ci            }
146e0dac50fSopenharmony_ci        }, If);
147e0dac50fSopenharmony_ci        If.pop();
148e0dac50fSopenharmony_ci        this.observeComponentCreation2((a1, b1) => {
149e0dac50fSopenharmony_ci            If.create();
150e0dac50fSopenharmony_ci            if (this.nodeController !== null) {
151e0dac50fSopenharmony_ci                this.ifElseBranchUpdateFunction(0, () => {
152e0dac50fSopenharmony_ci                    this.buildCustomUI.bind(this)();
153e0dac50fSopenharmony_ci                });
154e0dac50fSopenharmony_ci            } else {
155e0dac50fSopenharmony_ci                this.ifElseBranchUpdateFunction(1, () => {
156e0dac50fSopenharmony_ci                });
157e0dac50fSopenharmony_ci            }
158e0dac50fSopenharmony_ci        }, If);
159e0dac50fSopenharmony_ci        If.pop();
160e0dac50fSopenharmony_ci        Stack.pop();
161e0dac50fSopenharmony_ci    }
162e0dac50fSopenharmony_ci
163e0dac50fSopenharmony_ci    buildCustomUI(g1 = null) {
164e0dac50fSopenharmony_ci        this.observeComponentCreation2((i1, j1) => {
165e0dac50fSopenharmony_ci            NodeContainer.create(this.nodeController);
166e0dac50fSopenharmony_ci            NodeContainer.size({ width: '100%', height: '100%'});
167e0dac50fSopenharmony_ci        }, NodeContainer);
168e0dac50fSopenharmony_ci    }
169e0dac50fSopenharmony_ci
170e0dac50fSopenharmony_ci    buildXComponent(b1 = null) {
171e0dac50fSopenharmony_ci        this.observeComponentCreation2((d1, e1) => {
172e0dac50fSopenharmony_ci            XComponent.create({
173e0dac50fSopenharmony_ci                id: this.xComponentId,
174e0dac50fSopenharmony_ci                type: this.xComponentType,
175e0dac50fSopenharmony_ci                controller: this.xComponentController
176e0dac50fSopenharmony_ci            }, 'pipContent_XComponent');
177e0dac50fSopenharmony_ci            XComponent.onLoad((() => {
178e0dac50fSopenharmony_ci                pip.initXComponentController(this.xComponentController);
179e0dac50fSopenharmony_ci                console.info(TAG, 'XComponent onLoad done');
180e0dac50fSopenharmony_ci            }));
181e0dac50fSopenharmony_ci            XComponent.size({ width: '100%', height: '100%' });
182e0dac50fSopenharmony_ci            XComponent.backgroundColor(Color.Transparent);
183e0dac50fSopenharmony_ci        }, XComponent);
184e0dac50fSopenharmony_ci    }
185e0dac50fSopenharmony_ci
186e0dac50fSopenharmony_ci    buildNode(x = null) {
187e0dac50fSopenharmony_ci        this.observeComponentCreation2((z, a1) => {
188e0dac50fSopenharmony_ci            NodeContainer.create(this.mXCNodeController);
189e0dac50fSopenharmony_ci            NodeContainer.size({ width: '100%', height: '100%' });
190e0dac50fSopenharmony_ci        }, NodeContainer);
191e0dac50fSopenharmony_ci    }
192e0dac50fSopenharmony_ci
193e0dac50fSopenharmony_ci    rerender() {
194e0dac50fSopenharmony_ci        this.updateDirtyElements();
195e0dac50fSopenharmony_ci    }
196e0dac50fSopenharmony_ci
197e0dac50fSopenharmony_ci    static getEntryName() {
198e0dac50fSopenharmony_ci        return 'PiPContent';
199e0dac50fSopenharmony_ci    }
200e0dac50fSopenharmony_ci}
201e0dac50fSopenharmony_ci
202e0dac50fSopenharmony_ciViewStackProcessor.StartGetAccessRecordingFor(ViewStackProcessor.AllocateNewElmetIdForNextComponent());
203e0dac50fSopenharmony_ciloadDocument(new PiPContent(void 0, {}));
204e0dac50fSopenharmony_ciViewStackProcessor.StopGetAccessRecording();