From ce0e50ed949eeffc97bd2ec3db1fdb38830c3e4e Mon Sep 17 00:00:00 2001 From: hughbarney Date: Fri, 26 Nov 2021 20:25:28 +0000 Subject: [PATCH] MyLocation - adds menu to set preferred city or setup from GPS --- apps.json | 15 +++++ apps/mylocation/ChangeLog | 1 + apps/mylocation/README.md | 44 +++++++++++++++ apps/mylocation/mylocation.png | Bin 0 -> 1909 bytes apps/mylocation/mylocation.settings.js | 73 +++++++++++++++++++++++++ apps/mylocation/screenshot_1.png | Bin 0 -> 2847 bytes apps/mylocation/screenshot_2.png | Bin 0 -> 2642 bytes apps/mylocation/screenshot_3.png | Bin 0 -> 15562 bytes apps/mylocation/screenshot_4.png | Bin 0 -> 2818 bytes apps/pastel/pastel.app.js | 30 ++++++++++ 10 files changed, 163 insertions(+) create mode 100644 apps/mylocation/ChangeLog create mode 100644 apps/mylocation/README.md create mode 100644 apps/mylocation/mylocation.png create mode 100644 apps/mylocation/mylocation.settings.js create mode 100644 apps/mylocation/screenshot_1.png create mode 100644 apps/mylocation/screenshot_2.png create mode 100644 apps/mylocation/screenshot_3.png create mode 100644 apps/mylocation/screenshot_4.png diff --git a/apps.json b/apps.json index a7a74f4cb..8b1fb586e 100644 --- a/apps.json +++ b/apps.json @@ -4456,5 +4456,20 @@ "storage": [ {"name":"timecal.app.js","url":"timecal.app.js"} ] + }, + { "id": "mylocation", + "name": "My Location", + "shortName":"My Location", + "icon": "mylocation.png", + "screenshots": [{"url":"screenshot_1.png"}], + "version":"0.01", + "description": "My Locations adds a menu in the Settings app to set your preferred City or it can be set from the GPS. mylocation.json can be used by other apps that need your main location lat and lon. See README", + "readme": "README.md", + "tags": "tool,utility", + "type": "app", + "supports": ["BANGLEJS", "BANGLEJS2"], + "storage": [ + {"name":"mylocation.settings.js","url":"mylocation.settings.js"} + ] } ] diff --git a/apps/mylocation/ChangeLog b/apps/mylocation/ChangeLog new file mode 100644 index 000000000..7b83706bf --- /dev/null +++ b/apps/mylocation/ChangeLog @@ -0,0 +1 @@ +0.01: First release diff --git a/apps/mylocation/README.md b/apps/mylocation/README.md new file mode 100644 index 000000000..3b39aa947 --- /dev/null +++ b/apps/mylocation/README.md @@ -0,0 +1,44 @@ +# My Location + + *a adds a My Location settings menu, stores GPS lat and lon of your preferred city* + +* My Location is a service app that adds a 'My Location' menu to the settings menu +* Select one of the preset Cities or setup through the GPS +* Other Apps can read this information to do calculations based on location +* When the City shows ??? it means the location has been set through the GPS + +## Example Code + + const LOCATION_FILE = "mylocation.json"; + let location; + + // requires the myLocation app + function loadLocation() { + location = require("Storage").readJSON(LOCATION_FILE,1)||{"lat":51.5072,"lon":0.1276,"location":"London"}; + } + +## Screenshots + +### Select one of the Preset Cities + +* The presets are London, Newcastle, Edinbrough, Paris, New York, Tokyo + +![](screenshot_1.png) + +### Or select 'Set By GPS' to start the GPS + +![](screenshot_2.png) + +### While the GPS is running you will see: + +![](screenshot_3.png) + +### When a GPS fix is received you will see: + +![](screenshot_4.png) + + + +## Creator + +[Hugh Barney](https://github.com/hughbarney) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) diff --git a/apps/mylocation/mylocation.png b/apps/mylocation/mylocation.png new file mode 100644 index 0000000000000000000000000000000000000000..7148990a42a1c8858d933d2a4cb35b80123a5505 GIT binary patch literal 1909 zcmV-*2a5QKP)1f{oIeq9#IX zOf{({O-*cUKk%VRxp+%YMPU&efj|3B}%Gtc{uFh$VRFTVr&05N+hmOTqw5{SsK zRq^~hp6S9jhcVu7mJ0i>}op)z!;xQ{&^&`R#GVwH9WEaeQfJ>BoptFh|R8ypn@@g4s~Z+ zAOYPL+%Al}QXb#%&nSE%3DC#3-bG{mOV}Y--E|?8ANqHT!{ow5VmbiFlKYm+Yg=}jras6GBg@72L>|d5wlEoY`!pQ*klg6p{<$e z$#!B+vczB%x_gHNTpqkfI)1CXn97GaO}wJx(crv3fxPd-g^QPyJirPX+zpdCg^qxx z+HRqt@!gU}&xek#ArY4!IV}HL*|GI}Ifw8OaN;kPoErn37e~l@O--0YqB?4}jo;XW z*U%8=mBiSa!W_zufTp%x&$Q$*##94z^*}BUmc@nj>xj>20>D?LI9MS6!ACTmJw@}W zPjPbDl6>wJS1@?fHzeuwyndoVNc@M_IV<<#JS9jLwtYTe^dcPFZP|{G#NA zlgSN{2MP=3kB|pQ=anAUMi(und(mRV7+O9)PRobKFmvbPee)(_Gnx?~K1@36D!HN| zS5(~V7IWpn{S!nFBaT@20KbkVz;V7ka%>d(M#~j{+-=jB^-&!?SIeSj(PB=tUQ5!k zSUh92Ov)9N&a{tbv?PbILn;!{`^pIjoCBIlH4$@0Z_e~!=%m%MmQoabrG3DgK)wPj z(^M+(Vh2xRNvvr}{R0V3DRW1-p-)Eq3plK9B6Tdbwq%Z^|H#*Eeo|Ca)kc3|kqQ{}9i za){L#)Eq3JXbu73e@4gyARh*`1`D{VK4fhn>?vm| zUkgcMFSt8_dAjvflrXX3}lk(J;L2)mG{uD2UIU%<)dn04%Z zEU)a#GDqILT9#&60f4T3HS0f@UoEZawVs}5zn+It; zdy05}f2An_o|m1Qe_YO3egpt4e-p;OpMX&aLZYviL|-qn{&AGzv_{fbwj#|<)So#+ zqO&6k=}X9h_hgvEXk8A+is_A_SuwHg<-WKLC`J%q##516Wri@bM_#-pp+b46X zY+vZ7kIu)_zXP*srd1hwu>7xwE#@y_@(}=J`&0ix`2m%$U21`%`amV*p+W%wvTO5x z;F+pvRoszmlU-Y0tJJ+>0RVKIco>y8B9p2V!U1N)9*q_f5&DyjEjZR+for11PJ&PI z%yN0Itv52fIQpwCdv<~ZK{z!JVy{A8q8gjsZ+0gfxxXiC>NABhx4bH?2lq4Q zgK!ZSufKt_x339aD2(DTqT80vkG~=!p>r%WONZ(l9n_B#jQ0IcjU&x&LnG%_t>)Zqt1BlDAiAc(cJB&x2{WGTFW%7{v){1Cd|LGtdNV$Q1rxsO zqDp*V00i8|rf9@RleF8mSrIlTCe3=LS63z+-Bahtf^q!F6_u=O$a{+G>s0Q6c>=#T zmiO?o`St$_bFBEXobD{%;>7Hq#T{;TET&slX{Z98uXqMLqxi%Bc~>b^wn3H#4hy{I ziTBF#1@-@~B&e!Qn=`6)^!VSkExB1lz9JT_7Bt(I)LTMa1WN!BB;y)72K)iQ2g!hT vfnGqRQ;-viIVr;N(+lDs-76CL)93#HbI`dUZ#9t@00000NkvXXu0mjf9c-jw literal 0 HcmV?d00001 diff --git a/apps/mylocation/mylocation.settings.js b/apps/mylocation/mylocation.settings.js new file mode 100644 index 000000000..6936e9e69 --- /dev/null +++ b/apps/mylocation/mylocation.settings.js @@ -0,0 +1,73 @@ +(function(back) { + const SETTINGS_FILE = "mylocation.json"; + + // initialize with default settings... + let s = { + 'lat': 51.5072, + 'lon': 0.1276, + 'location': "London" + } + + // ...and overwrite them with any saved values + // This way saved values are preserved if a new version adds more settings + const storage = require('Storage') + let settings = storage.readJSON(SETTINGS_FILE, 1) || {} + const saved = settings || {} + for (const key in saved) { + s[key] = saved[key] + } + + function save() { + settings = s + storage.write(SETTINGS_FILE, settings) + } + + const locations = ["London", "Newcastle", "Edinburgh", "Paris", "New York", "Tokyo","???"]; + const lats = [51.5072 ,54.9783 ,55.9533 ,48.8566 ,40.7128 ,35.6762, 0.0]; + const lons = [-0.1276 ,-1.6178 ,-3.1883 ,2.3522 , -74.0060 ,139.6503, 0.0]; + + E.showMenu({ + '': { 'title': 'My Location' }, + '< Back': back, + 'City': { + value: 0 | locations.indexOf(s.location), + min: 0, max: 6, + format: v => locations[v], + onchange: v => { + if (v != 6) { + s.location = locations[v]; + s.lat = lats[v]; + s.lon = lons[v]; + save(); + } + }, + }, + 'Set From GPS': ()=>setFromGPS() + }) + + function setFromGPS() { + console.log("set from GPS"); + Bangle.setGPSPower(1); + E.showMessage("Waiting for GPS fix. Place watch in the open. Could take 10 minutes. Long press to abort", "GPS Running"); + Bangle.setUI("updown", undefined); + } + + Bangle.on('GPS', (gps) => { + //console.log("."); + if (gps.fix === 0) return; + //console.log("fix from GPS"); + s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' } + Bangle.buzz(1500); // buzz on first position + Bangle.setGPSPower(0); + save(); + + Bangle.setUI("updown", ()=>{ load() }); + E.showPrompt("Location has been saved from the GPS fix",{ + title:"Location Saved", + buttons : {"OK":1} + }).then(function(v) { + load(); // load default clock + }); + }); + +}) diff --git a/apps/mylocation/screenshot_1.png b/apps/mylocation/screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c61b6b35272dabcd77f7262d0ae6a2e9099057 GIT binary patch literal 2847 zcmeHJX*`sT9(`tdj6tJeh#^Z^do88mZD>N4QI)x;T<^E+#aA~Xs}2G@$ZgN9v2Y>jlqEg*DD`m%hRa;pL!7t{o6EBwJva6|zJI&ao4NFi8B2XU@d}{= zp^OCpEOgwB$x!Dv<8+vdo+`;DVb(U%`kx4sX_dY85{s(6|Th2LvD>&(-3GSCz) z5HCz4o0oLfU1=p%E76aq4(hkxcl4j}FOM5ilTpu>I1-2N#=}LG^=rR1`(H4!ps$;3 z)&KHGxMe{7N-esDREc7VlZqs#U&W(BbHvZB^M6H#Z(&1iHU?i{G5zi3qOrg@e@mZN z7C>M;_6qu;Ov=@ov5X?!ZYienws0{MHMK~}$$NJ;J|zKu3a!7(kxSHvigBmS4KNU8 zahM-9B5L|cuCjm^wd;|oI)|Dw$@=&~Dn;=YR4!_?q)4iDTe%2!Akl7%3scBK4bqXI zPKbPW5+8jiP^TrLD6i*6GT=(t=i?`93*u7;4`zyT)9Sy8n9_gIWX?`k0;yxL%2ljV z>H#HT7q<6d$GE4d9=vq@f%WTzIVwH1@HF|20yHl7-chDXrfB>0l@V(Xnqc}1g|Kcj zx5CW$^JCp^I#HJ7a3L@ZosecKx1b`zKHW$1tyY z{05Vg_9{TCM$J5shE@YhzfDTHXoXqyM41sC6P8(*raDSF>TR=)`QVx|UE`@{Y!cvl zy;$39Kq_{Fv6BBPOS(Kv{oUuXR#RTOuJ-Zl%JrTDWszD&tG`?5ijukS>!<`Vf9-s) z%L5}$!3S_hul7HeffaXM9r>AdKsz7d=I070P^WEm7Ro?8Om~C!(z$3@WMN8;L*b~n zJor{(D&S_iIRR**vc}jAwUUCYNuMFglV(}hzEy%lnB{Xb{oDq^yZ2E8GD2c+#CZ+y zSq-%3zWH_h*!FG`R>L82OB4CMQ0GgG7-6kv0_F4DVKENX`Euzf7Tg@>=Cf;9}(zL5P$QoqbK@*6TtI}#kBb+4&F9@MKFpy@*J&FD#DS~VuJ4*I%)j& zjSlmnx?^mSDR>18zHG{qJ$PO#u}x1mAppz;{4N@9+cqVZhzHXu?zyiKx%;5~=pL<* z%`&g7D2dl1i0M^q;qrPy2BR_=;)fgiwi`^UOou-h{g+6Uo?;d4eAGlqUf zk({3^)j!)^4lVF4RB*`HHKbr{t;92OPVFV300|t9^+spUsv9;F!7j9j!Y~K}f>Fdi z1)rBM5UeM@Gvl)I1D<yaBs<35`#$y^#nUgB&*xz^@?k02L_ znmf6R+YPqVF8I;fM1X-D?a_>}>usxDN@^ANy~zZ!zj})7Hzxkiz9Gnf5qY7s~*|QVS-**z?@unQ?(Mg*^>FPM|1^ zmpGMH)d$P+86H%4vfUeZU+%_Pd+!8Mq+%0astUwVI~9;GG8G-5sqg3GqwCi7P&J=H z{RidF+IzwK%dc<3ndn^UKdiju?)b%2g_LqSZOO0SV_Y!>ScWgAm89qBgDkHrm3 zzirzsPj8<%aG?G_J5*jkR7Qn(2G*^F?cZEpHBj|vNdh)|5P|K>eRDOr&57M+sKeifi_28K;!Vp&P)rX}koxrrOiIgZ5hCeJ`FA4I!!@!11Oc4f)#)!tSdtQIu zx=F_N#MaFwQ8l!s(AAU*GUAGlTJ+}{3ArnbNFqYN-4J1pt81Z5pU>?Km~PVB!&o?E$8EO7Go`{@cfuwSIPV-jk9_1|Vi;3bJB)z#gd8ffgV?^dm-$2WhH-CpaG0?ZOf5}ve*bMmcJ$v!E++BJ5t?jj| z$*oV}wVOf3Qnc$L7hK1XXzq)#L>m&_ctAE>t@`yd*4Z!k~ z3a}orGZ-3t7GtKhs~+cqL&x)7(gfyoVw9o5mQ04`Z2(3VqmY8Fz~B6huf^CEAt#x; Pix)U!N-|*?xyAkq*A-bw literal 0 HcmV?d00001 diff --git a/apps/mylocation/screenshot_2.png b/apps/mylocation/screenshot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4c4404540ffebeec33f1a4dbdcdd560d25fbf936 GIT binary patch literal 2642 zcmeHJ`#;l-7oU&G$iu8uQm&1jgrv(Jxg~d%9#3SO%Q8%+2xYdpOv)v!DYpzI)%WW* znIRcVM2SV&a*2J7q-|}5nWxmFKjQoS>3d$UbI$91Ugw8%-sg2*uXpyTlkUH%Z&wF_ zK)-oXdYTX{DIX@@v(?yeSo-tz zdn?Jv{mtkCi#0@;{1ZKN7wG`v`Rk=GzbrEqO867d0;deW9G3V1kX(q>2@oZuoh(ZD z@r7{f@&ne0tH4(*)$Tw|<;|4#K)&ne7v{%pYKwBbv$gB@SW!*X$+0P&${tmeJOj|r3?$L!4T(_Rs^4Mg7Oni$!3J(Bdv2PFT%4{W(F;k; zrHc5(4K3<33(@9d$Y^j&79(|1m=P%WXz9Y!IA^g$O)5!ZY@LJ=(8>nIP5f;js;Fbb|n{LHB zrsVaP>#o+TFXWrZ@>wh0PMGpL{-&d_^x~vCuUK*x2+%q!toDNtij$aY;TtO8{i`Q{ zQP`sMk+1IyKvvDuO?6V6-Qbi;)O1`mggnsH$-M(rBu6C=(1Q2Giq^O$=VFfdT&-Ez zYoEOByl~;k!@n3g;Tbj3~MqIgFV)hLxrQ759}r-RmDZeIG6)k&~z?b#|j;aYQVUaKDU~Ta4V_cK-Xcch~rsBHQ zcqaDS*mqLj2k{sIH{+jsMv0W0mT>t52592=sZ*ZrFfW~?NpZVcX#nNCF1^a7? z6m2qa|FIC;*y1Sz^>Tmwr_4fMmoO@+WnB`t{$4);jqay zCXV>5R$Ale?|J z*xk)Bo8~Pj=9m}<%e+RJzzX@QTHB!knYCcbVKSK;ENKWxOvru zLZW!d@Om2A;9Y_FF$}(lo9<2*sr6U(gsVrtxG>kQ?`U5FkA3k3N(;K~kCrwl!?=5z zaQ!|7mX8M13}gQY zg`I{u3B1~SEX`v7w(POSOW}+C8|~)q8Buc6aQJx9alZ+!#mKzq7MtxWy^>+_hrVHd zV1Zc<;?Gg}w;5T7)+A|Xfo{NO?tQiT>=(q2F6sBk2?J|4m6qKoW!BKV;x@RhJ>N?= zTW^a(Tr-yPVHG>l*K)5sh*>Qit@V)9jGt5^2bNIx8W}5-tn7nH&Hh2?0ag6l_r+ay z-dRkrKh7kEeo;BHFm_E?q^0vUMe6KQV57{iy4jwoo!T^^`P08?R67F0a^uf3?f!K; zsmsi_2+H65!xE{js4mdnov2N@n5!LYVbo+07LbnW>$~<6nYb&BlUP?1dz|*-L6szY zoqKM7ju* zvH-IAXr9NTeM;cqHblapX(OHUs`K)2sXDN6{fn+% zKgN#+994d_uE<5rjF7UjZ>_!gJyFZ^EBaG`)2DGH1q$mRoX@V^ehgqZIH)c+RCsn-8>YCi8^9t1e*ku&Et2^~6_IWCx0k zEmp@A&l~!PzpQ~5`vEvA_9;OKka$5RqQ~~TYGv#eo3#ms4X#fn7QRB{kGO<|oN5zW z=Be2=ea_i@Q7?R!9(k6HMYLT1a8wYDOYLFC%n)syX0eXO!d%Y8WA=N^S}S``l5?w9 z_}pU3CzlH|UM!>;fvh*U=UQUK;=U|0SvrA2U!qwDbfX@jY-D5aD%SFIR|$6wN>MxP z4hD4Otr;jJGH0 z$EfkgZKIa0eKS1JcnzG-OiLv)eTC3^A&sbAIsJazTUjYGK?&UE@ zyuh93&rM@7>jL3Yr)0O)xBA%$SUAQPfb8u((G(3p=qGLw{*V5bOr$EkXP_#pj;2kn Pi$sv8>q(aeXH5D(w(Zo_ literal 0 HcmV?d00001 diff --git a/apps/mylocation/screenshot_3.png b/apps/mylocation/screenshot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..81570670b7988aa92f6e6fedc007c5bedc2a387d GIT binary patch literal 15562 zcmeHL%W~sJ40Nhe<;(s}t~uqHs{I$;{9E~s{FH<4#%n}TA|;M1TjqGl!8CwI4`$@Y z{`K?UKi@e1w)YQv{;{v$-hK!6$>)>Pr>#CQ*6@#WoE0yWU{?Dqgkr`TnlyoyE%@@9nKlCQr&W zU!R-&+fJ*Za6KVPFHGW919Y$bT}d0PS-h*IA$!I+h<8D=0G<=SpjiOV@%}nl{P6R- zV(a$!)x{2A3faG($jr~3xJU%^NnVJI&zR&6(%_Cy;ox|*n98f3a?jCI*F(LwAC`Zl zvHO+4K2G4ZO4MXkq)?^fET7hUI4>K3BQK?DhYNP~aPJzkc>6)$(nPH9V5{mz*38VF z#hV588ck#~_p-G3V^|uYn-h5Rwps~ZG}MSE%JRzUCNKt}5$`eA(AH+J&SiKBY(!dr1$H1mzBN*@!w&t zZ&_YYh@f*o2svWj8!ev13tFf4o2c4X>LA)5Y(RHbh~kO1*IZt-%j&YU>f-$NmG(riPj^|~Id_&##Hn2MJ0C*fi z8eW=RZ|CZE(AaD+_X9|_BMn#h;+=Ww@4{aIBU^ZRZdom`nX8cxVk)l%Hq-p$Du4xA zOrzBTn;A4cmhLg8yMHO0_rv$n?~0)GVp%&5i+9dqY~9~zKxT#w(1udei)FBtwa%+} zC+WFP!b#tnZ}EDD2V6yT)ag>v^Ss!qnq$SQV%J+JLTp65s*)jbC6Y7aj^t&1XrK(1 z4M-?lu0Fh2#-m^b6gI4}p%`v)dXcwCDIH5)Bp6YTGhKm7O@D{S_tbMO>?K|tSyNZk zWerNT@Tyn47y@VU4n_LH8_}U_yB+hjYkfV7_f|#Ky5)Hddxlq+-!gSSAfRmA4&9Kv zC%$C(J+;$#qjG9Q-l_5?55P?@)RfzktQ8KMRPx-};A zTFF%9(qb)L4vu;aO#Di;>z%;Mnmj!_AMoF@>4Bv5QftC+4TDS!H~4toUTdvoin;Gi z9@m>|Gwx^J_jaCUGs!d82-N}-q4MiyBSpGqB4U^uEK*+NJTy3We3>} zFd`dc3vX0X#`rchIGG8&rH&=MtST*4$4)Tc*E^pV^y_yIV>>h26<_5@zwr2+cl`H_kX>>=F7LB=ONaELox)OiA{G0{8v3gXkt{Fs zg3tcBUXubwsUEdIQdxfJy?k7($#Zy1FSSbX@GdP|Eb6sByk{Sd+dZx uGlus8FYwx9qjPmTbG8`H#n5hV$-NiTxw?HXXNzyv_epd!#}*;qB<4S8=}L+K literal 0 HcmV?d00001 diff --git a/apps/mylocation/screenshot_4.png b/apps/mylocation/screenshot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ffae679c9dd8828f966f5873891f1d6e51961248 GIT binary patch literal 2818 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 '' }, ID_DATE: { calc: () => {var d = (new Date).toString().split(" "); return d[2] + ' ' + d[1] + ' ' + d[3];} }, ID_DAY: { calc: () => {var d = require("locale").dow(new Date).toLowerCase(); return d[0].toUpperCase() + d.substring(1);} }, + ID_SR: { calc: () => 'Sunrise: ' + sunRise }, + ID_SS: { calc: () => 'Sunset: ' + sunSet }, ID_STEP: { calc: () => 'Steps: ' + stepsWidget().getSteps() }, ID_BATT: { calc: () => 'Battery: ' + E.getBattery() + '%' }, ID_MEM: { calc: () => {var val = process.memory(); return 'Ram: ' + Math.round(val.usage*100/val.total) + '%';} }, @@ -169,6 +196,9 @@ Bangle.setUI("clockupdown", btn=> { loadSettings(); loadFonts(); +loadLocation(); +updateSunRiseSunSet(new Date(), location.lat, location.lon); + g.clear(); var secondInterval = setInterval(draw, 1000); draw();