From 4a8c56de95161145de618816fef419f10fe05c7d Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 9 Apr 2024 11:37:27 +0400 Subject: [PATCH] Update Widget Switcher script --- main/widgets-on-off.lua | 225 +++++++++++++++++++++------------------- scripts.md5 | 2 +- scripts.zip | Bin 22429 -> 22027 bytes 3 files changed, 118 insertions(+), 109 deletions(-) diff --git a/main/widgets-on-off.lua b/main/widgets-on-off.lua index 3fee690..f2d863a 100644 --- a/main/widgets-on-off.lua +++ b/main/widgets-on-off.lua @@ -1,43 +1,105 @@ -- name = "Widgets switcher" -- description = "Turns screen widgets on and off when buttons are pressed" -- type = "widget" --- arguments_help = "Don't change the arguments directly, use the long click menu." -- author = "Andrey Gavrilov" --- version = "2.1" +-- version = "3.0" ---constants-- - -local enabled_color = aio:colors().progress_good -local disabled_color = aio:colors().button - -local widgets = {"weather","weatheronly","clock","alarm","worldclock","monitor","traffic","player","apps","appbox","applist","appfolders","contacts","notify","dialogs","dialer","timer","stopwatch","mail","notes","tasks", "health", "feed","telegram","calendar","calendarw","exchange","finance","bitcoin","control","recorder","calculator","empty"} - -local icons = {"fa:user-clock","fa:sun-cloud","fa:clock","fa:alarm-clock","fa:business-time","fa:network-wired","fa:exchange","fa:play-circle","fa:robot","fa:th","fa:list","fa:folder","fa:address-card","fa:bell","fa:comment-alt-minus","fa:phone-alt","fa:chess-clock","fa:stopwatch","fa:at","fa:sticky-note","fa:calendar-check", "fa:heart-pulse", "fa:rss-square","fa:paper-plane","fa:calendar-alt","fa:calendar-week","fa:euro-sign","fa:chart-line","fa:coins","fa:wifi","fa:microphone-alt","fa:calculator-alt","fa:eraser"} - -local names = {"Clock & weather","Weather","Clock","Alarm","World clock","Monitor","Traffic","Player","Frequent apps","My apps","App list","App folders","Contacts","Notify","Dialogs","Dialer","Timer","Stopwatch","Mail","Notes","Tasks", "Health", "Feed","Telegram","Calendar","Weekly calendar","Exchange","Finance","Bitcoin","Control panel","Recorder","Calculator","Empty widget"} - ---variables-- +prefs = require "prefs" local pos = 0 +local buttons,colors = {},{} -function on_resume() - if next(settings:get()) == nil then - set_default_args() - end - ui:set_folding_flag(true) - local buttons,colors = get_buttons() - ui:show_buttons(buttons, colors) -end - -function on_click(idx) - pos = idx - redraw() +function on_alarm() + widgets = get_widgets() + if not prefs.widgets then + prefs.widgets = widgets.name + end + indexes = get_indexes(prefs.widgets, widgets.name) + ui:show_buttons(get_buttons()) end function on_long_click(idx) - pos = idx - local tab = settings:get() - ui:show_context_menu({{"angle-left",""},{"ban",""},{"angle-right",""},{icons[get_checkbox_idx()[idx]]:gsub("fa:",""),names[get_checkbox_idx()[idx]]}}) + system:vibrate(10) + pos = idx + if idx > #prefs.widgets then + return + end + ui:show_context_menu({{"angle-left",""},{"ban",""},{"angle-right",""},{widgets.icon[indexes[idx]],widgets.label[indexes[idx]]}}) +end + +function on_click(idx) + system:vibrate(10) + if idx > #prefs.widgets then + on_settings() + return + end + local widget = prefs.widgets[idx] + if not aio:is_widget_added(widget) then + aio:add_widget(widget, get_pos()) + aio:fold_widget(widget, false) + else + aio:remove_widget(widget) + end + on_alarm() +end + +function on_dialog_action(data) + if data == -1 then + return + end + local tab = {} + for i,v in ipairs(data) do + tab[i] = widgets.name[v] + end + prefs.widgets = tab + on_alarm() +end + +function on_settings() + ui:show_checkbox_dialog("Select widgets", widgets.label, indexes) +end + +function get_indexes(tab1,tab2) + local tab = {} + for i1,v1 in ipairs(tab1) do + for i2,v2 in ipairs(tab2) do + if v1 == v2 then + tab[i1] = i2 + break + end + end + end + return tab +end + +function get_buttons() + local enabled_color = aio:colors().progress_good + local disabled_color = aio:colors().button + buttons,colors = {},{} + for i,v in ipairs(indexes) do + table.insert(buttons, "fa:" .. widgets.icon[v]) + table.insert(colors, widgets.enabled[v] and enabled_color or disabled_color) + end + return buttons,colors +end + +function move(x) + local tab = prefs.widgets + if (pos*x == -1) or (pos*x == #tab) then + return + end + local cur = tab[pos] + tab[pos] = tab[pos+x] + tab[pos+x] = cur + prefs.widgets = tab + on_alarm() +end + +function remove() + local tab = prefs.widgets + table.remove(tab,pos) + prefs.widgets = tab + on_alarm() end function on_context_menu_click(menu_idx) @@ -47,90 +109,37 @@ function on_context_menu_click(menu_idx) remove() elseif menu_idx == 3 then move(1) - elseif menu_idx == 4 then - redraw() end end -function on_dialog_action(data) - if data == -1 then - return - end - settings:set(data) - on_resume() +function on_widget_action(action, name) + on_alarm() end -function on_settings() - ui:show_checkbox_dialog("Select widgets", names, get_checkbox_idx()) +function get_pos() + local name = aio:self_name() + local tab = aio:active_widgets() + for _,v in ipairs(tab) do + if v.name == name then + return v.position+1 + end + end + return 4 end ---utilities-- - -function redraw() - local buttons,colors = get_buttons() - local checkbox_idx = get_checkbox_idx() - local widget = widgets[checkbox_idx[pos]] - if aio:is_widget_added(widget) then - aio:remove_widget(widget) - colors[pos] = disabled_color - else - aio:add_widget(widget) - colors[pos] = enabled_color - end - ui:show_buttons(buttons, colors) -end - -function set_default_args() - local args = {} - for i = 1, #widgets do - table.insert(args, i) - end - settings:set(args) -end - -function get_checkbox_idx() - local tab = settings:get() - for i = 1, #tab do - tab[i] = tonumber(tab[i]) - end - return tab -end - -function get_buttons() - local buttons,colors = {},{} - local checkbox_idx = get_checkbox_idx() - for i = 1, #checkbox_idx do - table.insert(buttons, icons[checkbox_idx[i]]) - local widget = widgets[checkbox_idx[i]] - if widget ~= nil then - if aio:is_widget_added(widget) then - table.insert(colors, enabled_color) - else - table.insert(colors, disabled_color) - end - end - end - return buttons,colors -end - -function move(x) - local tab = settings:get() - if (pos == 1 and x < 0) or (pos == #tab and x > 0) then - return - end - local cur = tab[pos] - local prev = tab[pos+x] - tab[pos+x] = cur - tab[pos] = prev - settings:set(tab) - local buttons,colors = get_buttons() - ui:show_buttons(buttons, colors) -end - -function remove() - local tab = settings:get() - table.remove(tab,pos) - settings:set(tab) - local buttons,colors = get_buttons() - ui:show_buttons(buttons, colors) +function get_widgets() + local tab = {} + tab.icon = {} + tab.name = {} + tab.label = {} + tab.enabled = {} + for i,v in ipairs(aio:available_widgets()) do + if v.type == "builtin" then + table.insert(tab.icon, v.icon) + table.insert(tab.name, v.name) + table.insert(tab.label, v.label) + table.insert(tab.enabled, v.enabled) + end + end + return tab end diff --git a/scripts.md5 b/scripts.md5 index 9ca7f08..fdb9e77 100644 --- a/scripts.md5 +++ b/scripts.md5 @@ -1 +1 @@ -6427267169ed17f29d737911edecfb91 +7b1a56f29cd6c2d3496a400722e257a3 diff --git a/scripts.zip b/scripts.zip index 658a06a752ee772a0cd789764743309484968311..697532979d19d2071c97a9a9dada933623daa0f1 100644 GIT binary patch delta 1192 zcmV;Z1Xuf=uK|m!0k9i04x?O&SVh{^E&c-l0ND$ZDKj2_@Dyeu@Dyfscnbgl1n2_* z00ig*005m<%Wms75M4`OLFjIzURj8Jy9(d}UG)Q6pbNtgXlY~1st<=o`f@nn_`J{u-1(jz$3p z^6CYUL`6$~WY>|`6W$*NttGNi1>~Zj@1eE2^xMT6a&q>H4*DdOx%^$U3f{;cbX1JX z(NafHy*K=$ddkuiwRJrn75p)6Cb5&r}2-Z@6%`YZxgSN^<*D`@p?72V5*V?1Xjd0i(MQXH1$hZ{8y5X#O$ys|X(xiXuHJqPEc2HD9zJ79g zUCfXrO%Nom&W7@~Z0^pxu{Ruh~3RKdA)=V7Dv)ii(vr8){ zhcS!PSjVgplP8qPXV&{1s%hIoo4Z3Xv1hoD=Gi<$Y10B<#k}f`t&{wLucN%j?tPwXuE-z^%04%Kr;a_YhtH4<%YJ{-0Gd z2_`eij|IE6v%!ZoT$nhn;}}{eFxW1N*j#7qn|a75Fc;W=ENBnP(enrI!_aVlUDz!p zxqk?Jiu^V=LQD1^cBaUB;9YIbcdB~}JA+XEHZrWdDYZH(HJfU-%uHLVoa(JJ;fF%V z{jowXm~rX*8n10xOl#xU1-~b@=i>x-wq_?s4=fyQ3!j{QseU?+Eas6iZrJXor}*5b zDt>n!2F7u^WH*pe&j`MiC}P$eVv)nRTl%0abNC@Ny3I0=M`gJDwpfa8XyN|?v+X!2 z91f#giC9J2)h+%5007wwlOt6u0q~PhRXYM(HS003ik za&l#EV|kNdS16M&Q3{iRRvrQnNRy#fS_4u_0Fwbs8IxaDB9l2+9s&qVlUY|j2JTG& G00010Pc>Bl delta 1593 zcmV-92FCe|tO1>`0k9i04(C{jSVDK_Zjc2403i^QDKj2_=@e!n=@e#lcnbgl1n2_* z00ig*006yLOK;mo5WeeIEL5PSP|=9fo{YLcYRBy*LC_fR!7zvwIiwa|?J~PdOM>D4 z_Rj2s4_S7SL+gV%oSpZ~H%sL?Q+xyLoXu}U)qu0iZiOq?VCJ(tXBF7eh}H?MNangT z3MEPdpx8ElD&P@U71MRiwrk|CI_ETsaRaP1U@cVMmfN@9QPA@&Zklcb%GqKKvZcdI zt$uQ>Tyxa`b88qxSS1XUPVSeiv*Ao?)v!{E@}8kccM@!NZmkX3dZ#J_d-f-PFhc4F zfBFE%#$?`}oX%&+D=}Ed(LS}2GEjUap(;v$Exjo&^qHq^wm4~xZYZsy(YlHX zm9Vd9go-5Nscz@&alQrasMgCwX(jjgR-))VKDp#(L#NuvDls=&38zWP8D7_-M5>j1 z@9prmwc)YSyFf@`U7%_$D=Yvx(8}@B5vjBjH94&Wm%6c$^46T#_@{Nc-Ey1@a?gbf zYCy7oj@x^DviTagbZeq&z?S0)NN5bF_%Ux#6*nVti!|&)r;)6M;;JNSh4ZI{ia{Dp z&am^^R1o#cPV!Iy*tBjxe@dkl)JtF3nxEm6m^{@C-)*PpwX4GG=)_lfEV}BfP}t&} z@((Np4x4bFZ*dBvg>m%!j5?5)!jv*Hj9zJf7f31#J!2=33Z01VtBU3+FS&`9S0H7K zQg3Mbb1ZGX5vsG%*;*?gW|Ufc{ZX!?evt>4*oc*VPOXcIu^Bm9AYDdGY@~5{+er(N zW6-+&(jlUwd){JgF=KUTX9y{Awg53G=#0*-XjBTC+(^;ez^2FawxSk++KAHV!)*J1 z2^e@_IJSG31lnq05-zAJ>_;|0?WU(LV#VG?nB5S}SgPZP9%t7*&ORlaT^ab&VP{wb z+=qRl-nA`@jV5xy+{J*oj|p>^J?1VG=B^{=K973%Az@Ye0d%)kt7=P~xe{rKx@$>wF8$qjZv`t%0 zop>{w)txH+Riaga6OVg6Tg(^}HB+#2nFZ&BYU~*r%N7fEe$JGTwCNQ}F^1ryuC~C=@%$W{IA_Ng{rDa&k7!NurBGVfp6KlQgc}anP1&zgw zJWW#YH%}(29jS*T@datz5QcBFBPw)by{s1^b$o@KX)#9e(Ne@}6?EfekB@WgqJ&&R zO#?T7T0YKKTqQCb8quuNsb7(|l)Q&LUJ?a5&lb1%|L*RrvE3>oK#}-j>0$Ju^wZO^ zs*K``sd_Tz>)V|e)Z){j!SuI((GQU2r$H2O1s#aLor)Xq3NMQPa>V+}#(zCD9{cFU zG0|tqhAXq+o{?4D@i@>#lEr+Io&kqnQ2o^QJw~Ee9%JK~zoapph}4=8O*a3GOQ3Y= zLj$*iZ{w0Z?_+e4=baN$I1ymmdmI(u8&MR*#!jNp)Nd~tVnmr3?Cn^8?iRsucNYpu zA5_8?L9DPcSYcoh1{C<3mQLhXK6OoflToI2IBa z;pK;e##wSczCdcjs=9 z1pojc5R;KpECcBjW|N^%83Ra9I9COrU?u{#-)-&Gisolgpr r?^GTFqDhkvRayh&O8}E^N*R;iRTz_