import Toybox.Attention; import Toybox.Graphics; import Toybox.Lang; import Toybox.Timer; import Toybox.WatchUi; // Red warning flash when GPS acquisition fails. 3× vibration + German // error message for Config.ERROR_DISPLAY_MS, then closes the app. class ErrorView extends WatchUi.View { private var _timer as Timer.Timer; function initialize() { View.initialize(); _timer = new Timer.Timer(); } function onShow() as Void { if (Attention has :vibrate) { var profile = [ new Attention.VibeProfile(75, 250), new Attention.VibeProfile(0, 150), new Attention.VibeProfile(75, 250), new Attention.VibeProfile(0, 150), new Attention.VibeProfile(75, 250) ] as Array; Attention.vibrate(profile); } _timer.start(method(:_dismiss), Config.ERROR_DISPLAY_MS, false); } function onHide() as Void { _timer.stop(); } function _dismiss() as Void { System.exit(); } function onUpdate(dc as Dc) as Void { dc.setColor(Config.COLOR_FG, Config.COLOR_BG); dc.clear(); var cx = LayoutMetrics.centerX(dc); var cy = LayoutMetrics.centerY(dc); var min = LayoutMetrics.minDim(dc); var iconRadius = (min * 0.1).toNumber(); var iconCy = (min * 0.25).toNumber(); dc.setColor(Config.COLOR_ERROR, Config.COLOR_BG); dc.fillCircle(cx, iconCy, iconRadius); dc.setColor(Config.COLOR_BG, Config.COLOR_ERROR); dc.drawText(cx, iconCy, Graphics.FONT_MEDIUM, "!", Graphics.TEXT_JUSTIFY_CENTER | Graphics.TEXT_JUSTIFY_VCENTER); dc.setColor(Config.COLOR_FG, Config.COLOR_BG); var textCy = cy + (min * 0.08).toNumber(); TextUtils.drawResourceCentered(dc, Rez.Strings.error_gps, cx, textCy, Graphics.FONT_TINY); } }