Implement consistent Return to Rotation UX across all sites
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.
This commit is contained in:
+25
-5
@@ -15,7 +15,12 @@
|
|||||||
# * Button changed from "🏠 Return to home now" to "🔄 Return to rotation"
|
# * Button changed from "🏠 Return to home now" to "🔄 Return to rotation"
|
||||||
# * If not on home page: returns to home page, then starts rotation
|
# * If not on home page: returns to home page, then starts rotation
|
||||||
# * If on home page: just starts the rotation
|
# * If on home page: just starts the rotation
|
||||||
# * Allows time extensions even on home screen (e.g., viewing recipes)
|
# - Consistent inactivity prompt UX across ALL sites
|
||||||
|
# * Prompt appears on ANY site where user has interacted (tap, swipe, scroll)
|
||||||
|
# * Auto-rotation to recipe → user taps → prompt appears after timeout ✅
|
||||||
|
# * User swiping through photos → keeps resetting timer, no prompt ✅
|
||||||
|
# * Auto-rotation with no interaction → no prompt, keeps rotating ✅
|
||||||
|
# * Works on home page, timed sites, and manual sites consistently
|
||||||
# - Fixed site edit menu not returning to configuration menu
|
# - Fixed site edit menu not returning to configuration menu
|
||||||
# * Edit site URL flow now completes properly
|
# * Edit site URL flow now completes properly
|
||||||
# - Time extension features work correctly
|
# - Time extension features work correctly
|
||||||
@@ -3505,6 +3510,7 @@ let keyboardLastUsed=0;
|
|||||||
let inactivityExtensionUntil=0;
|
let inactivityExtensionUntil=0;
|
||||||
let manualNavigationMode=false;
|
let manualNavigationMode=false;
|
||||||
let programmaticNavigation=false;
|
let programmaticNavigation=false;
|
||||||
|
let userInteractedWithCurrentSite=false; // v0.9.8: Track if user touched current site
|
||||||
|
|
||||||
let mediaIsPlaying=false;
|
let mediaIsPlaying=false;
|
||||||
let userRecentlyActive=false;
|
let userRecentlyActive=false;
|
||||||
@@ -3577,6 +3583,13 @@ function markActivity(){
|
|||||||
userRecentlyActive=true;
|
userRecentlyActive=true;
|
||||||
lastLockoutCheck=now; // Reset lockout timer on activity
|
lastLockoutCheck=now; // Reset lockout timer on activity
|
||||||
|
|
||||||
|
// v0.9.8: Mark that user has interacted with this site
|
||||||
|
// This triggers inactivity prompt logic for ANY site (not just manual/home)
|
||||||
|
if(!userInteractedWithCurrentSite){
|
||||||
|
console.log('[ACTIVITY] 🖐️ User touched this site - inactivity timer active');
|
||||||
|
userInteractedWithCurrentSite=true;
|
||||||
|
}
|
||||||
|
|
||||||
if(promptWindow&&!promptWindow.isDestroyed()){
|
if(promptWindow&&!promptWindow.isDestroyed()){
|
||||||
console.log('[ACTIVITY] Closing inactivity prompt');
|
console.log('[ACTIVITY] Closing inactivity prompt');
|
||||||
promptWindow.close();
|
promptWindow.close();
|
||||||
@@ -3800,15 +3813,17 @@ function startMasterTimer(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7. INACTIVITY CHECK (works on ALL pages including home!)
|
// 7. INACTIVITY CHECK (works on ALL pages where user has interacted!)
|
||||||
if(homeTabIndex>=0&&!showingHidden){
|
if(homeTabIndex>=0&&!showingHidden){
|
||||||
const homeViewIdx=getHomeViewIndex();
|
const homeViewIdx=getHomeViewIndex();
|
||||||
const currentTabIdx=viewIndexToTabIndex(currentIndex);
|
const currentTabIdx=viewIndexToTabIndex(currentIndex);
|
||||||
const isOnHomePage=(homeViewIdx>=0&¤tIndex===homeViewIdx);
|
const isOnHomePage=(homeViewIdx>=0&¤tIndex===homeViewIdx);
|
||||||
|
|
||||||
// v0.9.8: Show inactivity prompt on ALL pages (including home)
|
// v0.9.8: Show inactivity prompt on ANY site where user has interacted
|
||||||
// This allows users to extend time even when viewing recipes, etc.
|
// - Auto-rotates to recipe → user taps → prompt appears after timeout
|
||||||
if(manualNavigationMode||isOnHomePage){
|
// - User keeps swiping through photos → keeps resetting, no prompt
|
||||||
|
// - No user interaction → no prompt, just keeps rotating
|
||||||
|
if(userInteractedWithCurrentSite){
|
||||||
const idleTime=now-lastUserInteraction;
|
const idleTime=now-lastUserInteraction;
|
||||||
|
|
||||||
// CRITICAL FIX: Use absolute time check for extensions
|
// CRITICAL FIX: Use absolute time check for extensions
|
||||||
@@ -3930,6 +3945,11 @@ function attachView(i){
|
|||||||
|
|
||||||
views[i].webContents.focus();
|
views[i].webContents.focus();
|
||||||
siteStartTime=Date.now();
|
siteStartTime=Date.now();
|
||||||
|
|
||||||
|
// v0.9.8: Clear interaction flag when site changes
|
||||||
|
// Will be set back to true if user manually swiped here (markActivity called after)
|
||||||
|
// Will stay false if auto-rotated (no user interaction yet)
|
||||||
|
userInteractedWithCurrentSite=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function nextTab(){
|
function nextTab(){
|
||||||
|
|||||||
Reference in New Issue
Block a user