18c339a94Sopenharmony_ci/*
28c339a94Sopenharmony_ci* Copyright (c) 2024 Shenzhen Kaihong Digital Industry Development Co., Ltd.
38c339a94Sopenharmony_ci* Licensed under the Apache License, Version 2.0 (the "License");
48c339a94Sopenharmony_ci* you may not use this file except in compliance with the License.
58c339a94Sopenharmony_ci* You may obtain a copy of the License at
68c339a94Sopenharmony_ci*
78c339a94Sopenharmony_ci* http://www.apache.org/licenses/LICENSE-2.0
88c339a94Sopenharmony_ci*
98c339a94Sopenharmony_ci* Unless required by applicable law or agreed to in writing, software
108c339a94Sopenharmony_ci* distributed under the License is distributed on an "AS IS" BASIS,
118c339a94Sopenharmony_ci* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128c339a94Sopenharmony_ci* See the License for the specific language governing permissions and
138c339a94Sopenharmony_ci* limitations under the License.
148c339a94Sopenharmony_ci*/
158c339a94Sopenharmony_ciimport napitest from 'libnapitest.so';
168c339a94Sopenharmony_ciimport testEntry from 'libentry.so';
178c339a94Sopenharmony_ci
188c339a94Sopenharmony_cilet ns: napitest.NodeISayHello =  new napitest.NodeISayHello();
198c339a94Sopenharmony_ciclass NodeISayHelloListenerImpl {
208c339a94Sopenharmony_ci  onSayHelloStart(info: object) {
218c339a94Sopenharmony_ci    AppStorage.SetOrCreate("textInfoStart", JSON.stringify(info))
228c339a94Sopenharmony_ci    console.log('napiTestDemo ----onSayHelloStart', JSON.stringify(info));
238c339a94Sopenharmony_ci  }
248c339a94Sopenharmony_ci  onSayHelloEnd(info: object) {
258c339a94Sopenharmony_ci    console.info("napiTestDemo onSayHelloEnd info type is : " + typeof (info));
268c339a94Sopenharmony_ci    AppStorage.SetOrCreate("textInfoEnd", JSON.stringify(info))
278c339a94Sopenharmony_ci    console.log('napiTestDemo ----onSayHelloEnd.', JSON.stringify(info));
288c339a94Sopenharmony_ci  }
298c339a94Sopenharmony_ci}
308c339a94Sopenharmony_ci
318c339a94Sopenharmony_cilet listener: NodeISayHelloListenerImpl = new NodeISayHelloListenerImpl()
328c339a94Sopenharmony_ci
338c339a94Sopenharmony_ci// register注册的回调
348c339a94Sopenharmony_cifunction onCallbackfunnm(wid: number) {
358c339a94Sopenharmony_ci  AppStorage.SetOrCreate("callBackNum", JSON.stringify(wid))
368c339a94Sopenharmony_ci  console.info("napiTestDemo ----onCallbackfunnm wid = " + wid)
378c339a94Sopenharmony_ci  return "ocCallbackfuncnm";
388c339a94Sopenharmony_ci}
398c339a94Sopenharmony_ci
408c339a94Sopenharmony_ci@Entry
418c339a94Sopenharmony_ci@Component
428c339a94Sopenharmony_cistruct Index {
438c339a94Sopenharmony_ci  @State addResult: string = '';
448c339a94Sopenharmony_ci  @State promiseRes: string = ''
458c339a94Sopenharmony_ci  @State returnVal: string = ''
468c339a94Sopenharmony_ci  @StorageLink("textInfoStart")textInfoStart: string = ""
478c339a94Sopenharmony_ci  @StorageLink("textInfoEnd")textInfoEnd: string = ""
488c339a94Sopenharmony_ci  @StorageLink("callBackNum")callBackNum: string = ""
498c339a94Sopenharmony_ci
508c339a94Sopenharmony_ci  build() {
518c339a94Sopenharmony_ci    Row() {
528c339a94Sopenharmony_ci      Column() {
538c339a94Sopenharmony_ci        Button() {
548c339a94Sopenharmony_ci          Text('注册object回调后SayHello调用回调')
558c339a94Sopenharmony_ci            .fontSize(20)
568c339a94Sopenharmony_ci            .fontWeight(FontWeight.Bold)
578c339a94Sopenharmony_ci        }
588c339a94Sopenharmony_ci        .type(ButtonType.Capsule)
598c339a94Sopenharmony_ci        .margin({
608c339a94Sopenharmony_ci          top: 10
618c339a94Sopenharmony_ci        })
628c339a94Sopenharmony_ci        .backgroundColor('#0D9FFB')
638c339a94Sopenharmony_ci        .width('90%')
648c339a94Sopenharmony_ci        .height('5%')
658c339a94Sopenharmony_ci        .onClick(() => {
668c339a94Sopenharmony_ci          AppStorage.SetOrCreate("textInfoStart", "")
678c339a94Sopenharmony_ci          AppStorage.SetOrCreate("textInfoEnd", "")
688c339a94Sopenharmony_ci          // 注册回调
698c339a94Sopenharmony_ci          ns.addSayHelloListener(listener);
708c339a94Sopenharmony_ci          // 调用回调
718c339a94Sopenharmony_ci          ns.sayHello("js1", "native1", napitest.SayType.kInitiative);
728c339a94Sopenharmony_ci        })
738c339a94Sopenharmony_ci
748c339a94Sopenharmony_ci        Button() {
758c339a94Sopenharmony_ci          Text('注销object回调后SayHello调用回调')
768c339a94Sopenharmony_ci            .fontSize(20)
778c339a94Sopenharmony_ci            .fontWeight(FontWeight.Bold)
788c339a94Sopenharmony_ci        }
798c339a94Sopenharmony_ci        .type(ButtonType.Capsule)
808c339a94Sopenharmony_ci        .margin({
818c339a94Sopenharmony_ci          top: 10
828c339a94Sopenharmony_ci        })
838c339a94Sopenharmony_ci        .backgroundColor('#0D9FFB')
848c339a94Sopenharmony_ci        .width('90%')
858c339a94Sopenharmony_ci        .height('5%')
868c339a94Sopenharmony_ci        .onClick(() => {
878c339a94Sopenharmony_ci          AppStorage.SetOrCreate("textInfoStart", "")
888c339a94Sopenharmony_ci          AppStorage.SetOrCreate("textInfoEnd", "")
898c339a94Sopenharmony_ci          // 注销回调 removeSayHelloListener
908c339a94Sopenharmony_ci          ns.removeSayHelloListener(listener);
918c339a94Sopenharmony_ci          // 调用回调
928c339a94Sopenharmony_ci          ns.sayHello("js2", "native2", napitest.SayType.kInitiative);
938c339a94Sopenharmony_ci        })
948c339a94Sopenharmony_ci
958c339a94Sopenharmony_ci        // promise回调
968c339a94Sopenharmony_ci        Button() {
978c339a94Sopenharmony_ci          Text('Promise 回调')
988c339a94Sopenharmony_ci            .fontSize(20)
998c339a94Sopenharmony_ci            .fontWeight(FontWeight.Bold)
1008c339a94Sopenharmony_ci        }
1018c339a94Sopenharmony_ci        .type(ButtonType.Capsule)
1028c339a94Sopenharmony_ci        .margin({
1038c339a94Sopenharmony_ci          top: 10
1048c339a94Sopenharmony_ci        })
1058c339a94Sopenharmony_ci        .backgroundColor('#0D9FFB')
1068c339a94Sopenharmony_ci        .width('90%')
1078c339a94Sopenharmony_ci        .height('5%')
1088c339a94Sopenharmony_ci        .onClick(async () => {
1098c339a94Sopenharmony_ci          await ns.sayHelloWithResponse("response from", "response to", napitest.SayType.kResponse).then((ret: object) => {
1108c339a94Sopenharmony_ci            this.promiseRes = JSON.stringify(ret);
1118c339a94Sopenharmony_ci            console.info("napiTestDemo ----sayHelloWithResponse ret = " + JSON.stringify(ret));
1128c339a94Sopenharmony_ci          });
1138c339a94Sopenharmony_ci        })
1148c339a94Sopenharmony_ci
1158c339a94Sopenharmony_ci        Button() {
1168c339a94Sopenharmony_ci          Text('register回调后sayHi调用回调')
1178c339a94Sopenharmony_ci            .fontSize(20)
1188c339a94Sopenharmony_ci            .fontWeight(FontWeight.Bold)
1198c339a94Sopenharmony_ci        }
1208c339a94Sopenharmony_ci        .type(ButtonType.Capsule)
1218c339a94Sopenharmony_ci        .margin({
1228c339a94Sopenharmony_ci          top: 10
1238c339a94Sopenharmony_ci        })
1248c339a94Sopenharmony_ci        .backgroundColor('#0D9FFB')
1258c339a94Sopenharmony_ci        .width('90%')
1268c339a94Sopenharmony_ci        .height('5%')
1278c339a94Sopenharmony_ci        .onClick( () => {
1288c339a94Sopenharmony_ci          AppStorage.SetOrCreate("callBackNum", "")
1298c339a94Sopenharmony_ci          // 注册回调
1308c339a94Sopenharmony_ci          ns.registerCallbackfunc(onCallbackfunnm);
1318c339a94Sopenharmony_ci          // 调用回调
1328c339a94Sopenharmony_ci          ns.sayHi("js3", "native3", napitest.SayType.kResponse);
1338c339a94Sopenharmony_ci        })
1348c339a94Sopenharmony_ci
1358c339a94Sopenharmony_ci        Button() {
1368c339a94Sopenharmony_ci          Text('unRegister回调后sayHi调用回调')
1378c339a94Sopenharmony_ci            .fontSize(20)
1388c339a94Sopenharmony_ci            .fontWeight(FontWeight.Bold)
1398c339a94Sopenharmony_ci        }
1408c339a94Sopenharmony_ci        .type(ButtonType.Capsule)
1418c339a94Sopenharmony_ci        .margin({
1428c339a94Sopenharmony_ci          top: 10
1438c339a94Sopenharmony_ci        })
1448c339a94Sopenharmony_ci        .backgroundColor('#0D9FFB')
1458c339a94Sopenharmony_ci        .width('90%')
1468c339a94Sopenharmony_ci        .height('5%')
1478c339a94Sopenharmony_ci        .onClick( () => {
1488c339a94Sopenharmony_ci          AppStorage.SetOrCreate("callBackNum", "")
1498c339a94Sopenharmony_ci          // 注销回调
1508c339a94Sopenharmony_ci          ns.unRegisterCallbackfunc(onCallbackfunnm);
1518c339a94Sopenharmony_ci          // 调用回调
1528c339a94Sopenharmony_ci          ns.sayHi("js4", "native4", napitest.SayType.kResponse);
1538c339a94Sopenharmony_ci        })
1548c339a94Sopenharmony_ci
1558c339a94Sopenharmony_ci        // 调用普通函数
1568c339a94Sopenharmony_ci        Button() {
1578c339a94Sopenharmony_ci          Text('调用funcTest方法')
1588c339a94Sopenharmony_ci            .fontSize(20)
1598c339a94Sopenharmony_ci            .fontWeight(FontWeight.Bold)
1608c339a94Sopenharmony_ci        }
1618c339a94Sopenharmony_ci        .type(ButtonType.Capsule)
1628c339a94Sopenharmony_ci        .margin({
1638c339a94Sopenharmony_ci          top: 10
1648c339a94Sopenharmony_ci        })
1658c339a94Sopenharmony_ci        .backgroundColor('#0D9FFB')
1668c339a94Sopenharmony_ci        .width('90%')
1678c339a94Sopenharmony_ci        .height('5%')
1688c339a94Sopenharmony_ci        .onClick( () => {
1698c339a94Sopenharmony_ci          this.returnVal = napitest.funcTest(false);
1708c339a94Sopenharmony_ci          console.info("napiTestDemo ----funcTest returnVal = " + this.returnVal)
1718c339a94Sopenharmony_ci        })
1728c339a94Sopenharmony_ci
1738c339a94Sopenharmony_ci        // 调用其他模块的方法
1748c339a94Sopenharmony_ci        Button() {
1758c339a94Sopenharmony_ci          Text('调用entry模块的方法')
1768c339a94Sopenharmony_ci            .fontSize(20)
1778c339a94Sopenharmony_ci            .fontWeight(FontWeight.Bold)
1788c339a94Sopenharmony_ci        }
1798c339a94Sopenharmony_ci        .type(ButtonType.Capsule)
1808c339a94Sopenharmony_ci        .margin({
1818c339a94Sopenharmony_ci          top: 10
1828c339a94Sopenharmony_ci        })
1838c339a94Sopenharmony_ci        .backgroundColor('#0D9FFB')
1848c339a94Sopenharmony_ci        .width('90%')
1858c339a94Sopenharmony_ci        .height('5%')
1868c339a94Sopenharmony_ci        .onClick( () => {
1878c339a94Sopenharmony_ci          this.addResult = testEntry.add(2, 3).toString();
1888c339a94Sopenharmony_ci          console.info("napiTestDemo ----add addResult = " + this.addResult)
1898c339a94Sopenharmony_ci        })
1908c339a94Sopenharmony_ci
1918c339a94Sopenharmony_ci        Text('promise回调: promiseResult = ' + this.promiseRes).margin({ top: 10 })
1928c339a94Sopenharmony_ci        Text('sayHelloStart回调: info = ' + this.textInfoStart).margin({ top: 10 })
1938c339a94Sopenharmony_ci        Text('sayHelloEnd回调: info = ' + this.textInfoEnd).margin({ top: 10 })
1948c339a94Sopenharmony_ci        Text('register注册的回调: wid = ' + this.callBackNum).margin({ top: 10 })
1958c339a94Sopenharmony_ci        Text('普通方法funcTest返回值: returnVal = ' + this.returnVal).margin({ top: 10 })
1968c339a94Sopenharmony_ci        Text('libentry模块: 2 + 3 = ' + this.addResult).margin({ top: 10 })
1978c339a94Sopenharmony_ci      }
1988c339a94Sopenharmony_ci      .width('100%')
1998c339a94Sopenharmony_ci    }
2008c339a94Sopenharmony_ci    .height('100%')
2018c339a94Sopenharmony_ci  }
2028c339a94Sopenharmony_ci}
203