| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import 'package:flutter/foundation.dart';
- import '../data/repositories/settings_repository.dart';
- import '../data/services/native_bridge.dart';
- /// Applies the persisted "Prevent CarDash from sleeping" preference to the
- /// Android window. The flag only applies while this window is visible.
- class DisplayController extends ChangeNotifier {
- DisplayController(this._platform, this._settings)
- : _keepScreenOn = _settings.keepScreenOn;
- final LauncherPlatform _platform;
- final SettingsRepository _settings;
- bool _keepScreenOn;
- bool _disposed = false;
- bool get keepScreenOn => _keepScreenOn;
- Future<void> initialize() => _apply();
- Future<void> setKeepScreenOn(bool enabled) async {
- if (enabled == _keepScreenOn) return;
- _keepScreenOn = enabled;
- await _settings.setKeepScreenOn(enabled);
- await _apply();
- _notify();
- }
- /// Reapplies after resume, when Android may have recreated the window.
- Future<void> apply() => _apply();
- Future<void> _apply() async {
- try {
- await _platform.setKeepScreenOn(_keepScreenOn);
- } catch (_) {
- // Display flags are best-effort; settings remain persisted.
- }
- }
- void _notify() {
- if (!_disposed) notifyListeners();
- }
- @override
- void dispose() {
- _disposed = true;
- super.dispose();
- }
- }
|