import 'dart:async'; import 'package:xp_nix/src/interfaces/i_idle_monitor.dart'; /// Mock implementation of IIdleMonitor for testing class MockIdleMonitor implements IIdleMonitor { final StreamController _idleStateController = StreamController.broadcast(); IdleStatus _status = IdleStatus.active; @override Stream get idleStateStream => _idleStateController.stream; @override Future start() async { // No-op for mock } @override void stop() { _idleStateController.close(); } @override IdleStatus get status => _status; /// Simulate user going to deep idle void simulateDeepIdle() { _status = IdleStatus.deepIdle; _idleStateController.add(IdleStatus.deepIdle); } /// Simulate user going to light idle void simulateLightIdle() { _status = IdleStatus.lightIdle; _idleStateController.add(IdleStatus.lightIdle); } /// Simulate user becoming active void simulateActive() { _status = IdleStatus.active; _idleStateController.add(IdleStatus.active); } /// Simulate user going idle (backwards compatibility - defaults to deep idle) void simulateIdle() { simulateDeepIdle(); } /// Simulate a sequence of idle/active events with delays Future simulateIdleSequence(List events) async { for (final event in events) { await Future.delayed(event.delay); if (event.isIdle) { simulateIdle(); } else { simulateActive(); } } } } /// Represents an idle state change event for simulation class IdleEvent { final bool isIdle; final Duration delay; const IdleEvent({required this.isIdle, this.delay = Duration.zero}); /// Factory for idle event factory IdleEvent.idle({Duration delay = Duration.zero}) => IdleEvent(isIdle: true, delay: delay); /// Factory for active event factory IdleEvent.active({Duration delay = Duration.zero}) => IdleEvent(isIdle: false, delay: delay); }