mirror of
https://github.com/home-assistant/iOS.git
synced 2026-04-13 01:12:53 -05:00
## Summary - Kiosk screensaver idle timer was not resetting on user interaction — `recordKioskActivity()` was defined but never called - WKWebView consumes touch events before UIKit idle detection, so the timer counted down from kiosk activation rather than last touch - Added a tap gesture recognizer on the WebView (`cancelsTouchesInView = false`) to detect taps without interfering with normal interaction - Added `scrollViewWillBeginDragging` delegate hook to detect scroll/drag interactions ## Test plan - [ ] Enable kiosk mode with 30s screensaver timeout - [ ] Tap on the WebView dashboard — idle timer should reset - [ ] Scroll on the dashboard — idle timer should reset - [ ] Stop interacting — screensaver should appear after configured timeout - [ ] Verify normal WebView interaction (taps, links, scrolling) still works normally 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Nick Stefanelli <nstefanelli@users.noreply.github.com>
45 lines
1.3 KiB
Swift
45 lines
1.3 KiB
Swift
import Shared
|
|
import UIKit
|
|
|
|
// MARK: - Kiosk Mode Extension
|
|
|
|
extension WebViewController {
|
|
/// Setup kiosk mode integration with KioskModeManager
|
|
/// Call this from viewDidLoad
|
|
func setupKioskMode() {
|
|
KioskModeManager.shared.setup(using: self)
|
|
setupKioskTouchDetection()
|
|
}
|
|
|
|
// MARK: - Status Bar & Home Indicator
|
|
|
|
var kioskPrefersStatusBarHidden: Bool {
|
|
KioskModeManager.shared.prefersStatusBarHidden
|
|
}
|
|
|
|
var kioskPrefersHomeIndicatorAutoHidden: Bool {
|
|
KioskModeManager.shared.prefersHomeIndicatorAutoHidden
|
|
}
|
|
|
|
// MARK: - Touch Handling
|
|
|
|
/// Add a tap gesture recognizer to detect WebView touches for the idle timer.
|
|
/// WKWebView consumes touch events, so without this the idle timer never resets.
|
|
private func setupKioskTouchDetection() {
|
|
let tap = UITapGestureRecognizer(target: self, action: #selector(kioskTouchDetected))
|
|
tap.cancelsTouchesInView = false
|
|
tap.delegate = self
|
|
webView.addGestureRecognizer(tap)
|
|
}
|
|
|
|
@objc private func kioskTouchDetected() {
|
|
recordKioskActivity()
|
|
}
|
|
|
|
/// Record user touch activity to reset the screensaver idle timer
|
|
func recordKioskActivity() {
|
|
guard KioskModeManager.shared.isKioskModeActive else { return }
|
|
KioskModeManager.shared.recordActivity(source: "touch")
|
|
}
|
|
}
|