From b0f80c073e9e0535fb305f6d4f9713ad83892dd4 Mon Sep 17 00:00:00 2001 From: Felipe <60966475+fevieira27@users.noreply.github.com> Date: Wed, 11 Dec 2024 18:51:15 +0000 Subject: [PATCH] Add files via upload --- monkey.jungle | 11 +- .../images/MoveToBeActive.png | Bin 0 -> 5909 bytes .../images/MoveToBeActive.png | Bin 0 -> 5909 bytes .../images/MoveToBeActive.png | Bin 0 -> 5909 bytes resources-fenixe/images/MoveToBeActive.png | Bin 0 -> 5909 bytes resources-fr265/images/MoveToBeActive.png | Bin 0 -> 5909 bytes resources-fr265s/images/MoveToBeActive.png | Bin 0 -> 5909 bytes resources-round-208x208/bitmaps.xml | 8 + .../fonts/mtba-icons-small.fnt | 34 ++ .../fonts/mtba-icons-small.png | Bin 0 -> 8088 bytes .../fonts/weather-icons-20.fnt | 21 + .../fonts/weather-icons-20_0.png | Bin 0 -> 3576 bytes .../images/MoveToBeActive.png | Bin 0 -> 4594 bytes .../images/garmin-logo-tiny.png | Bin 0 -> 1491 bytes resources-round-208x208/images/garmin5.png | Bin 0 -> 14844 bytes resources-round-208x208/jsonData.xml | 31 ++ resources-round-208x208/resources.xml | 8 + settings-lowmemory/AnalogSettingsView.mc | 64 +-- settings/AnalogSettingsView.mc | 31 +- source/AnalogApp.mc | 1 + source/AnalogView.mc | 187 ++++---- source/MtbA_functions.mc | 420 +++++++++++------- 22 files changed, 513 insertions(+), 303 deletions(-) create mode 100644 resources-descentmk351mm/images/MoveToBeActive.png create mode 100644 resources-epix2pro51mm/images/MoveToBeActive.png create mode 100644 resources-fenix843mm/images/MoveToBeActive.png create mode 100644 resources-fenixe/images/MoveToBeActive.png create mode 100644 resources-fr265/images/MoveToBeActive.png create mode 100644 resources-fr265s/images/MoveToBeActive.png create mode 100644 resources-round-208x208/bitmaps.xml create mode 100644 resources-round-208x208/fonts/mtba-icons-small.fnt create mode 100644 resources-round-208x208/fonts/mtba-icons-small.png create mode 100644 resources-round-208x208/fonts/weather-icons-20.fnt create mode 100644 resources-round-208x208/fonts/weather-icons-20_0.png create mode 100644 resources-round-208x208/images/MoveToBeActive.png create mode 100644 resources-round-208x208/images/garmin-logo-tiny.png create mode 100644 resources-round-208x208/images/garmin5.png create mode 100644 resources-round-208x208/jsonData.xml create mode 100644 resources-round-208x208/resources.xml diff --git a/monkey.jungle b/monkey.jungle index ec73dc4..ac5fe5a 100644 --- a/monkey.jungle +++ b/monkey.jungle @@ -27,10 +27,15 @@ fenix5xplus.sourcePath = source;settings-lowmemory # enduro.sourcePath = source;settings-mediummemory # Exclude square hashmark logic for most models. -base.excludeAnnotations = square +base.excludeAnnotations = square;lowColors;noTempo +fr55.excludeAnnotations = square;allColors;noTempo +# Exclude square hashmark and weather functions for watchs that do not support it +fenix5plus.excludeAnnotations = square;lowColors;tempo +fenix5splus.excludeAnnotations = square;lowColors;tempo +fenix5xplus.excludeAnnotations = square;lowColors;tempo # Exclude round hashmark logic for square models (to save memory and improve performance). -venusq.excludeAnnotations = round -venusqm.excludeAnnotations = round +venusq.excludeAnnotations = round;lowColors;noTempo +venusqm.excludeAnnotations = round;lowColors;noTempo # venusq2.excludeAnnotations = round # venusq2m.excludeAnnotations = round diff --git a/resources-descentmk351mm/images/MoveToBeActive.png b/resources-descentmk351mm/images/MoveToBeActive.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf141f1e1271c6363727d43949b4df1ac45cb39 GIT binary patch literal 5909 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 Jk?H=({{zK~i+}(C literal 0 HcmV?d00001 diff --git a/resources-epix2pro51mm/images/MoveToBeActive.png b/resources-epix2pro51mm/images/MoveToBeActive.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf141f1e1271c6363727d43949b4df1ac45cb39 GIT binary patch literal 5909 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 Jk?H=({{zK~i+}(C literal 0 HcmV?d00001 diff --git a/resources-fenix843mm/images/MoveToBeActive.png b/resources-fenix843mm/images/MoveToBeActive.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf141f1e1271c6363727d43949b4df1ac45cb39 GIT binary patch literal 5909 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 Jk?H=({{zK~i+}(C literal 0 HcmV?d00001 diff --git a/resources-fenixe/images/MoveToBeActive.png b/resources-fenixe/images/MoveToBeActive.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf141f1e1271c6363727d43949b4df1ac45cb39 GIT binary patch literal 5909 zcmcIo2|QHm`zIADvbRaoh*HMvV`dn#g>II@jk?mAnKKM#F*BCz%h*!kYLTtnL}iOM zmAIzORu|n!p|W%n*$OH2KZDf0|9gM;etye*K4;E3@AG}1?fpK_`_9DM+gi#kS-nI; zLPE~k%6u1eHxyqoi=l7wWGfH4$#Sh+_!1I&n&L|`;HbfD6#PKmm*jx-;1n_~6Y-IE+cBz<1+qP&QmM(1U3e$O9b$Z5?TW zUNjONZfpcI3?M@aSfBua1+cu?d~yHZ63$<<$2E-r_+$2H^>6n0zQOA z&tsu1+1Sj(|5PoDHIL>CEc_sk=3@I(G~e+67ewv?`5a#!4YcrsENXsnj4#*)eof6k zm=3|`Cv!bG0uJAU^A|~&7ym950w&`x42mVcgMtCfzkrG*^H46?j0XY&4$qOp@&3Xc z`!Bx1Fc>{7Y}0Ngo6hm)>xcuNn*f>v0+0e16A6LBBT!gJ43>;TlQF0*C^Q*`nuXdx z)T9Ff;16JZM-0R|G#QQm9hgIBG7kJLlujcvI6M{rEgX{txPwS8+kM8GjSbnF%@+V{ z8fa}!fkUq9F`0BSo`j>~7z`?cfW-j_A_|8?P|*w`0t135Dp8++rV{C2=9_b9zG6~| z=g-y`okN3k%&!I+i@~F5cq|=(!(kW*8Wu-H05k>)LBL@3X#^S$i^dVZXtU!np%MqY zztt-CiVkU{5^)#|jY>k$0DUxqK^5!4p#cN~rH>`xFhm9b65z0}cFj269G(q_4&@vR zhly9445^1)1;q75furXJoyAo3_MIKXqGmowwD>j$aQQpHSGg0L2_+c=hlv?Op7Fo| zYF>~F1Uw##pBuMl27unq=1eGW{25p9SlqWFmp_Qa-Ar7iWGf~g;@yF{e&Yc8%sqKC zVKaqE257Tk(8LS{p+%Yb;Lg{mjC4j zX|B_K)hUIb`mNp73JU`;t3HNDNXC$Nn%is@BzUSQD2k|CRl1g~l{A%!KwIG&wbmbO zXj+vK08=nHdWTS@O^lB}eBUo_ZRg7M!sJa&ud>F+rz^ugf3k@##kyC#@2I#o-j4{n zW*B?s<94hlKolsl7CD)sO*}WP58g(!tJdB?$`X~P4OvGmmZK+XQ0T$IDs}5*n9y3d zIx+I~a+&i&>G=5gtC4S8FIn1VlAZi|o1(8oh9Avd(6nFli&LyG++0~(>9}GCeDd0X zcdvN;PfB?2UOl)v=yt{PSpTzY$d0MKrcrM;>^;HVOeXIcXuJOCyQI;+mb$7aX|tr8 zLUj?!^sU0P@a7vzO)_r2Z=XJ165w~o^6={Ds}<`f3&_=kjlo92AGpOa+41YmVz^z! z(tWh|{Z6oO{9T3Vwp&5|*8_&B#aHv}P95#KYzD@E_>&8a=L$J(N3lt{a~vTja8c4G}$%Y4$Rk5e>zNjlTpax5e<#ix{tG>@d- z?wp?bbSnmPA*g1BOX}^Yf&$&d6YqN;NiWw5u-NNj{XsJb6?QDZpzC;meVw&h*-#+5 zJ;5QgT}fF9YpGunIOCl6B& zdaJyYa=4wXq!F{sy7*A5{5@0Ej&-UpWiUOvc77~R@3-t)7k9?sdA?g^sF&v$x39Ud zr~V{1s`ftG!A#<6%ICqQEA#|T=IrlUw#yaYq-8LG)YoT zMdgE5IqMn0HYCK$|8+z5IovZlJ#~`>110eD3RgB;m#Hl}Q`cEsvb>#M6Slk`iLF_E zC%Nl4%_}%%MZTxCFS~bSW8c%ehTl)HDeLHcDZR(yyedyupS0gB-)+2MEWMT zhPhg=1(Q~*jkNlJ6&P>!5LsSIj8BNyDjMIv68g2S$n-yuM7p|bra(B&Eakc2xh%a^2zki!27*J*|dqM-Y91GAT(CXIC%;&fA-0 z^A2fHo@V%F$oZA(%B$r3NHA8-Yg&4@C9^!97B>MK*1L5xBj$wn$B@R8>+)3htoA*7 zsPcN@fWd_%)CrGchAur%GD!UTde4vsVS81c{=}e*PjDa0r{@?C+1Zm*RoA7Fv?^@y z*t*J7?44|LTmjEA-R>JyQ>+JDo~dWoT! z(jGV?&cra9rn#`NXyT7St{K+XwT#XTPuFc?o}>i3#a-N9kmgvOLkT>{(1f*>ZI``y z#V9H6H>Jj|<73h1cCRX34Cu-Zir!rKSh!Z@Wn7$$0$VBEeZ%(_DsU+oq3)&>u43ge zt=Cc9z4)m|{@VT%O4FgCp%n>3Wj@v`O7#Yb5(f8jB4ch>R4CQ_F74PPU)h zsksGc>|?i$?z@7b97q6@@g(9dCDkNU#7W-{H*rjL%+w-yB?=y zbQw&=81Kg(su`(kR4D4*3$J!9u@v^9YX)w#yZJQVjoc5`{A6}rF4MbXt@|3^H@^-C z#^5KV3p%9pUEgc$tChQWd{oQf3Y(?)Yv0v3T?Gj?L$yg3vD61ApEbmi-Hr>Bt=`%b zn=bBMaZXV?+iQihUq`FNSeX6tn+v?hhBn^PbBjH@Rq8`@uBlc%y)mLKyRCWhS|)4% zwW|INS?F8ddTp%{QYWoV2Y0p~byFT2eNyZ@a#6!sCRD0Man-6`cz%lc{ZFOD{ZNl7 zo8~ASLFL6()VJc+Iq-E4xl#lYEm3ZL6}kT5#!a3Hzw)*SPIn~l&=|b;*$_e3b*oTs zK@K&%&#KIvjF6Ikns#Z`A?KCsAI9C(?u@+j%DOF`1w05pnz_t#r%3dsj*Y!{Y3pfX zgq+EZth>S!9}Lb&@<9{d=Xj|T`=mv$84t`BSvrn|5Wt`l1 zr{RKY>~=0k_{*WXiy?{o=!I|67BX*{aozL{9_9HSenF{-l)Lvd4eu4`lFCL0x9=7< ztKqZ8ukWY}N2Ye^jOT>fNC*Bf2urdUiEtzE36y5}fv&KE=y%h_M$MfSnHJf!);lEI zpBMScL!0vLQDw<@o)V1@`(2x3bYuckl@%$gUUu6`(8^nunWLlxfT-%4J$E^ zbruX39`Ej^->lUzs(W=Omm#e!YCi3MqyuP>ZvnRK57WQD=hrJsGlEZr>`8p@nXlqr zlU1T=sQz%R$0Qi>!j0&ES5)Osoa&Zuic*$VC%8$7BI7!;3oJrDlt_6Um3`LJ@TTl` z{&a4rdr47rZ9u~^=N%H}ZzI(c^L2%`N21+7gUY|%xTr4By_W4Cxpt>3!B2TpHBpg! zx8>o+75ys5JBdF&9UUK9?-u$~rqa;4;>1Q6!@aW&-6nZ);Uj^G)y50y<*o-4G!s%~ zFJRY6)-CXk?7Ez(voig#>o)o}0XALqxj=SocY9uIcNfM`Dx0n4?V6g|Th-_&e0s-i zb*gb$}P1#MEkWV4y;{yZ~@}xkp0;fY33BU zV4-BpJHb@orlpcF*K2Io){B7I`LTni@(;c{PSkimQJt)r-=h!!hNnbswzEC=M)}HU ziMlX&jq<_!HY#}w9#4MCAS>@-fytFposZ@EU*+2^V5j9R$e&V{_^@0)-Dt^AM8cs< zr#5Hh7#AfPc5g=9wNRi`d(++ z%-PoC{f4k}qdL`=78Wjfuh2d9)zud(EHSaF-Tg%0@a1NUm#u{Pz!s%Ty)i@R));=m zg`6GRBHAMwl>KZUvCU4cV&mj@YfFBPUH?e7-PA_bOy{%o>Qu?|O64H*-?oH=wS}#D Jk?H=({{zK~i+}(C literal 0 HcmV?d00001 diff --git a/resources-fr265/images/MoveToBeActive.png b/resources-fr265/images/MoveToBeActive.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf141f1e1271c6363727d43949b4df1ac45cb39 GIT binary patch literal 5909 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 Jk?H=({{zK~i+}(C literal 0 HcmV?d00001 diff --git a/resources-fr265s/images/MoveToBeActive.png b/resources-fr265s/images/MoveToBeActive.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf141f1e1271c6363727d43949b4df1ac45cb39 GIT binary patch literal 5909 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 Jk?H=({{zK~i+}(C literal 0 HcmV?d00001 diff --git a/resources-round-208x208/bitmaps.xml b/resources-round-208x208/bitmaps.xml new file mode 100644 index 0000000..b92290d --- /dev/null +++ b/resources-round-208x208/bitmaps.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/resources-round-208x208/fonts/mtba-icons-small.fnt b/resources-round-208x208/fonts/mtba-icons-small.fnt new file mode 100644 index 0000000..77bcd22 --- /dev/null +++ b/resources-round-208x208/fonts/mtba-icons-small.fnt @@ -0,0 +1,34 @@ +info face="MtbA Icons" size=-20 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0 +common lineHeight=20 base=20 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="mtba-icons-small.png" +chars count=23 +char id=48 x=0 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=49 x=21 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=50 x=47 y=0 width=15 height=20 xoffset=0 yoffset=0 xadvance=15 page=0 chnl=15 +char id=51 x=63 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=52 x=84 y=0 width=24 height=20 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=15 +char id=53 x=109 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=54 x=130 y=0 width=12 height=20 xoffset=4 yoffset=0 xadvance=20 page=0 chnl=15 +char id=55 x=143 y=0 width=18 height=20 xoffset=0 yoffset=0 xadvance=18 page=0 chnl=15 +char id=56 x=162 y=0 width=15 height=20 xoffset=0 yoffset=0 xadvance=15 page=0 chnl=15 +char id=57 x=178 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=58 x=199 y=0 width=18 height=20 xoffset=0 yoffset=0 xadvance=18 page=0 chnl=15 +char id=59 x=218 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=46 x=239 y=0 width=10 height=20 xoffset=5 yoffset=0 xadvance=20 page=0 chnl=15 +char id=61 x=250 y=0 width=6 height=6 xoffset=0 yoffset=7 xadvance=6 page=0 chnl=15 +char id=62 x=0 y=21 width=23 height=20 xoffset=0 yoffset=0 xadvance=23 page=0 chnl=15 +char id=63 x=24 y=21 width=23 height=20 xoffset=0 yoffset=0 xadvance=23 page=0 chnl=15 +char id=64 x=48 y=21 width=17 height=20 xoffset=0 yoffset=0 xadvance=17 page=0 chnl=15 +char id=65 x=66 y=21 width=14 height=20 xoffset=0 yoffset=0 xadvance=14 page=0 chnl=15 +char id=66 x=42 y=0 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=80 x=102 y=21 width=26 height=22 xoffset=2 yoffset=0 xadvance=26 page=0 chnl=15 +char id=81 x=81 y=21 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=82 x=129 y=21 width=20 height=21 xoffset=1 yoffset=0 xadvance=24 page=0 chnl=15 +char id=83 x=150 y=21 width=14 height=20 xoffset=2 yoffset=0 xadvance=18 page=0 chnl=15 + +char id=84 x=165 y=21 width=17 height=18 xoffset=0 yoffset=0 xadvance=17 page=0 chnl=15 +char id=85 x=183 y=21 width=9 height=20 xoffset=0 yoffset=0 xadvance=9 page=0 chnl=15 +char id=86 x=193 y=21 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=87 x=214 y=21 width=20 height=20 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=15 +char id=88 x=235 y=21 width=21 height=20 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=89 x=0 y=44 width=17 height=20 xoffset=0 yoffset=0 xadvance=17 page=0 chnl=15 \ No newline at end of file diff --git a/resources-round-208x208/fonts/mtba-icons-small.png b/resources-round-208x208/fonts/mtba-icons-small.png new file mode 100644 index 0000000000000000000000000000000000000000..dbead1d222453d83a4ca991baf8ba88a52d8293a GIT binary patch literal 8088 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 literal 0 HcmV?d00001 diff --git a/resources-round-208x208/fonts/weather-icons-20.fnt b/resources-round-208x208/fonts/weather-icons-20.fnt new file mode 100644 index 0000000..684de0b --- /dev/null +++ b/resources-round-208x208/fonts/weather-icons-20.fnt @@ -0,0 +1,21 @@ +info face="Weather Icons" size=-17 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=2 padding=0,0,0,0 spacing=1,1 outline=0 +common lineHeight=25 base=19 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="weather-icons-20_0.png" +chars count=17 +char id=65 x=100 y=0 width=26 height=22 xoffset=0 yoffset=0 xadvance=26 page=0 chnl=15 +char id=66 x=0 y=26 width=24 height=19 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=15 +char id=67 x=0 y=0 width=24 height=25 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=15 +char id=68 x=25 y=0 width=24 height=24 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=15 +char id=69 x=50 y=0 width=24 height=24 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=15 +char id=70 x=75 y=0 width=24 height=24 xoffset=0 yoffset=0 xadvance=24 page=0 chnl=15 +char id=71 x=127 y=0 width=21 height=20 xoffset=0 yoffset=0 xadvance=21 page=0 chnl=15 +char id=72 x=212 y=0 width=19 height=20 xoffset=0 yoffset=2 xadvance=19 page=0 chnl=15 +char id=73 x=69 y=25 width=20 height=14 xoffset=0 yoffset=5 xadvance=19 page=0 chnl=15 +char id=97 x=25 y=25 width=23 height=18 xoffset=0 yoffset=4 xadvance=22 page=0 chnl=15 +char id=98 x=232 y=0 width=20 height=19 xoffset=0 yoffset=4 xadvance=19 page=0 chnl=15 +char id=99 x=149 y=0 width=20 height=20 xoffset=0 yoffset=4 xadvance=19 page=0 chnl=15 +char id=100 x=170 y=0 width=20 height=20 xoffset=0 yoffset=4 xadvance=19 page=0 chnl=15 +char id=101 x=191 y=0 width=20 height=20 xoffset=0 yoffset=4 xadvance=19 page=0 chnl=15 +char id=102 x=105 y=23 width=13 height=14 xoffset=0 yoffset=5 xadvance=12 page=0 chnl=15 +char id=103 x=90 y=25 width=14 height=14 xoffset=0 yoffset=6 xadvance=14 page=0 chnl=15 +char id=104 x=49 y=25 width=19 height=15 xoffset=0 yoffset=4 xadvance=19 page=0 chnl=15 diff --git a/resources-round-208x208/fonts/weather-icons-20_0.png b/resources-round-208x208/fonts/weather-icons-20_0.png new file mode 100644 index 0000000000000000000000000000000000000000..caf8ea849a0a3ba35ad5c99c7b23b96fcd6778fc GIT binary patch literal 3576 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 Xnf@(6bQA^t-=))o8bfLyI7a;s`M>|# literal 0 HcmV?d00001 diff --git a/resources-round-208x208/images/MoveToBeActive.png b/resources-round-208x208/images/MoveToBeActive.png new file mode 100644 index 0000000000000000000000000000000000000000..9d834fe4da098b8007932423312b98aa64d07fcd GIT binary patch literal 4594 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 literal 0 HcmV?d00001 diff --git a/resources-round-208x208/images/garmin5.png b/resources-round-208x208/images/garmin5.png new file mode 100644 index 0000000000000000000000000000000000000000..077364f333b1225d5754a1b3ebb5baf4ef900e51 GIT binary patch literal 14844 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 literal 0 HcmV?d00001 diff --git a/resources-round-208x208/jsonData.xml b/resources-round-208x208/jsonData.xml new file mode 100644 index 0000000..c7945ab --- /dev/null +++ b/resources-round-208x208/jsonData.xml @@ -0,0 +1,31 @@ + + + + [98, 58, 84, 129, 57, 30, 144, 136, 140, 72, 150, 72, 42, 52, 111, 110, 91.5, 91, 98, 98, 128, 100, 138, 126] + + \ No newline at end of file diff --git a/resources-round-208x208/resources.xml b/resources-round-208x208/resources.xml new file mode 100644 index 0000000..d05b37b --- /dev/null +++ b/resources-round-208x208/resources.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/settings-lowmemory/AnalogSettingsView.mc b/settings-lowmemory/AnalogSettingsView.mc index e9e4865..f5329d1 100644 --- a/settings-lowmemory/AnalogSettingsView.mc +++ b/settings-lowmemory/AnalogSettingsView.mc @@ -17,43 +17,7 @@ class AnalogSettingsViewTest extends WatchUi.Menu2 { function initialize() { Menu2.initialize(null); -/* - var currentVersion=512; - if (Storage.getValue(23)==null or Storage.getValue(23)"Accent", :disabled=>"Default"}, 18, Storage.getValue(18), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); if (Toybox has :Weather and Toybox.Weather has :getCurrentConditions){ // has weather, doesn't show these for Fenix 5 Plus series iconMenu.addItem(new WatchUi.ToggleMenuItem("Weather Condition", {:enabled=>"ON", :disabled=>"OFF"}, 25, Storage.getValue(25), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); - iconMenu.addItem(new WatchUi.ToggleMenuItem(Toybox.Weather.getCurrentConditions().observationLocationName!=null?"Location Name":"Condition Name", {:enabled=>"ON", :disabled=>"OFF"}, 7, Storage.getValue(7), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); + iconMenu.addItem(new WatchUi.ToggleMenuItem("Condition Name", {:enabled=>"ON", :disabled=>"OFF"}, 7, Storage.getValue(7), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); //iconMenu.addItem(new WatchUi.ToggleMenuItem("Location Name", {:enabled=>"ON", :disabled=>"OFF"}, 7, Storage.getValue(7), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); } @@ -241,9 +205,9 @@ class DrawableMenuTitle extends WatchUi.Drawable { //System.println(labelWidth); var mColors; if (Storage.getValue(32) == null or Storage.getValue(32) == false){ - mColors = Application.loadResource(Rez.JsonData.mColors); + mColors = Application.loadResource(Rez.JsonData.mColors) as Array; } else { - mColors = Application.loadResource(Rez.JsonData.mColorsWhite); + mColors = Application.loadResource(Rez.JsonData.mColorsWhite) as Array; } dc.setColor(Graphics.COLOR_BLACK, Graphics.COLOR_BLACK); @@ -301,9 +265,9 @@ class CustomAccent extends WatchUi.Drawable { var mColorStrings; //if (Storage.getValue(32) == null or Storage.getValue(32) == false){ if (Storage.getValue(32) == true){ - mColorStrings = Application.loadResource(Rez.JsonData.mColorStringsWhite); + mColorStrings = Application.loadResource(Rez.JsonData.mColorStringsWhite) as Array; } else { - mColorStrings = Application.loadResource(Rez.JsonData.mColorStrings); + mColorStrings = Application.loadResource(Rez.JsonData.mColorStrings) as Array; } return mColorStrings[mIndex]; @@ -315,9 +279,9 @@ class CustomAccent extends WatchUi.Drawable { var mColors; if (Storage.getValue(32) == true){ - mColors = Application.loadResource(Rez.JsonData.mColorsWhite); + mColors = Application.loadResource(Rez.JsonData.mColorsWhite) as Array; } else { - mColors = Application.loadResource(Rez.JsonData.mColors); + mColors = Application.loadResource(Rez.JsonData.mColors) as Array; } mIndex++; @@ -336,9 +300,9 @@ class CustomAccent extends WatchUi.Drawable { public function draw(dc) { var mColors; if (Storage.getValue(32) == true){ - mColors = Application.loadResource(Rez.JsonData.mColorsWhite); + mColors = Application.loadResource(Rez.JsonData.mColorsWhite) as Array; } else { - mColors = Application.loadResource(Rez.JsonData.mColors); + mColors = Application.loadResource(Rez.JsonData.mColors) as Array; } var color = mColors[mIndex]; dc.setColor(color, color); @@ -374,9 +338,9 @@ class CustomDataPoint extends WatchUi.Drawable { var mIconStrings; if (size==2){ // Data field locations with length limitation = "small" - mIconStrings = ["Steps", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Humidity":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Precipitation":"Not Available", (Activity.getActivityInfo() has :rawAmbientPressure) ? "Atm. Pressure" : "Not available", "Calories Total", "Calories Active", (ActivityMonitor.getInfo() has :floorsClimbed)?"Floors Climbed":"Not Available", (Activity.getActivityInfo() has :currentOxygenSaturation)?"Pulse Ox":"Not available" , "Heart Rate", "Notifications", (System.getSystemStats() has :solarIntensity and System.getSystemStats().solarIntensity != null) ? "Solar Intensity" : "Not available", "Seconds", "Digital Clock", "Intensity Min.", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getBodyBatteryHistory))?"Body Battery":"Not Available", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getStressHistory))?"Stress":"Not Available", (ActivityMonitor.getInfo() has :respirationRate)?"Respiration Rate":"Not Available", (ActivityMonitor.getInfo() has :timeToRecovery)?"Recovery Time":"Not Available", (UserProfile.getProfile() has :vo2maxRunning)?"VO2 Max Run":"Not Available", (UserProfile.getProfile() has :vo2maxCycling)?"VO2 Max Cycle":"Not Available", ((Toybox has :Weather) && (Weather has :getSunset and Weather has :getSunrise))?"Next Sun Event":"Not Available", "Battery %/day", "None"]; + mIconStrings = ["Steps", "Not Available", "Not Available", (Activity.getActivityInfo() has :rawAmbientPressure) ? "Atm. Pressure" : "Not available", "Calories Total", "Calories Active", (ActivityMonitor.getInfo() has :floorsClimbed)?"Floors Climbed":"Not Available", (Activity.getActivityInfo() has :currentOxygenSaturation)?"Pulse Ox":"Not available" , "Heart Rate", "Notifications", (System.getSystemStats() has :solarIntensity and System.getSystemStats().solarIntensity != null) ? "Solar Intensity" : "Not available", "Seconds", "Digital Clock", "Intensity Min.", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getBodyBatteryHistory))?"Body Battery":"Not Available", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getStressHistory))?"Stress":"Not Available", (ActivityMonitor.getInfo() has :respirationRate)?"Respiration Rate":"Not Available", (ActivityMonitor.getInfo() has :timeToRecovery)?"Recovery Time":"Not Available", (UserProfile.getProfile() has :vo2maxRunning)?"VO2 Max Run":"Not Available", (UserProfile.getProfile() has :vo2maxCycling)?"VO2 Max Cycle":"Not Available", "Not Available", "Battery %/day", "Not Available", "None"]; } else { // No limitations on data field length - mIconStrings = ["Steps", "Distance", "Elevation", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Wind Speed":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Min/Max Temp.":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Humidity":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Precipitation":"Not Available", (Activity.getActivityInfo() has :rawAmbientPressure) ? "Atm. Pressure" : "Not available", "Calories Total", "Calories Active", (ActivityMonitor.getInfo() has :floorsClimbed)?"Floors Climbed":"Not Available", (Activity.getActivityInfo() has :currentOxygenSaturation)?"Pulse Ox":"Not available", "Heart Rate", "Notifications",(System.getSystemStats() has :solarIntensity and System.getSystemStats().solarIntensity != null) ? "Solar Intensity" : "Not available", "Seconds", "Digital Clock", "Intensity Min.", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getBodyBatteryHistory))?"Body Battery":"Not Available", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getStressHistory))?"Stress":"Not Available", (ActivityMonitor.getInfo() has :respirationRate)?"Respiration Rate":"Not Available", (ActivityMonitor.getInfo() has :timeToRecovery)?"Recovery Time":"Not Available", (UserProfile.getProfile() has :vo2maxRunning)?"VO2 Max Run":"Not Available", (UserProfile.getProfile() has :vo2maxCycling)?"VO2 Max Cycle":"Not Available", ((Toybox has :Weather) && (Weather has :getSunset and Weather has :getSunrise))?"Next Sun Event":"Not Available", "Battery %/day", "None"]; + mIconStrings = ["Steps", "Distance", "Elevation", "Not Available", "Not Available", "Not Available", "Not Available", (Activity.getActivityInfo() has :rawAmbientPressure) ? "Atm. Pressure" : "Not available", "Calories Total", "Calories Active", (ActivityMonitor.getInfo() has :floorsClimbed)?"Floors Climbed":"Not Available", (Activity.getActivityInfo() has :currentOxygenSaturation)?"Pulse Ox":"Not available", "Heart Rate", "Notifications",(System.getSystemStats() has :solarIntensity and System.getSystemStats().solarIntensity != null) ? "Solar Intensity" : "Not available", "Seconds", "Digital Clock", "Intensity Min.", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getBodyBatteryHistory))?"Body Battery":"Not Available", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getStressHistory))?"Stress":"Not Available", (ActivityMonitor.getInfo() has :respirationRate)?"Respiration Rate":"Not Available", (ActivityMonitor.getInfo() has :timeToRecovery)?"Recovery Time":"Not Available", (UserProfile.getProfile() has :vo2maxRunning)?"VO2 Max Run":"Not Available", (UserProfile.getProfile() has :vo2maxCycling)?"VO2 Max Cycle":"Not Available", "Not Available", "Battery %/day", "Not Available", "None"]; } if (id!=-1){ // -1 means to return only the name, while any other value means to skip to next step @@ -395,9 +359,9 @@ class CustomDataPoint extends WatchUi.Drawable { function draw(dc) { var mIcons; if (type==2) { - mIcons = Application.loadResource(Rez.JsonData.mIcons9); + mIcons = Application.loadResource(Rez.JsonData.mIcons9) as Array; } else { - mIcons = Application.loadResource(Rez.JsonData.mIcons12); + mIcons = Application.loadResource(Rez.JsonData.mIcons12) as Array; } var iColor=0x55FF00; diff --git a/settings/AnalogSettingsView.mc b/settings/AnalogSettingsView.mc index 89bdceb..821039e 100644 --- a/settings/AnalogSettingsView.mc +++ b/settings/AnalogSettingsView.mc @@ -98,9 +98,8 @@ class Menu2TestMenu2Delegate extends WatchUi.Menu2InputDelegate { // Sub-menu De iconMenu.addItem(new WatchUi.ToggleMenuItem("Tickmark Color", {:enabled=>"Accent", :disabled=>"Default"}, 18, Storage.getValue(18), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); if (Toybox has :Weather and Toybox.Weather has :getCurrentConditions){ // has weather, doesn't show these for Fenix 5 Plus series iconMenu.addItem(new WatchUi.ToggleMenuItem("Weather Condition", {:enabled=>"ON", :disabled=>"OFF"}, 25, Storage.getValue(25), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); - iconMenu.addItem(new WatchUi.ToggleMenuItem(Toybox.Weather.getCurrentConditions().observationLocationName!=null?"Location Name":"Condition Name", {:enabled=>"ON", :disabled=>"OFF"}, 7, Storage.getValue(7), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); - //iconMenu.addItem(new WatchUi.ToggleMenuItem("Location Name", {:enabled=>"ON", :disabled=>"OFF"}, 7, Storage.getValue(7), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); - + iconMenu.addItem(new WatchUi.ToggleMenuItem("Condition Name", {:enabled=>"ON", :disabled=>"OFF"}, 7, Storage.getValue(7), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); + //iconMenu.addItem(new WatchUi.ToggleMenuItem("Location Name", {:enabled=>"ON", :disabled=>"OFF"}, 7, Storage.getValue(7), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); } // allow these extra features only for LCD and AMOLED devices if(System.getDeviceSettings().requiresBurnInProtection){ @@ -128,7 +127,7 @@ class Menu2TestMenu2Delegate extends WatchUi.Menu2InputDelegate { // Sub-menu De dataMenu.addItem(new WatchUi.IconMenuItem("Right Top", drawable6.nextState(-1,2/*small*/), 17, drawable6, {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); dataMenu.addItem(new WatchUi.IconMenuItem("Right Bottom", drawable5.nextState(-1,2/*small*/), 12, drawable5, {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); if (System.SCREEN_SHAPE_ROUND == System.getDeviceSettings().screenShape) { //check if rounded display - dataMenu.addItem(new WatchUi.ToggleMenuItem("Font Size", {:enabled=>"Bigger", :disabled=>"Standard"}, 14, Storage.getValue(14), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); + dataMenu.addItem(new WatchUi.ToggleMenuItem("Font Size", {:enabled=>"Bigger", :disabled=>"Standard"}, 14, Storage.getValue(14), {:alignment=>WatchUi.MenuItem.MENU_ITEM_LABEL_ALIGN_LEFT})); } //WatchUi.pushView(dataMenu, new AnalogSettingsViewTest(), WatchUi.SLIDE_BLINK ); WatchUi.pushView(dataMenu, new Menu2TestMenu2Delegate(), WatchUi.SLIDE_UP ); @@ -209,9 +208,9 @@ class DrawableMenuTitle extends WatchUi.Drawable { //System.println(labelWidth); var mColors; if (Storage.getValue(32) == null or Storage.getValue(32) == false){ - mColors = Application.loadResource(Rez.JsonData.mColors); + mColors = Application.loadResource(Rez.JsonData.mColors) as Array; } else { - mColors = Application.loadResource(Rez.JsonData.mColorsWhite); + mColors = Application.loadResource(Rez.JsonData.mColorsWhite) as Array; } dc.setColor(Graphics.COLOR_BLACK, Graphics.COLOR_BLACK); @@ -269,9 +268,9 @@ class CustomAccent extends WatchUi.Drawable { var mColorStrings; //if (Storage.getValue(32) == null or Storage.getValue(32) == false){ if (Storage.getValue(32) == true){ - mColorStrings = Application.loadResource(Rez.JsonData.mColorStringsWhite); + mColorStrings = Application.loadResource(Rez.JsonData.mColorStringsWhite) as Array; } else { - mColorStrings = Application.loadResource(Rez.JsonData.mColorStrings); + mColorStrings = Application.loadResource(Rez.JsonData.mColorStrings) as Array; } return mColorStrings[mIndex]; @@ -283,9 +282,9 @@ class CustomAccent extends WatchUi.Drawable { var mColors; if (Storage.getValue(32) == true){ - mColors = Application.loadResource(Rez.JsonData.mColorsWhite); + mColors = Application.loadResource(Rez.JsonData.mColorsWhite) as Array; } else { - mColors = Application.loadResource(Rez.JsonData.mColors); + mColors = Application.loadResource(Rez.JsonData.mColors) as Array; } mIndex++; @@ -304,9 +303,9 @@ class CustomAccent extends WatchUi.Drawable { public function draw(dc) { var mColors; if (Storage.getValue(32) == true){ - mColors = Application.loadResource(Rez.JsonData.mColorsWhite); + mColors = Application.loadResource(Rez.JsonData.mColorsWhite) as Array; } else { - mColors = Application.loadResource(Rez.JsonData.mColors); + mColors = Application.loadResource(Rez.JsonData.mColors) as Array; } var color = mColors[mIndex]; dc.setColor(color, color); @@ -342,9 +341,9 @@ class CustomDataPoint extends WatchUi.Drawable { var mIconStrings; if (size==2){ // Data field locations with length limitation = "small" - mIconStrings = ["Steps", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Humidity":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Precipitation":"Not Available", (Activity.getActivityInfo() has :rawAmbientPressure) ? "Atm. Pressure" : "Not available", "Calories Total", "Calories Active", (ActivityMonitor.getInfo() has :floorsClimbed)?"Floors Climbed":"Not Available", (Activity.getActivityInfo() has :currentOxygenSaturation)?"Pulse Ox":"Not available" , "Heart Rate", "Notifications", (System.getSystemStats() has :solarIntensity and System.getSystemStats().solarIntensity != null) ? "Solar Intensity" : "Not available", "Seconds", "Digital Clock", "Intensity Min.", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getBodyBatteryHistory))?"Body Battery":"Not Available", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getStressHistory))?"Stress":"Not Available", (ActivityMonitor.getInfo() has :respirationRate)?"Respiration Rate":"Not Available", (ActivityMonitor.getInfo() has :timeToRecovery)?"Recovery Time":"Not Available", (UserProfile.getProfile() has :vo2maxRunning)?"VO2 Max Run":"Not Available", (UserProfile.getProfile() has :vo2maxCycling)?"VO2 Max Cycle":"Not Available", ((Toybox has :Weather) && (Weather has :getSunset and Weather has :getSunrise))?"Next Sun Event":"Not Available", "Battery %/day", "None"]; + mIconStrings = ["Steps", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Humidity":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Precipitation":"Not Available", (Activity.getActivityInfo() has :rawAmbientPressure) ? "Atm. Pressure" : "Not available", "Calories Total", "Calories Active", (ActivityMonitor.getInfo() has :floorsClimbed)?"Floors Climbed":"Not Available", (Activity.getActivityInfo() has :currentOxygenSaturation)?"Pulse Ox":"Not available" , "Heart Rate", "Notifications", (System.getSystemStats() has :solarIntensity and System.getSystemStats().solarIntensity != null) ? "Solar Intensity" : "Not available", "Seconds", "Digital Clock", "Intensity Min.", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getBodyBatteryHistory))?"Body Battery":"Not Available", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getStressHistory))?"Stress":"Not Available", (ActivityMonitor.getInfo() has :respirationRate)?"Respiration Rate":"Not Available", (ActivityMonitor.getInfo() has :timeToRecovery)?"Recovery Time":"Not Available", (UserProfile.getProfile() has :vo2maxRunning)?"VO2 Max Run":"Not Available", (UserProfile.getProfile() has :vo2maxCycling)?"VO2 Max Cycle":"Not Available", ((Toybox has :Weather) && (Weather has :getSunset and Weather has :getSunrise))?"Next Sun Event":"Not Available", "Battery %/day", (Toybox has :Weather and Toybox.Weather has :getHourlyForecast)?"2h Forecast":"Not Available", "None"]; } else { // No limitations on data field length - mIconStrings = ["Steps", "Distance", "Elevation", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Wind Speed":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Min/Max Temp.":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Humidity":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Precipitation":"Not Available", (Activity.getActivityInfo() has :rawAmbientPressure) ? "Atm. Pressure" : "Not available", "Calories Total", "Calories Active", (ActivityMonitor.getInfo() has :floorsClimbed)?"Floors Climbed":"Not Available", (Activity.getActivityInfo() has :currentOxygenSaturation)?"Pulse Ox":"Not available", "Heart Rate", "Notifications",(System.getSystemStats() has :solarIntensity and System.getSystemStats().solarIntensity != null) ? "Solar Intensity" : "Not available", "Seconds", "Digital Clock", "Intensity Min.", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getBodyBatteryHistory))?"Body Battery":"Not Available", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getStressHistory))?"Stress":"Not Available", (ActivityMonitor.getInfo() has :respirationRate)?"Respiration Rate":"Not Available", (ActivityMonitor.getInfo() has :timeToRecovery)?"Recovery Time":"Not Available", (UserProfile.getProfile() has :vo2maxRunning)?"VO2 Max Run":"Not Available", (UserProfile.getProfile() has :vo2maxCycling)?"VO2 Max Cycle":"Not Available", ((Toybox has :Weather) && (Weather has :getSunset and Weather has :getSunrise))?"Next Sun Event":"Not Available", "Battery %/day", "None"]; + mIconStrings = ["Steps", "Distance", "Elevation", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Wind Speed":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Min/Max Temp.":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Humidity":"Not Available", (Toybox has :Weather and Toybox.Weather has :getCurrentConditions)?"Precipitation":"Not Available", (Activity.getActivityInfo() has :rawAmbientPressure) ? "Atm. Pressure" : "Not available", "Calories Total", "Calories Active", (ActivityMonitor.getInfo() has :floorsClimbed)?"Floors Climbed":"Not Available", (Activity.getActivityInfo() has :currentOxygenSaturation)?"Pulse Ox":"Not available", "Heart Rate", "Notifications",(System.getSystemStats() has :solarIntensity and System.getSystemStats().solarIntensity != null) ? "Solar Intensity" : "Not available", "Seconds", "Digital Clock", "Intensity Min.", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getBodyBatteryHistory))?"Body Battery":"Not Available", ((Toybox has :SensorHistory) && (Toybox.SensorHistory has :getStressHistory))?"Stress":"Not Available", (ActivityMonitor.getInfo() has :respirationRate)?"Respiration Rate":"Not Available", (ActivityMonitor.getInfo() has :timeToRecovery)?"Recovery Time":"Not Available", (UserProfile.getProfile() has :vo2maxRunning)?"VO2 Max Run":"Not Available", (UserProfile.getProfile() has :vo2maxCycling)?"VO2 Max Cycle":"Not Available", ((Toybox has :Weather) && (Weather has :getSunset and Weather has :getSunrise))?"Next Sun Event":"Not Available", "Battery %/day", (Toybox has :Weather and Toybox.Weather has :getHourlyForecast)?"3h Forecast":"Not Available", "None"]; } if (id!=-1){ // -1 means to return only the name, while any other value means to skip to next step @@ -363,9 +362,9 @@ class CustomDataPoint extends WatchUi.Drawable { function draw(dc) { var mIcons; if (type==2) { - mIcons = Application.loadResource(Rez.JsonData.mIcons9); + mIcons = Application.loadResource(Rez.JsonData.mIcons9) as Array; } else { - mIcons = Application.loadResource(Rez.JsonData.mIcons12); + mIcons = Application.loadResource(Rez.JsonData.mIcons12) as Array; } var iColor=0x55FF00; diff --git a/source/AnalogApp.mc b/source/AnalogApp.mc index d6bd540..2622fa0 100644 --- a/source/AnalogApp.mc +++ b/source/AnalogApp.mc @@ -10,6 +10,7 @@ import Toybox.Lang; import Toybox.WatchUi; //import Toybox.Complications; //using Toybox.Communications; +using Toybox.Application.Properties as Properties; // This is the primary entry point of the application. class AnalogWatch extends Application.AppBase diff --git a/source/AnalogView.mc b/source/AnalogView.mc index 3294819..aaa87cc 100644 --- a/source/AnalogView.mc +++ b/source/AnalogView.mc @@ -26,11 +26,12 @@ class AnalogView extends WatchUi.WatchFace //var fullScreenRefresh; //var accentColor; - //var MtbA = null; - var inLowPower=false; + var inLowPower as Boolean = false; //var canBurnIn=false; var upTop=true; var MtbA = new MtbA_functions(); + // 0=accent color , 1=accent index , 2=tickmark color , 3=Dark/Light theme , 4=garmin logo , 5=hour labels , 6=Weather condition, 7=Temperature type, 8=Location name , 9=Battery Icon , 10=Font size , 11=Alarm toggle ,12=Bluetooth toggle, 13=Hands Thickness , 14=Right bottom DF , 15=Right top DF , 16=Left top DF , 17=Left middle DF , 18=Left bottom DF , 19=Batt. Est. flag , 20=AOD color minute , 21=Date Format , 22=temperature unit, 23=Hour Labels ,24=Gray Battery Icon + var config as Array = [Storage.getValue(1),Storage.getValue(2),Storage.getValue(18),Storage.getValue(32),Storage.getValue(3),Storage.getValue(5),Storage.getValue(25),Storage.getValue(6),Storage.getValue(7),Storage.getValue(26),Storage.getValue(14),Storage.getValue(8),Storage.getValue(4),Storage.getValue(13),Storage.getValue(12),Storage.getValue(17),Storage.getValue(9),Storage.getValue(10),Storage.getValue(11),Storage.getValue(19),Storage.getValue(22),Storage.getValue(24),Storage.getValue(16),Storage.getValue(27),Storage.getValue(28)]; // Initialize variables for this view function initialize() { @@ -39,57 +40,59 @@ class AnalogView extends WatchUi.WatchFace //_fullScreenRefresh = true; //_partialUpdatesAllowed = (WatchUi.WatchFace has :onPartialUpdate); - if (Storage.getValue(1) == null or Storage.getValue(2) == null) { + if (config[0] == null or config[1] == null) { // 0=accent color , 1=accent index if (System.getDeviceSettings().screenWidth >= 360){ // AMOLED -// accentColor = 0xAAFF00; Storage.setValue(2, 1); + config[1]=1; Storage.setValue(1, 0xAAFF00); // Vivomove Green + config[0]=0xAAFF00; } else { -// accentColor = 0x55FF00; Storage.setValue(2, 0); + config[1]=0; Storage.setValue(1, 0x55FF00); // Bright Green + config[0]=0x55FF00; } } - var currentVersion=515; + var currentVersion=522; - if (Storage.getValue(23)==null or Storage.getValue(23)dc.getWidth(), @@ -117,6 +120,31 @@ class AnalogView extends WatchUi.WatchFace } } + // Configure the layout of the watchface for this device +(:lowColors) public function onLayout(dc as Dc) as Void { + + var offscreenBufferOptions = { + :width=>dc.getWidth(), + :height=>dc.getHeight(), + :palette=> [ + Graphics.COLOR_BLACK, + Graphics.COLOR_WHITE + ] + }; + + if (Graphics has :createBufferedBitmap) { + // get() used to return resource as Graphics.BufferedBitmap + _offscreenBuffer = Graphics.createBufferedBitmap(offscreenBufferOptions).get() as BufferedBitmap; + + } else if (Graphics has :BufferedBitmap) { // If this device supports BufferedBitmap, allocate the buffers we use for drawing + // Allocate a full screen size buffer with a palette of only 4 colors to draw + // the background image of the watchface. This is used to facilitate blanking + // the second hand during partial updates of the display + _offscreenBuffer = new Graphics.BufferedBitmap(offscreenBufferOptions); + } else { + _offscreenBuffer = null; + } + } // Handle the update event public function onUpdate(dc as Dc) as Void { @@ -124,7 +152,9 @@ class AnalogView extends WatchUi.WatchFace //var MtbA = new MtbA_functions(); //var check = Storage.getValue(21); var canBurnIn=System.getDeviceSettings().requiresBurnInProtection; + //var accentColor = config[0]; var accentColor = Storage.getValue(1); + var tickmarkColor = config[2]; // We always want to refresh the full screen when we get a regular onUpdate call. //_fullScreenRefresh = true; @@ -155,11 +185,11 @@ class AnalogView extends WatchUi.WatchFace targetDc.setColor(Graphics.COLOR_BLACK, Graphics.COLOR_BLACK); // removing the background color and all the data points from the background, leaving just the hour hands and hashmarks targetDc.fillRectangle(0, 0, dc.getWidth(), dc.getHeight()); //width & height? - if(Storage.getValue(18)){ //tickmark color toggle + if(tickmarkColor){ //tickmark color toggle drawBackground(dc); - MtbA.drawHashMarks(dc, accentColor, width, height, inLowPower and canBurnIn, Storage.getValue(18)); //dc + MtbA.drawHashMarks(dc, accentColor, width, inLowPower and canBurnIn, tickmarkColor, config[1], config[5], config[20]); //dc } else { - MtbA.drawHashMarks(targetDc, accentColor, width, height, inLowPower and canBurnIn, Storage.getValue(18)); //dc + MtbA.drawHashMarks(targetDc, accentColor, width, inLowPower and canBurnIn, tickmarkColor, config[1], config[5], config[20]); //dc drawBackground(dc); } @@ -170,7 +200,7 @@ class AnalogView extends WatchUi.WatchFace } else { // Fill the entire background - if (Storage.getValue(32) == true){ // Light Theme + if (config[3]){ // Light Theme targetDc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_WHITE); } else { // Dark Theme targetDc.setColor(Graphics.COLOR_BLACK, Graphics.COLOR_BLACK); @@ -182,7 +212,7 @@ class AnalogView extends WatchUi.WatchFace // Draw the tick marks around the edges of the screen if(width>=360){ // No need for anti-alias on hashmarks of AMOLED screens - MtbA.drawHashMarks(dc, accentColor, width, height, inLowPower and canBurnIn, Storage.getValue(18)); //dc + MtbA.drawHashMarks(dc, accentColor, width, inLowPower and canBurnIn, tickmarkColor, config[1], config[5], config[20]); //dc } if (dc has :setAntiAlias) { @@ -191,64 +221,64 @@ class AnalogView extends WatchUi.WatchFace // Draw the tick marks around the edges of the screen if(width<360){ // With anti-alias for MIP displays - MtbA.drawHashMarks(dc, accentColor, width, height, inLowPower and canBurnIn, Storage.getValue(18)); //dc + MtbA.drawHashMarks(dc, accentColor, width, inLowPower and canBurnIn, tickmarkColor, config[1], config[5], config[20]); //dc } // Garmin Logo check - var logo=Storage.getValue(3); - var position = Application.loadResource(Rez.JsonData.mPosition); + var logo=config[4]; + var position = Application.loadResource(Rez.JsonData.mPosition) as Array; if (logo == null or logo == true) { - MtbA.drawGarminLogo(dc, position[4], position[5]); + MtbA.drawGarminLogo(dc, position[4], position[5], config[3]); } // Draw the 3, 6, 9, and 12 hour labels. - if (System.SCREEN_SHAPE_ROUND == System.getDeviceSettings().screenShape and Storage.getValue(5) != false) { - MtbA.drawHourLabels(dc, width, height, accentColor); + if (System.SCREEN_SHAPE_ROUND == System.getDeviceSettings().screenShape and config[5] != false) { + MtbA.drawHourLabels(dc, width, height, accentColor, config[23]); } //Draw Weather Icon (dc, x, y, x2, width) //if (Toybox has :Weather and Weather has :getCurrentConditions) { if (Toybox has :Weather and Toybox.Weather has :getCurrentConditions) { - if(Toybox.Weather.getCurrentConditions() != null) { + if(Weather.getCurrentConditions() != null) { //var cond = Toybox.Weather.getCurrentConditions(); if (logo==false){ // Hide Garmin Logo - if (Storage.getValue(25)!=false){ // Show current weather condition and temperature + if (config[6]!=false){ // Show current weather condition and temperature //if (cond.condition!=null and cond.condition instanceof Number){ - MtbA.drawWeatherIcon(dc, position[18], position[22], position[19], width); + MtbA.drawWeatherIcon(dc, position[18], position[22], position[19], width, Weather.getCurrentConditions().condition, System.getClockTime().hour); //} //Draw Temperature Text - MtbA.drawTemperature(dc, position[21], position[7], Storage.getValue(6), width); + MtbA.drawTemperature(dc, position[21], position[7], config[7], width, config[22]); } - //if (cond.observationLocationName!=null){ + if (width!=208){ //Draw Location Name - MtbA.drawLocation(dc, width/2, position[6], width*0.60, dc.getFontHeight(Graphics.FONT_TINY), Storage.getValue(7)); - //} + MtbA.drawLocation(dc, width/2, position[6], config[8], config[4]); + } } else { // Show Garmin Logo - if (Storage.getValue(25)!=false){ // Show current weather condition and temperature + if (config[6]!=false){ // Show current weather condition and temperature //if (cond.condition!=null and cond.condition instanceof Number){ - MtbA.drawWeatherIcon(dc, position[18], position[20], position[19], width); + MtbA.drawWeatherIcon(dc, position[18], position[20], position[19], width, Weather.getCurrentConditions().condition, System.getClockTime().hour); //} //Draw Temperature Text - MtbA.drawTemperature(dc, position[21], (System.SCREEN_SHAPE_ROUND == System.getDeviceSettings().screenShape)?position[15]:position[20], Storage.getValue(6), width); + MtbA.drawTemperature(dc, position[21], (System.SCREEN_SHAPE_ROUND==System.getDeviceSettings().screenShape)? (width==208 ? position[23] : position[15]) : position[20], config[7], width, config[22]); } - //if (cond.observationLocationName!=null){ + if (width!=208){ //Draw Location Name //System.println(dc.getFontHeight(Graphics.FONT_TINY)); - MtbA.drawLocation(dc, width/2, position[23], width*0.60, dc.getFontHeight(Graphics.FONT_TINY), Storage.getValue(7)); - //} + MtbA.drawLocation(dc, width/2, position[23], config[8], config[4]); + } } } } // Draw Battery - if (Storage.getValue(26)!=false){ // Show Battery Icon - MtbA.drawBatteryIcon(dc, width*0.69, height / 2.11, width*0.82, height / 2.06+(width==218 ? 1 : 0), width, height, accentColor); - MtbA.drawBatteryText(dc, width*0.76, height / 2.14 - 1, width, System.getSystemStats() has :batteryInDays); + if (config[9]!=false){ // Show Battery Icon + MtbA.drawBatteryIcon(dc, width*0.69, height / 2.11, width*0.82, height / 2.06+(width==218 ? 1 : 0), width, accentColor, config[24]); + MtbA.drawBatteryText(dc, width*0.76, height / 2.14 - 1, width, config[19]); } //Data Points var FontAdj=0; - if (Storage.getValue(14)==true){ // fontSize height adjustment + if (config[10]){ // fontSize height adjustment if (width==260 and dc.getFontHeight(Graphics.FONT_TINY)==29) { //Fenix 6 FontAdj=6; } else if (width==260 and dc.getFontHeight(Graphics.FONT_TINY)==27) { // Vivoactive 4 @@ -277,22 +307,22 @@ class AnalogView extends WatchUi.WatchFace } // (dc, xIcon, yIcon, xText, yText, accentColor, width, Xoffset, dataPoint) - var dataPoint = Storage.getValue(12); //right bottom + var dataPoint = config[14]; //right bottom MtbA.drawPoints(dc, position[8], position[14], position[10], position[15]-FontAdj, accentColor, width, dataPoint, 4); //MtbA.drawRightPoints(dc, position[8], position[14], position[10], position[15], accentColor, width, 0, dataPoint); - dataPoint = Storage.getValue(17); //right top + dataPoint = config[15]; //right top MtbA.drawPoints(dc, position[8], position[9], position[10], position[11]-FontAdj, accentColor, width, dataPoint, 4); //(dc, xIcon, yIcon, xText, yText, accentColor, width, Xoffset) - dataPoint = Storage.getValue(9); // left top + dataPoint = config[16]; // left top MtbA.drawPoints(dc, position[12], position[9], position[13], position[11]-FontAdj, accentColor, width, dataPoint, 1); - dataPoint = Storage.getValue(10); // left middle + dataPoint = config[17]; // left middle MtbA.drawPoints(dc, position[12], position[16], position[13], position[17]-FontAdj, accentColor, width, dataPoint, 2); //MtbA.drawLeftMiddle(dc, position[12], position[16], position[13], position[17], accentColor, width, dataPoint); - dataPoint = Storage.getValue(11); // left bottom + dataPoint = config[18]; // left bottom MtbA.drawPoints(dc, position[12], position[14], position[13], position[15]-FontAdj, accentColor, width, dataPoint, 3); var iconSize = 0; @@ -312,7 +342,7 @@ class AnalogView extends WatchUi.WatchFace } // Bluetooth, Alarm and Dnd Icons - var alarm = Storage.getValue(8), blue = Storage.getValue(4); + var alarm = config[11], blue = config[12]; if (System.getDeviceSettings() has :doNotDisturb and System.getDeviceSettings().doNotDisturb) { // Dnd exists and is turned on if ((alarm == true and blue == true) or (alarm == null and blue == null)){ // all 3 icons // Draw the Do Not Disturb Icon in the middle @@ -351,20 +381,20 @@ class AnalogView extends WatchUi.WatchFace //Draw the date string if (logo == null or logo == true) { // Garmin Logo check - MtbA.drawDateString( dc, width / 2, position[6] ); + MtbA.drawDateString( dc, width / 2, position[6], config[21]); } else { // No Garmin Logo - MtbA.drawDateString( dc, width / 2, position[5] + (width<=240 ? 5 : 0 ) + (width==218 ? 3 : 0 )); // offsets needed because of size of Garmin Logo compared to Date Font + MtbA.drawDateString( dc, width / 2, position[5] + (width<=240 ? 5 : 0 ) + (width==218 ? 3 : 0 ), config[21]); // offsets needed because of size of Garmin Logo compared to Date Font } } //Draw Hour and Minute hands - if (Storage.getValue(13) == 1){ // thicker - MtbA.drawHands(dc, width, height, accentColor, 1, inLowPower, upTop); - } else if (Storage.getValue(13) == 0) { // standard //or Storage.getValue(13) == null - MtbA.drawHands(dc, width, height, accentColor, 0, inLowPower, upTop); + if (config[13] == 1){ // thicker + MtbA.drawHands(dc, width, height, accentColor, 1, inLowPower, upTop, config[20]); + } else if (config[13] == 0) { // standard //or Storage.getValue(13) == null + MtbA.drawHands(dc, width, height, accentColor, 0, inLowPower, upTop, config[20]); } else { // thinner - MtbA.drawHands(dc, width, height, accentColor, 2, inLowPower, upTop); + MtbA.drawHands(dc, width.toFloat(), height, accentColor, 2, inLowPower, upTop, config[20]); } /* @@ -407,7 +437,7 @@ class AnalogView extends WatchUi.WatchFace // If we have an offscreen buffer that has been written to // draw it to the screen. if (null != _offscreenBuffer) { - dc.drawBitmap(0, 0, _offscreenBuffer); + dc.drawBitmap(0 as Number, 0 as Number, _offscreenBuffer); } } @@ -418,20 +448,21 @@ class AnalogView extends WatchUi.WatchFace function onHide() as Void { } -//! This method is called when the device re-enters sleep mode. + //! This method is called when the device re-enters sleep mode. //! Set the isAwake flag to let onUpdate know it should stop rendering the second hand. public function onEnterSleep() as Void { //_isAwake = false; - inLowPower=true; + inLowPower=true; + MtbA.enterSleep(); WatchUi.requestUpdate(); } - //! This method is called when the device exits sleep mode. //! Set the isAwake flag to let onUpdate know it should render the second hand. public function onExitSleep() as Void { //_isAwake = true; inLowPower=false; + MtbA.exitSleep(); //WatchUi.requestUpdate(); } diff --git a/source/MtbA_functions.mc b/source/MtbA_functions.mc index 48ebf70..0074381 100644 --- a/source/MtbA_functions.mc +++ b/source/MtbA_functions.mc @@ -17,7 +17,22 @@ class MtbA_functions { const screenShape = System.getDeviceSettings().screenShape; var fontSize = (Storage.getValue(14) == true ? 1 : 0); var fontColor = (Storage.getValue(32) == true ? Graphics.COLOR_BLACK : Graphics.COLOR_WHITE); - //var check=Storage.getValue(21); + var condName as String = ""; + var lowPower as Boolean = false; + + public function enterSleep() as Void { + lowPower=true; + //WatchUi.requestUpdate(); + } + + + //! This method is called when the device exits sleep mode. + //! Set the isAwake flag to let onUpdate know it should render the second hand. + public function exitSleep() as Void { + //_isAwake = true; + lowPower=false; + //WatchUi.requestUpdate(); + } // This function is used to generate the coordinates of the 4 corners of the polygon // used to draw a watch hand. The coordinates are generated with specified length, @@ -44,24 +59,24 @@ class MtbA_functions { /* ------------------------ */ // Draws the clock tick marks around the outside edges of the screen. -(:round) function drawHashMarks(dc, accentColor, width, height, aod, colorFlag) { +(:round) function drawHashMarks(dc, accentColor, width, aod, colorFlag, accIndex, showBoolean, AODColor) { // 2, 5 var sX, sY; var eX, eY; var outerRad = width / 2; var innerRad = outerRad - 10; - var showBoolean = Storage.getValue(5); + //var showBoolean = hourLabel; if (fontColor == Graphics.COLOR_WHITE){ // Dark Theme - var mColors = Application.loadResource(Rez.JsonData.mColors); - if(mColors[Storage.getValue(2)] != accentColor){ - Storage.setValue(1, mColors[Storage.getValue(2)]); - accentColor = mColors[Storage.getValue(2)]; + var mColors = Application.loadResource(Rez.JsonData.mColors) as Array; + if(mColors[accIndex] != accentColor){ + Storage.setValue(1, mColors[accIndex]); + accentColor = mColors[accIndex]; } } else { // Light Theme - var mColors = Application.loadResource(Rez.JsonData.mColorsWhite); - if(mColors[Storage.getValue(2)] != accentColor){ - Storage.setValue(1, mColors[Storage.getValue(2)]); - accentColor = mColors[Storage.getValue(2)]; + var mColors = Application.loadResource(Rez.JsonData.mColorsWhite) as Array; + if(mColors[accIndex] != accentColor){ + Storage.setValue(1, mColors[accIndex]); + accentColor = mColors[accIndex]; } } @@ -74,7 +89,7 @@ class MtbA_functions { var angle = i * Math.PI / 30; if (aod==true) { // AOD mode is ON if (i % 5 == 0){ - if (colorFlag == true and Storage.getValue(22)==true){ // Tickmark color is ON and AOD Colors is ON + if (colorFlag == true and AODColor){ // Tickmark color is ON and AOD Colors is ON dc.setColor(accentColor, Graphics.COLOR_TRANSPARENT); } else if (i == 15 or i == 45) { //dc.setColor(accentColor, Graphics.COLOR_BLACK); @@ -85,7 +100,7 @@ class MtbA_functions { dc.setColor(Graphics.COLOR_LT_GRAY, Graphics.COLOR_TRANSPARENT); } } - } else{ // AOD mode is OFF + } else{ // AOD mode is OFF or MIP if ((i == 15) or (i == 45)) { dc.setColor(accentColor, accentColor); } else { @@ -157,18 +172,19 @@ class MtbA_functions { } -(:square) function drawHashMarks(dc, accentColor, width, height, aod, colorFlag) { +(:square) function drawHashMarks(dc, accentColor, width, aod, colorFlag, accIndex, showBoolean, AODColor) { var sX, sY; var eX, eY; var outerRad = width / 2; //var innerRad = outerRad - 10; var innerRad = outerRad - 10; //var showBoolean = Storage.getValue(5); + var height = dc.getHeight(); // Draw hashmarks differently depending on screen geometry. if (System.SCREEN_SHAPE_ROUND != screenShape) { //check if square display var coords = [0, width / 4, (3 * width) / 4, width]; - if(aod==true and Storage.getValue(22)!=true) { // AOD ON and AOD colors OFF + if(aod==true and AODColor!=true) { // AOD ON and AOD colors OFF dc.setColor(Graphics.COLOR_LT_GRAY, Graphics.COLOR_TRANSPARENT); } else { // AOD OFF or (AOD ON and AOD colors ON) if (colorFlag == true){ @@ -218,7 +234,7 @@ class MtbA_functions { for (var i = 0; i <= 59; i += 15) { //draw the middle hashmarks (each 15 min) var angle = i * Math.PI / 30; - if(aod==true and Storage.getValue(22)!=true) { // AOD ON and AOD colors OFF + if(aod==true and AODColor!=true) { // AOD ON and AOD colors OFF if ((i == 15) or (i == 45)) { dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT); } else { @@ -261,11 +277,11 @@ class MtbA_functions { /* ------------------------ */ // Draw the date string into the provided buffer at the specified location - function drawDateString(dc, x as Number, y as Number) as Void { + function drawDateString(dc, x as Number, y as Number, format as Boolean) as Void { var info = Time.Gregorian.info(Time.now(), Time.FORMAT_LONG); var dateStr; - if (Storage.getValue(24)==true){ + if (format){ dateStr = Lang.format("$1$, $3$ $2$", [info.day_of_week, info.month, info.day]); } else { dateStr = Lang.format("$1$, $2$ $3$", [info.day_of_week, info.month, info.day]); @@ -322,7 +338,11 @@ class MtbA_functions { if (settings>0) { dc.setColor(accentColor, Graphics.COLOR_TRANSPARENT); } else { - dc.setColor((fontColor==Graphics.COLOR_WHITE ? Graphics.COLOR_DK_GRAY : Graphics.COLOR_LT_GRAY), Graphics.COLOR_TRANSPARENT); + if (width!=208){ + dc.setColor((fontColor==Graphics.COLOR_WHITE ? Graphics.COLOR_DK_GRAY : Graphics.COLOR_LT_GRAY), Graphics.COLOR_TRANSPARENT); + } else { // Fr55 + dc.setColor(fontColor, Graphics.COLOR_TRANSPARENT); + } } dc.drawText( x - offset - LEDoffset, y - offset, IconsFont, ":", Graphics.TEXT_JUSTIFY_CENTER); } @@ -330,11 +350,11 @@ class MtbA_functions { /* ------------------------ */ // Draw the 3, 6, 9, and 12 hour labels. - function drawHourLabels(dc, width, height, accent) { + function drawHourLabels(dc, width, height, accent, hourLabel) { // Load the custom fonts: used for drawing the 3, 6, 9, and 12 on the watchface var font = Application.loadResource(Rez.Fonts.id_font_black_diamond); - if (Storage.getValue(27)==true) { + if (hourLabel) { dc.setColor(accent, Graphics.COLOR_TRANSPARENT); } else if (width < 360){ // Using lighter tone for MIP displays dc.setColor((fontColor==Graphics.COLOR_WHITE ? Graphics.COLOR_LT_GRAY : Graphics.COLOR_DK_GRAY), Graphics.COLOR_TRANSPARENT); @@ -342,29 +362,33 @@ class MtbA_functions { dc.setColor(Graphics.COLOR_DK_GRAY, Graphics.COLOR_TRANSPARENT); } - dc.drawText((width / 2), 14, font, "12", Graphics.TEXT_JUSTIFY_CENTER); - dc.drawText(width - 13, (height / 2) - 15, font, "3", Graphics.TEXT_JUSTIFY_RIGHT); - dc.drawText(width / 2, height - 41, font, "6", Graphics.TEXT_JUSTIFY_CENTER); - dc.drawText(13, (height / 2) - 15, font, "9", Graphics.TEXT_JUSTIFY_LEFT); + dc.drawText((width / 2), 14 + (width==208 ? -1 : 0), font, "12", Graphics.TEXT_JUSTIFY_CENTER); + dc.drawText(width - 13 + (width==208 ? 1 : 0), (height / 2) - 15, font, "3", Graphics.TEXT_JUSTIFY_RIGHT); + dc.drawText(width / 2, height - 41 + (width==208 ? 1 : 0), font, "6", Graphics.TEXT_JUSTIFY_CENTER); + dc.drawText(13 + (width==208 ? -1 : 0), (height / 2) - 15, font, "9", Graphics.TEXT_JUSTIFY_LEFT); } /* ------------------------ */ - function drawWeatherIcon(dc, x, y, x2, width) { + function drawWeatherIcon(dc, x, y, x2, width, cond, clockTime) { - var cond = Toybox.Weather.getCurrentConditions().condition; + //var cond = Toybox.Weather.getCurrentConditions().condition; var sunset, sunrise; if (cond!=null and cond instanceof Number){ - - var clockTime = System.getClockTime().hour; + //System.println(clockTime); + //var clockTime = System.getClockTime().hour; +// clockTime = clockTime.hour; var WeatherFont = Application.loadResource(Rez.Fonts.WeatherFont); // gets the correct symbol (sun/moon) depending on actual sun events - if (Toybox has :Weather and Weather has :getSunset and Weather has :getSunrise) { - var position = Toybox.Weather.getCurrentConditions().observationLocationPosition; // or Activity.Info.currentLocation if observation is null? - var today = Toybox.Weather.getCurrentConditions().observationTime; // or new Time.Moment(Time.now().value()); ? - if (position!=null and today!=null){ + if (Toybox has :Weather and Weather has :getSunset and Weather has :getSunrise and Toybox.Weather has :getCurrentConditions) { + var position=null, today=null; + if (Toybox.Weather.getCurrentConditions() has :observationLocationPosition and Toybox.Weather.getCurrentConditions() has :observationTime){ //trying to address errors found on ERA viewer when watch can't get position + position = Toybox.Weather.getCurrentConditions().observationLocationPosition; // or Activity.Info.currentLocation if observation is null? + today = Toybox.Weather.getCurrentConditions().observationTime; // or new Time.Moment(Time.now().value()); ? + } + if ((position!=null and position instanceof Position.Location) and (today!=null and today instanceof Moment)){ if (Weather.getSunset(position, today)!=null) { sunset = Time.Gregorian.info(Weather.getSunset(position, today), Time.FORMAT_SHORT); sunset = sunset.hour; @@ -400,49 +424,50 @@ class MtbA_functions { if (cond == 20) { // Cloudy dc.drawText(x2-1, y-1, WeatherFont, "I", Graphics.TEXT_JUSTIFY_RIGHT); // Cloudy if (clockTime >= sunset or clockTime < sunrise) { - Storage.setValue(34, "Cloudy Night"); + condName="Cloudy Night"; } else { - Storage.setValue(34, "Cloudy Day"); + condName="Cloudy Day"; } } else if (cond == 0 or cond == 5) { // Clear or Windy if (clockTime >= sunset or clockTime < sunrise) { dc.drawText(x2-2, y-1, WeatherFont, "f", Graphics.TEXT_JUSTIFY_RIGHT); // Clear Night - Storage.setValue(34, "Starry Night"); + condName="Starry Night"; } else { dc.drawText(x2, y-2, WeatherFont, "H", Graphics.TEXT_JUSTIFY_RIGHT); // Clear Day - Storage.setValue(34, "Sunny Day"); + condName="Sunny Day"; } } else if (cond == 1 or cond == 23 or cond == 40 or cond == 52) { // Partly Cloudy or Mostly Clear or fair or thin clouds if (clockTime >= sunset or clockTime < sunrise) { dc.drawText(x2-1, y-2, WeatherFont, "g", Graphics.TEXT_JUSTIFY_RIGHT); // Partly Cloudy Night - Storage.setValue(34, "Partly Cloudy"); + condName="Partly Cloudy"; } else { dc.drawText(x2, y-2, WeatherFont, "G", Graphics.TEXT_JUSTIFY_RIGHT); // Partly Cloudy Day - Storage.setValue(34, "Mostly Sunny"); + //Storage.setValue(34, "Mostly Sunny"); + condName="Mostly Sunny"; } } else if (cond == 2 or cond == 22) { // Mostly Cloudy or Partly Clear if (clockTime >= sunset or clockTime < sunrise) { dc.drawText(x2, y, WeatherFont, "h", Graphics.TEXT_JUSTIFY_RIGHT); // Mostly Cloudy Night - Storage.setValue(34, "Overcast Night"); + condName="Overcast Night"; } else { dc.drawText(x, y, WeatherFont, "B", Graphics.TEXT_JUSTIFY_RIGHT); // Mostly Cloudy Day - Storage.setValue(34, "Mostly Cloudy"); + condName="Mostly Cloudy"; } } else if (cond == 3 or cond == 14 or cond == 15 or cond == 11 or cond == 13 or cond == 24 or cond == 25 or cond == 26 or cond == 27 or cond == 45) { // Rain or Light Rain or heavy rain or showers or unkown or chance if (clockTime >= sunset or clockTime < sunrise) { dc.drawText(x2, y, WeatherFont, "c", Graphics.TEXT_JUSTIFY_RIGHT); // Rain Night - Storage.setValue(34, "Rainy Night"); + condName="Rainy Night"; } else { dc.drawText(x, y, WeatherFont, "D", Graphics.TEXT_JUSTIFY_RIGHT); // Rain Day - Storage.setValue(34, "Rainy Day"); + condName="Rainy Day"; } } else if (cond == 4 or cond == 10 or cond == 16 or cond == 17 or cond == 34 or cond == 43 or cond == 46 or cond == 48 or cond == 51) { // Snow or Hail or light or heavy snow or ice or chance or cloudy chance or flurries or ice snow if (clockTime >= sunset or clockTime < sunrise) { dc.drawText(x2, y, WeatherFont, "e", Graphics.TEXT_JUSTIFY_RIGHT); // Snow Night - Storage.setValue(34, "Snowy Night"); + condName="Snowy Night"; } else { dc.drawText(x, y, WeatherFont, "F", Graphics.TEXT_JUSTIFY_RIGHT); // Snow Day - Storage.setValue(34, "Snowy Day"); + condName="Snowy Day"; } } else if (cond == 6 or cond == 12 or cond == 28 or cond == 32 or cond == 36 or cond == 41 or cond == 42) { // Thunder or scattered or chance or tornado or squall or hurricane or tropical storm if (clockTime >= sunset or clockTime < sunrise) { @@ -450,22 +475,22 @@ class MtbA_functions { } else { dc.drawText(x, y, WeatherFont, "C", Graphics.TEXT_JUSTIFY_RIGHT); // Thunder Day } - Storage.setValue(34, "Thunderstorms"); + condName="Thunderstorms"; } else if (cond == 7 or cond == 18 or cond == 19 or cond == 21 or cond == 44 or cond == 47 or cond == 49 or cond == 50) { // Wintry Mix (Snow and Rain) or chance or cloudy chance or freezing rain or sleet if (clockTime >= sunset or clockTime < sunrise) { dc.drawText(x2, y, WeatherFont, "d", Graphics.TEXT_JUSTIFY_RIGHT); // Snow+Rain Night - Storage.setValue(34, "Wintry Mix Night"); + condName="Wintry Mix Night"; } else { dc.drawText(x, y, WeatherFont, "E", Graphics.TEXT_JUSTIFY_RIGHT); // Snow+Rain Day - Storage.setValue(34, "Wintry Mix Day"); + condName="Wintry Mix Day"; } } else if (cond == 8 or cond == 9 or cond == 29 or cond == 30 or cond == 31 or cond == 33 or cond == 35 or cond == 37 or cond == 38 or cond == 39) { // Fog or Hazy or Mist or Dust or Drizzle or Smoke or Sand or sandstorm or ash or haze if (clockTime >= sunset or clockTime < sunrise) { dc.drawText(x2, y, WeatherFont, "a", Graphics.TEXT_JUSTIFY_RIGHT); // Fog Night - Storage.setValue(34, "Foggy Night"); + condName="Foggy Night"; } else { dc.drawText(x, y, WeatherFont, "A", Graphics.TEXT_JUSTIFY_RIGHT); // Fog Day - Storage.setValue(34, "Foggy Day"); + condName="Foggy Day"; } } return true; @@ -476,7 +501,7 @@ class MtbA_functions { /* ------------------------ */ - function drawTemperature(dc, x, y, showBoolean, width) { + function drawTemperature(dc, x, y, showBoolean, width, unit) { var TempMetric = System.getDeviceSettings().temperatureUnits; var temp=null, units = "", minTemp=null, maxTemp=null; @@ -494,7 +519,7 @@ class MtbA_functions { } if (showBoolean == false and weather!=null and (weather.feelsLikeTemperature!=null)) { //feels like ; and weather.feelsLikeTemperature instanceof Number - if (TempMetric == System.UNIT_METRIC or Storage.getValue(16)==true) { //Celsius + if (TempMetric == System.UNIT_METRIC or unit) { //Celsius units = "°C"; temp = weather.feelsLikeTemperature; } else { @@ -507,7 +532,7 @@ class MtbA_functions { units = "°F"; } } else if(weather!=null and (weather.temperature!=null)) { // real temperature ; and weather.temperature instanceof Number - if (TempMetric == System.UNIT_METRIC or Storage.getValue(16)==true) { //Celsius + if (TempMetric == System.UNIT_METRIC or unit) { //Celsius units = "°C"; temp = weather.temperature; } else { @@ -551,56 +576,15 @@ class MtbA_functions { /* ------------------------ */ // Weather Location Name - function drawLocation(dc, x, y, wMax, hMax, showBoolean) { - - var cond = Toybox.Weather.getCurrentConditions(); - var location; - - if (showBoolean != false) { // Show Location Name - //System.println(cond.precipitationChance); - if(cond!=null and cond.observationLocationName!=null) { - location = cond.observationLocationName; - if (location.length()>15 and location.find(",")!=null){ - location = location.substring(0,location.find(",")); - } - if (location.find("ocation[")!=null){ - location="null"; - } - if (location.find("null")!=null and location.find(",")!=null) { - var location2 = location.substring(0,location.find(",")); - if (location2.find("null")!=null) { - location2 = location.substring(location.find(",")+2,location.length()); - if (location2.find("null")!=null){ - location2 = ""; - } - } - location = location2; - } - else if (location.find("null")!=null) { - location = ""; - } - - } - else { // Dealing with an error when currentConditions exist but location name still returns null - Also deals with new firmwares where the location name has been deprecated - var desc=Storage.getValue(34); - if (desc!=null) { - location = desc; - } else { - location = ""; - } - } + function drawLocation(dc, x, y, showBoolean, logo) { - if(x*2==260 and Storage.getValue(3)==false){ + if(x*2==260 and logo){ y = y+6; } dc.setColor((fontColor==Graphics.COLOR_WHITE ? Graphics.COLOR_LT_GRAY : Graphics.COLOR_DK_GRAY), Graphics.COLOR_TRANSPARENT); //dc.fitTextToArea(text, font, width, height, truncate) - dc.drawText(x, y, Graphics.FONT_XTINY, dc.fitTextToArea(location, Graphics.FONT_XTINY, wMax, hMax, true), Graphics.TEXT_JUSTIFY_CENTER); - return true; - } else { - return false; - } + dc.drawText(x, y, Graphics.FONT_XTINY, showBoolean != false ? condName : "", Graphics.TEXT_JUSTIFY_CENTER); } /* ------------------------ */ @@ -626,7 +610,7 @@ class MtbA_functions { if(width==280 or width==240){ //Fenix 6X & Enduro yIcon=yIcon-5; - if (width==240 and dc.getTextDimensions("100",0)[1]>=26){ //Fenix 5 Plus + if (width==240 and dc.getFontHeight(0)>=26){ //Fenix 5 Plus yIcon=yIcon-0.5; } } else if (width==260){ @@ -779,15 +763,18 @@ class MtbA_functions { hrIconY = hrIconY + 1; xIcon = xIcon - 1; offset = 4; - } else if(dc.getTextDimensions("100",0)[1]>=26){ // Fenix 5 Plus + } else if(dc.getFontHeight(0)>=26){ // Fenix 5 Plus xIcon = xIcon - 1; offset = 4; } } else if(width==218){ // VA4s xText = xText-1.5; hrIconY = hrIconY - 2; + } else if(width==208){ // FR55 + offset = 1; } + var FontAdj= 0; if (fontSize==1){ //big if (width==260 and dc.getFontHeight(Graphics.FONT_TINY)==29) { //Fenix 6 @@ -821,15 +808,16 @@ class MtbA_functions { /* ------------------------ */ // Draw Battery Icon and Text - function drawBatteryIcon(dc, xBattery, yBattery, xContact, yContact, width, height, accentColor) { + function drawBatteryIcon(dc, xBattery, yBattery, xContact, yContact, width, accentColor, greyIcon) { var battery = Math.ceil(System.getSystemStats().battery); var batteryIconColour; + var height=dc.getHeight(); // Choose the colour of the battery based on it's state if (fontColor == Graphics.COLOR_WHITE){ // Dark Theme batteryIconColour = Graphics.COLOR_LT_GRAY; - if (Storage.getValue(28)!=false){ // Show battery colors + if (greyIcon!=false){ // Show battery colors if (battery <= 20) { batteryIconColour = 0xFF5555 /* pastel red */; } else if (battery <= 40) { @@ -844,7 +832,7 @@ class MtbA_functions { } } else { // Light Theme batteryIconColour = Graphics.COLOR_DK_GRAY; - if (Storage.getValue(28)!=false){ // Show battery colors + if (greyIcon!=false){ // Show battery colors if (battery <= 20) { batteryIconColour = 0xAA0000; /* red */ } else if (battery <= 40) { @@ -871,28 +859,34 @@ class MtbA_functions { yBattery = yBattery - 3; xContact = xContact + 14; yContact = yContact - 2; - } else if (width==240 and dc.getTextDimensions("100",0)[1]>=26){ //text height in pixels (Fenix 5 Plus) + } else if (width==240 and dc.getFontHeight(0)>=26){ //text height in pixels (Fenix 5 Plus) xBattery = xBattery - 5; offsetLED = -3; offset = -1; xContact = xContact + 7; yContact = yContact + 1; - } + } else if (width==208){ + offsetLED = -2; + offset = -1; + yBattery = yBattery - 1; + } dc.setColor(batteryIconColour, Graphics.COLOR_TRANSPARENT); //dc.fillRoundedRectangle(x, y, width, height, radius) - dc.fillRoundedRectangle(xBattery, yBattery , width*0.135 + (System.SCREEN_SHAPE_ROUND != screenShape ? 14 : 0) + (width==240 and dc.getTextDimensions("100",0)[1]>=26 and System.SCREEN_SHAPE_ROUND == screenShape ? 12 : 0), height*0.0625 - offsetLED, 2); + dc.fillRoundedRectangle(xBattery, yBattery , width*0.135 + (System.SCREEN_SHAPE_ROUND != screenShape ? 14 : 0) + (width==240 and dc.getFontHeight(0)>=26 and System.SCREEN_SHAPE_ROUND == screenShape ? 12 : 0), height*0.0625 - offsetLED, 2); dc.fillRoundedRectangle(xContact, yContact , width*0.018, height*0.039 - offset, 2); } - // Draw Battery Text (separate because of "too many arguments" error) - function drawBatteryText(dc, xText, yText, width, check) { + // Draw Battery Text (separate because of "too many arguments" error) + function drawBatteryText(dc, xText, yText, width, estimateFlag) { - var estimateFlag = Storage.getValue(19); + //var estimateFlag = Storage.getValue(19); var battery = Math.ceil(System.getSystemStats().battery); var today = Time.Gregorian.info(Time.now(), Time.FORMAT_SHORT); + var maxCharge = Storage.getValue(30); + var check = dc.getFontHeight(0); - if (System.getSystemStats().charging==true or (Storage.getValue(30)!=null and battery>Storage.getValue(30) or (battery==Storage.getValue(30) and battery==100))){ + if (System.getSystemStats().charging==true or (maxCharge!=null and battery>maxCharge or (battery==maxCharge and battery==100))){ var test = [ today.hour, today.min, @@ -907,7 +901,7 @@ class MtbA_functions { //Storage.setValue(22, null); // reset last hourDiff calculation } - if (estimateFlag == true and check == true){ // user requested and watch supports + if (estimateFlag == true and System.getSystemStats() has :batteryInDays){ // user requested and watch supports if (System.getSystemStats().batteryInDays!=null and System.getSystemStats().batteryInDays!=0){ //trying to make sure that we don't get an error if batteryInDays not supported by watch battery = System.getSystemStats().batteryInDays; } @@ -925,22 +919,24 @@ class MtbA_functions { var offset = 0, offsetLED = 0; if (width==390) { // Venu & D2 Air - if (dc.getTextDimensions("100",0)[1]>=33){ // Venu, D2 Air & Approach S70 42mm (33) + if (check>=33){ // Venu, D2 Air & Approach S70 42mm (33) offset = -2; - } else if (dc.getTextDimensions("100",0)[1]==30){ // FR165 (30) + } else if (check==30){ // FR165 (30) offset = 0; } else { // epix Pro Gen 2 42mm & MARQ Gen 2 offset = -1; } } else if (width==280) { // Enduro & Fenix 6X Pro offset = 0.75; - } else if (width==218 or width==240) { // Vivoactive 4S & Fenix 6S & Vivoactive 3 Music - if (width==218 and dc.getFontHeight(Graphics.FONT_TINY)==23) { // FR255s + } else if (width<=218 or width==240) { // Vivoactive 4S & Fenix 6S & Vivoactive 3 Music + if (width==218 and dc.getFontHeight(1)==23) { // FR255s offset = 0; } else if (System.SCREEN_SHAPE_ROUND == screenShape) { offset = -0.5; - if (width==240 and dc.getTextDimensions("100",0)[1]>=26){ //Fenix 5 Plus + if (width==240 and check>=26){ //Fenix 5 Plus or FR55 offset = -2.5; + } else if (width==208){ + offset = -3; } } else { // Venu sq offset = -4.5; @@ -949,7 +945,7 @@ class MtbA_functions { } else if (width==360) { // Venu 2 & 2s offset = -1; } else if (width>=416) { - if (width==454 and dc.getTextDimensions("100",0)[1]==35){ // Venu 3 + if (width==454 and check==35){ // Venu 3 offset = 1; } offsetLED = -1; @@ -958,7 +954,11 @@ class MtbA_functions { if (fontColor == Graphics.COLOR_WHITE){ // Dark Theme dc.setColor(Graphics.COLOR_BLACK, Graphics.COLOR_TRANSPARENT); } else { // Light Theme - dc.setColor(((battery <= 40 and battery > 20) ? Graphics.COLOR_BLACK : Graphics.COLOR_WHITE), Graphics.COLOR_TRANSPARENT); + if (width==208 and battery > 40){ + dc.setColor(Graphics.COLOR_BLACK, Graphics.COLOR_TRANSPARENT); + } else { + dc.setColor(((battery <= 40 and battery > 20) ? Graphics.COLOR_BLACK : Graphics.COLOR_WHITE), Graphics.COLOR_TRANSPARENT); + } //dc.setColor((Graphics.COLOR_BLACK), Graphics.COLOR_TRANSPARENT); } @@ -969,7 +969,7 @@ class MtbA_functions { /* ------------------------ */ function calcHourDiff(today) { // calculate hourDiff - var lastCharge=Storage.getValue(29); + var lastCharge=Storage.getValue(29) as Array; var hourDiff = 0; hourDiff = (((today.hour - lastCharge[0])*60 + ((today.min - lastCharge[1])))/60d); @@ -1015,14 +1015,15 @@ class MtbA_functions { var battery = Math.ceil(System.getSystemStats().battery); var today = Time.Gregorian.info(Time.now(), Time.FORMAT_SHORT); var text = null; + var maxCharge = Storage.getValue(30); if (System.getSystemStats().charging==true){ text = "chrng."; - } else if (System.getSystemStats().charging==false and today.sec % 30 == 0){ // 3 times per minute // or every 15 minutes -> and today.sec==0 and (today.min % 15 == 0) - if (Storage.getValue(30)==null){ // need to charge for the first time + } else if (System.getSystemStats().charging==false and ((width >=360 and today.sec % 30 == 0) or (width <360 and today.sec == 0))){ // 3 times per minute for AMOLED and 1 time per minute for MIP // or every 15 minutes -> and today.sec==0 and (today.min % 15 == 0) + if (maxCharge==null){ // need to charge for the first time text = "charge"; // show percentage? Storage.setValue(31, "charge"); - } else if (battery==Storage.getValue(30) or Storage.getValue(30)-battery<=1){ // still waiting for battery percentage to drop in order to calculate estimation + } else if (battery==maxCharge or maxCharge-battery<=1){ // still waiting for battery percentage to drop in order to calculate estimation text = "estim."; //text = "calc"; // show percentage? Storage.setValue(31, "estim."); } else{ // battery has dropped, so estimate is going to be calculated here @@ -1030,12 +1031,12 @@ class MtbA_functions { var hourDiff; hourDiff = calcHourDiff(today); //calculate hourDiff - if(hourDiff==0){ //error, not expected + if(hourDiff==0){ //error, not expected on a real watch return false; } //Lang.format("$1$", [stepDistance.format("%.1f")] ); - text = ((Storage.getValue(30)-battery)/hourDiff)*24; //text = battery*(hourdiff)/(battDiff) + text = ((maxCharge-battery)/hourDiff)*24; //text = battery*(hourdiff)/(battDiff) if (text<1){ text = text.format("%.1f") ; // + "%/d" } else if (text>=100){ @@ -1048,7 +1049,9 @@ class MtbA_functions { } } else { text = Storage.getValue(31); - if (text == null){ + if (text == null and maxCharge == null){ + text = "charge"; // never charged + } else if (text == null and maxCharge != null) { text = "estim."; // not able to calculate yet } } @@ -1110,7 +1113,12 @@ class MtbA_functions { offsetX = 2; } - dc.setColor((fontColor==Graphics.COLOR_WHITE ? Graphics.COLOR_LT_GRAY : Graphics.COLOR_DK_GRAY), Graphics.COLOR_TRANSPARENT); + if (width!=208){ + dc.setColor((fontColor==Graphics.COLOR_WHITE ? Graphics.COLOR_LT_GRAY : Graphics.COLOR_DK_GRAY), Graphics.COLOR_TRANSPARENT); + } else { // FR55 + dc.setColor(fontColor, Graphics.COLOR_TRANSPARENT); + } + dc.drawText( x + offsetX, y + offsetY , IconsFont, "Y", Graphics.TEXT_JUSTIFY_LEFT); return true; } else { @@ -1298,7 +1306,7 @@ class MtbA_functions { offsetY = 7; } else if (System.SCREEN_SHAPE_ROUND != screenShape) { // Venu sq offsetY = -2; - } else if (width==240 and dc.getTextDimensions("100",0)[1]>=26){ // Fenix 5 Plus + } else if (width==240 and dc.getFontHeight(0)>=26){ // Fenix 5 Plus offsetY = -1; } @@ -1325,7 +1333,7 @@ class MtbA_functions { /* ------------------------ */ // Draw Hour and Minute Hands - function drawHands(dc, width, height, accentColor, thickInd, aod, upTop) { + function drawHands(dc, width, height, accentColor, thickInd, aod, upTop, AODColor) { var clockTime = System.getClockTime(); var screenCenterPoint = [width/2, height/2]; @@ -1344,7 +1352,7 @@ class MtbA_functions { // thickInd = 1 --> Thicker // thickInd = 2 --> Thinner - var handWidth = width; + var handWidth = width as Float; if (handWidth==260){ handWidth=10; offsetOuterCircle=-1; @@ -1408,7 +1416,7 @@ class MtbA_functions { var borderColor=Graphics.COLOR_BLACK, arborColor=Graphics.COLOR_LT_GRAY; // colors for not AOD mode var BurnIn = System.getDeviceSettings().requiresBurnInProtection; - if (aod==true and BurnIn==true and Storage.getValue(22) != true) { //AOD mode ON + if (aod==true and BurnIn==true and AODColor != true) { //AOD mode ON accentColor=Graphics.COLOR_LT_GRAY; //arborColor=Graphics.COLOR_LT_GRAY; //borderColor=Graphics.COLOR_BLACK; @@ -1422,7 +1430,7 @@ class MtbA_functions { dc.setColor(borderColor, Graphics.COLOR_TRANSPARENT); //(centerPoint, angle, handLength, tailLength, width, triangle) dc.fillPolygon(generateHandCoordinates(screenCenterPoint, hourHandAngle, width / 3.485, 0, Math.ceil(handWidth+(width*0.01)), triangle)); // hour hand border - dc.setColor(((aod==true and BurnIn==true and Storage.getValue(22) != true) or (fontColor == Graphics.COLOR_BLACK)) ? arborColor : Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT); // Light gray if AOD mode ON, White if not (or MIP display) + dc.setColor(((aod==true and BurnIn==true and AODColor != true) or (fontColor == Graphics.COLOR_BLACK)) ? arborColor : Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT); // Light gray if AOD mode ON, White if not (or MIP display) dc.fillPolygon(generateHandCoordinates(screenCenterPoint, hourHandAngle, width / 3.54 , 0, handWidth, triangle-0.01)); // hour hand // Draw the minute hand. @@ -1465,7 +1473,7 @@ class MtbA_functions { dc.setColor(borderColor,Graphics.COLOR_BLACK); dc.fillPolygon(generateHandCoordinates(screenCenterPoint, secondHandAngle, width / 2.055, -(width/2.25), Math.ceil(handWidth+(width*0.0255))/2.75, 1.0)); //rectangle } - dc.setColor(((aod==true and BurnIn==true and Storage.getValue(22) != true) or (accentColor == Graphics.COLOR_WHITE)) ? arborColor : Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT); // Light gray if AOD mode ON, White if not (or MIP display) + dc.setColor(((aod==true and BurnIn==true and AODColor != true) or (accentColor == Graphics.COLOR_WHITE)) ? arborColor : Graphics.COLOR_WHITE, Graphics.COLOR_TRANSPARENT); // Light gray if AOD mode ON, White if not (or MIP display) dc.fillPolygon(generateHandCoordinates(screenCenterPoint, secondHandAngle, width / 2.075, -(width/2.23), Math.ceil(handWidth-(width*0.0035))/2.75, 1.0)); //rectangle } @@ -1474,10 +1482,10 @@ class MtbA_functions { /* ------------------------ */ // Draw Garmin Logo - function drawGarminLogo(dc, x, y) { + function drawGarminLogo(dc, x as Number, y as Number, theme) { var garminIcon = null; - if (Storage.getValue(32) == true){ // light theme + if (theme){ // light theme garminIcon = Application.loadResource(Rez.Drawables.GarminLogoWhite); } else { // dark theme garminIcon = Application.loadResource(Rez.Drawables.GarminLogo); @@ -1520,7 +1528,7 @@ class MtbA_functions { offset = 7; } else if (System.SCREEN_SHAPE_ROUND != screenShape) { // Venu sq offset = -2; - } else if (width==240 and dc.getTextDimensions("100",0)[1]>=26){ //Fenix 5 Plus + } else if (width==240 and dc.getFontHeight(0)>=26){ //Fenix 5 Plus offset = -1; } @@ -1561,7 +1569,7 @@ class MtbA_functions { offsetY = 7; // } else if (System.SCREEN_SHAPE_ROUND != screenShape){ // Venu sq // offsetY = -1; - } else if (width==240 and dc.getTextDimensions("100",0)[1]>=26){ // Fenix 5 Plus + } else if (width==240 and dc.getFontHeight(0)>=26){ // Fenix 5 Plus offsetY = -1; } @@ -1623,7 +1631,7 @@ class MtbA_functions { //elevation = Activity.getActivityInfo().altitude; if(Activity.getActivityInfo().rawAmbientPressure!=null){ pressure = Activity.getActivityInfo().rawAmbientPressure; - } else if (Activity.getActivityInfo().ambientPressure!=null){ + } else if (Activity.getActivityInfo() has :AmbientPressure and Activity.getActivityInfo().ambientPressure!=null){ pressure = Activity.getActivityInfo().ambientPressure; } } @@ -1638,7 +1646,7 @@ class MtbA_functions { dc.setColor((fontColor==Graphics.COLOR_WHITE ? Graphics.COLOR_LT_GRAY : Graphics.COLOR_DK_GRAY), Graphics.COLOR_TRANSPARENT); - if (pressure!=null){ + if (pressure!=null and pressure instanceof Float){ if (fontColor == Graphics.COLOR_WHITE){ // Dark Theme if(pressure<100914.4) { dc.setColor(0xFFAA00, Graphics.COLOR_TRANSPARENT); @@ -1652,11 +1660,11 @@ class MtbA_functions { dc.setColor(0x0055AA, Graphics.COLOR_TRANSPARENT); } } - } - dc.drawText( xIcon, yIcon + offset , IconsFont, "@", Graphics.TEXT_JUSTIFY_CENTER); // Using Font + + dc.drawText( xIcon, yIcon + offset , IconsFont, "@", Graphics.TEXT_JUSTIFY_CENTER); // Using Font // Pressure Text - if (pressure != null) { +// if (pressure != null and pressure instanceof Float) { if (System.getDeviceSettings().temperatureUnits == System.UNIT_METRIC or Storage.getValue(16)==true) { // Always Celsius pressure = pressure / 100; pressure = pressure.format("%.0f"); @@ -1679,7 +1687,7 @@ class MtbA_functions { /* ------------------------ */ // Draw Precipitation Percentage - function drawPrecipitation(dc, xIcon, yIcon, xText, yText, width) { +(:tempo) function drawPrecipitation(dc, xIcon, yIcon, xText, yText, width) { //var IconsFont = Application.loadResource(Rez.Fonts.HumidityFont); var precipitation=0; @@ -1747,7 +1755,7 @@ class MtbA_functions { /* ------------------------ */ // Draw Min and Max Temperatures - function drawMinMaxTemp(dc, xIcon, yIcon, xText, yText, width) { +(:tempo) function drawMinMaxTemp(dc, xIcon, yIcon, xText, yText, width) { //var IconsFont = Application.loadResource(Rez.Fonts.IconsFont); var minTemp, maxTemp; @@ -1781,7 +1789,7 @@ class MtbA_functions { offset = 7; } else if (System.SCREEN_SHAPE_ROUND != screenShape) { // Venu sq offset = -2; - } else if (width==240 and dc.getTextDimensions("100",0)[1]>=26){ //Fenix 5 Plus + } else if (width==240 and dc.getFontHeight(0)>=26){ //Fenix 5 Plus offset = -1; } @@ -1815,7 +1823,7 @@ class MtbA_functions { /* ------------------------ */ // Draw Humidity Percentage - function drawHumidity(dc, xIcon, yIcon, xText, yText, width, accentColor) { +(:tempo) function drawHumidity(dc, xIcon, yIcon, xText, yText, width, accentColor) { //var IconsFont = Application.loadResource(Rez.Fonts.IconsFont); var humidity=0; @@ -1875,10 +1883,36 @@ class MtbA_functions { return true; } + /* ------------------------ */ + +(:tempo) function drawForecast(dc, xIcon, yIcon, width, size) { + //var today = Time.Gregorian.info(Time.now(), Time.FORMAT_SHORT); + + if (Toybox has :Weather and Toybox.Weather has :getHourlyForecast) { + var forecast = null; +// if ((width >=360 and today.sec % 30 == 0) or (width <360 and today.sec == 0)){ // 3 times per minute for AMOLED and 1 time per minute for MIP + if(Weather.getHourlyForecast() != null) { + forecast = Weather.getHourlyForecast(); + //forecast[-1].condition; + if (forecast[0].forecastTime != null){ // Trying to fix an error when weather data is not available + var info = Gregorian.info(forecast[0].forecastTime, Time.FORMAT_SHORT); + var x2Icon = xIcon + 1; + drawWeatherIcon(dc, xIcon, yIcon, x2Icon, width, forecast[0].condition, info.hour); + var adj = xIcon + dc.getTextWidthInPixels("000", 0) + 1; + drawWeatherIcon(dc, adj, yIcon, adj, width, forecast[1].condition, info.hour+1); + if (size==3 and width>208) { // don't go in if FR55 (not enough space/resolution for 3 hour forecast) + adj = adj + dc.getTextWidthInPixels("000", 0) + 1; + drawWeatherIcon(dc, adj, yIcon, adj, width, forecast[2].condition, info.hour+2); + } + } + } + } + // } + } /* ------------------------ */ // Draw Wind Speed - function drawWindSpeed(dc, xIcon, yIcon, xText, yText, width) { +(:tempo) function drawWindSpeed(dc, xIcon, yIcon, xText, yText, width) { var WindMetric = System.getDeviceSettings().paceUnits; var windSpeed=null; @@ -1968,7 +2002,7 @@ class MtbA_functions { } else { letter = "P"; } - if (letter.length()==2 and (width>260 or System.SCREEN_SHAPE_ROUND != screenShape)) { + if (letter.length()==2 and (width>260 or System.SCREEN_SHAPE_ROUND != screenShape or width==240)) { xIcon = xIcon - 2; } } @@ -1986,6 +2020,9 @@ class MtbA_functions { } else { yIcon = yIcon - 6; } + } else if (width==208) { // FR55 + yIcon = yIcon - 1; + xIcon = xIcon - 1; } if (letter != null){ @@ -2106,13 +2143,13 @@ class MtbA_functions { } seconds = clockTime.hour.format("%2d") + ":" + clockTime.min.format("%02d"); if (clockTime.hour < 10 and clockTime.hour > 0 and width>=240){ - xText=xText-(dc.getTextDimensions(clockTime.hour.format("%2d"),fontSize)[0])/2; + xText=xText-(dc.getTextWidthInPixels(clockTime.hour.format("%2d"),fontSize))/2; } else { - xText=xText-(dc.getTextDimensions("1",fontSize)[0])/2; + xText=xText-(dc.getTextWidthInPixels("1",fontSize))/2; } } - // placeholder for implementation of Partial Update + // placeholder for future implementation of Partial Update /* dc.setClip( mSecondsClipRectX + mSecondsClipXAdjust, @@ -2133,7 +2170,7 @@ class MtbA_functions { if (width==240 and System.SCREEN_SHAPE_ROUND == screenShape){ yIcon = yIcon - 1.5; - if (dc.getTextDimensions("100",0)[1]>=26){ + if (dc.getFontHeight(0)>=26){ yIcon = yIcon + 1; } } else if (width==218){ @@ -2143,7 +2180,9 @@ class MtbA_functions { dc.drawText( xIcon, yIcon, IconsFont, "2", Graphics.TEXT_JUSTIFY_CENTER); // Using Font dc.setColor(fontColor, Graphics.COLOR_TRANSPARENT); - dc.drawText(xText, yText, fontSize, seconds, Graphics.TEXT_JUSTIFY_LEFT); + if (lowPower==false) { + dc.drawText(xText, yText, fontSize, seconds, Graphics.TEXT_JUSTIFY_LEFT); + } if (type==2){ //digital clock //dc.drawText(xText + dc.getTextWidthInPixels(seconds,fontSize), yText + fontSize*((dc.getFontHeight(Graphics.FONT_TINY)-dc.getFontHeight(Graphics.FONT_XTINY))*0.9 - (width>=360 ? 1 : 0)), 0, am_pm, Graphics.TEXT_JUSTIFY_LEFT); @@ -2176,7 +2215,7 @@ class MtbA_functions { if (width==240 and System.SCREEN_SHAPE_ROUND == screenShape){ yIcon = yIcon - 1; - if (dc.getTextDimensions("100",0)[1]>=26){ + if (dc.getFontHeight(0)>=26){ yIcon = yIcon - 1; } } else if (width==218){ @@ -2200,7 +2239,7 @@ class MtbA_functions { offset = 7; } else if (System.SCREEN_SHAPE_ROUND != screenShape) { // Venu sq offset = -2; - } else if (width==240 and dc.getTextDimensions("100",0)[1]>=26){ //Fenix 5 Plus + } else if (width==240 and dc.getFontHeight(0)>=26){ //Fenix 5 Plus offset = -1; } @@ -2447,7 +2486,7 @@ class MtbA_functions { // Draw next Sun Event time //(:memory) - function drawSunriseSunset(dc, xIcon, yIcon, xText, yText, width) { +(:tempo) function drawSunriseSunset(dc, xIcon, yIcon, xText, yText, width) { // placeholder for SDK 5 var myTime = System.getClockTime(); @@ -2536,8 +2575,8 @@ class MtbA_functions { /* ------------------------ */ - // Draw Right Data Points - function drawPoints(dc, xIcon, yIcon, xText, yText, accentColor, width, dataPoint, side) { // exclude for Fenix 5 plus + // Draw Data Fields +(:tempo) function drawPoints(dc, xIcon, yIcon, xText, yText, accentColor, width, dataPoint, side) { // exclude for Fenix 5 plus // side 1 = left top // side 2 = left middle // side 3 = left bottom @@ -2598,6 +2637,8 @@ class MtbA_functions { } else if ((side>2 and dataPoint == 21) or (side<=2 and dataPoint == 25)) { // Notification(dc, xIcon, yIcon, xText, yText, accentColor, width, Xoffset) //drawBatteryConsumption(dc, xIcon-(xIcon*0.002), yIcon+(xIcon*0.035)-offset390, xText, yText, width); drawBatteryConsumption(dc, xIcon-(xIcon*0.002), yIcon+(width*0.025)-offset390, xText, yText, width); + } else if (side>2 and dataPoint == 22){ + drawForecast(dc, xIcon+(width*0.06), yIcon+(width*0.01), width, 2); } else if (side<=2 and dataPoint == 1) { drawDistance(dc, xIcon-offset390, yIcon, xText+(xText*0.015)-offset390, yText, width, accentColor); } else if (side<=2 and dataPoint == 2) { // elevationIcon(dc, xIcon, yIcon, xText, yText, width) @@ -2606,7 +2647,74 @@ class MtbA_functions { drawWindSpeed(dc, xIcon-offset390, yIcon+(xIcon*0.01)-offset390, xText, yText, width); } else if (side<=2 and dataPoint == 4) { // drawMinMaxTemp(dc, xIcon, yIcon, xText, yText, width) drawMinMaxTemp(dc, xIcon+(offset390*2), yIcon, xText+(xText*0.01), yText, width); + } else if (side<=2 and dataPoint == 26){ + drawForecast(dc, xIcon+(width*0.06), yIcon+(width*0.01), width, 3); + } + } + + /* ------------------------ */ + + // Draw Data Fields +(:noTempo) function drawPoints(dc, xIcon, yIcon, xText, yText, accentColor, width, dataPoint, side) { // exclude for Fenix 5 plus + // side 1 = left top + // side 2 = left middle + // side 3 = left bottom + // side 4 = right top and bottom + + var offset390=0; + + if (width>=390) { // Venu 1 & 2 + offset390=1; + } else if (System.SCREEN_SHAPE_ROUND != screenShape) { //check if rectangle display + offset390=1; + } + + if (dataPoint == 0) { //Steps + drawSteps(dc, xIcon-(xIcon*0.002), yIcon, xText, yText, width, accentColor); + } else if ((side>2 and dataPoint == 3) or (side<=2 and dataPoint == 7)) { // elevationIcon(dc, xIcon, yIcon, xText, yText, width) + drawPressure(dc, xIcon, yIcon, xText+(xText*0.01)-offset390, yText, width); + } else if ((side>2 and dataPoint == 4) or (side<=2 and dataPoint == 8)) { // Calories Total + drawCalories(dc, xIcon+(offset390*2), yIcon, xText, yText, width, 1); + } else if ((side>2 and dataPoint == 5) or (side<=2 and dataPoint == 9)) { // Calories Active + drawCalories(dc, xIcon+(offset390*2), yIcon, xText, yText, width, 2); + } else if ((side>2 and dataPoint == 6) or (side<=2 and dataPoint == 10)) { // FloorsClimbed(dc, xIcon, yIcon, xText, yText, width, accentColor) + drawFloorsClimbed(dc, xIcon-(xIcon*0.002), yIcon-(xIcon*0.001), xText, yText, width, accentColor); + } else if ((side>2 and dataPoint == 7) or (side<=2 and dataPoint == 11)) { // PulseOx(dc, xIcon, yIcon, xText, yText, width, accentColor) + drawPulseOx(dc, xIcon, yIcon, xText-offset390, yText, width, accentColor); + } else if ((side>2 and dataPoint == 8) or (side<=2 and dataPoint == 12)) { // HeartRate(dc, xIcon, hrIconY, xText, width, Xoffset, accentColor) + //drawHeartRate(dc, xIcon-(xIcon*0.005), yIcon+(xIcon*0.03)-offset390, xText, width, accentColor); + drawHeartRate(dc, xIcon-(xIcon*0.005), yIcon+(width*0.017)-offset390, xText, width, accentColor); + } else if ((side>2 and dataPoint == 9) or (side<=2 and dataPoint == 13)) { // Notification(dc, xIcon, yIcon, xText, yText, accentColor, width, Xoffset) + drawNotification(dc, xIcon-(xIcon*0.002), yIcon+(xIcon*0.03)-offset390, xText, yText, accentColor, width); + } else if ((side>2 and dataPoint == 10) or (side<=2 and dataPoint == 14)) { // SolarIntensity (dc, xIcon, yIcon, xText, yText, width, accentColor) + drawSolarIntensity(dc, xIcon, yIcon, xText, yText, width, accentColor); + } else if ((side>2 and dataPoint == 11) or (side<=2 and dataPoint == 15)) { // Seconds + drawSeconds(dc, xIcon, yIcon+(width*0.02)-(offset390*2), xText, yText, width, 1); + } else if ((side>2 and dataPoint == 12) or (side<=2 and dataPoint == 16)) { // Digital Clock + drawSeconds(dc, xIcon, yIcon+(width*0.02)-(offset390*2), xText, yText, width, 2); + } else if ((side>2 and dataPoint == 13) or (side<=2 and dataPoint == 17)) { // Intensity Minutes + drawIntensityMin(dc, xIcon-(xIcon*0.002), yIcon+(xIcon*0.025)-(offset390*2), xText, yText, width, accentColor); + } else if ((side>2 and dataPoint == 14) or (side<=2 and dataPoint == 18)) { // SolarIntensity (dc, xIcon, yIcon, xText, yText, width, accentColor) + drawBodyBattery(dc, xIcon+2, yIcon-1, xText+(xText*0.01), yText, width); + } else if ((side>2 and dataPoint == 15) or (side<=2 and dataPoint == 19)) { // Calories(dc, xIcon, yIcon, xText, yText, width) + drawStress(dc, xIcon-(xIcon*0.002), yIcon+4, xText, yText, width); + } else if ((side>2 and dataPoint == 16) or (side<=2 and dataPoint == 20)) { // Respiration Rate(dc, xIcon, yIcon, xText, yText, accentColor, width, Xoffset) + drawRespiration(dc, xIcon-(xIcon*0.002), yIcon+(xIcon*0.03)-offset390, xText, yText, accentColor, width); + } else if ((side>2 and dataPoint == 17) or (side<=2 and dataPoint == 21)) { // Recovery Time(dc, xIcon, yIcon, xText, yText, width, accentColor) + drawRecoveryTime(dc, xIcon, yIcon+(xIcon*0.002), xText-offset390, yText, width); + } else if ((side>2 and dataPoint == 18) or (side<=2 and dataPoint == 22)) { // Vo2 Max Run(dc, xIcon, yIcon, xText, yText, accentColor, width, Xoffset) + drawVO2Max(dc, xIcon-(xIcon*0.002), yIcon+(xIcon*0.03)-offset390, xText, yText, width, false); // run + } else if ((side>2 and dataPoint == 19) or (side<=2 and dataPoint == 23)) { // Vo2 Max Cycling(dc, xIcon, yIcon, xText, yText, accentColor, width, Xoffset) + drawVO2Max(dc, xIcon-(xIcon*0.002), yIcon+(xIcon*0.03)-offset390, xText, yText, width, true); //cycling + } else if ((side>2 and dataPoint == 21) or (side<=2 and dataPoint == 25)) { // Notification(dc, xIcon, yIcon, xText, yText, accentColor, width, Xoffset) + //drawBatteryConsumption(dc, xIcon-(xIcon*0.002), yIcon+(xIcon*0.035)-offset390, xText, yText, width); + drawBatteryConsumption(dc, xIcon-(xIcon*0.002), yIcon+(width*0.025)-offset390, xText, yText, width); + } else if (side<=2 and dataPoint == 1) { + drawDistance(dc, xIcon-offset390, yIcon, xText+(xText*0.015)-offset390, yText, width, accentColor); + } else if (side<=2 and dataPoint == 2) { // elevationIcon(dc, xIcon, yIcon, xText, yText, width) + drawElevation(dc, xIcon-(xIcon*0.015), yIcon-(xIcon*0.01), xText+(xText*0.015)-offset390, yText, width); } } + } \ No newline at end of file