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 @@
+
+
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);