commit e8062061b4761a0436e20d11b92405ae4409daf0 Author: Савелий Савенок <56991906+Lisoveliy@users.noreply.github.com> Date: Sun Oct 20 02:54:13 2024 +0300 build(release): v1.0 of VHS Watchface diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3e21f7f --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +.DS_Store +node_modules/** +dist/* +npm-debug.log +yarn-debug.log* +yarn-error.log* +yarn.lock +package-lock.json +selenium-debug.log +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..13d6c22 --- /dev/null +++ b/app.js @@ -0,0 +1,10 @@ +App({ + globalData: {}, + onCreate(options) { + console.log('app on create invoke') + }, + + onDestroy(options) { + console.log('app on destroy invoke') + } +}) \ No newline at end of file diff --git a/app.json b/app.json new file mode 100644 index 0000000..d24e37f --- /dev/null +++ b/app.json @@ -0,0 +1,57 @@ +{ + "configVersion": "v2", + "app": { + "appId": 24808, + "appName": "VHS Watch", + "appType": "watchface", + "version": { + "code": 1, + "name": "1.0.0" + }, + "icon": "icon.png", + "vender": "zepp", + "description": "VHS watchface" + }, + "permissions": [ + "data:os.device.info", + "data:user.hd.heart_rate", + "data:user.hd.distance" + ], + "runtime": { + "apiVersion": { + "compatible": "2.0.0", + "target": "2.0.0", + "minVersion": "2.0.0" + } + }, + "targets": { + "390x450-amazfit-gts-4": { + "module": { + "watchface": { + "path": "watchface/index", + "main": 1, + "editable": 0, + "lockscreen": 0, + "hightCost": 0 + } + }, + "platforms": [ + { + "name": "Lille", + "deviceSource": 7995648 + }, + { + "name": "Lillew", + "deviceSource": 7995649 + } + ], + "designWidth": 390 + } + }, + "i18n": { + "en-US": { + "appName": "VHS Watch" + } + }, + "defaultLanguage": "en-US" +} diff --git a/assets/390x450-amazfit-gts-4/clk/0.PNG b/assets/390x450-amazfit-gts-4/clk/0.PNG new file mode 100644 index 0000000..5f8c7dd Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/0.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/1.PNG b/assets/390x450-amazfit-gts-4/clk/1.PNG new file mode 100644 index 0000000..97acaaf Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/1.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/2.PNG b/assets/390x450-amazfit-gts-4/clk/2.PNG new file mode 100644 index 0000000..e6cbcb2 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/2.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/3.PNG b/assets/390x450-amazfit-gts-4/clk/3.PNG new file mode 100644 index 0000000..8ced721 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/3.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/4.PNG b/assets/390x450-amazfit-gts-4/clk/4.PNG new file mode 100644 index 0000000..a1ca02b Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/4.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/5.PNG b/assets/390x450-amazfit-gts-4/clk/5.PNG new file mode 100644 index 0000000..34b04e6 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/5.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/6.PNG b/assets/390x450-amazfit-gts-4/clk/6.PNG new file mode 100644 index 0000000..ba84c7f Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/6.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/7.PNG b/assets/390x450-amazfit-gts-4/clk/7.PNG new file mode 100644 index 0000000..1f71f03 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/7.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/8.PNG b/assets/390x450-amazfit-gts-4/clk/8.PNG new file mode 100644 index 0000000..967ee49 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/8.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/9.PNG b/assets/390x450-amazfit-gts-4/clk/9.PNG new file mode 100644 index 0000000..c8c8fc5 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/9.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/point.PNG b/assets/390x450-amazfit-gts-4/clk/point.PNG new file mode 100644 index 0000000..0b706d2 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/point.PNG differ diff --git a/assets/390x450-amazfit-gts-4/clk/points.PNG b/assets/390x450-amazfit-gts-4/clk/points.PNG new file mode 100644 index 0000000..b688157 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/clk/points.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/0.PNG b/assets/390x450-amazfit-gts-4/date/0.PNG new file mode 100644 index 0000000..4698e49 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/0.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/1.PNG b/assets/390x450-amazfit-gts-4/date/1.PNG new file mode 100644 index 0000000..28ed296 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/1.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/2.PNG b/assets/390x450-amazfit-gts-4/date/2.PNG new file mode 100644 index 0000000..d61e64b Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/2.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/3.PNG b/assets/390x450-amazfit-gts-4/date/3.PNG new file mode 100644 index 0000000..908e24a Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/3.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/4.PNG b/assets/390x450-amazfit-gts-4/date/4.PNG new file mode 100644 index 0000000..33af2a7 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/4.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/5.PNG b/assets/390x450-amazfit-gts-4/date/5.PNG new file mode 100644 index 0000000..5e3da55 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/5.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/6.PNG b/assets/390x450-amazfit-gts-4/date/6.PNG new file mode 100644 index 0000000..e4f3560 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/6.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/7.PNG b/assets/390x450-amazfit-gts-4/date/7.PNG new file mode 100644 index 0000000..e138627 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/7.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/8.PNG b/assets/390x450-amazfit-gts-4/date/8.PNG new file mode 100644 index 0000000..f8d4a32 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/8.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/9.PNG b/assets/390x450-amazfit-gts-4/date/9.PNG new file mode 100644 index 0000000..52fbad6 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/9.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/perc.PNG b/assets/390x450-amazfit-gts-4/date/perc.PNG new file mode 100644 index 0000000..9e56552 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/perc.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/point.PNG b/assets/390x450-amazfit-gts-4/date/point.PNG new file mode 100644 index 0000000..e8adbff Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/point.PNG differ diff --git a/assets/390x450-amazfit-gts-4/date/points.PNG b/assets/390x450-amazfit-gts-4/date/points.PNG new file mode 100644 index 0000000..e9915ee Binary files /dev/null and b/assets/390x450-amazfit-gts-4/date/points.PNG differ diff --git a/assets/390x450-amazfit-gts-4/icon.png b/assets/390x450-amazfit-gts-4/icon.png new file mode 100644 index 0000000..7f0f900 Binary files /dev/null and b/assets/390x450-amazfit-gts-4/icon.png differ diff --git a/assets/390x450-amazfit-gts-4/misc/dist.PNG b/assets/390x450-amazfit-gts-4/misc/dist.PNG new file mode 100644 index 0000000..65ea0aa Binary files /dev/null and b/assets/390x450-amazfit-gts-4/misc/dist.PNG differ diff --git a/assets/390x450-amazfit-gts-4/misc/hb.PNG b/assets/390x450-amazfit-gts-4/misc/hb.PNG new file mode 100644 index 0000000..6df9e5a Binary files /dev/null and b/assets/390x450-amazfit-gts-4/misc/hb.PNG differ diff --git a/package.json b/package.json new file mode 100644 index 0000000..14ac21c --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "vhs-watch", + "version": "1.0.0", + "description": "vhs watch for Zepp OS 3.0 (GTS 4)", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Lisoveliy", + "license": "GPL-3.0", + "devDependencies": { + "@zeppos/device-types": "^3.0.0" + }, + "dependencies": { + "@zeppos/zml": "^0.0.9" + } +} diff --git a/watchface/fontData/primaryFont.js b/watchface/fontData/primaryFont.js new file mode 100644 index 0000000..4079710 --- /dev/null +++ b/watchface/fontData/primaryFont.js @@ -0,0 +1,12 @@ +export default [ + 'clk/0.PNG', + 'clk/1.PNG', + 'clk/2.PNG', + 'clk/3.PNG', + 'clk/4.PNG', + 'clk/5.PNG', + 'clk/6.PNG', + 'clk/7.PNG', + 'clk/8.PNG', + 'clk/9.PNG' +]; \ No newline at end of file diff --git a/watchface/fontData/secondaryFont.js b/watchface/fontData/secondaryFont.js new file mode 100644 index 0000000..82183a9 --- /dev/null +++ b/watchface/fontData/secondaryFont.js @@ -0,0 +1,12 @@ +export default [ + 'date/0.PNG', + 'date/1.PNG', + 'date/2.PNG', + 'date/3.PNG', + 'date/4.PNG', + 'date/5.PNG', + 'date/6.PNG', + 'date/7.PNG', + 'date/8.PNG', + 'date/9.PNG' +]; \ No newline at end of file diff --git a/watchface/index.js b/watchface/index.js new file mode 100644 index 0000000..fa91a09 --- /dev/null +++ b/watchface/index.js @@ -0,0 +1,23 @@ +import batteryModule from "./modules/battery" +import clockModule from "./modules/clock" +import dateModule from "./modules/date" +import distanceModule from "./modules/distance" +import heartRateModule from "./modules/heartRate" + +WatchFace({ + onInit() { + + }, + + build() { + clockModule() + dateModule() + batteryModule() + heartRateModule() + distanceModule() + }, + + onDestroy() { + + } +}) diff --git a/watchface/modules/battery.js b/watchface/modules/battery.js new file mode 100644 index 0000000..31dfd67 --- /dev/null +++ b/watchface/modules/battery.js @@ -0,0 +1,31 @@ +import * as hmSensor from '@zos/sensor' +import * as hmUI from '@zos/ui' +import fontArray from '../fontData/secondaryFont' + +let batteryWg; + +export default function(){ + console.log("[modules]: battery module init") + let battery = new hmSensor.Battery() + updateBatteryWidget(battery.getCurrent()) + battery.onChange(() => updateBatteryWidget(battery.getCurrent())) + hmUI.createWidget(hmUI.widget.IMG, { + x: 355, + y: 10, + src: 'date/perc.PNG' + }) +} +function updateBatteryWidget(batteryPercentage){ + if(batteryWg){ + hmUI.deleteWidget(batteryWg) + } + batteryWg = hmUI.createWidget(hmUI.widget.TEXT_IMG, { + x: 270, + y: 10, + type: hmUI.data_type.BATTERY, + font_array: fontArray, + h_space: 1, + align_h: hmUI.align.RIGHT, + text: batteryPercentage + }) +} \ No newline at end of file diff --git a/watchface/modules/clock.js b/watchface/modules/clock.js new file mode 100644 index 0000000..aab576d --- /dev/null +++ b/watchface/modules/clock.js @@ -0,0 +1,29 @@ +import * as hmUI from '@zos/ui' +import timeArray from '../fontData/primaryFont' +export default function(){ + console.log("[modules]: clock module init") + hmUI.createWidget(hmUI.widget.IMG_TIME, { + hour_zero: 1, // Whether to make up zero. + hour_startX: 10, + hour_startY: 50, + hour_array: timeArray, + hour_space: 1, + hour_align: hmUI.align.CENTER_H | hmUI.align.CENTER_V, //Я хз работает ли это + show_level: hmUI.show_level.ONLY_NORMAL | hmUI.show_level.ONAL_AOD + }) + hmUI.createWidget(hmUI.widget.IMG_TIME, { + minute_startX: 118, //120 - space on center(2) + minute_startY: 170, + minute_array: timeArray, + minute_space: 1, + minute_align: hmUI.align.CENTER_H | hmUI.align.CENTER_V, + show_level: hmUI.show_level.ONLY_NORMAL | hmUI.show_level.ONAL_AOD + }) + hmUI.createWidget(hmUI.widget.IMG_TIME, { + second_startX: 220, + second_startY: 290, + second_array: timeArray, + second_space: 1, + second_align: hmUI.align.CENTER_H | hmUI.align.CENTER_V + }) +} \ No newline at end of file diff --git a/watchface/modules/date.js b/watchface/modules/date.js new file mode 100644 index 0000000..352dfe0 --- /dev/null +++ b/watchface/modules/date.js @@ -0,0 +1,26 @@ +import * as hmUI from '@zos/ui' +import fontArray from '../fontData/secondaryFont' +export default function () { + console.log("[modules]: date module init") + hmUI.createWidget(hmUI.widget.IMG_DATE, { + day_startX: 10, + day_startY: 10, + day_align: hmUI.align.LEFT, + day_space: 0, + day_zero: 1, + day_en_array: fontArray + }) + hmUI.createWidget(hmUI.widget.IMG, { + x: 54, + y: 14, + src: 'date/point.PNG' + }) + hmUI.createWidget(hmUI.widget.IMG_DATE, { + month_startX: 70, + month_startY: 10, + month_align: hmUI.align.LEFT, + month_space: 0, + month_zero: 1, + month_en_array: fontArray + }) +} \ No newline at end of file diff --git a/watchface/modules/distance.js b/watchface/modules/distance.js new file mode 100644 index 0000000..cc02cf8 --- /dev/null +++ b/watchface/modules/distance.js @@ -0,0 +1,35 @@ +import * as hmSensor from '@zos/sensor' +import * as hmUI from '@zos/ui'; +import secondaryFont from '../fontData/secondaryFont'; + +let distWg; +export default function(){ + console.log("[modules]: distance module init") + let distance = new hmSensor.Distance(); + updateDistance(distance.getCurrent()) + distance.onChange(() => updateDistance(distance.getCurrent())) + hmUI.createWidget(hmUI.widget.IMG, { + x: 10, + y: 405, + src: 'misc/dist.PNG' + }) +} + +function updateDistance(dist){ + if(!dist){ + dist = 0 + } + if(distWg){ + hmUI.deleteWidget(distWg) + } + dist = (dist * 1000).toFixed(0) + distWg = hmUI.createWidget(hmUI.widget.TEXT_IMG, { + x: 160, + y: 405, + type: hmUI.data_type.DISTANCE, + font_array: secondaryFont, + h_space: 1, + align_h: hmUI.align.LEFT, + text: dist + }) +} \ No newline at end of file diff --git a/watchface/modules/heartRate.js b/watchface/modules/heartRate.js new file mode 100644 index 0000000..a22a759 --- /dev/null +++ b/watchface/modules/heartRate.js @@ -0,0 +1,34 @@ +import * as hmSensor from '@zos/sensor' +import * as hmUI from '@zos/ui'; +import secondaryFont from '../fontData/secondaryFont'; + +let heartRateWg; +export default function(){ + console.log("[modules]: heartrate module init") + let heart = new hmSensor.HeartRate(); + updateHeartWidget(heart.getCurrent()) + heart.onCurrentChange(() => updateHeartWidget(heart.getCurrent())) + hmUI.createWidget(hmUI.widget.IMG, { + x: 10, + y: 365, + src: 'misc/hb.PNG' + }) +} + +function updateHeartWidget(hbpm){ + if(!hbpm){ + hbpm = 0 + } + if(heartRateWg){ + hmUI.deleteWidget(heartRateWg) + } + heartRateWg = hmUI.createWidget(hmUI.widget.TEXT_IMG, { + x: 100, + y: 365, + type: hmUI.data_type.BATTERY, + font_array: secondaryFont, + h_space: 1, + align_h: hmUI.align.LEFT, + text: hbpm + }) +} \ No newline at end of file