mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-21 05:29:29 +02:00
Switched to WorkManager for reliability (#608)
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user