From 773df56883b9961b607a1994920f5ef5299423b8 Mon Sep 17 00:00:00 2001 From: cirakg Date: Sun, 18 Oct 2026 21:10:37 +0200 Subject: feat(app): add minimal watch app with smoke test and per-size icons The M0 placeholder app: AppBase entry point, home screen with name and version, debug-only diagnostics (start-up time, memory) and a unit test that runs in the headless simulator. Builds with strict type checking and zero warnings for all 72 products; icons.jungle gives every product a launcher icon of its exact size. Co-Authored-By: Claude Opus 5.5 --- source/app/OtpWalletApp.mc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 source/app/OtpWalletApp.mc (limited to 'source/app/OtpWalletApp.mc') diff --git a/source/app/OtpWalletApp.mc b/source/app/OtpWalletApp.mc new file mode 100644 index 0000000..8858878 --- /dev/null +++ b/source/app/OtpWalletApp.mc @@ -0,0 +1,40 @@ +// Author: cirakg & claude ai +// Summary: Application entry point (Connect IQ AppBase): lifecycle and first view. +// +// OtpWalletApp: the application entry point (Connect IQ AppBase). +// +// M0 skeleton: the app shows a home screen with its name and version. Later +// milestones add the vault, settings processing, locking and the glance. +// +// Connect IQ lifecycle: initialize -> onStart -> getInitialView -> (views run) +// -> onStop. +// +// Security note for later milestones: onStop is where every key and decrypted +// secret gets wiped. It runs when the user leaves the app, and also when +// Garmin's system passcode shuts running apps down. + +import Toybox.Application; +import Toybox.Lang; +import Toybox.WatchUi; + +class OtpWalletApp extends Application.AppBase { + + function initialize() { + AppBase.initialize(); + // Start of the start-up timer reported by `make perf` (debug builds only). + Diag.markStart(); + } + + // Called after the app is loaded, before the first view is shown. + function onStart(state as Dictionary?) as Void { + } + + // Called when the app exits, for any reason. + function onStop(state as Dictionary?) as Void { + } + + // The first screen and its input handler. + function getInitialView() as [Views] or [Views, InputDelegates] { + return [new HomeView(), new HomeDelegate()]; + } +} -- cgit v1.2.3