Skip to content

Commit

Permalink
feat: Add repeatedly-check.dart for RequestBatteryOptimizationsDisabl…
Browse files Browse the repository at this point in the history
…edMixin.dart
  • Loading branch information
Myzel394 committed Sep 24, 2023
1 parent dac3042 commit f51a873
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import 'package:locus/widgets/ModalSheet.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:locus/widgets/ModalSheetContent.dart';
import 'package:locus/widgets/PlatformRadioTile.dart';
import 'package:locus/widgets/RequestBatteryOptimizationsDisabledMixin.dart';
import 'package:locus/widgets/RequestLocationPermissionMixin.dart';
import 'package:provider/provider.dart';

import '../../services/task_service/index.dart';
Expand All @@ -32,7 +34,10 @@ class ShareLocationSheet extends StatefulWidget {
State<ShareLocationSheet> createState() => _ShareLocationSheetState();
}

class _ShareLocationSheetState extends State<ShareLocationSheet> {
class _ShareLocationSheetState extends State<ShareLocationSheet>
with
RequestLocationPermissionMixin,
RequestBatteryOptimizationsDisabledMixin {
final hoursFormKey = GlobalKey<FormState>();
final hoursController = TextEditingController(text: "1");

Expand Down Expand Up @@ -66,6 +71,34 @@ class _ShareLocationSheetState extends State<ShareLocationSheet> {
isLoading = true;
});

FlutterLogs.logInfo(
LOG_TAG,
"Quick Location Share",
"Checking permission",
);

if (!await showLocationPermissionDialog(askForAlways: true)) {
FlutterLogs.logInfo(
LOG_TAG,
"Quick Location Share",
"Permission not granted. Aborting.",
);

setState(() {
isLoading = false;
});

return;
}

FlutterLogs.logInfo(
LOG_TAG,
"Quick Location Share",
"Checking battery saver",
);

await showDisableBatteryOptimizationsDialog();

FlutterLogs.logInfo(
LOG_TAG,
"Quick Location Share",
Expand Down
19 changes: 19 additions & 0 deletions lib/utils/repeatedly-check.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Future<dynamic> repeatedlyCheckForSuccess(
final Future<dynamic> Function() check, [
final Duration interval = const Duration(milliseconds: 500),
final Duration timeout = const Duration(seconds: 30),
]) async {
final stopwatch = Stopwatch()..start();

while (stopwatch.elapsed < timeout) {
final result = await check();

if (result != null) {
return result;
}

await Future.delayed(interval);
}

return;
}
24 changes: 16 additions & 8 deletions lib/widgets/RequestBatteryOptimizationsDisabledMixin.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:disable_battery_optimization/disable_battery_optimization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
import 'package:locus/utils/repeatedly-check.dart';
import 'package:locus/utils/theme.dart';
import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
Expand Down Expand Up @@ -60,19 +61,26 @@ mixin RequestBatteryOptimizationsDisabledMixin {
l10n.permissions_autoStart_message,
);

final isIgnoringBatteryOptimizations =
(await DisableBatteryOptimization
.isBatteryOptimizationDisabled) ??
false;
final isAutoStartEnabled =
(await DisableBatteryOptimization.isAutoStartEnabled) ??
false;
final isIgnoring = await repeatedlyCheckForSuccess(() async {
final isIgnoringBatteryOptimizations =
(await DisableBatteryOptimization
.isBatteryOptimizationDisabled);
final isAutoStartEnabled =
(await DisableBatteryOptimization.isAutoStartEnabled);

if (isIgnoringBatteryOptimizations == null ||
isAutoStartEnabled == null) {
return null;
}

return isIgnoringBatteryOptimizations && isAutoStartEnabled;
});

if (!context.mounted) {
return;
}

if (isIgnoringBatteryOptimizations && isAutoStartEnabled) {
if (isIgnoring == true) {
Navigator.of(context).pop(true);
} else {
Navigator.of(context).pop(false);
Expand Down

0 comments on commit f51a873

Please sign in to comment.