This commit addresses multiple user-reported issues:
1. UI Improvements:
- Replace box-drawing characters (╔ ╗) with simple equals signs (=)
- Updated addon status display header
- Updated timer logging format
- Updated Squeezelite audio fix header
2. Performance Optimization:
- Removed redundant systemctl calls from show_addon_status()
- Addon status now uses fast file-based checks only
- Eliminates slow service status queries that delayed menu display
3. Password Lock Feature Visibility:
- Added session lockout configuration to initial setup flow
- Users can now set password protection during first-time configuration
- Previously only available in edit menu after setup
4. Return to Rotation (RTR) Popup Fix:
- Fixed RTR popup not appearing on rotation sites
- Removed requirement for Home URL to be configured
- Inactivity prompt now works with or without Home URL
- When typing on rotation site, popup appears after inactivity timeout
- "Return to Rotation" works correctly in both configurations
Bug fixes ensure expected behavior across all use cases.
This update provides a unified, predictable inactivity prompt behavior
regardless of how the user navigated to a page.
Changes:
- Added userInteractedWithCurrentSite flag to track user touch on each site
- Modified markActivity() to set flag when user interacts (tap, swipe, scroll)
- Modified attachView() to clear flag when site changes
- Updated inactivity check to use interaction flag instead of navigation mode
New Behavior (Consistent UX):
✅ Scenario A: Auto-rotation to recipe → user taps → prompt after timeout
- Site auto-rotates to recipe page
- User taps screen to scroll/interact
- userInteractedWithCurrentSite = true
- After 2 min idle → prompt appears
- User can extend time or return to rotation
✅ Scenario B: User swiping through photos every 30 seconds
- Each swipe resets inactivity timer via markActivity()
- No prompt appears (user is actively interacting)
- Prompt only appears after they stop swiping for timeout period
✅ Scenario C: Sites auto-rotating with no user interaction
- userInteractedWithCurrentSite = false on each site
- No prompt appears
- Rotation continues normally
Technical Details:
- Single-finger swipes (in-page content): Reset timer via markActivity()
- Two-finger swipes (tab navigation): Also sets manualNavigationMode
- Both types of interaction trigger the flag
- Flag cleared on every site change (auto or manual)
- If manual swipe, markActivity() re-sets it immediately
Use Cases:
- Recipe viewing: User can interact with page, get timeout prompt, extend time
- Photo browsing: Continuous swiping prevents timeout
- Digital signage: No interaction = no prompt = smooth rotation
- MagicMirror modules: Single-finger swipes keep resetting timer
This provides the consistent UX requested where ANY user interaction
on ANY site enables the inactivity prompt logic.
Changed the inactivity prompt behavior based on user feedback:
Changes:
- Renamed button from "🏠 Return to home now" to "🔄 Return to rotation"
- Reverted inactivity check to work on ALL pages (including home screen)
- Updated returnToHome() function comments to clarify rotation behavior
Behavior:
- Inactivity prompt now appears on home screen AND other pages
- If user is viewing a recipe (or any page), they can extend time
- Clicking "Return to Rotation":
* If NOT on home page: goes to home page first, then starts rotation
* If on home page: just starts the rotation
- This allows users to get "30 extra minutes" before touching the screen
with dirty hands (e.g., when following a recipe)
Use Case:
User navigates to a recipe on menu app, inactivity prompt appears,
they can click "30 more minutes" to read the recipe without any
further screen interaction needed.
This release adds password-protected session lockout and fixes several
reported bugs from v0.9.9.1 testing.
New Features:
- Password-protected session lockout
* Configurable lockout password (separate from sudo user)
* Auto-lock after configurable timeout (default 30 minutes)
* Black lockout screen with password prompt
* Session unlocks with correct password
* New "Configure Session Lockout" menu option
Bug Fixes:
- Fixed return-to-home popup appearing on home screen
* Popup now only appears on timed sites
* Home screen no longer triggers inactivity prompt
* Updated logic: only check inactivity when NOT on home page
- Fixed site edit menu flow
* Edit site URL function now returns properly to menu
* Added explicit return statement to prevent bail
* Added blank line for better UX
Version Updates:
- Updated to semantic versioning: v0.9.8
- Updated all version references in header and script
- Updated changelog with new features and fixes
Technical Changes:
- Added LOCKOUT_ENABLED, LOCKOUT_PASSWORD, LOCKOUT_TIMEOUT config vars
- Created lockout.html template with black screen and password entry
- Added lockout state tracking in main.js
- Implemented showLockout() and hideLockout() functions
- Added unlock-session IPC handler
- Integrated lockout check into master timer
- Updated save_config() to persist lockout settings
- Updated loadConfig() to load lockout settings
Addresses user feedback from testing:
- Time extensions now work correctly
- Return to home popup fixed
- Site edit menu no longer bails