Switched to WorkManager for reliability (#608)

This commit is contained in:
Imran Remtulla
2023-10-22 00:59:51 -04:00
parent b8c0e18bb4
commit d3247a9ec1
5 changed files with 280 additions and 263 deletions

View File

@@ -12,7 +12,7 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:dynamic_color/dynamic_color.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:android_alarm_manager_plus/android_alarm_manager_plus.dart';
import 'package:workmanager/workmanager.dart';
import 'package:easy_localization/easy_localization.dart';
// ignore: implementation_imports
import 'package:easy_localization/src/easy_localization_controller.dart';
@@ -23,7 +23,7 @@ const String currentVersion = '0.14.31';
const String currentReleaseTag =
'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES
const int bgUpdateCheckAlarmId = 666;
const String bgUpdateTaskId = 'bgUpdate';
List<MapEntry<Locale, String>> supportedLocales = const [
MapEntry(Locale('en'), 'English'),
@@ -71,6 +71,17 @@ Future<void> loadTranslations() async {
fallbackTranslations: controller.fallbackTranslations);
}
@pragma('vm:entry-point')
void bgTaskDispatcher() {
Workmanager().executeTask((taskId, params) {
if (taskId == bgUpdateTaskId) {
return bgUpdateTask(taskId, params);
} else {
return Future.value(true);
}
});
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
try {
@@ -88,7 +99,7 @@ void main() async {
);
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
}
await AndroidAlarmManager.initialize();
await Workmanager().initialize(bgTaskDispatcher);
runApp(MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => AppsProvider()),
@@ -158,7 +169,7 @@ class _ObtainiumState extends State<Obtainium> {
var actualUpdateInterval = settingsProvider.updateInterval;
if (existingUpdateInterval != actualUpdateInterval) {
if (actualUpdateInterval == 0) {
AndroidAlarmManager.cancel(bgUpdateCheckAlarmId);
Workmanager().cancelByUniqueName(bgUpdateTaskId);
} else {
var settingChanged = existingUpdateInterval != -1;
var lastCheckWasTooLongAgo = actualUpdateInterval != 0 &&
@@ -168,12 +179,10 @@ class _ObtainiumState extends State<Obtainium> {
if (settingChanged || lastCheckWasTooLongAgo) {
logs.add(
'Update interval was set to ${actualUpdateInterval.toString()} (reason: ${settingChanged ? 'setting changed' : 'last check was ${settingsProvider.lastBGCheckTime.toLocal().toString()}'}).');
AndroidAlarmManager.periodic(
Duration(minutes: actualUpdateInterval),
bgUpdateCheckAlarmId,
bgUpdateCheck,
rescheduleOnReboot: true,
wakeup: true);
Workmanager().registerPeriodicTask(
bgUpdateTaskId, "BG Update Main Loop",
initialDelay: Duration(minutes: actualUpdateInterval),
existingWorkPolicy: ExistingWorkPolicy.replace);
}
}
existingUpdateInterval = actualUpdateInterval;