From c554aa1cd2b7c728ba2edcc858a8b26839107cb1 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 11 Jul 2022 20:35:28 +0200 Subject: [PATCH] Initial commit --- .gitignore | 2 + manifest.xml | 35 ++++++ monkey.jungle | 1 + resources/drawables/drawables.xml | 3 + resources/drawables/launcher_icon.png | Bin 0 -> 1292 bytes resources/fonts/input.fnt | 101 +++++++++++++++++ resources/fonts/input.xml | 3 + resources/fonts/input_0.png | Bin 0 -> 7134 bytes resources/fonts/input_1.png | Bin 0 -> 4550 bytes resources/layouts/layout.xml | 3 + resources/strings/strings.xml | 3 + source/terminalfaceApp.mc | 28 +++++ source/terminalfaceView.mc | 152 ++++++++++++++++++++++++++ 13 files changed, 331 insertions(+) create mode 100644 .gitignore create mode 100644 manifest.xml create mode 100755 monkey.jungle create mode 100755 resources/drawables/drawables.xml create mode 100755 resources/drawables/launcher_icon.png create mode 100644 resources/fonts/input.fnt create mode 100644 resources/fonts/input.xml create mode 100644 resources/fonts/input_0.png create mode 100644 resources/fonts/input_1.png create mode 100755 resources/layouts/layout.xml create mode 100644 resources/strings/strings.xml create mode 100644 source/terminalfaceApp.mc create mode 100644 source/terminalfaceView.mc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8dc6a2d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin/ +out/ diff --git a/manifest.xml b/manifest.xml new file mode 100644 index 0000000..15cefab --- /dev/null +++ b/manifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/monkey.jungle b/monkey.jungle new file mode 100755 index 0000000..87796c7 --- /dev/null +++ b/monkey.jungle @@ -0,0 +1 @@ +project.manifest = manifest.xml diff --git a/resources/drawables/drawables.xml b/resources/drawables/drawables.xml new file mode 100755 index 0000000..a22c33c --- /dev/null +++ b/resources/drawables/drawables.xml @@ -0,0 +1,3 @@ + + + diff --git a/resources/drawables/launcher_icon.png b/resources/drawables/launcher_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..d3594e7cb975929fe36f50e5bffde505262c0901 GIT binary patch literal 1292 zcmV+n1@roeP)@WZT1er-h zK~zY`<(A)TmSq^nKiB>IdiTD2w>fi5H+`GV>1^WEG${}%gHBRYgw7JFgHHMnf)0XC zDu^JYjx2~muu?oJVwhw>YA7}ln>v=;+}v#M-k;C=-1ptVv!AZHNrDGn@Eklm&wYQd zU*GR_$&$=Q%OfzwBeF*Z?EbIQ)`B&Nv4F)QpaevL$O8adi&R2T4%T(=3n-NkQ(KQs zrLkTBN`W;HmQlGZlF!BtD77%Ktx6HKZ9;NmID>uhMKetVDVH#{^;A~2618t3YH3F| zuD}LKq+G-q?#Jor#=CY2x2GE^jDs^b2&by9@!iQ6-Lj7Hx8KL4>+rhIBVl*bEu(P;CXR9tpQ{3FZ@in zWhbRwdxcYT+gdtJeCQNz>L=}QFr=||yUz!x64c^6HQ6sl8%QKjU6;pLy zFk*>9bYnBNx)$&H6{K8RyuNro?)3>u8AG(P6_m5sR2yuv8tVth=nz;IRHa!_XGbB5 z;(O9{i;oxtjE)bwJ_vwaw4{pT#b5&H$^#4u$3fj4L5g{FQ%mfKT_8hVfUQb`(L@bR z;0K@_)Sba8HCzDLV*CKN?;0w57n5m4H#E(k>Zn4LX=Ci2BNPt4g-zAq4));;^g$)W z?YRPrrjzI4cArPaMj)4^xbH9|l5=$&!1d6}S7B2%gxhve+;a$1TTk-K52^nAJ)~Ti za(Y^;MKH^j6F$2e=XM|drQeWp5kw(j8PSHQWj%W3YH&TAz8+LD&qUGV3ys0Obput* z5oOwl)^*06-PeQLdv#W0&JTQX8kh-Mm?u`C8=HyRH)EDQi8DGBi-<9ZHL=#a9`0Y4 z5v_@uo+8@t4AyaQ|GqJ6=**VP$@!@iRs@;RoiB>-V`oLCQmGr8NqzAViJy)G#NaQ#h8n$1;`GV5B(s<^aFf(mAEQQx zky0^UWA0f5Y$8c;`ULKk3q)%>&<)MlnkC?R5LJ-e7;gW~_}y9(UEhOpsB~<{xic^& zw=!$JH3kVwvB-P=f{G?#Ii_5?4qP9i3M!ukqp?BNM8j#UpTI0_#Odz^N5wPXq3qSx z#*fH + + \ No newline at end of file diff --git a/resources/fonts/input_0.png b/resources/fonts/input_0.png new file mode 100644 index 0000000000000000000000000000000000000000..c9d912d08a77e0a1d22fe24593a730ca942fbb53 GIT binary patch literal 7134 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 literal 0 HcmV?d00001 diff --git a/resources/fonts/input_1.png b/resources/fonts/input_1.png new file mode 100644 index 0000000000000000000000000000000000000000..de30095848c9fecfaf5232dac1916eeb5e2eecfd GIT binary patch literal 4550 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 literal 0 HcmV?d00001 diff --git a/resources/layouts/layout.xml b/resources/layouts/layout.xml new file mode 100755 index 0000000..8d50fca --- /dev/null +++ b/resources/layouts/layout.xml @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/resources/strings/strings.xml b/resources/strings/strings.xml new file mode 100644 index 0000000..95a0bf5 --- /dev/null +++ b/resources/strings/strings.xml @@ -0,0 +1,3 @@ + + terminalface + diff --git a/source/terminalfaceApp.mc b/source/terminalfaceApp.mc new file mode 100644 index 0000000..4c4d3fb --- /dev/null +++ b/source/terminalfaceApp.mc @@ -0,0 +1,28 @@ +import Toybox.Application; +import Toybox.Lang; +import Toybox.WatchUi; + +class terminalfaceApp extends Application.AppBase { + + function initialize() { + AppBase.initialize(); + } + + // onStart() is called on application start up + function onStart(state as Dictionary?) as Void { + } + + // onStop() is called when your application is exiting + function onStop(state as Dictionary?) as Void { + } + + // Return the initial view of your application here + function getInitialView() as Array? { + return [ new terminalfaceView() ] as Array; + } + +} + +function getApp() as terminalfaceApp { + return Application.getApp() as terminalfaceApp; +} \ No newline at end of file diff --git a/source/terminalfaceView.mc b/source/terminalfaceView.mc new file mode 100644 index 0000000..194040f --- /dev/null +++ b/source/terminalfaceView.mc @@ -0,0 +1,152 @@ +import Toybox.Graphics; +import Toybox.Lang; +import Toybox.System; +import Toybox.WatchUi; +import Toybox.Time.Gregorian; + +using Toybox.ActivityMonitor; + +class terminalfaceView extends WatchUi.WatchFace { + private var font as FontResource?; + private var curY as Number?; + private var lineSpace as Number?; + private var blinking as Boolean?; + private var lastBlink as Boolean?; + + function initialize() { + WatchFace.initialize(); + font = WatchUi.loadResource(Rez.Fonts.id_font_input) as FontResource; + lineSpace = 23; + blinking = false; + lastBlink = false; + } + + // Load your resources here + function onLayout(dc as Dc) as Void { + setLayout(Rez.Layouts.WatchFace(dc)); + } + + // Called when this View is brought to the foreground. Restore + // the state of this View and prepare it to be shown. This includes + // loading resources into memory. + function onShow() as Void { + } + + private function prompt(dc as Dc, cmd as String) as Void { + dc.setColor(Graphics.COLOR_GREEN, Graphics.COLOR_TRANSPARENT); + dc.drawText(25, curY, font, "si", Graphics.TEXT_JUSTIFY_LEFT); + + dc.setColor(Graphics.COLOR_BLUE, Graphics.COLOR_TRANSPARENT); + dc.drawText(50, curY, font, "@", Graphics.TEXT_JUSTIFY_LEFT); + + dc.setColor(Graphics.COLOR_RED, Graphics.COLOR_TRANSPARENT); + dc.drawText(63, curY, font, "fnx", Graphics.TEXT_JUSTIFY_LEFT); + + dc.setColor(Graphics.COLOR_BLUE, Graphics.COLOR_TRANSPARENT); + dc.drawText(113, curY, font, "~>", Graphics.TEXT_JUSTIFY_LEFT); + + dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT); + dc.drawText(150, curY, font, Lang.format("$1$", [cmd]), Graphics.TEXT_JUSTIFY_LEFT); + + curY += lineSpace; + } + + private function response(dc as Dc, text as String) as Void { + dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT); + dc.drawText(25, curY, font, text, Graphics.TEXT_JUSTIFY_LEFT); + + curY += lineSpace; + } + + private function makeBatteryString() { + var stats = System.getSystemStats(); + var batteryLevel = stats.battery; + var batteryDays = stats.batteryInDays; + + var bar = new [10]; + for (var i = 0; i < 10; i += 1) + { + if (batteryLevel > i*10) + { + bar[i] = '#'; + } + else + { + bar[i] = '-'; + } + } + + bar.add(batteryDays.toNumber()); + + return Lang.format("[$1$$2$$3$$4$$5$$6$$7$$8$$9$$10$] ($11$d)", bar); + } + + // Update the view + function onUpdate(dc as Dc) as Void { + curY = 50; + + dc.setColor(Graphics.COLOR_TRANSPARENT, Graphics.COLOR_BLACK); + dc.clear(); + + prompt(dc, "date"); + + var today = Gregorian.info(Time.now(), Time.FORMAT_MEDIUM); + var dateString = Lang.format("$1$ $2$ $3$ $4$:$5$", + [ + today.day_of_week, + today.month, + today.day, + today.hour.format("%02d"), + today.min.format("%02d"), + ]); + + response(dc, dateString); + + prompt(dc, "steps"); + var info = ActivityMonitor.getInfo(); + var steps = info.steps.toFloat(); + var stepGoal = info.stepGoal.toFloat(); + var ratio = (steps/stepGoal)*100; + response(dc, Lang.format("$1$/$2$ ($3$%)", [steps.toNumber(), stepGoal.toNumber(), ratio.toNumber()])); + + prompt(dc, "battery"); + var batteryString = makeBatteryString(); + response(dc, batteryString); + + if (blinking) + { + if (lastBlink) + { + prompt(dc, ""); + lastBlink = false; + } + else + { + prompt(dc, "_"); + lastBlink = true; + } + } + else + { + prompt(dc, "_"); + } + + } + + // Called when this View is removed from the screen. Save the + // state of this View here. This includes freeing resources from + // memory. + function onHide() as Void { + } + + // The user has just looked at their watch. Timers and animations may be started here. + function onExitSleep() as Void { + blinking = true; + } + + // Terminate any active timers and prepare for slow updates. + function onEnterSleep() as Void { + blinking = false; + } + +}