mirror of
https://github.com/FoggedLens/deflock-app.git
synced 2026-05-14 05:12:11 +02:00
Feature: Keep screen on while using app. Initial working.
This commit is contained in:
+5
-1
@@ -156,6 +156,7 @@ class AppState extends ChangeNotifier {
|
||||
int get maxNodes => _settingsState.maxNodes;
|
||||
UploadMode get uploadMode => _settingsState.uploadMode;
|
||||
FollowMeMode get followMeMode => _settingsState.followMeMode;
|
||||
bool get keepScreenAwake => _settingsState.keepScreenAwake;
|
||||
|
||||
bool get proximityAlertsEnabled => _settingsState.proximityAlertsEnabled;
|
||||
int get proximityAlertDistance => _settingsState.proximityAlertDistance;
|
||||
@@ -172,7 +173,6 @@ class AppState extends ChangeNotifier {
|
||||
TileType? get selectedTileType => _settingsState.selectedTileType;
|
||||
TileProvider? get selectedTileProvider => _settingsState.selectedTileProvider;
|
||||
|
||||
|
||||
|
||||
// Upload queue state
|
||||
int get pendingCount => _uploadQueueState.pendingCount;
|
||||
@@ -678,6 +678,10 @@ class AppState extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> setKeepScreenAwake(bool enabled) async {
|
||||
await _settingsState.setKeepScreenAwake(enabled);
|
||||
}
|
||||
|
||||
Future<void> setPauseQueueProcessing(bool enabled) async {
|
||||
await _settingsState.setPauseQueueProcessing(enabled);
|
||||
if (!enabled) {
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'settings/sections/max_nodes_section.dart';
|
||||
import 'settings/sections/proximity_alerts_section.dart';
|
||||
import 'settings/sections/suspected_locations_section.dart';
|
||||
import 'settings/sections/tile_provider_section.dart';
|
||||
import 'settings/sections/keep_screen_awake_section.dart';
|
||||
import '../services/localization_service.dart';
|
||||
|
||||
class AdvancedSettingsScreen extends StatelessWidget {
|
||||
@@ -32,6 +33,8 @@ class AdvancedSettingsScreen extends StatelessWidget {
|
||||
Divider(),
|
||||
SuspectedLocationsSection(),
|
||||
Divider(),
|
||||
KeepScreenAwakeSection(),
|
||||
Divider(),
|
||||
// NetworkStatusSection(), // Commented out - network status indicator now defaults to enabled
|
||||
// Divider(),
|
||||
TileProviderSection(),
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../../../app_state.dart';
|
||||
|
||||
class KeepScreenAwakeSection extends StatelessWidget {
|
||||
const KeepScreenAwakeSection({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final appState = context.watch<AppState>();
|
||||
|
||||
return SwitchListTile(
|
||||
title: const Text('Keep screen awake while using app'),
|
||||
subtitle: const Text('Prevents the screen from turning off automatically while using the app'),
|
||||
value: appState.keepScreenAwake,
|
||||
onChanged: (bool value) {
|
||||
appState.setKeepScreenAwake(value);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -39,9 +39,11 @@ class SettingsState extends ChangeNotifier {
|
||||
static const String _pauseQueueProcessingPrefsKey = 'pause_queue_processing';
|
||||
static const String _navigationAvoidanceDistancePrefsKey = 'navigation_avoidance_distance';
|
||||
static const String _distanceUnitPrefsKey = 'distance_unit';
|
||||
static const String _keepScreenAwakePrefsKey = 'keep_screen_awake';
|
||||
|
||||
bool _offlineMode = false;
|
||||
bool _pauseQueueProcessing = false;
|
||||
bool _keepScreenAwake = false;
|
||||
int _maxNodes = kDefaultMaxNodes;
|
||||
// Default must account for missing secrets (preview builds) even before init() runs
|
||||
UploadMode _uploadMode = (kEnableDevelopmentModes || !kHasOsmSecrets) ? UploadMode.simulate : UploadMode.production;
|
||||
@@ -65,6 +67,7 @@ class SettingsState extends ChangeNotifier {
|
||||
int get proximityAlertDistance => _proximityAlertDistance;
|
||||
bool get networkStatusIndicatorEnabled => _networkStatusIndicatorEnabled;
|
||||
int get suspectedLocationMinDistance => _suspectedLocationMinDistance;
|
||||
bool get keepScreenAwake => _keepScreenAwake;
|
||||
List<TileProvider> get tileProviders => List.unmodifiable(_tileProviders);
|
||||
String get selectedTileTypeId => _selectedTileTypeId;
|
||||
int get navigationAvoidanceDistance => _navigationAvoidanceDistance;
|
||||
@@ -138,6 +141,9 @@ class SettingsState extends ChangeNotifier {
|
||||
|
||||
// Load suspected location minimum distance
|
||||
_suspectedLocationMinDistance = prefs.getInt(_suspectedLocationMinDistancePrefsKey) ?? 100;
|
||||
|
||||
// Load keep screen awake setting
|
||||
_keepScreenAwake = prefs.getBool(_keepScreenAwakePrefsKey) ?? false;
|
||||
|
||||
// Load upload mode (including migration from old test_mode bool)
|
||||
if (prefs.containsKey(_uploadModePrefsKey)) {
|
||||
@@ -397,7 +403,17 @@ class SettingsState extends ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
// Set distance for avoidance of nodes during navigation
|
||||
/// Set keep screen awake enabled/disabled
|
||||
Future<void> setKeepScreenAwake(bool enabled) async {
|
||||
if (_keepScreenAwake != enabled) {
|
||||
_keepScreenAwake = enabled;
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setBool(_keepScreenAwakePrefsKey, enabled);
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
/// Set distance for avoidance of nodes during navigation
|
||||
Future<void> setNavigationAvoidanceDistance(int distance) async {
|
||||
if (_navigationAvoidanceDistance != distance) {
|
||||
_navigationAvoidanceDistance = distance;
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:flutter_map_animations/flutter_map_animations.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:wakelock_plus/wakelock_plus.dart';
|
||||
|
||||
import '../app_state.dart' show AppState, FollowMeMode;
|
||||
import '../services/offline_area_service.dart';
|
||||
@@ -84,7 +85,20 @@ class MapViewState extends State<MapView> {
|
||||
// Track active pointers to suppress follow-me animations during touch
|
||||
int _activePointers = 0;
|
||||
|
||||
bool _isWakelockEnabled = false;
|
||||
|
||||
void _updateWakelock(bool shouldBeAwake) {
|
||||
if (_isWakelockEnabled != shouldBeAwake) {
|
||||
_isWakelockEnabled = shouldBeAwake;
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (shouldBeAwake) {
|
||||
WakelockPlus.enable();
|
||||
} else {
|
||||
WakelockPlus.disable();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -213,6 +227,7 @@ class MapViewState extends State<MapView> {
|
||||
_nodeController.dispose();
|
||||
_tileManager.dispose();
|
||||
_gpsController.dispose();
|
||||
WakelockPlus.disable();
|
||||
// PrefetchAreaService no longer used - replaced with NodeDataManager
|
||||
super.dispose();
|
||||
}
|
||||
@@ -278,6 +293,9 @@ class MapViewState extends State<MapView> {
|
||||
final session = appState.session;
|
||||
final editSession = appState.editSession;
|
||||
|
||||
// Call the safe tracker using appState instead
|
||||
_updateWakelock(appState.keepScreenAwake);
|
||||
|
||||
// Check if enabled profiles changed and refresh nodes if needed
|
||||
_nodeController.checkAndHandleProfileChanges(
|
||||
currentEnabledProfiles: appState.enabledProfiles,
|
||||
|
||||
@@ -38,6 +38,7 @@ dependencies:
|
||||
package_info_plus: ^9.0.0
|
||||
csv: ^6.0.0
|
||||
collection: ^1.18.0
|
||||
wakelock_plus: ^1.5.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user