From 26556901c732ae6efde786e99cf8b46ee4f9f99f Mon Sep 17 00:00:00 2001 From: dxy <15829754822@163.com> Date: Fri, 17 Nov 2023 20:33:04 +0800 Subject: [PATCH] add hap Signed-off-by: dxy <15829754822@163.com> --- display/.gitignore | 11 + display/AppScope/app.json5 | 10 + .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 6790 bytes display/build-profile.json5 | 50 ++++ display/entry/.gitignore | 6 + display/entry/BUILD.gn | 44 +++ display/entry/build-profile.json5 | 14 + display/entry/hvigorfile.ts | 6 + display/entry/oh-package.json5 | 10 + .../main/ets/constants/CommonConstants.ets | 12 + .../ets/mainability/DHardwareUIAbility.ets | 215 +++++++++++++++ .../entry/src/main/ets/pages/DHardwareUI.ets | 260 ++++++++++++++++++ display/entry/src/main/ets/utils/Logger.ts | 23 ++ display/entry/src/main/module.json5 | 37 +++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 96 +++++++ .../src/main/resources/base/media/bgcWall.png | Bin 0 -> 41424 bytes .../base/media/ic_public_screencap.svg | 15 + .../resources/base/media/ic_public_voice.svg | 15 + .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../src/main/resources/base/media/icon01.png | Bin 0 -> 120 bytes .../resources/base/profile/main_pages.json | 5 + .../main/resources/en_US/element/string.json | 96 +++++++ .../main/resources/zh_CN/element/string.json | 96 +++++++ .../src/ohosTest/ets/test/Ability.test.ets | 35 +++ .../entry/src/ohosTest/ets/test/List.test.ets | 5 + .../ohosTest/ets/testability/TestAbility.ets | 50 ++++ .../ohosTest/ets/testability/pages/Index.ets | 34 +++ .../ets/testrunner/OpenHarmonyTestRunner.ts | 46 ++++ display/entry/src/ohosTest/module.json5 | 37 +++ .../resources/base/element/color.json | 8 + .../resources/base/element/string.json | 16 ++ .../ohosTest/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../resources/base/profile/test_pages.json | 5 + display/hvigor/hvigor-config.json5 | 18 ++ display/hvigor/hvigor-wrapper.js | 1 + display/hvigorfile.ts | 6 + display/hvigorw | 48 ++++ display/hvigorw.bat | 64 +++++ display/oh-package-lock.json5 | 13 + display/oh-package.json5 | 12 + display/signature/DHardware_UI.p7b | Bin 0 -> 3422 bytes 43 files changed, 1435 insertions(+) create mode 100644 display/.gitignore create mode 100644 display/AppScope/app.json5 create mode 100644 display/AppScope/resources/base/element/string.json create mode 100644 display/AppScope/resources/base/media/app_icon.png create mode 100644 display/build-profile.json5 create mode 100644 display/entry/.gitignore create mode 100644 display/entry/BUILD.gn create mode 100644 display/entry/build-profile.json5 create mode 100644 display/entry/hvigorfile.ts create mode 100644 display/entry/oh-package.json5 create mode 100644 display/entry/src/main/ets/constants/CommonConstants.ets create mode 100644 display/entry/src/main/ets/mainability/DHardwareUIAbility.ets create mode 100644 display/entry/src/main/ets/pages/DHardwareUI.ets create mode 100644 display/entry/src/main/ets/utils/Logger.ts create mode 100644 display/entry/src/main/module.json5 create mode 100644 display/entry/src/main/resources/base/element/color.json create mode 100644 display/entry/src/main/resources/base/element/string.json create mode 100644 display/entry/src/main/resources/base/media/bgcWall.png create mode 100644 display/entry/src/main/resources/base/media/ic_public_screencap.svg create mode 100644 display/entry/src/main/resources/base/media/ic_public_voice.svg create mode 100644 display/entry/src/main/resources/base/media/icon.png create mode 100644 display/entry/src/main/resources/base/media/icon01.png create mode 100644 display/entry/src/main/resources/base/profile/main_pages.json create mode 100644 display/entry/src/main/resources/en_US/element/string.json create mode 100644 display/entry/src/main/resources/zh_CN/element/string.json create mode 100644 display/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 display/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 display/entry/src/ohosTest/ets/testability/TestAbility.ets create mode 100644 display/entry/src/ohosTest/ets/testability/pages/Index.ets create mode 100644 display/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts create mode 100644 display/entry/src/ohosTest/module.json5 create mode 100644 display/entry/src/ohosTest/resources/base/element/color.json create mode 100644 display/entry/src/ohosTest/resources/base/element/string.json create mode 100644 display/entry/src/ohosTest/resources/base/media/icon.png create mode 100644 display/entry/src/ohosTest/resources/base/profile/test_pages.json create mode 100644 display/hvigor/hvigor-config.json5 create mode 100644 display/hvigor/hvigor-wrapper.js create mode 100644 display/hvigorfile.ts create mode 100644 display/hvigorw create mode 100644 display/hvigorw.bat create mode 100644 display/oh-package-lock.json5 create mode 100644 display/oh-package.json5 create mode 100644 display/signature/DHardware_UI.p7b diff --git a/display/.gitignore b/display/.gitignore new file mode 100644 index 00000000..fbabf771 --- /dev/null +++ b/display/.gitignore @@ -0,0 +1,11 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test \ No newline at end of file diff --git a/display/AppScope/app.json5 b/display/AppScope/app.json5 new file mode 100644 index 00000000..f3244527 --- /dev/null +++ b/display/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.ohos.dhardware_ui", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/display/AppScope/resources/base/element/string.json b/display/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..25c516e7 --- /dev/null +++ b/display/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "DHardware_UI" + } + ] +} diff --git a/display/AppScope/resources/base/media/app_icon.png b/display/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + console.log(TAG + "stopDistributedHardware in ") + }) + }catch (err){ + Logger.info(TAG + 'stopDistributedHardware err' + err) + } + } + + pause(){ + console.log(TAG + 'pause') + try { + hardwareManager.pauseDistributedHardware(AppStorage.get('description') as hardwareManager.HardwareDescriptor, () => { + console.log(TAG + "pauseDistributedHardware in ") + }) + }catch (err){ + console.log(TAG + 'pauseDistributedHardware err' + err) + } + } + + resume(){ + console.log(TAG + 'resume'); + try { + hardwareManager.resumeDistributedHardware(AppStorage.get('description') as hardwareManager.HardwareDescriptor, () => { + console.log(TAG + "resumeDistributedHardware in ") + }) + }catch (err){ + console.log(TAG + 'resumeDistributedHardware err' + err) + } + } + + screenToUnlock(){ + // 检测当前设备是否处于活动状态(有屏的设备为亮屏状态) + try { + let isActive = power.isActive(); + console.info('power is active: ' + isActive); + // 灭屏状态: + if(!isActive){ + // 唤醒设备 + try { + power.wakeup('wakeup_test'); + } catch(err) { + console.error('wakeup failed, err: ' + err); + } + + // 解锁屏幕 + screenLock.unlock((err:BusinessError, data:Boolean) => { + if (err) { + console.error(`Failed to unlock the screen, Code: ${err.code}, message: ${err.message}`); + return; + } + console.info(`Succeeded in unlocking the screen. result: ${data}`); + }); + + } + } catch(err) { + console.error('check active status failed, err: ' + err); + } + } + + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { + Logger.info(TAG+ 'onCreate : '+'Ability onCreate'); + + // 每次被拉起时,默认设置没有执行StopAbility + this.isStopAbility = false; + Logger.info(TAG+'onCreate : ' +'this.isStopAbility : '+ this.isStopAbility); + + if (want.parameters != undefined) { + Logger.info(TAG+'onCreate : want.parameters : '+JSON.stringify(want.parameters)); + + AppStorage.setOrCreate('type',want.parameters['type']); + AppStorage.setOrCreate('srcNetworkId',want.parameters['srcNetworkId']); + AppStorage.setOrCreate('deviceName',want.parameters['deviceName']); + AppStorage.setOrCreate('deviceType',want.parameters['deviceType']); + + } + + this.screenToUnlock(); + + } + + onNewWant(want:Want){ + Logger.info(TAG+ 'onNewWant : '+'Ability onNewWant'); + + if(want.parameters!=undefined){ + Logger.info(TAG+'onNewWant : want.parameters : '+JSON.stringify(want.parameters)); + Logger.info(TAG+"onNewWant : want.parameters['returnCode'] : "+JSON.stringify(want.parameters['returnCode'])); + + AppStorage.setOrCreate('returnCode',want.parameters['returnCode']); + + let returnCode:number =want.parameters['returnCode'] as number; + Logger.info(TAG+'onNewWant : returnCode : '+returnCode); + + // 接收到的returnCode如果满足条件,则表面已调用stopAbility + if (returnCode == 24200102) { + this.isStopAbility = true; + Logger.info(TAG+'onNewWant : this.isStopAbility : '+this.isStopAbility); + try { + this.context.terminateSelf((err: BusinessError)=>{ + if (err.code) { + Logger.error( `terminateSelf failed, code is ${err.code}, message is ${err.message}`); + return; + } + Logger.info(TAG+'terminateSelf succeed'); + router.back(); + }); + }catch (err){ + let code = (err as BusinessError).code; + let message = (err as BusinessError).message; + Logger.error( `terminateSelf failed, code is ${code}, message is ${message}`); + } + } + } + this.screenToUnlock(); + } + + onDestroy() { + Logger.info(TAG+ 'onDestroy : '+'Ability onDestroy'); + + let sign:string = AppStorage.get('sign') as string; + if (sign == 'stop') { + return; + } + + // stopAbility后应用销毁自身:不再执行停止函数 + if (!this.isStopAbility && !(AppStorage.get('sign')=='onBackPress')) { + Logger.info(TAG+ 'onDestroy : '+'this.isStopAbility : '+this.isStopAbility); + Logger.info(TAG+ 'onDestroy : '+"AppStorage.get('sign') : "+AppStorage.get('sign')); + + this.stop(); + Logger.info(TAG+ 'onDestroy : '+'Distributed Hardware stopped'); + } + + } + + onWindowStageCreate(windowStage: window.WindowStage) { + // Main window is created, set main page for this ability + Logger.info(TAG+ 'onWindowStageCreate : '+'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/DHardwareUI', (err, data) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + // Main window is destroyed, release UI related resources + Logger.info(TAG+ 'onWindowStageDestroy : '+'Ability onWindowStageDestroy'); + + } + + eventFunc(){ + Logger.info(TAG + 'call anonymous eventFunc : pause'); + } + + onForeground() { + // Ability has brought to foreground + Logger.info(TAG+ 'onForeground : '+'Ability onForeground'); + + this.context.eventHub.on('pause',this.pause); + this.context.eventHub.on('resume',this.resume); + + if (!this.isInit && !shareData.isPause) { + this.context.eventHub.emit('resume'); + Logger.info(TAG+'onForeground : ' + 'this.isInit : ' + this.isInit); + Logger.info(TAG+'onForeground : ' + 'shareData.isPause : ' + shareData.isPause); + } + + this.isInit = false; + + AppStorage.setAndLink('isPause',false); + Logger.info(TAG+'onForeground : ' + "AppStorage.get('isPause') : "+ AppStorage.get('isPause')); + } + + onBackground() { + // Ability has back to background + Logger.info(TAG+ 'onBackground : '+'Ability onBackground'); + + let sign:string = AppStorage.get('sign') as string; + if (sign == 'stop') { + return; + } + // stopAbility后应用销毁自身:不再执行暂停函数 + if (!this.isStopAbility){ + Logger.info(TAG+ 'onBackground : '+'this.isStopAbility' + this.isStopAbility); + this.pause(); + Logger.info(TAG+ 'onBackground : '+'Distributed Hardware paused'); + } + } +} diff --git a/display/entry/src/main/ets/pages/DHardwareUI.ets b/display/entry/src/main/ets/pages/DHardwareUI.ets new file mode 100644 index 00000000..cdc7d399 --- /dev/null +++ b/display/entry/src/main/ets/pages/DHardwareUI.ets @@ -0,0 +1,260 @@ +import wallpaper from '@ohos.wallpaper'; +import image from '@ohos.multimedia.image'; +import {BusinessError} from '@ohos.base'; +import hardwareManager from '@ohos.distributedHardware.hardwareManager'; +import common from '@ohos.app.ability.common'; +import router from '@ohos.router'; +import { Logger } from '../utils/Logger'; +import CommonConstants from '../constants/CommonConstants'; + +const TAG = 'testTag_DHardwareUI : '; +PersistentStorage.persistProp('sign',''); + +export let isPause:boolean = false; + +@Entry +@Component +struct DHardwareUI { + @State deviceName: string = ''; + @State deviceType: string = ''; + @State DHTypeName:string = ''; + @State isPause:boolean = true; + @State bgcImg:PixelMap|null = null; + @StorageLink('type') stoLink_type:number = 0; + @StorageLink('srcNetworkId') stoLink_srcNetworkId:string = ''; + @StorageLink('deviceName') stoLink_deviceName:string = ''; + @StorageLink('deviceType') stoLink_deviceType:string = ''; + @StorageLink('sign') sign:string = ''; + @State description: hardwareManager.HardwareDescriptor = { + type: this.stoLink_type, + srcNetworkId: this.stoLink_srcNetworkId + } + private context = getContext(this) as common.UIAbilityContext; + + aboutToAppear(){ + Logger.info(TAG+ 'aboutToAppear '); + this.sign = ''; + + this.deviceType = this.convertDeviceTypeToChStr(this.stoLink_deviceType); + AppStorage.setAndLink('description',this.description); + + Logger.info(TAG+'aboutToAppear : this.description : '+this.description); + Logger.info(TAG+'aboutToAppear : this.description.type : '+this.description.type); + Logger.info(TAG+'aboutToAppear : this.description.srcNetworkId : '+this.description.srcNetworkId); + + if (this.stoLink_type == 1024) { + this.DHTypeName = '麦克风'; + Logger.info(TAG+'aboutToAppear : this.DHTypeName : '+this.DHTypeName); + }else { + this.DHTypeName = '相机'; + Logger.info(TAG+'aboutToAppear : this.DHTypeName : '+this.DHTypeName); + + } + } + + //转换对端可信设备列表的设备类型为中文字符 + convertDeviceTypeToChStr(deviceType:string): string{ + console.log(TAG + 'convertDeviceTypeToChStr',deviceType); + switch (deviceType){ + case 'camera':{ + return '相机'; + } + case 'audio':{ + return '音频'; + } + case 'pc':{ + return '笔记本电脑'; + } + case 'phone':{ + return '手机'; + } + case 'pad':{ + return '平板'; + } + case 'watch':{ + return '手表'; + } + case 'car':{ + return '车机'; + } + case 'tv':{ + return '电视'; + } + case 'display':{ + return '显示屏'; + } + case '2in1':{ + return '2in1'; + } + case 'default':{ + return '手机'; + } + case 'tablet':{ + return '平板'; + } + case 'wearable':{ + return '可穿戴电子设备'; + } + default:{ + return ''; + } + } + } + + changePauseOrResumeStatus(){ + this.isPause = !this.isPause; + console.log(TAG + "changePauseOrResumeStatus - this.isPause" + JSON.stringify(this.isPause)) + } + + stop(){ + Logger.info(TAG + 'stop') + try { + hardwareManager.stopDistributedHardware(this.description, () => { + console.log(TAG + "stopDistributedHardware in ") + }) + }catch (err){ + Logger.info(TAG + 'stopDistributedHardware err' + err) + } + } + + pause(){ + console.log(TAG + 'pause') + try { + hardwareManager.pauseDistributedHardware(this.description, () => { + console.log(TAG + "pauseDistributedHardware in ") + }) + }catch (err){ + console.log(TAG + 'pauseDistributedHardware err' + err) + } + } + + resume(){ + console.log(TAG + 'resume') + try { + hardwareManager.resumeDistributedHardware(this.description, () => { + console.log(TAG + "resumeDistributedHardware in ") + }) + }catch (err){ + console.log(TAG + 'resumeDistributedHardware err' + err) + } + } + + onPageHide(){ + Logger.info(TAG+ 'onPageHide'); + } + + onBackPress(){ + Logger.info(TAG+ 'onBackPress'); + + this.sign = 'onBackPress'; + } + + aboutToDisappear(){ + Logger.info(TAG+ 'aboutToDisappear'); + } + + + + build() { + Stack(){ + Stack(){ + Image($r('app.media.bgcWall')) + } + + Row(){ + Column(){ + Row(){ + Image(this.stoLink_type == 1024? $r('app.media.ic_public_voice') : $r('app.media.ic_public_screencap')) + .width(28) + .height(28) + .fillColor(Color.White) + .margin({left:13}) + } + .borderRadius(50) + .width(54) + .height(54) + .backgroundColor("rgba(0,0,0,0.15)") + + Text(CommonConstants.CONNECTED_TO + this.stoLink_deviceName + CommonConstants.CONJUNCTS + this.deviceType) + .fontSize(18) + .fontWeight(FontWeight.Medium) + .fontColor("#FFFFFF") + .margin({left:0,top:16,right:0}) + .textAlign(TextAlign.Center) + + Text(CommonConstants.STOP_DEVICE + this.DHTypeName) + .fontSize(16) + .fontWeight(FontWeight.Regular) + .fontColor("#99FFFFFF") + .margin({top:2}) + .fontStyle(FontStyle.Normal) + .textAlign(TextAlign.Center) + + GridRow({columns:5,gutter:{x:24}}) { + GridCol({ span: 1 }) + + GridCol({ span: 3 }) { + Column() { + Button(this.isPause ? $r('app.string.pause') : $r('app.string.continue'), { + type: ButtonType.Capsule, + stateEffect: true + }) + .backgroundColor('rgba(255,255,255,0.2)') + .height(40) + .fontSize(16) + .margin({ top: 24 }) + .width('100%') + .onClick(() => { + console.log(TAG + (this.isPause ? "click pause" : "click continue")) + if (this.isPause) { + this.pause(); + // 点击暂停后:存储一个标志isPause并导出(记录是否点击了暂停按钮) + isPause = true; + } else { + this.resume(); + } + this.changePauseOrResumeStatus(); + }) + + Button($r('app.string.disconnect'), { type: ButtonType.Capsule, stateEffect: true }) + .backgroundColor('#FFFFFF') + .height(40) + .fontSize(16) + .margin({ top: 16 }) + .width('100%') + .fontColor('rgba(0,0,0,0.9)') + .onClick(() => { + console.log(TAG + 'click disconnect') + this.sign = 'stop'; + this.stop(); + + try { + this.context.terminateSelf((err: BusinessError) => { + if (err.code) { + console.error(`terminateSelf failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info(TAG + 'terminateSelf succeed'); + router.back(); + }); + } catch (err) { + let code = (err as BusinessError).code; + let message = (err as BusinessError).message; + console.error(`terminateSelf failed, code is ${code}, message is ${message}`); + } + }) + } + } + + GridCol({ span: 1 }) + } + + } + .width('100%') + .padding({left:24,right:24}) + } + .width('100%') + } + + } +} \ No newline at end of file diff --git a/display/entry/src/main/ets/utils/Logger.ts b/display/entry/src/main/ets/utils/Logger.ts new file mode 100644 index 00000000..0312faf6 --- /dev/null +++ b/display/entry/src/main/ets/utils/Logger.ts @@ -0,0 +1,23 @@ +import hilog from '@ohos.hilog'; + +export class Logger{ + static PREFIX: string = '[DHardware_UI]' + static DOMAIN: number = 0xFF00 + static FORMAT: string = '%{public}s' + + static debug(...args: any[]) { + hilog.debug(Logger.DOMAIN, Logger.PREFIX, Logger.FORMAT, args) + } + + static info(...args: any[]) { + hilog.info(Logger.DOMAIN, Logger.PREFIX, Logger.FORMAT, args) + } + + static warn(...args: any[]) { + hilog.warn(Logger.DOMAIN, Logger.PREFIX, Logger.FORMAT, args) + } + + static error(...args: any[]) { + hilog.error(Logger.DOMAIN, Logger.PREFIX, Logger.FORMAT, args) + } +} diff --git a/display/entry/src/main/module.json5 b/display/entry/src/main/module.json5 new file mode 100644 index 00000000..747b2405 --- /dev/null +++ b/display/entry/src/main/module.json5 @@ -0,0 +1,37 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/mainability/DHardwareUIAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:icon", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:icon01", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/display/entry/src/main/resources/base/element/color.json b/display/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..d8806492 --- /dev/null +++ b/display/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#00000000" + } + ] +} \ No newline at end of file diff --git a/display/entry/src/main/resources/base/element/string.json b/display/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..5f6fd385 --- /dev/null +++ b/display/entry/src/main/resources/base/element/string.json @@ -0,0 +1,96 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "DHardwareUI" + }, + { + "name": "connected_to", + "value": "connected to" + }, + { + "name": "conjuncts", + "value": "'s" + }, + { + "name": "stop_device", + "value": "You can disconnect to stop using this device's" + }, + { + "name": "pause", + "value": "Pause" + }, + { + "name": "continue", + "value": "Continue" + }, + { + "name": "camera", + "value": "Camera" + }, + { + "name": "audio", + "value": "Audio" + }, + { + "name": "pc", + "value": "PC" + }, + { + "name": "phone", + "value": "Phone" + }, + { + "name": "pad", + "value": "Pad" + }, + { + "name": "watch", + "value": "Watch" + }, + { + "name": "car", + "value": "Car" + }, + { + "name": "tv", + "value": "TV" + }, + { + "name": "display", + "value": "Display" + }, + { + "name": "2in1", + "value": "2in1" + }, + { + "name": "default", + "value": "Phone" + }, + { + "name": "tablet", + "value": "Tablet" + }, + { + "name": "wearable", + "value": "Wearable" + }, + { + "name": "microphone", + "value": "Mic" + }, + { + "name": "disconnect", + "value": "disconnect" + } + ] +} \ No newline at end of file diff --git a/display/entry/src/main/resources/base/media/bgcWall.png b/display/entry/src/main/resources/base/media/bgcWall.png new file mode 100644 index 0000000000000000000000000000000000000000..a79a1032d56cb155996423b998d66169e7efa1fd GIT binary patch literal 41424 zcmV)5K*_&}P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>Dp=C)#K~#8Nt-Xn_ zt=pCt^!9mwl42LTs8I<<4cJE#(P)eYqfui+pfE;b-y5+(V{e4mr$8vGpb99lET}>g z6OBzmu!%h=O2IwXUo(DVj5*i0_c@oUvG({z-^@A3`qsDCKKH%1ANs-H`tA3=ho48F z{;epk<@N^oDI%Vv27A4&9A5*Dhrg2Tj9;H)d`+h(091$k1<-1f?t`UB-H91BRld#U zEqHswPCn@0gK>4#m?Y+WtKCFEKd|uo}Ay44V5WwBD31>O5;P>m6Kq>?Z7f|YKIv*7>)w9k*Yl2L<+PUoz+x}qJHQz? zt$qym!0rBc7u@%Rc%f1KpAKx03owkk3mluiK z@q!oAlkctjARnMV5~typkjD(Qw~sb}Q%+L(z2^+KcaIAC+eF#AmA{5!>k}t`*|AzF z_mC}LT%x=Cq5Srvzu~uGrf{HDS4z^ADse0A7vR~)EdoF$S5>g0z>+6?q8Z# zgCXB=2!IddX34PY+xLR%<;m|wvlMlHvy25w`3R@8+%Df!tiFz6BJ^nh%)93JSyys7 zTZDhf6U*!9-+t^j`i|u)JRlm&`Up-?0Zm>06{Kgrgjm5#Lz|>NZ3k2lFJ<7C1*utl z*nvC7GOz0A!#yDQ9j$?WaJ{m%WEF!b92P*WL<#SXt&8Ud>z04+I1)xbv8T@cCpRhV z5Juj92J4(B@r2Li^!D3+s0Ql--Ni_O6|O76GN6rjipP{SIDuy$gKb?mjR1USo!IUL zy3M~r=?>GAA7SaiTDp8CesquGfq-v^-QD;YJfxO8K(M79mD7=~?ka%{hInt-1vNyv zWS|oAhT$+JBv*EqCZU~6E?ems`}X6%Y2UF1rrZFRarDVdlwVy9Q|SWhl}hoa-y0{8 zs?@4F7PE{Ss8=$J4I?W~d2u;vz88at@|$4*G<#?b@RzPyd9e$!0_|w|ZBGZkw^9Ly zX<|;lUK&#~cMeT40qZQ&@pZsR-2-?CtuH=U29U||_B(z!UpFv8)E9K81J!E5Q(Wmt zGAIorD331IIq&8JM}imI$l&9;Z;@F89gp=~J}-8IG%tD_?ThOgk<0et3V79dCDQYv zekh#2=4aJ`{oC61Ib(MX@-+|`K(A*8L_CDg9Rmt^=MXA@zJ5cz{lpK~9gBYAEIz|+ zgY5i<6|ZzClC-3Hc+0o=Jc}tG*1zN4 ze&=tgk3wHBh;oc+$)J>?&k*|!^xwAIZ|7S!sbf3i1J-@yQ#y#gmz2JTg)qJiVn@D* zhwwa5r(#JD{B(Q!5=Jh+_BmI*^UTA0`N(Mx%E?oR&O3GSa!w3?3k+X=WqT>9`L#Vfz-g*P>c-!pHyY4Qk`P3-O4m!^I{ zf?l>m6qKhO1?CQ?Wu8MiS7JD#ARO`$OUMdG?_Ti3!=e(@w$dxcy5Yx%eOg|64O8(2 zyyJZqXZ_oM{$oG7?F(MjEc>coa_!dkBcDStl)uP|B@d^wU4Ycl-Fd7(>w$`mul0tp z8Avxz!fwwxGX#@Usxb)e@4oEQm%0uW^gDh*4u2U=A9Ml5>#p7_PHyUBgAO&r^G814 zej2$4#~5EOZ}e0yz94t7xBud|{wP=mZ*$<(DI}ZcdPU+_R3t4CVh_Cf`|h{>5r0m`fm!BxD1^jq{qR_cY+jL9XnOb* z%*vlAV~pav=F(kAAl=VaVqXRf6ZK#Iw)>8i^nq;-pE7{irGoJxOddk%j+iI^()o1B zNL1@l#Rv4352{+`z4Y?$9>y*zwscpYHaXsw?K8g3mF?BTkkGZ8f{8zE*5?50cCdXw zayK%Nw`?E8atP=rXZ+|L&78br5$I!k$K2TV@(-`t{z!cLuYNlR%Ps_R3EBG1%Wg+N z>Dz2ZCIQQuHe^RzH*F3;*D5n-Uz<0ze{6SM(6F+VpL9!>IK0M5Y}p8~&s`|?z;%C; z?+KDi=`Ja}>{9XQY$<0|rhBLN4q5NmtZx2!3uyFk^DvT642Q#c9b0;!_2wrx(Yyfh zZ~yg=|7N8fa0>%lHZT8HFI_8#QlIa$M(@@PMM30?*K4lRw_~;ATL+Z5b%a`a+k%9u zhg`0`Y?Yta++`(+wM{=rz@fG$A=I4KrThd|C@si%ZoYP)6|)jTcIebs%wZ!B3a98z z{XC^uJzGWZn9XyLTq7}-?E{^1Tei;p+kg8ze#CLUUSK8Nxfv-p0A6D0HeWRUDLDXM zVss}>`vD%T4`kX8_|QuRuRjSDZ@uO2ee0!S&d5MdiDfg^n<_Me?m-irof!Fyg`U3%KxrS^jW4`>Gbph=4O8S32|M=fzsF!%O_;U}TXyQe z{hU;(m&<7nrC)|rod`(Hvn@kW_)tgbDW?79Cq}O$kJ$2O{LA1_HoZSi4bJD%qi@-a z_;B&LhyniU)(t~`S+#YvLqVPV8{$8dARqZtUOM2WlP@xP57FF(V%x(-e2qQO4SnzJ z_x!{Un=QpKHzhFCa1WNlDz8eygUSwb#XV&V^zx;y0)EEcJQa(IQsK>X>88} z_8IbycR%Lo%LjJz*1i4SpZHDHuZbc64qd=1{Z2QG&qe!C2x-H-iCY*SfMUc5WxsSn zsfK56sY*9-sSCVwmwk|gbhals+J5+LJ)m`Um26mE0QB05wZmY{UprMoY=r6#c|gh5 z5J^X>kG{wR4oc$8yH5G(;}1OJ<9@&>JaYeyoP9hgAbfF}~ToqHUjD^*|AlhcbE7*tTwL@9ArhS{J#7uWTpMC%w&G z@a=#8$=?XQ+ZY&`q57?k{=JEd;)gyh2jqL}-3ot{SF-i|;l(9Nzv|f+C{+f80?RVn5X+js@c_~pY!IELC3nZ7)#9agqUHfIX7NxE3Qi&nhhq|H} z3>{?2xLX}Q!WphprY{G~xryFMehkK!VE?!O<#+xDxekPn+H%4uGhG8J`Oqa8v)Q23 z$L_5z-#!rf7Zt!uan`%;LK0s@yD#Nic*rCkM*8QDq`n^F_FAJePgwk+CkKASVoPzF z1PUkBWp-7v27o+h#oB%81*El0Yq++Z`W$#r`V1roj9)uIZJT{RL#Lsw7!R3;(SN#m zAK(7h-}URe9YI#xKsQrE(R;JSI<0{^k5b2XZc@r8?^yDr1ncWk6gBSJ)B*i5Q~Lhc ztDdATU-|iYinZ>ZMT0N3ii*AUf%LL0%cY|pbOh_YYuOb7JKfZ_bvkv}(Vza5IY5?k zCmP=+YnW<)sOQAh5Ps$}S=l_uzH^Pgb#MRs@A`GhN0C2*e;j$N=cP|2HbolA-#~>U-EGS;YZzuye{kXD$ z*6O4jP0)E1I!LoScKmc`;yF-rKMtkQbn{JlHv-Kdj4uYK9_Z(8MVSLtat)pld<|Ip zg1-HqKlOv?h3(WT1T+=5HjrUZh;M(9rPovOlI1X{ys?SkvVFz7MN*34jRa5|OiLa= zlDZ>_FPnU&Fz&k=Y~R-LST-FbDSqe4MuFEGqxe8;Iwk-;Q$6?wC?{-eUL`N5j(m0? z{OE6acn+9{fqz`)VAx(m^Kkdla~cNCcQ5B~ymQk3?f3okf9T%lB1-oLd5q0u>B46h zq<0Q)_VyDqNF9FYqfMq-7xIYJpz>$sDH~~Y{EhF$&iLrczj4dr3GgSMH^*f&WcUDO zJ9~eI+kU%Jwobby+A^5%Lw!PQA-oT`6-T?S)wBVAn!G{k4+gUo6lLoSQiMGAwieBr1YTxLoFAAhi zV(~|=$U7%6G3i$_Ub0I^Ru1JO#n|M#DWUkSf^die>Ud}m0B8Dl3}v~ZLn*aFQ6pV^ zr`a+OJU*`FxZ!hGIx)lHfg0b&9xhNl>^sh1p2m+hME>7D{qMO~slq|kn@Dh5)^)_91`E@*`O8+@gisuYIg1mx0MTjvSY)K`;LUL(utXv|S&Eq#Q2gwf^n@{oTJ-^^YL|FpYFT^0etA$p(-NmfI5S z9Ge$i{-As%4{cqqWRYb%9>ziaOclQL$|pv==)t=-dDRE@Lwa&ZPhvYkYsIT`7j)g$ zjqL>MV|AXAkC0fbZWE_qRZk~&@DApqi@tKFp1kZ8O9KwxG4_{TdOsh{-HJ$G4vlsG z$g^IkJ5}*Q=b%3Z>)%#7Zqo5Q!RsLdd$Yr{3}NKZ{TtSfJ8Ri@>;%w~**2;BD0}lj zsYu0`2Ob}7GHuy(e(U4aR09v>FAQ{ZeZn*K+5yTbrsy-onmEaQ>78u9ZQ^bScyNbK zjNB+6esve2kMAbK>*1BdpjhZS)&t_Z6Lsfs8Oifw5H{ARyOahKJoRsX@OS@P*vo0l zKc>Ej0Wr^#q&k4b$B#L-JaM4nDM1eZVlOOvWQ(zFzG9^+UFppeEZ@U)zL6Hc^jRZe z^8xoCIBl=;4a`U%XC@?FB1xx2I;a)va_dYpM3#-s(^k9&BfR`(u;jaF1}t|a*}@Z* z#{>EH2Y>osM<4uATLo&(@8F1~6UtXgQ?aEhn+{R$d>LCmK4k0Ttz@=Ec@B%VqNR_| z))R7<+OaQ#Ba!sdi(Nb@w|3|P`cb**f-T7`j#q59_<(g!;NS8Hwo??gp7Pi@B=ogk z<pWma-IcaZxj}2V82k1!KmD($xBCua0R1kqNXeDY zG#`tgGMCTx18>&LIQl4l4+>xO(@*SW+d0WoFCX8s%3dgy^@%qP*fueS^MCGX^oCph z2+nHL1xxZunaCAWN3MLTj0Z-H?ULi8U2;qw)M>AQ@>_ck6^F&P9-Oj8woeV0YJJ~) z>4|TD=%@cBcg)MRQCt|^4WvBq@GflyDT(>og1(C+uk@GhnJ>Bdr6-BK_0tPq{U)JK zNT8i$$$+en+hZ6zb#&J`TyciY|6GC(mcR-buxO0m9OME{|Po6_lly=eae;F>skj{W< zu>QH~*yRQ2lqqDmH(4w%pJB4!_>>*;#1g^>DZ1scN!hYA@rhorW$X4J%z;%7Tr*JW zwX_1oiMi;2dn6^i+W*J_8I`Vf!3Ev{_*7{T2o@Pc8|8FLbGnV4Bsr|h-Alf*CymL{eUcVK7^HaYHT{&G+~9)+eaF4GBC9F| zuNfqQb_q(aKC9tioU(ZgNa-zC56yFEV9Rh(7CJU^hO3{mI9Q*5*FTLO)gE(#EPm-2 z^5_Su0V&>84ojBeqRz*>+~QI+jCVS-SXQuw0X}hbHzJ8t5`yqVcPbzmCmt zeIJAMJO2sP^Cpr~%^zQ`!)+c|eB!n)A3c2-pnSDY`86eMUN-)?WpOguo*qe^mr&G> zC0;gwVhQlmejR?V;Q9pmRDhIYIl|vj+kj`QJN5y53a8IGSO%-?N4rGcfoiz@&tM3Y zkyCQ<9XGOd8I zpO;B^t`{pU(FYv6cR;5gJ7wlD$|ijch4dVf*oiYVvK_-^+x8>>_W3{i2kWF-l2kbj=2o=Au~h2iF$sPs?sFQ}d9?Fm7Vp!DJ;O)&)bZo(akwx{ z{^PUd_z3k?!`R+F|HR){{qaI|@!gd=G7Z8;ZU)Ob#VRg3iY}E+h-|Qa%Z?{Yy7bKh zmJe%6noGmv4X|FZFE*|RS|s#3r20xgC4K%gQqd1!8?WbpP0anjv7aIBy#p#9SMtks z#Z5k{yhDb_qvLOIq>gb0@_tt8;X=c{OVOu>t8}NYpSfs%`~08&J=Iajrh^n!y7YYI zS*m?IhTx$wyX^$?Y=^x4wymgOWY;5@VGqR$vNeHyNQRMJ8z3J_x36KWj@Z{5ltCt5 zo_!2uKU^Yw6gQx?@eV>>sNHDrov1)V09+2fE7{L$Gup+2(|4zf*PV$&rM&dD>^vT> zw{L#O-^~u!M+qraOMc-WD9~;y-@Fh4OL8-46I7ff`k3mjQCh}SA~Jbn<<8rcwgb zIKn6#ig%%hsPcRUvwQTQkYNq`*$!Dc@^uFS=N+XVZPxQQz4-g?MWp}3Z~@;w|M)NO zGTKe@Ih>aLr%GZUc=>n<^l=%9tqV_5^u@OL_6cNzmJfjS?P@uoz6dXQZh&1b9r2Yw z{|v?|BL#acgT&$=YS_dB*|7XyLa2CAqW-x~NlXsCPD3oUD;`Qmh0=$^04g8z@|PYI z>$8vZSO+;Dfh^R+M#LU{{_TG!rv(8(Wh5ozZ@Txt)HKkYJibeU31TZ{H#Bjph3PE7M%`6EOidiXIL+0>2--5o@DW$2_^53Lsqb|H;K051X6ckLCGYY z0+++>$Wrj6`v}TEc~`hfXBYux$#ZD(v1gR-;f_W9+vgwqn{kFopRx~wBq&Nnnu9=|`U&n21V}DM|

L2*v*EBo}&aG>Xo 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

&V+en)a{(LZ=H5#EqfPJbz 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 Ar2qf` literal 0 HcmV?d00001 diff --git a/display/entry/src/main/resources/base/media/ic_public_screencap.svg b/display/entry/src/main/resources/base/media/ic_public_screencap.svg new file mode 100644 index 00000000..5d44fd87 --- /dev/null +++ b/display/entry/src/main/resources/base/media/ic_public_screencap.svg @@ -0,0 +1,15 @@ + + + ic_public_screencap + + + + + + + + + + + + \ No newline at end of file diff --git a/display/entry/src/main/resources/base/media/ic_public_voice.svg b/display/entry/src/main/resources/base/media/ic_public_voice.svg new file mode 100644 index 00000000..1bc298c0 --- /dev/null +++ b/display/entry/src/main/resources/base/media/ic_public_voice.svg @@ -0,0 +1,15 @@ + + + ic_public_voice + + + + + + + + + + + + \ No newline at end of file diff --git a/display/entry/src/main/resources/base/media/icon.png b/display/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', + JSON.stringify(data) ?? ''); + }); + } + + onWindowStageDestroy() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onWindowStageDestroy'); + } + + onForeground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onForeground'); + } + + onBackground() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onBackground'); + } +} \ No newline at end of file diff --git a/display/entry/src/ohosTest/ets/testability/pages/Index.ets b/display/entry/src/ohosTest/ets/testability/pages/Index.ets new file mode 100644 index 00000000..16636659 --- /dev/null +++ b/display/entry/src/ohosTest/ets/testability/pages/Index.ets @@ -0,0 +1,34 @@ +import hilog from '@ohos.hilog'; + +@Entry +@Component +struct Index { + aboutToAppear() { + hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility index aboutToAppear'); + } + @State message: string = 'Hello World' + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + Button() { + Text('next page') + .fontSize(20) + .fontWeight(FontWeight.Bold) + }.type(ButtonType.Capsule) + .margin({ + top: 20 + }) + .backgroundColor('#0D9FFB') + .width('35%') + .height('5%') + .onClick(()=>{ + }) + } + .width('100%') + } + .height('100%') + } + } \ No newline at end of file diff --git a/display/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts b/display/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts new file mode 100644 index 00000000..2d6786fe --- /dev/null +++ b/display/entry/src/ohosTest/ets/testrunner/OpenHarmonyTestRunner.ts @@ -0,0 +1,46 @@ +import hilog from '@ohos.hilog'; +import TestRunner from '@ohos.application.testRunner'; +import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; + +var abilityDelegator = undefined +var abilityDelegatorArguments = undefined + +async function onAbilityCreateCallback() { + hilog.info(0x0000, 'testTag', '%{public}s', 'onAbilityCreateCallback'); +} + +async function addAbilityMonitorCallback(err: any) { + hilog.info(0x0000, 'testTag', 'addAbilityMonitorCallback : %{public}s', JSON.stringify(err) ?? ''); +} + +export default class OpenHarmonyTestRunner implements TestRunner { + constructor() { + } + + onPrepare() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner OnPrepare '); + } + + async onRun() { + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun run'); + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + const bundleName = abilityDelegatorArguments.bundleName; + const testAbilityName = 'TestAbility'; + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + const want = { + bundleName: bundleName, + abilityName: testAbilityName + }; + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); + abilityDelegator.startAbility(want, (err : any, data : any) => { + hilog.info(0x0000, 'testTag', 'startAbility : err : %{public}s', JSON.stringify(err) ?? ''); + hilog.info(0x0000, 'testTag', 'startAbility : data : %{public}s',JSON.stringify(data) ?? ''); + }) + hilog.info(0x0000, 'testTag', '%{public}s', 'OpenHarmonyTestRunner onRun end'); + } +} \ No newline at end of file diff --git a/display/entry/src/ohosTest/module.json5 b/display/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..4fc97017 --- /dev/null +++ b/display/entry/src/ohosTest/module.json5 @@ -0,0 +1,37 @@ +{ + "module": { + "name": "entry_test", + "type": "feature", + "description": "$string:module_test_desc", + "mainElement": "TestAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:test_pages", + "abilities": [ + { + "name": "TestAbility", + "srcEntry": "./ets/testability/TestAbility.ets", + "description": "$string:TestAbility_desc", + "icon": "$media:icon", + "label": "$string:TestAbility_label", + "exported": true, + "startWindowIcon": "$media:icon", + "startWindowBackground": "$color:start_window_background", + "skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + } + ] + } + ] + } +} diff --git a/display/entry/src/ohosTest/resources/base/element/color.json b/display/entry/src/ohosTest/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/display/entry/src/ohosTest/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/display/entry/src/ohosTest/resources/base/element/string.json b/display/entry/src/ohosTest/resources/base/element/string.json new file mode 100644 index 00000000..65d8fa5a --- /dev/null +++ b/display/entry/src/ohosTest/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_test_desc", + "value": "test ability description" + }, + { + "name": "TestAbility_desc", + "value": "the test ability" + }, + { + "name": "TestAbility_label", + "value": "test label" + } + ] +} \ No newline at end of file diff --git a/display/entry/src/ohosTest/resources/base/media/icon.png b/display/entry/src/ohosTest/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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"a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||y.Unicode.ID_START.test(u))}static isIdContinueChar(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||y.Unicode.ID_CONTINUE.test(u))}static isDigitWithoutZero(u){return/[1-9]/.test(u)}static isDigit(u){return"string"==typeof u&&/[0-9]/.test(u)}static isHexDigit(u){return"string"==typeof u&&/[0-9A-Fa-f]/.test(u)}};var I=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(v,"__esModule",{value:!0}),v.parseJsonText=v.parseJsonFile=void 0;const N=I(e),b=I(D),S=I(u),w=g;var H;!function(u){u[u.Char=0]="Char",u[u.EOF=1]="EOF",u[u.Identifier=2]="Identifier"}(H||(H={}));let x,M,T,V,G,j,J="start",U=[],W=0,L=1,$=0,k=!1,K="default",z="'",q=1;function Z(u,D=!1){M=String(u),J="start",U=[],W=0,L=1,$=0,V=void 0,k=D;do{x=X(),ru[J]()}while("eof"!==x.type);return V}function X(){for(K="default",G="",z="'",q=1;;){j=Q();const u=uu[K]();if(u)return u}}function Q(){if(M[W])return String.fromCodePoint(M.codePointAt(W))}function Y(){const u=Q();return"\n"===u?(L++,$=0):u?$+=u.length:$++,u&&(W+=u.length),u}v.parseJsonFile=function(u,D=!1,e="utf-8"){const t=N.default.readFileSync(S.default.resolve(u),{encoding:e});try{return Z(t,D)}catch(D){if(D instanceof SyntaxError){const e=D.message.split("at");if(2===e.length)throw new Error(`${e[0].trim()}${b.default.EOL}\t at ${u}:${e[1].trim()}`)}throw new Error(`${u} is not in valid JSON/JSON5 format.`)}},v.parseJsonText=Z;const uu={default(){switch(j){case"/":return Y(),void(K="comment");case void 0:return Y(),Du("eof")}if(!w.JudgeUtil.isIgnoreChar(j)&&!w.JudgeUtil.isSpaceSeparator(j))return uu[J]();Y()},start(){K="value"},beforePropertyName(){switch(j){case"$":case"_":return G=Y(),void(K="identifierName");case"\\":return Y(),void(K="identifierNameStartEscape");case"}":return Du("punctuator",Y());case'"':case"'":return z=j,Y(),void(K="string")}if(w.JudgeUtil.isIdStartChar(j))return G+=Y(),void(K="identifierName");throw Fu(H.Char,Y())},afterPropertyName(){if(":"===j)return Du("punctuator",Y());throw Fu(H.Char,Y())},beforePropertyValue(){K="value"},afterPropertyValue(){switch(j){case",":case"}":return Du("punctuator",Y())}throw Fu(H.Char,Y())},beforeArrayValue(){if("]"===j)return Du("punctuator",Y());K="value"},afterArrayValue(){switch(j){case",":case"]":return Du("punctuator",Y())}throw Fu(H.Char,Y())},end(){throw Fu(H.Char,Y())},comment(){switch(j){case"*":return Y(),void(K="multiLineComment");case"/":return Y(),void(K="singleLineComment")}throw Fu(H.Char,Y())},multiLineComment(){switch(j){case"*":return Y(),void(K="multiLineCommentAsterisk");case void 0:throw Fu(H.Char,Y())}Y()},multiLineCommentAsterisk(){switch(j){case"*":return void Y();case"/":return Y(),void(K="default");case void 0:throw Fu(H.Char,Y())}Y(),K="multiLineComment"},singleLineComment(){switch(j){case"\n":case"\r":case"\u2028":case"\u2029":return Y(),void(K="default");case void 0:return Y(),Du("eof")}Y()},value(){switch(j){case"{":case"[":return Du("punctuator",Y());case"n":return Y(),eu("ull"),Du("null",null);case"t":return Y(),eu("rue"),Du("boolean",!0);case"f":return Y(),eu("alse"),Du("boolean",!1);case"-":case"+":return"-"===Y()&&(q=-1),void(K="numerical");case".":case"0":case"I":case"N":return void(K="numerical");case'"':case"'":return z=j,Y(),G="",void(K="string")}if(void 0===j||!w.JudgeUtil.isDigitWithoutZero(j))throw Fu(H.Char,Y());K="numerical"},numerical(){switch(j){case".":return G=Y(),void(K="decimalPointLeading");case"0":return G=Y(),void(K="zero");case"I":return Y(),eu("nfinity"),Du("numeric",q*(1/0));case"N":return Y(),eu("aN"),Du("numeric",NaN)}if(void 0!==j&&w.JudgeUtil.isDigitWithoutZero(j))return G=Y(),void(K="decimalInteger");throw Fu(H.Char,Y())},zero(){switch(j){case".":case"e":case"E":return void(K="decimal");case"x":case"X":return G+=Y(),void(K="hexadecimal")}return Du("numeric",0)},decimalInteger(){switch(j){case".":case"e":case"E":return void(K="decimal")}if(!w.JudgeUtil.isDigit(j))return Du("numeric",q*Number(G));G+=Y()},decimal(){switch(j){case".":G+=Y(),K="decimalFraction";break;case"e":case"E":G+=Y(),K="decimalExponent"}},decimalPointLeading(){if(w.JudgeUtil.isDigit(j))return G+=Y(),void(K="decimalFraction");throw Fu(H.Char,Y())},decimalFraction(){switch(j){case"e":case"E":return G+=Y(),void(K="decimalExponent")}if(!w.JudgeUtil.isDigit(j))return Du("numeric",q*Number(G));G+=Y()},decimalExponent(){switch(j){case"+":case"-":return G+=Y(),void(K="decimalExponentSign")}if(w.JudgeUtil.isDigit(j))return G+=Y(),void(K="decimalExponentInteger");throw Fu(H.Char,Y())},decimalExponentSign(){if(w.JudgeUtil.isDigit(j))return G+=Y(),void(K="decimalExponentInteger");throw Fu(H.Char,Y())},decimalExponentInteger(){if(!w.JudgeUtil.isDigit(j))return Du("numeric",q*Number(G));G+=Y()},hexadecimal(){if(w.JudgeUtil.isHexDigit(j))return G+=Y(),void(K="hexadecimalInteger");throw Fu(H.Char,Y())},hexadecimalInteger(){if(!w.JudgeUtil.isHexDigit(j))return Du("numeric",q*Number(G));G+=Y()},identifierNameStartEscape(){if("u"!==j)throw Fu(H.Char,Y());Y();const u=tu();switch(u){case"$":case"_":break;default:if(!w.JudgeUtil.isIdStartChar(u))throw Fu(H.Identifier)}G+=u,K="identifierName"},identifierName(){switch(j){case"$":case"_":case"‌":case"‍":return void(G+=Y());case"\\":return Y(),void(K="identifierNameEscape")}if(!w.JudgeUtil.isIdContinueChar(j))return Du("identifier",G);G+=Y()},identifierNameEscape(){if("u"!==j)throw Fu(H.Char,Y());Y();const u=tu();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!w.JudgeUtil.isIdContinueChar(u))throw Fu(H.Identifier)}G+=u,K="identifierName"},string(){switch(j){case"\\":return Y(),void(G+=function(){const u=Q(),D=function(){switch(Q()){case"b":return Y(),"\b";case"f":return Y(),"\f";case"n":return Y(),"\n";case"r":return Y(),"\r";case"t":return Y(),"\t";case"v":return Y(),"\v"}return}();if(D)return D;switch(u){case"0":if(Y(),w.JudgeUtil.isDigit(Q()))throw Fu(H.Char,Y());return"\0";case"x":return Y(),function(){let u="",D=Q();if(!w.JudgeUtil.isHexDigit(D))throw Fu(H.Char,Y());if(u+=Y(),D=Q(),!w.JudgeUtil.isHexDigit(D))throw Fu(H.Char,Y());return u+=Y(),String.fromCodePoint(parseInt(u,16))}();case"u":return Y(),tu();case"\n":case"\u2028":case"\u2029":return Y(),"";case"\r":return Y(),"\n"===Q()&&Y(),""}if(void 0===u||w.JudgeUtil.isDigitWithoutZero(u))throw Fu(H.Char,Y());return Y()}());case'"':case"'":if(j===z){const u=Du("string",G);return Y(),u}return void(G+=Y());case"\n":case"\r":case void 0:throw Fu(H.Char,Y());case"\u2028":case"\u2029":!function(u){console.warn(`JSON5: '${Cu(u)}' in strings is not valid ECMAScript; consider escaping.`)}(j)}G+=Y()}};function Du(u,D){return{type:u,value:D,line:L,column:$}}function eu(u){for(const D of u){if(Q()!==D)throw Fu(H.Char,Y());Y()}}function tu(){let u="",D=4;for(;D-- >0;){const D=Q();if(!w.JudgeUtil.isHexDigit(D))throw Fu(H.Char,Y());u+=Y()}return String.fromCodePoint(parseInt(u,16))}const ru={start(){if("eof"===x.type)throw Fu(H.EOF);nu()},beforePropertyName(){switch(x.type){case"identifier":case"string":return T=x.value,void(J="afterPropertyName");case"punctuator":return void iu();case"eof":throw Fu(H.EOF)}},afterPropertyName(){if("eof"===x.type)throw Fu(H.EOF);J="beforePropertyValue"},beforePropertyValue(){if("eof"===x.type)throw Fu(H.EOF);nu()},afterPropertyValue(){if("eof"===x.type)throw Fu(H.EOF);switch(x.value){case",":return void(J="beforePropertyName");case"}":iu()}},beforeArrayValue(){if("eof"===x.type)throw Fu(H.EOF);"punctuator"!==x.type||"]"!==x.value?nu():iu()},afterArrayValue(){if("eof"===x.type)throw Fu(H.EOF);switch(x.value){case",":return void(J="beforeArrayValue");case"]":iu()}},end(){}};function nu(){const u=function(){let u;switch(x.type){case"punctuator":switch(x.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=x.value}return u}();if(k&&"object"==typeof u&&(u._line=L,u._column=$),void 0===V)V=u;else{const D=U[U.length-1];Array.isArray(D)?k&&"object"!=typeof u?D.push({value:u,_line:L,_column:$}):D.push(u):D[T]=k&&"object"!=typeof u?{value:u,_line:L,_column:$}:u}!function(u){if(u&&"object"==typeof u)U.push(u),J=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{const u=U[U.length-1];J=u?Array.isArray(u)?"afterArrayValue":"afterPropertyValue":"end"}}(u)}function iu(){U.pop();const u=U[U.length-1];J=u?Array.isArray(u)?"afterArrayValue":"afterPropertyValue":"end"}function Cu(u){const D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){const D=u.charCodeAt(0).toString(16);return`\\x${`00${D}`.substring(D.length)}`}return u}function Fu(u,D){let e="";switch(u){case H.Char:e=void 0===D?`JSON5: invalid end of input at ${L}:${$}`:`JSON5: invalid character '${Cu(D)}' at ${L}:${$}`;break;case H.EOF:e=`JSON5: invalid end of input at ${L}:${$}`;break;case H.Identifier:$-=5,e=`JSON5: invalid identifier character at ${L}:${$}`}const t=new Eu(e);return t.lineNumber=L,t.columnNumber=$,t}class Eu extends SyntaxError{}var Au={},ou=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),au=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),cu=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&ou(D,u,e);return au(D,u),D},su=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(Au,"__esModule",{value:!0}),Au.isFileExists=Au.offlinePluginConversion=Au.executeCommand=Au.getNpmPath=Au.hasNpmPackInPaths=void 0;const lu=t,Bu=su(e),du=cu(u),fu=i,_u=l;Au.hasNpmPackInPaths=function(u,D){try{return require.resolve(u,{paths:[...D]}),!0}catch(u){return!1}},Au.getNpmPath=function(){const u=process.execPath;return du.join(du.dirname(u),fu.NPM_TOOL)},Au.executeCommand=function(u,D,e){0!==(0,lu.spawnSync)(u,D,e).status&&(0,_u.logErrorAndExit)(`Error: ${u} ${D} execute failed.See above for details.`)},Au.offlinePluginConversion=function(u,D){return D.startsWith("file:")||D.endsWith(".tgz")?du.resolve(u,fu.HVIGOR,D.replace("file:","")):D},Au.isFileExists=function(u){return Bu.default.existsSync(u)&&Bu.default.statSync(u).isFile()};var pu={};!function(u){var D=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(u,"__esModule",{value:!0}),u.hashFile=u.hash=u.createHash=void 0;const t=D(r),i=D(e);u.createHash=(u="MD5")=>t.default.createHash(u);u.hash=(D,e)=>(0,u.createHash)(e).update(D).digest("hex");u.hashFile=(D,e)=>{if(i.default.existsSync(D))return(0,u.hash)(i.default.readFileSync(D,"utf-8"),e)}}(pu);var Ou=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),hu=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),Pu=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&Ou(D,u,e);return hu(D,u),D},vu=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(P,"__esModule",{value:!0});var gu=P.initProjectWorkSpace=void 0;const mu=Pu(e),Ru=Pu(u),yu=i,Iu=v,Nu=l,bu=Au,Su=vu(D),wu=pu;let Hu,xu,Mu;function Tu(u,D,e){return void 0!==e.dependencies&&(0,bu.offlinePluginConversion)(yu.HVIGOR_PROJECT_ROOT_DIR,D.dependencies[u])===Ru.normalize(e.dependencies[u])}function Vu(){const u=Ru.join(Mu,yu.WORK_SPACE);if((0,Nu.logInfoPrintConsole)("Hvigor cleaning..."),!mu.existsSync(u))return;const D=mu.readdirSync(u);if(!D||0===D.length)return;const e=Ru.resolve(Mu,"node_modules","@ohos","hvigor","bin","hvigor.js");mu.existsSync(e)&&(0,bu.executeCommand)(process.argv[0],[e,"--stop-daemon"],{});try{D.forEach((D=>{mu.rmSync(Ru.resolve(u,D),{recursive:!0})}))}catch(D){(0,Nu.logErrorAndExit)(`The hvigor build tool cannot be installed. Please manually clear the workspace directory and synchronize the project again.\n\n Workspace Path: ${u}.`)}}gu=P.initProjectWorkSpace=function(){if(Hu=function(){const u=Ru.resolve(yu.HVIGOR_PROJECT_WRAPPER_HOME,yu.DEFAULT_HVIGOR_CONFIG_JSON_FILE_NAME);mu.existsSync(u)||(0,Nu.logErrorAndExit)(`Error: Hvigor config file ${u} does not exist.`);return(0,Iu.parseJsonFile)(u)}(),Mu=function(u){let D,e=u.hvigorVersion;e.endsWith(".tgz")&&(e=function(u){let D=Ru.normalize(u);const e=D.lastIndexOf(Ru.sep);-1!==e&&(D=D.substring(e+1));D=D.replace(".tgz","");let t=0;for(let u=0;u="0"&&D.charAt(u)<="9"){t=u;break}return D=D.substring(t),D}(e));D=e>"2.5.0"?function(u){let D=`${yu.HVIGOR_ENGINE_PACKAGE_NAME}@${u.hvigorVersion}`;const e=u.dependencies;if(e){Object.getOwnPropertyNames(e).sort().forEach((u=>{D+=`,${u}@${e[u]}`}))}return(0,wu.hash)(D)}(u):(0,wu.hash)(process.cwd());return Ru.resolve(Su.default.homedir(),".hvigor","project_caches",D)}(Hu),xu=function(){const u=Ru.resolve(Mu,yu.WORK_SPACE,yu.DEFAULT_PACKAGE_JSON);return mu.existsSync(u)?(0,Iu.parseJsonFile)(u):{dependencies:{}}}(),!(0,bu.hasNpmPackInPaths)(yu.HVIGOR_ENGINE_PACKAGE_NAME,[Ru.join(Mu,yu.WORK_SPACE)])||(0,bu.offlinePluginConversion)(yu.HVIGOR_PROJECT_ROOT_DIR,Hu.hvigorVersion)!==xu.dependencies[yu.HVIGOR_ENGINE_PACKAGE_NAME]||!function(){function u(u){const D=null==u?void 0:u.dependencies;return void 0===D?0:Object.getOwnPropertyNames(D).length}const D=u(Hu),e=u(xu);if(D+1!==e)return!1;for(const u in null==Hu?void 0:Hu.dependencies)if(!(0,bu.hasNpmPackInPaths)(u,[Ru.join(Mu,yu.WORK_SPACE)])||!Tu(u,Hu,xu))return!1;return!0}()){Vu();try{!function(){(0,Nu.logInfoPrintConsole)("Hvigor installing...");for(const u in Hu.dependencies)Hu.dependencies[u]&&(Hu.dependencies[u]=(0,bu.offlinePluginConversion)(yu.HVIGOR_PROJECT_ROOT_DIR,Hu.dependencies[u]));const u={dependencies:{...Hu.dependencies}};u.dependencies[yu.HVIGOR_ENGINE_PACKAGE_NAME]=(0,bu.offlinePluginConversion)(yu.HVIGOR_PROJECT_ROOT_DIR,Hu.hvigorVersion);const D=Ru.join(Mu,yu.WORK_SPACE);try{mu.mkdirSync(D,{recursive:!0});const e=Ru.resolve(D,yu.DEFAULT_PACKAGE_JSON);mu.writeFileSync(e,JSON.stringify(u))}catch(u){(0,Nu.logErrorAndExit)(u)}(function(){const u=["config","set","store-dir",yu.HVIGOR_PNPM_STORE_PATH],D={cwd:Ru.join(Mu,yu.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,bu.executeCommand)(yu.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,u,D)})(),function(){const u=["install"],D={cwd:Ru.join(Mu,yu.WORK_SPACE),stdio:["inherit","inherit","inherit"]};(0,bu.executeCommand)(yu.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH,u,D)}(),(0,Nu.logInfoPrintConsole)("Hvigor install success.")}()}catch(u){Vu()}}return Mu};var Gu={};!function(r){var C=n&&n.__createBinding||(Object.create?function(u,D,e,t){void 0===t&&(t=e);var r=Object.getOwnPropertyDescriptor(D,e);r&&!("get"in r?!D.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return D[e]}}),Object.defineProperty(u,t,r)}:function(u,D,e,t){void 0===t&&(t=e),u[t]=D[e]}),F=n&&n.__setModuleDefault||(Object.create?function(u,D){Object.defineProperty(u,"default",{enumerable:!0,value:D})}:function(u,D){u.default=D}),E=n&&n.__importStar||function(u){if(u&&u.__esModule)return u;var D={};if(null!=u)for(var e in u)"default"!==e&&Object.prototype.hasOwnProperty.call(u,e)&&C(D,u,e);return F(D,u),D},A=n&&n.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(r,"__esModule",{value:!0}),r.executeInstallPnpm=r.isPnpmInstalled=r.environmentHandler=r.checkNpmConifg=r.PNPM_VERSION=void 0;const o=t,a=E(e),c=A(D),s=E(u),B=i,d=l,f=Au;r.PNPM_VERSION="7.30.0",r.checkNpmConifg=function(){const u=s.resolve(B.HVIGOR_PROJECT_ROOT_DIR,".npmrc"),D=s.resolve(c.default.homedir(),".npmrc");if((0,f.isFileExists)(u)||(0,f.isFileExists)(D))return;const e=(0,f.getNpmPath)(),t=(0,o.spawnSync)(e,["config","get","prefix"],{cwd:B.HVIGOR_PROJECT_ROOT_DIR});if(0!==t.status||!t.stdout)return void(0,d.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.");const r=s.resolve(`${t.stdout}`.replace(/[\r\n]/gi,""),".npmrc");(0,f.isFileExists)(r)||(0,d.logErrorAndExit)("Error: The hvigor depends on the npmrc file. Configure the npmrc file first.")},r.environmentHandler=function(){process.env["npm_config_update-notifier"]="false"},r.isPnpmInstalled=function(){return!!a.existsSync(B.HVIGOR_WRAPPER_PNPM_SCRIPT_PATH)&&(0,f.hasNpmPackInPaths)("pnpm",[B.HVIGOR_WRAPPER_TOOLS_HOME])},r.executeInstallPnpm=function(){(0,d.logInfoPrintConsole)(`Installing pnpm@${r.PNPM_VERSION}...`);const u=(0,f.getNpmPath)();!function(){const u=s.resolve(B.HVIGOR_WRAPPER_TOOLS_HOME,B.DEFAULT_PACKAGE_JSON);try{a.existsSync(B.HVIGOR_WRAPPER_TOOLS_HOME)||a.mkdirSync(B.HVIGOR_WRAPPER_TOOLS_HOME,{recursive:!0});const D={dependencies:{}};D.dependencies[B.PNPM]=r.PNPM_VERSION,a.writeFileSync(u,JSON.stringify(D))}catch(D){(0,d.logErrorAndExit)(`Error: EPERM: operation not permitted,create ${u} failed.`)}}(),(0,f.executeCommand)(u,["install","pnpm"],{cwd:B.HVIGOR_WRAPPER_TOOLS_HOME,stdio:["inherit","inherit","inherit"],env:process.env}),(0,d.logInfoPrintConsole)("Pnpm install success.")}}(Gu),function(){Gu.checkNpmConifg(),Gu.environmentHandler(),Gu.isPnpmInstalled()||Gu.executeInstallPnpm();const D=gu();_(u.join(D,i.WORK_SPACE))}(); \ No newline at end of file diff --git a/display/hvigorfile.ts b/display/hvigorfile.ts new file mode 100644 index 00000000..f3cb9f1a --- /dev/null +++ b/display/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/display/hvigorw b/display/hvigorw new file mode 100644 index 00000000..ff6a29a2 --- /dev/null +++ b/display/hvigorw @@ -0,0 +1,48 @@ +#!/bin/bash + +# ---------------------------------------------------------------------------- +# Hvigor startup script, version 1.0.0 +# +# Required ENV vars: +# ------------------ +# NODE_HOME - location of a Node home dir +# or +# Add /usr/local/nodejs/bin to the PATH environment variable +# ---------------------------------------------------------------------------- + +HVIGOR_APP_HOME="`pwd -P`" +HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js +warn() { + echo "" + echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m" +} + +error() { + echo "" + echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m" +} + +fail() { + error "$@" + exit 1 +} + +# Determine node to start hvigor wrapper script +if [ -n "${NODE_HOME}" ];then + EXECUTABLE_NODE="${NODE_HOME}/bin/node" + if [ ! -x "$EXECUTABLE_NODE" ];then + fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed" + fi +else + EXECUTABLE_NODE="node" + which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path" +fi + +# Check hvigor wrapper script +if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then + fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}" +fi + +# start hvigor-wrapper script +exec "${EXECUTABLE_NODE}" \ + "${HVIGOR_WRAPPER_SCRIPT}" "$@" diff --git a/display/hvigorw.bat b/display/hvigorw.bat new file mode 100644 index 00000000..d570007e --- /dev/null +++ b/display/hvigorw.bat @@ -0,0 +1,64 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Hvigor startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +set WRAPPER_MODULE_PATH=%APP_HOME%\hvigor\hvigor-wrapper.js +set NODE_EXE=node.exe + +goto start + +:start +@rem Find node.exe +if defined NODE_HOME goto findNodeFromNodeHome + +%NODE_EXE% --version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. +echo. +echo Please set the NODE_HOME variable in your environment to match the +echo location of your NodeJs installation. + +goto fail + +:findNodeFromNodeHome +set NODE_HOME=%NODE_HOME:"=% +set NODE_EXE_PATH=%NODE_HOME%/%NODE_EXE% + +if exist "%NODE_EXE_PATH%" goto execute +echo. +echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH. +echo. +echo Please set the NODE_HOME variable in your environment to match the +echo location of your NodeJs installation. + +goto fail + +:execute +@rem Execute hvigor +"%NODE_EXE%" "%WRAPPER_MODULE_PATH%" %* + +if "%ERRORLEVEL%" == "0" goto hvigorwEnd + +:fail +exit /b 1 + +:hvigorwEnd +if "%OS%" == "Windows_NT" endlocal + +:end diff --git a/display/oh-package-lock.json5 b/display/oh-package-lock.json5 new file mode 100644 index 00000000..bc40219d --- /dev/null +++ b/display/oh-package-lock.json5 @@ -0,0 +1,13 @@ +{ + "lockfileVersion": 1, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hypium@1.0.6": "@ohos/hypium@1.0.6" + }, + "packages": { + "@ohos/hypium@1.0.6": { + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hypium/-/hypium-1.0.6.tgz", + "integrity": "sha512-bb3DWeWhYrFqj9mPFV3yZQpkm36kbcK+YYaeY9g292QKSjOdmhEIQR2ULPvyMsgSR4usOBf5nnYrDmaCCXirgQ==" + } + } +} \ No newline at end of file diff --git a/display/oh-package.json5 b/display/oh-package.json5 new file mode 100644 index 00000000..f9856a05 --- /dev/null +++ b/display/oh-package.json5 @@ -0,0 +1,12 @@ +{ + "license": "", + "devDependencies": { + "@ohos/hypium": "1.0.6" + }, + "author": "", + "name": "dhardware_ui", + "description": "Please describe the basic information.", + "main": "", + "version": "1.0.0", + "dependencies": {} +} diff --git a/display/signature/DHardware_UI.p7b b/display/signature/DHardware_UI.p7b new file mode 100644 index 0000000000000000000000000000000000000000..f3bc068cf50f475ee7fd68841bd95a8c4092d41a GIT binary patch literal 3422 zcmcgvX>=3U8MPMMF-BlwRtK;V1XGOcH?me|V@8{0G`1ycv4p7^OQXe>X5`UGBbl;9 zBu)%56gUBwEoL)Nmh=FLffhoun351EgmO4xNeQ7Xl!Q_Up`p;u*bdk!{OHL!=!Zt% zecyY!Z@&B8cOFQJTxl7Tn@gL&6Y1l493|o6RO&9I130?9nQNK2hgTNAW7eRztWPdK#@l8Kb#7ORI~Af1HK5OOXiXDEE5| z!B|}Y(VDF=u4h03ZPLZrU0B_5R0~7pS`WseO&p3^%?~hCN5=J5*xJJpMYV=tgUhaN za55^scIrz9>`f`v&Us_zsppH)8(aR;ILzK16i*spyCjw#r^s+ zWz4Cqiq_WjB7kG;(fZ5|1hGV$ib&Ka#S@Koixh+sad#jfb5Ha8ZB1|m_dZI^ zDg^ebbO_8<6OqA8DOW8Es7DYVqbFgTRE8BB{dIPYLT{qgAc!l8I8rSQm~8)}4{Z&B z!7$@88{@D^;Z#=J^^L{aVreK)RIg}^1#O@}rqDYeXBicDsBJQYG=&Hc;h`%veiLK% zg$=bi36Bjo?E%X$sNO@<0dKN%_X_%X`EU=&^( z4X{~QILNjVK~fp)AFJtatgzH%>7$h0oBk75! zi^Vh8LAHfMfe2?)-8mG_*^rxN)B24}=W^M+DCZR7a6_QmnJ9uKFuOgO_BBZIp9e|a zd+h=~kIxq>H-`>_foV^%?s@D5p+JzD0^Cq0$Vd~|glXA)O*u3aJk13IvNQX52Q&(d z;LyzMtUhR-6~{u*crcC|5@hG}9fHH*Am=SC|2z#0#*Pq4As_`(NXkCtt`Q=c8j==6 zy&(wyL=pfL_K?Vb9EnPb^ag@>o~6e*ffHn>rFXvuKCkzE2zcoNBt_^r&j0(qj$L2E zjR%JvSvqOu4!v@|s4bWGw;hu|eB;8oi(}C(%5McHZ*&p-0_#h;@BN|Oyd-1z2g_u~ z1jNFwkt;V?Kqbg!>5LgK90`Wc8+x|6Q#|}nnd_!?o_}`Mz8k5t*Gmjw5SK8R$NP^^ zDB!2h17o;&kZ`zg=qK2f1Dl)5PaS`A_bb;@@7=By@htsoCJ3YeFCR+TzG!DgvM#Z+ zbixqi+Ar~a{ox3@_U8JgFYXU4 zfv-)NVM-mh;P)N#D!@7IpBGF#Z^=2t(`>miVfO}kR($LI$ehbx4c^V_N6YHxNUwed zUsNsZ&jt8@V(BJ)6~&J)vDt)H6w{@u@DT&=y{fY}(#_ zYhUeMYsbJr=iRR_K4TcN;Z@Ovy_?qGtsQoEV(vofeBRH-m?KW(9A&!U9~%%b6%6Kt zlFbPx6$sczeqbk~p8ALsjt@BV=~a9%VcUe)$Qj$m zr(1?@Y`xX~1}J+eq5W4>cR9Qx7HE)lQ?^y8h#@fGLfuGG6Udnmv=4bSL z&CV@pw|896&-vu^GSU9M%8hfv)h&nTJQLm(>v;F51vvJ6zG9N1@}17N-(QupdehC8 zmaLm6+QzlqnLBe&LGGQaM=mb~of9Q@->KgI(emY4?+2edKRh}5-s>02TdB*7uuEYl-Rk>T_SSQs7eYziR90lq zvsVGo@I=bkd!qKeb+iY-$OpHM3<1QB{cu;|fzc0wj8teadnmF;Af$unk(Qre4p{{5w?;w`hE{-ATlRO-(7!Aq~TxH1BBk9G>r@bh%3EB9{(C$Hbx@RzP_2ezDfM*8N< Srn$n`N`L#+q0PU$(fnVr@lVYF literal 0 HcmV?d00001 -- Gitee