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();