Skip to content

UX improvements - #686

Merged
KenVanHoeylandt merged 4 commits into
mainfrom
ux-improvements
Oct 10, 2026
Merged

KenVanHoeylandt merged 4 commits into
mainfrom
ux-improvements

Conversation

@KenVanHoeylandt

@KenVanHoeylandt KenVanHoeylandt commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor
  • Introduce "side" mode for system bar, versus classic statusbar on top with launcher bar below
  • Automatic system bar mode detection with override by Kconfig/device.properties and secondary override by user via Appereance settings app
  • Open a quick-settings menu from the status bar for available Wi-Fi, Bluetooth, GPS, and power controls.
  • Apps can display overlays with backdrop or Escape-key dismissal.
  • Added focus-container support and improved keyboard navigation, including Fn+Enter on Cardputer devices.
  • Power-off controls are available on supported device cards.
  • Updated status-bar layouts, simulator display dimensions, and toolbar navigation styling.
  • I²C scanning now supports selecting individual buses to rescan.
  • SD-card mount status is no longer shown in the status bar.

@coderabbitai

coderabbitai Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

📝 Walkthrough
📝 Walkthrough
📝 Walkthrough

Walkthrough

The change adds configurable split and side system-bar layouts, with settings for device capabilities and screen orientation. The status bar can open a quick-settings overlay with available device controls. LVGL adds keyboard-group and focus-container support for these interfaces. The launcher and Appearance settings screen integrate the layouts. Other updates change repository guidance, device configuration, and application behavior.





Priority: ➖ Normal

Merge Risk: 🔵 Low · up to 12758

If saving the system-bar settings fails, the Appearance screen can show a selection that was not applied. This is a minor issue that is easy to fix and does not block merge.

Pre-merge checks | Passed 3 | Failed 1 | Inconclusive 1

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 19.38% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 160 functions across 38 files. (7 skipped… Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check Inconclusive The title relates to the changes, which include multiple user-experience updates, but it is too broad to identify the primary changes. Use a more specific title that names the main change, such as system-bar layout and overlay navigation improvements.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.

Full details: Docstring Coverage

Explanation

Docstring coverage is 19.38% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 160 functions across 38 files. (7 skipped: 7 unsupported.)


  • Fix all pre-merge checks with AI
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR








🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR



  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
Tactility/Source/lvgl/SystemBars.cpp (1)

145-154: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Avoid reading the settings file on every resolution change.

systemBarsRefresh() calls loadOrGetDefault() on each LV_EVENT_RESOLUTION_CHANGED. That call reads the file system while the code holds the LVGL lock. On SD-card devices, a slow read blocks rendering. Cache the settings in state. Reload them only after AppearanceSettings saves new settings, for example by passing the new settings to the refresh call.

Tactility/Source/app/appearancesettings/AppearanceSettings.cpp (1)

597-612: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Null the system-bar chip pointers in destroyWidgets().

destroyWidgets() (Lines 770-795) does not reset the new system-bar pointers. If both orientations are fixed, createSystemBarsCard returns early. In that case systemBarsAutoChip and systemBarsCustomChip keep their old values. The current code paths do not dereference these pointers after the window is rebuilt. Still, reset them with the other pointers so the "Valid while the window is shown" rule holds.


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b42e6197-d496-4fb0-b9f3-57613573bc3c
📥 Commits

Reviewing files that changed from the base of the PR and between cb4ce52 and e5c3e86.

⛔ Files ignored due to path filters (1)
  • Data/system/fonts/MaterialSymbolsRounded.ttf is excluded by !**/*.ttf
📒 Files selected for processing (57)
  • .claude/rules/lvgl.md
  • .gitignore
  • .gitmodules
  • Buildscripts/release-sdk-modules.txt
  • Data/system/fonts/MaterialSymbolsRounded.codepoints
  • Devices/lilygo-tlora-pager/device.properties
  • Devices/m5stack-cardputer-adv/device.properties
  • Devices/m5stack-cardputer/device.properties
  • Devices/m5stack-stickc-plus2/device.properties
  • Devices/m5stack-sticks3/device.properties
  • Devices/simulator/Source/module.cpp
  • Devices/waveshare-esp32-s3-geek/device.properties
  • Devices/waveshare-s3-lcd-13/device.properties
  • Devices/waveshare-s3-touch-lcd-128/device.properties
  • Devices/waveshare-s3-touch-lcd-147/device.properties
  • Documentation/ideas.md
  • Drivers/m5stack-module/source/cardputer_keyboard.cpp
  • Modules/lvgl-module/generate-icons.py
  • Modules/lvgl-module/include/lvgl/devices/keyboard.h
  • Modules/lvgl-module/include/lvgl/icons/names.h
  • Modules/lvgl-module/include/lvgl/icons/shared.h
  • Modules/lvgl-module/include/lvgl/widgets/focus_container.h
  • Modules/lvgl-module/lss
  • Modules/lvgl-module/source/devices/keyboard.cpp
  • Modules/lvgl-module/source/grid_navigation.cpp
  • Modules/lvgl-module/source/icon_names.c
  • Modules/lvgl-module/source/symbols.c
  • Modules/lvgl-module/source/themes/lv_theme_material.c
  • Modules/lvgl-module/source/themes/lv_theme_material_mono.c
  • Modules/lvgl-module/source/widgets/focus_container.cpp
  • Modules/lvgl-module/themes/material.lss
  • Modules/lvgl-module/themes/material_mono.lss
  • Modules/lvgl-window-manager-module/include/lvgl_window_manager/window_manager.h
  • Modules/lvgl-window-manager-module/source/module.cpp
  • Modules/lvgl-window-manager-module/source/window_manager.cpp
  • Tactility/Include/Tactility/lvgl/Statusbar.h
  • Tactility/Include/Tactility/settings/LauncherSettings.h
  • Tactility/Kconfig
  • Tactility/Private/Tactility/app/TileGrid.h
  • Tactility/Private/Tactility/lvgl/SystemBars.h
  • Tactility/Private/Tactility/lvgl/SystemMenu.h
  • Tactility/Source/app/TileGrid.cpp
  • Tactility/Source/app/appearancesettings/AppearanceSettings.cpp
  • Tactility/Source/app/apppackagelist/AppPackageList.cpp
  • Tactility/Source/app/launcher/Launcher.cpp
  • Tactility/Source/app/power/Power.cpp
  • Tactility/Source/app/terminal/main.cpp
  • Tactility/Source/lvgl/Lvgl.cpp
  • Tactility/Source/lvgl/Statusbar.cpp
  • Tactility/Source/lvgl/SystemBars.cpp
  • Tactility/Source/lvgl/SystemMenu.cpp
  • Tactility/Source/service/memorychecker/MemoryCheckerService.cpp
  • Tactility/Source/service/statusbar/Statusbar.cpp
  • Tactility/Source/service/webserver/WebServerService.cpp
  • Tactility/Source/settings/LauncherSettings.cpp
  • Tactility/Tests/Source/SystemBarsLayoutTest.cpp
  • device.py
💤 Files with no reviewable changes (3)
  • Tactility/Source/service/memorychecker/MemoryCheckerService.cpp
  • Tactility/Source/service/webserver/WebServerService.cpp
  • Devices/lilygo-tlora-pager/device.properties

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.

Comment thread Tactility/Source/app/TileGrid.cpp

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to GitHub limitations.

⚠️ Outside diff range comments (1)

🟡 Minor · Restore the stored selection after a failed save. · AppearanceSettings.cpp:593-597

Tactility/Source/app/appearancesettings/AppearanceSettings.cpp:593-597
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Restore the stored selection after a failed save.

save can return false before writing the settings file. The handler still marks the attempted chips as selected, while systemBarsRefresh() reloads the stored settings. The controls and system bars can therefore show different selections.

🐛 Suggested fix
    if (!settings::launcher::save(settings)) {
        LOG_E(TAG, "Failed to save system bars settings");
+       settings = settings::launcher::loadOrGetDefault();
    }
    updateSystemBarsWidgets(ctx, settings);
    lvgl::systemBarsRefresh();

ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3a73fbcc-d5af-497b-96c4-3c28892b6c52
📥 Commits

Reviewing files that changed from the base of the PR and between e5c3e86 and 1275891.

📒 Files selected for processing (16)
  • .claude/rules/lvgl.md
  • Devices/cl32-v02-v03/cl32-v02-v03.dts
  • Devices/cl32-v02-v03/device.properties
  • Devices/cl32-v04/cl32-v04.dts
  • Devices/cl32-v04/device.properties
  • Devices/guition-jc1060p470ciwy/guition,jc1060p470ciwy.dts
  • Devices/m5stack-tab5/m5stack,tab5.dts
  • Modules/lvgl-module/source/grid_navigation.cpp
  • Modules/lvgl-module/source/themes/lv_theme_material.c
  • Modules/lvgl-module/source/themes/lv_theme_material_mono.c
  • Modules/lvgl-module/source/widgets/sliderbox.cpp
  • Modules/lvgl-module/themes/material.lss
  • Modules/lvgl-module/themes/material_mono.lss
  • Tactility/Source/app/TileGrid.cpp
  • Tactility/Source/app/appearancesettings/AppearanceSettings.cpp
  • Tactility/Source/app/i2cscanner/I2cScanner.cpp
💤 Files with no reviewable changes (2)
  • Devices/m5stack-tab5/m5stack,tab5.dts
  • Devices/guition-jc1060p470ciwy/guition,jc1060p470ciwy.dts

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.

Because many displays don't display subtle colour changes
@KenVanHoeylandt
KenVanHoeylandt merged commit b9a96ca into main Oct 10, 2026
0 of 16 checks passed
@KenVanHoeylandt
KenVanHoeylandt deleted the ux-improvements branch October 10, 2026 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant