diff --git a/data/assets/app_icon_display_settings.png b/data/assets/app_icon_display_settings.png new file mode 100644 index 00000000..b92c3a65 Binary files /dev/null and b/data/assets/app_icon_display_settings.png differ diff --git a/data/assets/app_icon_fallback.png b/data/assets/app_icon_fallback.png new file mode 100644 index 00000000..b37a9039 Binary files /dev/null and b/data/assets/app_icon_fallback.png differ diff --git a/data/assets/app_icon_files.png b/data/assets/app_icon_files.png new file mode 100644 index 00000000..84949bed Binary files /dev/null and b/data/assets/app_icon_files.png differ diff --git a/data/assets/app_icon_settings.png b/data/assets/app_icon_settings.png new file mode 100644 index 00000000..83554ccd Binary files /dev/null and b/data/assets/app_icon_settings.png differ diff --git a/data/assets/app_icon_system_info.png b/data/assets/app_icon_system_info.png new file mode 100644 index 00000000..8f85e639 Binary files /dev/null and b/data/assets/app_icon_system_info.png differ diff --git a/data/assets_sources/Desktop Icons.svg b/data/assets_sources/Desktop Icons.svg new file mode 100644 index 00000000..05afdc5c --- /dev/null +++ b/data/assets_sources/Desktop Icons.svg @@ -0,0 +1,213 @@ + +Android O icon templateVenceslas DUETA collection of keylines and guides used to make adaptive icons for android O2021-02-14Android Icon Adaptive Keylines diff --git a/docs/ideas.md b/docs/ideas.md index 0577a910..eedd8dd7 100644 --- a/docs/ideas.md +++ b/docs/ideas.md @@ -5,9 +5,7 @@ - Show a warning screen if firmware encryption or secure boot are off when saving WiFi credentials. - Show a warning screen when a user plugs in the SD card on a device that only supports mounting at boot. - Try out Waveshare S3 120MHz mode for PSRAM (see "enabling 120M PSRAM is necessary" in [docs](https://www.waveshare.com/wiki/ESP32-S3-Touch-LCD-4.3#Other_Notes)) -- Fix for dark theme: the wifi icons should use the colour of the theme (they remain black when dark theme is set) -- Update Wi-Fi status bar icon based on signal strength -- Auto-detect sdcard removal (with a service?) +- T-Deck has random sdcard SPI crashes due to sharing bus with screen SPI: make it use the LVGL lock for sdcard operations? # Core Ideas - Make a HAL? It would mainly be there to support PC development. It's a lot of effort for supporting what's effectively a dev-only feature. diff --git a/tactility-esp/src/apps/system/wifi_connect/wifi_connect.c b/tactility-esp/src/apps/system/wifi_connect/wifi_connect.c index 876c3db1..b564f30f 100644 --- a/tactility-esp/src/apps/system/wifi_connect/wifi_connect.c +++ b/tactility-esp/src/apps/system/wifi_connect/wifi_connect.c @@ -114,7 +114,7 @@ static void app_stop(App app) { AppManifest wifi_connect_app = { .id = "wifi_connect", .name = "Wi-Fi Connect", - .icon = NULL, + .icon = LV_SYMBOL_WIFI, .type = AppTypeSettings, .on_start = &app_start, .on_stop = &app_stop, diff --git a/tactility-esp/src/apps/system/wifi_manage/wifi_manage.c b/tactility-esp/src/apps/system/wifi_manage/wifi_manage.c index 643406cd..399b9249 100644 --- a/tactility-esp/src/apps/system/wifi_manage/wifi_manage.c +++ b/tactility-esp/src/apps/system/wifi_manage/wifi_manage.c @@ -157,7 +157,7 @@ static void app_stop(App app) { AppManifest wifi_manage_app = { .id = "wifi_manage", .name = "Wi-Fi", - .icon = NULL, + .icon = LV_SYMBOL_WIFI, .type = AppTypeSettings, .on_start = &app_start, .on_stop = &app_stop, diff --git a/tactility/src/apps/desktop/desktop.c b/tactility/src/apps/desktop/desktop.c index 7f4699af..b831f4a2 100644 --- a/tactility/src/apps/desktop/desktop.c +++ b/tactility/src/apps/desktop/desktop.c @@ -1,4 +1,5 @@ #include "app_manifest_registry.h" +#include "assets.h" #include "check.h" #include "lvgl.h" #include "services/loader/loader.h" @@ -14,7 +15,7 @@ static void on_app_pressed(lv_event_t* e) { static void create_app_widget(const AppManifest* manifest, void* parent) { tt_check(parent); lv_obj_t* list = (lv_obj_t*)parent; - const char* icon = manifest->icon ?: LV_SYMBOL_FILE; + const char* icon = manifest->icon ?: TT_ASSETS_APP_ICON_FALLBACK; lv_obj_t* btn = lv_list_add_btn(list, icon, manifest->name); lv_obj_add_event_cb(btn, &on_app_pressed, LV_EVENT_CLICKED, (void*)manifest); } @@ -24,10 +25,10 @@ static void desktop_show(TT_UNUSED App app, TT_UNUSED lv_obj_t* parent) { lv_obj_set_size(list, LV_PCT(100), LV_PCT(100)); lv_obj_center(list); - lv_list_add_text(list, "System"); - tt_app_manifest_registry_for_each_of_type(AppTypeSystem, list, create_app_widget); lv_list_add_text(list, "User"); tt_app_manifest_registry_for_each_of_type(AppTypeUser, list, create_app_widget); + lv_list_add_text(list, "System"); + tt_app_manifest_registry_for_each_of_type(AppTypeSystem, list, create_app_widget); } const AppManifest desktop_app = { diff --git a/tactility/src/apps/settings/display/display.c b/tactility/src/apps/settings/display/display.c index f0981e6c..b8a359b9 100644 --- a/tactility/src/apps/settings/display/display.c +++ b/tactility/src/apps/settings/display/display.c @@ -1,4 +1,5 @@ #include "app.h" +#include "assets.h" #include "lvgl.h" #include "preferences.h" #include "tactility.h" @@ -64,7 +65,7 @@ static void app_hide(App app) { const AppManifest display_app = { .id = "display", .name = "Display", - .icon = NULL, + .icon = TT_ASSETS_APP_ICON_DISPLAY_SETTINGS, .type = AppTypeSettings, .on_start = NULL, .on_stop = NULL, diff --git a/tactility/src/apps/settings/settings.c b/tactility/src/apps/settings/settings.c index 1ec29d16..9c4d153e 100644 --- a/tactility/src/apps/settings/settings.c +++ b/tactility/src/apps/settings/settings.c @@ -1,4 +1,5 @@ #include "app_manifest_registry.h" +#include "assets.h" #include "check.h" #include "lvgl.h" #include "services/loader/loader.h" @@ -15,7 +16,8 @@ static void on_app_pressed(lv_event_t* e) { static void create_app_widget(const AppManifest* manifest, void* parent) { tt_check(parent); lv_obj_t* list = (lv_obj_t*)parent; - lv_obj_t* btn = lv_list_add_btn(list, LV_SYMBOL_FILE, manifest->name); + const char* icon = manifest->icon ?: TT_ASSETS_APP_ICON_FALLBACK; + lv_obj_t* btn = lv_list_add_btn(list, icon, manifest->name); lv_obj_add_event_cb(btn, &on_app_pressed, LV_EVENT_CLICKED, (void*)manifest); } @@ -34,7 +36,7 @@ static void on_show(TT_UNUSED App app, lv_obj_t* parent) { const AppManifest settings_app = { .id = "settings", .name = "Settings", - .icon = LV_SYMBOL_SETTINGS, + .icon = TT_ASSETS_APP_ICON_SETTINGS, .type = AppTypeSystem, .on_start = NULL, .on_stop = NULL, diff --git a/tactility/src/apps/system/files/files.c b/tactility/src/apps/system/files/files.c index 1f3b1337..009e4980 100644 --- a/tactility/src/apps/system/files/files.c +++ b/tactility/src/apps/system/files/files.c @@ -1,13 +1,14 @@ #include "files_data.h" #include "app.h" +#include "assets.h" #include "check.h" #include "file_utils.h" #include "lvgl.h" #include "services/loader/loader.h" +#include "string_utils.h" #include "ui/toolbar.h" #include -#include #define TAG "files_app" @@ -99,7 +100,7 @@ static void create_file_widget(FilesData* files_data, lv_obj_t* parent, struct d } else if (dir_entry->d_type == TT_DT_LNK) { symbol = LV_SYMBOL_LOOP; } else { - symbol = LV_SYMBOL_SETTINGS; + symbol = LV_SYMBOL_FILE; } lv_obj_t* button = lv_list_add_btn(list, symbol, dir_entry->d_name); lv_obj_set_user_data(button, files_data); @@ -149,7 +150,7 @@ static void on_stop(App app) { const AppManifest files_app = { .id = "files", .name = "Files", - .icon = NULL, + .icon = TT_ASSETS_APP_ICON_FILES, .type = AppTypeSystem, .on_start = &on_start, .on_stop = &on_stop, diff --git a/tactility/src/apps/system/system_info/system_info.c b/tactility/src/apps/system/system_info/system_info.c index a857b400..38e3d43a 100644 --- a/tactility/src/apps/system/system_info/system_info.c +++ b/tactility/src/apps/system/system_info/system_info.c @@ -1,4 +1,5 @@ #include "app.h" +#include "assets.h" #include "lvgl.h" #include "ui/toolbar.h" @@ -47,7 +48,7 @@ static void app_show(App app, lv_obj_t* parent) { AppManifest system_info_app = { .id = "systeminfo", .name = "System Info", - .icon = NULL, + .icon = TT_ASSETS_APP_ICON_SYSTEM_INFO, .type = AppTypeSystem, .on_start = NULL, .on_stop = NULL, diff --git a/tactility/src/assets.h b/tactility/src/assets.h index 2d7c9605..f12fc734 100644 --- a/tactility/src/assets.h +++ b/tactility/src/assets.h @@ -3,9 +3,18 @@ #define TT_ASSET_FOLDER "A:/assets/" #define TT_ASSET(file) TT_ASSET_FOLDER file +// App icons +#define TT_ASSETS_APP_ICON_FALLBACK TT_ASSET("app_icon_fallback.png") +#define TT_ASSETS_APP_ICON_FILES TT_ASSET("app_icon_files.png") +#define TT_ASSETS_APP_ICON_DISPLAY_SETTINGS TT_ASSET("app_icon_display_settings.png") +#define TT_ASSETS_APP_ICON_SETTINGS TT_ASSET("app_icon_settings.png") +#define TT_ASSETS_APP_ICON_SYSTEM_INFO TT_ASSET("app_icon_system_info.png") + +// SD card status #define TT_ASSETS_ICON_SDCARD TT_ASSET("sdcard.png") #define TT_ASSETS_ICON_SDCARD_ALERT TT_ASSET("sdcard_alert.png") +// Wifi status #define TT_ASSETS_ICON_WIFI_CONNECTION_ISSUE TT_ASSET("wifi_connection_issue.png") #define TT_ASSETS_ICON_WIFI_FIND TT_ASSET("wifi_find.png") #define TT_ASSETS_ICON_WIFI_OFF TT_ASSET("wifi_off.png") diff --git a/tactility/src/ui/statusbar.c b/tactility/src/ui/statusbar.c index 1506dda8..d7fcfcc9 100644 --- a/tactility/src/ui/statusbar.c +++ b/tactility/src/ui/statusbar.c @@ -116,7 +116,6 @@ lv_obj_t* tt_statusbar_create(lv_obj_t* parent) { lv_obj_set_width(obj, LV_PCT(100)); lv_obj_set_height(obj, STATUSBAR_HEIGHT); tt_lv_obj_set_style_no_padding(obj); - tt_lv_obj_set_style_bg_blacken(obj); lv_obj_center(obj); lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_ROW);