From 74a53b27353b1f98e2e21fbdf6a01b4bb4555b53 Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Tue, 10 Dec 2024 19:40:11 +0100 Subject: [PATCH] Refactored desktop (#118) --- Data/assets/desktop_icon_apps.png | Bin 0 -> 564 bytes Data/assets/desktop_icon_files.png | Bin 0 -> 724 bytes Data/assets/desktop_icon_settings.png | Bin 0 -> 2690 bytes Documentation/ideas.md | 2 + Documentation/pics/app-lifecycle.png~ | Bin 59865 -> 0 bytes Documentation/pics/screenshot-AppList.png | Bin 0 -> 4395 bytes Documentation/pics/screenshot-Desktop.png | Bin 3948 -> 4004 bytes Documentation/pics/screenshot-Gpio.png | Bin 3414 -> 0 bytes README.md | 9 ++- Tactility/Source/Tactility.cpp | 2 + Tactility/Source/app/applist/AppList.cpp | 64 +++++++++++++++++ Tactility/Source/app/desktop/Desktop.cpp | 78 +++++++++++++-------- Tactility/Source/app/files/Files.cpp | 2 +- Tactility/Source/app/settings/Settings.cpp | 2 +- 14 files changed, 122 insertions(+), 37 deletions(-) create mode 100644 Data/assets/desktop_icon_apps.png create mode 100644 Data/assets/desktop_icon_files.png create mode 100644 Data/assets/desktop_icon_settings.png delete mode 100644 Documentation/pics/app-lifecycle.png~ create mode 100644 Documentation/pics/screenshot-AppList.png delete mode 100644 Documentation/pics/screenshot-Gpio.png create mode 100644 Tactility/Source/app/applist/AppList.cpp diff --git a/Data/assets/desktop_icon_apps.png b/Data/assets/desktop_icon_apps.png new file mode 100644 index 0000000000000000000000000000000000000000..9381aaa4404943d96a827d38dd66a41498224af7 GIT binary patch literal 564 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 literal 0 HcmV?d00001 diff --git a/Documentation/ideas.md b/Documentation/ideas.md index 35c75925..49f7b27a 100644 --- a/Documentation/ideas.md +++ b/Documentation/ideas.md @@ -1,4 +1,6 @@ # TODOs +- Crash logs stored on sdcard or elsewhere: perhaps show crash screen after recovering from crash (with QR code? https://github.com/ricmoo/QRCode) +- Logging - AppContext's onResult should pass the app id (or launch request id!) that was started, so we can differentiate between multiple types of apps being launched - Loader: Use Timer instead of Thread, and move API to `tt::app::` - Gpio: Use Timer instead of Thread diff --git a/Documentation/pics/app-lifecycle.png~ b/Documentation/pics/app-lifecycle.png~ deleted file mode 100644 index 874e863cf8838fb5d571340093165e0718936905..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59865 zcmce;c{r8pA1|y~k|dQ%q)bgnG7qItGNckRWlotg&vs=9$(AG}A%r4?%$XBfMUrGn zNHS*%Yn{)n-|xN7^}g46uXCM0&i-fbjkVUZp69;5-_P{D1J9@_t!LQIKu1Tn{?y46 zXX)sc`OwiVAEIB4pKQ?$$i%-^I>?_oPmg~*=}m9p|F=0RXgi*>HFtC|vNxl%u(7o^ zJLq6yZ)RrWaM{*zbVZpg9o;UvQzwp{cYXM)!|gWvfY$)cWy*`wVdkq?!1u9xCxatT z1l=`0?LX|qqJ3wBsTlnhwHNF5tmF1sIZs(FK|T2oH$D3S(PJ#!ip8b9yY3!1&1!ab zceRKA!{CSWrG*1OGD_2b&IEYt*Ka(f@x)yG`|p`m^e+Nh7Nt9md;d%wo&0z%$cSyV zJUv%XkXeq@E??$vAHv7B%HP_}-6QDBtZ=fz5Wo7@I!Ee76l3MlW)a59*Fubr`brwC zlXB@TSE#mJzMqwYL>DIKq|?%bj~uCf`<5XsEg@~6K;*j2)?ms&Vs`f3>}+8x(U^yH zzRbGH8h$?eB6e>HJ|rpmwxVKrmiF!HY6X_Sm35|fPwc+lJXkd_*)#6Szjtr^%a`}= z-evhYG?bc=QPVqqDeGje3jMh0{-Ci|r&tx<%7z9;F`KX5a@1ZqHa50PMn=ohTNpfD zdH!uQ&uX*!JnVd6%eumhUOVy2mX%!TkoNq@*Z!b0w6xG%6bdtYyP`T}=nA>3C zyM+bm6t&oIUvjU0Ep`iUYt#8QF5YJK>A=8OgUNjD1N=cZjM%gfY{4u0`uapfL|#}> zIPS1ZRAlHEeP=jIKVJ1EyRx;ybfhsxtiW-QWwdl&Am66L*v97F!|#i)S~p*guEA{? zcYWyRx9a}=`zMpmK23Xz7mvA@*t0OpOJB>gnjM&QyKv!xxYJKoxy3(ZH$(QDJc zbhd2WdMc&)s^aer^QCQ8_q7iw`uNDvW@uEy!lI(q)K+==@gG)oVKm%+85x;}QZ9FT zdW`PYeNSQXeqGFo&pj+AR_nKJ>(h*kYTC>RAI_}=yUPmXV4=pVU`ywv3iuy7e@3Bq|E6W%%&C#*>`l`Gw z$3l#Ib{%8ouJAg$#XnAZ0$XEaV`n{OqZT&HOK;3Of7UEVhnJ6U+m0P3=H~uZq8=1Y znYar^mOs9I+l>!XQBiqOSXjtqy_T!Wz5Q%YoC@#Y@UR)~^D~OANTtvj&4?H=+w2!F zUi1u;KlyyNCo^rIzP>(QX!YYM&3VrAQD2`~hGE&ehK2_Jd_G_1A*0iNKD^;Zj*j;( ziv(p1g+5W$Z#|WC_V(@D%)!+hr($rkEUi<=D1G(^4jg!#_H&Q5SWKg^l+^wsK3r9s zOz>)>75M=L!86TyF)F-uefFU*^|^dqwRL$H)@>?|PL|2OOBuGdRV>0Ay~tCUUB~4+ z`yKz@nrG}>pcm?y=@ndkqqeua$4uuHPxjt3iXYk2yZ_Kl9zjb1_IQyOT8+;Tr?8MpeW*0ABjkaO=djg>)%Ox-1|oPD7(#=!MR zTUT~reI?m+Qd0GA-q4qnloZc&dfdKqC%d@#cFUC`akVk^eJ?IP|7<0?RM1TF+ws7A zUSD6qE^hZvO^sq&diq*FdExT?zOKgBb7N&4KY#AS<>-~TN7U7wBE^84*U1ud

JYJ8hFZ;t7ZLFYJ=t*1cxi*FgTJS*2)A1+^h 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≠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 literal 0 HcmV?d00001 diff --git a/Documentation/pics/screenshot-Desktop.png b/Documentation/pics/screenshot-Desktop.png index a1c2fd543221606094f340ffc07e150f67e88b42..d46e3dc18e70b54309d4c3ee9f9c981ccffc807a 100644 GIT binary patch literal 4004 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 delta 3727 zcmZuycQo8v*Jfe{qeM5v=%Sm%D8a?(S07i8U_?k!f~Zk`CTbFr(R;}aq8maY>LjB~ zLJ~K+Xwivbv=9cLn|H1EyWhIsS^JN@_S)yHy`KF%&nXdF7sQEyKzu0@bHM8A>eA8@ zl}h#Y_BJ#$w6?a!U@#*iBP0^3sHjLpL_}U*J}fM(y1KfntE;=a`}Fj5baXT;D+`H4 zW@Kcjsj2Dc=-j$>%gM><&Ye4(o0~);F)=X_fk2d&mTGBfnVXwuW@a`vHfCpM-@bi2 zC@2Vv#a_RD-ObG{CnrZ2(AC}FKQc2bb#udyy-#i}R^BF0Y)nt*s;In+k3Tv(nwi<8 zp^2uak7`=*QU0pN{O%4*dv9SS%!&_P=dwb`1HmARhlph}-9aE{p)zuqQ zQ$0OB6bhxhyu7uwRZmZEetv#$Z*OvPa%*b~g+d)4A3u8ZC@Bd@T3K1q(9jqd7*JML z*3{HAF)>+OTwGXKFg7;U*47>$A1^2<2nh*EPEI~JIB0Hej);gTD=TYgXxQD|jZqL# zr=ekCHP+X$38h`ncv$qcYme}9+LdeeHG%7ot5U{&AQqO=rq>={8_*Li#`$`$9u_S) zJlv|SO_B5YJkYueXstNk%7YxZYakmu#=SN_-=wRmFk@jc1X`l8V^%?1p#V(g1za& zu2{@Q#us-XI9(-DPQ@~!dUs2*$YkzCAyt2M6)9?VTnhROL@D;YuvvEIDs%*Xyy5&@ zq;<4nJ;W4uU)aT>&dMe{zyA)J6r)bwy0r6WDei0 z`~=ovqtn4TUTY40D16Uf@QG+sO%l-Aw>(l;Zm}Ze?{Pf2I5Zo_|K>iq zVJ-a$e^#BdL{rHlL<2)V?$SMIkVqDZh0vWo1*(zdM;_9F<|{6EbEc7V+he9Ao3oxnlIj^ zB83OWj8VD3GW=6kG66NncHUgF#O^jf+DGR_&)dgw3mjuhFW?%dSBW_9D1tiJ)MAt|x>#Ha&A}zb2u&C7Bse)uF*}_h+$OxhJN9+@J$}l% zAWVmZz*pULx*sz0dBS2_m3}pl_qSoYrCBz*L!~3wcs3U-x=-kt{E4QpsiYt9;0?Hi z4L_sE@HFa{d;wt#>DPiP(w*spCh0Q7JQMBMkI35&h9&oS5590wbZ!H#ftRG*B$N8I zTu;%(j48`{>1NE)#{-1MG^jb28UtRR~i!If*kWqK# zewk1uPivQz>}}usekj)jvjz~zr<3$ z!^cuU9`a0Px#Kfj)$;VL4dTgR(_G7MQ-!zlQ8qRjt*oxiyIOT8pqJ%Vqf>m(D=$v< z%B-MMlGQuzfnA>S#k!>2%tY}RjtvG!&jLoJu4^g@Ft1-7_n1ay%!wFiP?>QRF4t`( zV*-U?VusW$8m1|KeFxlhwr{UKG7`iJ6iBb3n&dxZGsdl!(X&_PP+tDX zpmsGIqHnqm<4(Zh2zr(oYkTX}gqLAVoct{J)e8FwYPFY6m94weptpUJ3N&9D*LVQ} zQ|HxV4u+<(%3_i?HQ-4yopyxTeI@ARKC{`ZJ)>fe0BA25u(mGn-8y6JNc4T9pq6g; zN)*%kkLD2IPeM4|FAe+)^fTU%ehTDkJ&NcHPVFoe?Ia*)?lfJUDZD;FuY*z3f=(J0 zqeI9VQ?ba5K*9^bUTzky=1$c2iSbO#i!9cIK(-Qzb?cSzb-n}?9I)Tx;O%PzB}}fB zeG|l5z_KDK)r$Iy2hE!#FoQTjdv?Eu#-?sV%MS+XhJUdH_n`P_GEFP^1a_cW`EUnM zToP(7K(3EP0O~PpdQFZ=`dgxMyaqza7U5qnH^*`L?LKJDQAe8sVz4=@Ebtz5g}8pC zv`>3u?YKaDW#H;>`0Z(ZKA{m9`Q-dHLqrQ-i;{hv^<^8AkDJM)NjCTRLU z>%Xial?uA+6NL0`uTbB4fOEy%4VNSaTLvwGMLG$!g+8m!f4{HC4%?$Wyv!7Vi3Ql7 zu3(}k>erMN($(lJF7dC%@X@i-UCUeU)*3s9y-t8w?};*r`cat$7z4{gv8Uok3h@nz zkaL&q!@W}wZmRQ=>?^wc&jSgJwsiqm64Ne5Nt@jP^3-S*MN?`22E}Sw>~j(1j9@m1 z1@)?x$Ht+em}1OhQF7n>JsEF=00ueQsc;8{Ea&NWrZ>(b!B-=BMLfB1t)EFZ3ftQ58$Vt9pPXd# z51;%mMgnp;VI)bKZJhU)fBvci{}%Nbzw+vm(pV3M8vbM}pWn6{qQ|%2=u(!B{j_y* zN<#P@4Z&W&1Vyg(vXfsL3iS*73G;|W@`qyK6)x^NbU%9Yg88@LBvn_M+C}tMfFm;- zY+b)zk4R`}i)yg)Nh6!*S;7t0H3pUuV`YG)=CBKo2&G1dI&k>cQ($|r=$J}2vh37U zz;Q+|>f*wPV1O-$Elg|hwvmfKgQ}0+qCf2FIEisyv5466j$}*rUl zLOM^0LNj5@rR^ZS!EMa?6pd~gFOpqC6Sf_#HdmMab3sXT&bEkrFHaC2xsyQwicY+b z7wdqdBkhyh?MJmuMwp_SNZsN^2y1CQH?f$!Ctd3OgiOgC^Ce0_RP?c5n`})T(+OGA z7kbV+7jUfv0Gtx}7+o3Mu#$g!3gHSjNrE#AxvnnLFGg`a73?Y04tp4D9KOzB{73~7 z;_yze)w7xp#7Oy?%e(2%4FfjXv^Wlgocf@Fdi>#qMq`F_NCp9sB)E^oy1|eIf<4Pv zCSefVpw_`V&{+8t`V-s{viu21*g7oG2x$O`v1M0t#}O1pus8ES%2Oq(H-^deMoN0Z zMS4G*BCml(t^Z>m8`EuJS=v^!n%gH+t(!ZN|5Xm~zrSkgIEYa(CLfe??f=u>ds)ij zd96^LpxQX`I>JZaQJVrUk@q5$T#v}mli=6kN7RJzjngLk;2NJDG)>gEIOoUCJWwYX z+2C%!Z+KH)gc?3C24U9ypi}%SzdK&&FIT*xZdMa8H4)^rpW@mqrdD6zBf@%}=lw3) z#vt>0LBhR&5i0oE>cGS^EFo?Ew~|K`^5FA3n%l4vw_|jwoqKjRYYlvaDZk^na^aiB zn53<2`Y<0a=h@D8_p!Wx%z8ux2M0V%3+G)lPUIbo)rl8UL@hm+`9>g$vkZ+c1u)Hb zApXDrZa37|RltXzxJy50(3ue=7X#=Xi?UdM6E9B-tHma)!-Qm*f1$9B0&aden?Oil8zLXG)lK%jS5?#oe)X6QHrwS zEU%7n|9iCQj(5}br?=JHJD;YFz8eyOMLijOc4Ui`}(r zI1R1eKuOKzgB6+5vXS0IP;BDTd@5@4&)h^xSkL?)3kn0pv7hU-wB^>@cY9nb_kb%H z!f!cYVNkQC8|Sl;LRsKLwHUd~H;Lfc)Fo9EpfE<>8}zd zQy281`Mk1YbcSqSU%F&H&y?Ny))stO;cp#<>Brl5xDcAoi9OZEib_3|*Qg*xI zi)W#X1@sh=k$GhI_z516MwfDA0hwsv6GsqK6Tn#y?vJZjyr0GGrV|wSk|148wr#XX zd*kmi*zm}?Ir=_BW0*#VJ({y)Y+#{Zs|&(B_#Z0y`P2Xa diff --git a/Documentation/pics/screenshot-Gpio.png b/Documentation/pics/screenshot-Gpio.png deleted file mode 100644 index 0e6084cfafa57320f139b084f55463ff9c2bf9b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3414 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 system_services = { namespace app { namespace alertdialog { extern const AppManifest manifest; } + namespace applist { extern const AppManifest manifest; } namespace boot { extern const AppManifest manifest; } namespace desktop { extern const AppManifest manifest; } namespace files { extern const AppManifest manifest; } @@ -64,6 +65,7 @@ extern const app::AppManifest screenshot_app; static const std::vector system_apps = { &app::alertdialog::manifest, + &app::applist::manifest, &app::boot::manifest, &app::desktop::manifest, &app::display::manifest, diff --git a/Tactility/Source/app/applist/AppList.cpp b/Tactility/Source/app/applist/AppList.cpp new file mode 100644 index 00000000..b569cc58 --- /dev/null +++ b/Tactility/Source/app/applist/AppList.cpp @@ -0,0 +1,64 @@ +#include "app/ManifestRegistry.h" +#include "Assets.h" +#include "Check.h" +#include "lvgl.h" +#include +#include "service/loader/Loader.h" +#include "lvgl/Toolbar.h" + +namespace tt::app::applist { + +static void onAppPressed(lv_event_t* e) { + lv_event_code_t code = lv_event_get_code(e); + if (code == LV_EVENT_CLICKED) { + const auto* manifest = static_cast(lv_event_get_user_data(e)); + service::loader::startApp(manifest->id, false); + } +} + +static void createAppWidget(const AppManifest* manifest, void* parent) { + tt_check(parent); + auto* list = static_cast(parent); + const void* icon = !manifest->icon.empty() ? manifest->icon.c_str() : TT_ASSETS_APP_ICON_FALLBACK; + lv_obj_t* btn = lv_list_add_button(list, icon, manifest->name.c_str()); + lv_obj_add_event_cb(btn, &onAppPressed, LV_EVENT_CLICKED, (void*)manifest); +} + +static void onShow(TT_UNUSED AppContext& app, lv_obj_t* parent) { + auto* toolbar = lvgl::toolbar_create(parent, app); + lv_obj_align(toolbar, LV_ALIGN_TOP_MID, 0, 0); + + lv_obj_t* list = lv_list_create(parent); + lv_obj_set_width(list, LV_PCT(100)); + lv_obj_align_to(list, toolbar, LV_ALIGN_OUT_BOTTOM_MID, 0, 0); + + auto toolbar_height = lv_obj_get_height(toolbar); + auto parent_content_height = lv_obj_get_content_height(parent); + lv_obj_set_height(list, parent_content_height - toolbar_height); + + auto manifests = getApps(); + std::sort(manifests.begin(), manifests.end(), SortAppManifestByName); + + lv_list_add_text(list, "User"); + for (const auto& manifest: manifests) { + if (manifest->type == TypeUser) { + createAppWidget(manifest, list); + } + } + + lv_list_add_text(list, "System"); + for (const auto& manifest: manifests) { + if (manifest->type == TypeSystem) { + createAppWidget(manifest, list); + } + } +} + +extern const AppManifest manifest = { + .id = "AppList", + .name = "Apps", + .type = TypeHidden, + .onShow = onShow, +}; + +} // namespace diff --git a/Tactility/Source/app/desktop/Desktop.cpp b/Tactility/Source/app/desktop/Desktop.cpp index 2291c43a..bd901167 100644 --- a/Tactility/Source/app/desktop/Desktop.cpp +++ b/Tactility/Source/app/desktop/Desktop.cpp @@ -1,49 +1,67 @@ #include "app/ManifestRegistry.h" -#include "Assets.h" #include "Check.h" #include "lvgl.h" -#include #include "service/loader/Loader.h" namespace tt::app::desktop { -static void onAppPressed(lv_event_t* e) { - lv_event_code_t code = lv_event_get_code(e); - if (code == LV_EVENT_CLICKED) { - const auto* manifest = static_cast(lv_event_get_user_data(e)); - service::loader::startApp(manifest->id, false); - } +static void onAppPressed(TT_UNUSED lv_event_t* e) { + auto* appId = (const char*)lv_event_get_user_data(e); + service::loader::startApp(appId, false); } -static void createAppWidget(const AppManifest* manifest, void* parent) { - tt_check(parent); - auto* list = static_cast(parent); - const void* icon = !manifest->icon.empty() ? manifest->icon.c_str() : TT_ASSETS_APP_ICON_FALLBACK; - lv_obj_t* btn = lv_list_add_button(list, icon, manifest->name.c_str()); - lv_obj_add_event_cb(btn, &onAppPressed, LV_EVENT_CLICKED, (void*)manifest); +static lv_obj_t* createAppButton(lv_obj_t* parent, const char* title, const char* imageFile, const char* appId, int32_t buttonPaddingLeft) { + auto* wrapper = lv_obj_create(parent); + lv_obj_set_size(wrapper, LV_SIZE_CONTENT, LV_SIZE_CONTENT); + lv_obj_set_style_pad_ver(wrapper, 0, 0); + lv_obj_set_style_pad_left(wrapper, buttonPaddingLeft, 0); + lv_obj_set_style_pad_right(wrapper, 0, 0); + lv_obj_set_style_border_width(wrapper, 0, 0); + + auto* apps_button = lv_button_create(wrapper); + lv_obj_set_style_pad_hor(apps_button, 0, 0); + lv_obj_set_style_pad_top(apps_button, 0, 0); + lv_obj_set_style_pad_bottom(apps_button, 16, 0); + lv_obj_set_style_shadow_width(apps_button, 0, 0); + lv_obj_set_style_border_width(apps_button, 0, 0); + lv_obj_set_style_bg_color(apps_button, lv_color_white(), 0); + + auto* button_image = lv_image_create(apps_button); + lv_image_set_src(button_image, imageFile); + lv_obj_add_event_cb(apps_button, onAppPressed, LV_EVENT_CLICKED, (void*)appId); + lv_obj_set_style_image_recolor(button_image, lv_theme_get_color_primary(parent), 0); + lv_obj_set_style_image_recolor_opa(button_image, LV_OPA_COVER, 0); + + auto* label = lv_label_create(wrapper); + lv_label_set_text(label, title); + lv_obj_align(label, LV_ALIGN_BOTTOM_MID, 0, 0); + + return wrapper; } static void onShow(TT_UNUSED AppContext& app, lv_obj_t* parent) { - lv_obj_t* list = lv_list_create(parent); - lv_obj_set_size(list, LV_PCT(100), LV_PCT(100)); - lv_obj_center(list); + auto* wrapper = lv_obj_create(parent); - auto manifests = getApps(); - std::sort(manifests.begin(), manifests.end(), SortAppManifestByName); + lv_obj_align(wrapper, LV_ALIGN_CENTER, 0, 0); + lv_obj_set_style_pad_all(wrapper, 0, 0); + lv_obj_set_size(wrapper, LV_SIZE_CONTENT, LV_SIZE_CONTENT); + lv_obj_set_style_border_width(wrapper, 0, 0); + lv_obj_set_flex_grow(wrapper, 1); - lv_list_add_text(list, "User"); - for (const auto& manifest: manifests) { - if (manifest->type == TypeUser) { - createAppWidget(manifest, list); - } + auto* display = lv_obj_get_display(parent); + auto orientation = lv_display_get_rotation(display); + if (orientation == LV_DISPLAY_ROTATION_0 || orientation == LV_DISPLAY_ROTATION_180) { + lv_obj_set_flex_flow(wrapper, LV_FLEX_FLOW_ROW); + } else { + lv_obj_set_flex_flow(wrapper, LV_FLEX_FLOW_COLUMN); } - lv_list_add_text(list, "System"); - for (const auto& manifest: manifests) { - if (manifest->type == TypeSystem) { - createAppWidget(manifest, list); - } - } + int32_t available_width = lv_display_get_horizontal_resolution(display) - (3 * 80); + int32_t padding = TT_MIN(available_width / 4, 64); + + createAppButton(wrapper, "Apps", "A:/assets/desktop_icon_apps.png", "AppList", 0); + createAppButton(wrapper, "Files", "A:/assets/desktop_icon_files.png", "Files", padding); + createAppButton(wrapper, "Settings", "A:/assets/desktop_icon_settings.png", "Settings", padding); } extern const AppManifest manifest = { diff --git a/Tactility/Source/app/files/Files.cpp b/Tactility/Source/app/files/Files.cpp index 6e0e3447..97dfb87d 100644 --- a/Tactility/Source/app/files/Files.cpp +++ b/Tactility/Source/app/files/Files.cpp @@ -256,7 +256,7 @@ extern const AppManifest manifest = { .id = "Files", .name = "Files", .icon = TT_ASSETS_APP_ICON_FILES, - .type = TypeSystem, + .type = TypeHidden, .onStart = onStart, .onShow = onShow, }; diff --git a/Tactility/Source/app/settings/Settings.cpp b/Tactility/Source/app/settings/Settings.cpp index 56ea531e..19a6fac3 100644 --- a/Tactility/Source/app/settings/Settings.cpp +++ b/Tactility/Source/app/settings/Settings.cpp @@ -46,7 +46,7 @@ extern const AppManifest manifest = { .id = "Settings", .name = "Settings", .icon = TT_ASSETS_APP_ICON_SETTINGS, - .type = TypeSystem, + .type = TypeHidden, .onShow = onShow, };