mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 05:23:28 +01:00 
			
		
		
		
	Added BG update check interval + bugfixes
This commit is contained in:
		| @@ -1,17 +1,20 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| import 'package:flutter_local_notifications/flutter_local_notifications.dart'; | ||||
| import 'package:obtainium/pages/home.dart'; | ||||
| import 'package:obtainium/services/apps_provider.dart'; | ||||
| import 'package:obtainium/services/settings_provider.dart'; | ||||
| import 'package:obtainium/services/source_service.dart'; | ||||
| import 'package:permission_handler/permission_handler.dart'; | ||||
| import 'package:provider/provider.dart'; | ||||
| import 'package:workmanager/workmanager.dart'; | ||||
| import 'package:dynamic_color/dynamic_color.dart'; | ||||
|  | ||||
| const String CURRENT_RELEASE_TAG = | ||||
|     'v0.1.2-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES | ||||
|  | ||||
| @pragma('vm:entry-point') | ||||
| void backgroundUpdateCheck() { | ||||
|   Workmanager().executeTask((task, inputData) async { | ||||
| void bgTaskCallback() { | ||||
|   Workmanager().executeTask((task, taskName) async { | ||||
|     var appsProvider = AppsProvider(bg: true); | ||||
|     await appsProvider.notify( | ||||
|         4, | ||||
| @@ -62,14 +65,8 @@ void main() async { | ||||
|   ); | ||||
|   SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); | ||||
|   Workmanager().initialize( | ||||
|     backgroundUpdateCheck, | ||||
|     bgTaskCallback, | ||||
|   ); | ||||
|   await Workmanager().cancelByUniqueName('update-apps-task'); | ||||
|   await Workmanager().registerPeriodicTask( | ||||
|       'update-apps-task', 'backgroundUpdateCheck', | ||||
|       frequency: const Duration(minutes: 15), | ||||
|       initialDelay: const Duration(minutes: 15), | ||||
|       constraints: Constraints(networkType: NetworkType.connected)); | ||||
|   runApp(MultiProvider( | ||||
|     providers: [ | ||||
|       ChangeNotifierProvider(create: (context) => AppsProvider()), | ||||
| @@ -86,32 +83,34 @@ class MyApp extends StatelessWidget { | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return DynamicColorBuilder( | ||||
|         builder: (ColorScheme? lightDynamic, ColorScheme? darkDynamic) { | ||||
|       AppsProvider appsProvider = context.read<AppsProvider>(); | ||||
|       appsProvider.deleteSavedAPKs(); | ||||
|       // Initialize the settings provider (if needed) and perform first-run actions if needed | ||||
|     SettingsProvider settingsProvider = context.watch<SettingsProvider>(); | ||||
|     AppsProvider appsProvider = context.read<AppsProvider>(); | ||||
|     if (settingsProvider.prefs == null) { | ||||
|         settingsProvider.initializeSettings().then((_) { | ||||
|       settingsProvider.initializeSettings(); | ||||
|     } else { | ||||
|       Workmanager().registerPeriodicTask('bg-update-check', 'bg-update-check', | ||||
|           frequency: Duration(minutes: settingsProvider.updateInterval), | ||||
|           initialDelay: Duration(minutes: settingsProvider.updateInterval), | ||||
|           constraints: Constraints(networkType: NetworkType.connected), | ||||
|           existingWorkPolicy: ExistingWorkPolicy.replace); | ||||
|       bool isFirstRun = settingsProvider.checkAndFlipFirstRun(); | ||||
|       if (isFirstRun) { | ||||
|             appsProvider.downloaderNotifications | ||||
|                 .resolvePlatformSpecificImplementation< | ||||
|                     AndroidFlutterLocalNotificationsPlugin>()! | ||||
|                 .requestPermission(); | ||||
|         Permission.notification.request(); | ||||
|         appsProvider.saveApp(App( | ||||
|             'imranr98_obtainium_github', | ||||
|             'https://github.com/ImranR98/Obtainium', | ||||
|             'ImranR98', | ||||
|             'Obtainium', | ||||
|                 'v0.1.2-beta', // KEEP THIS IN SYNC WITH GITHUB RELEASES | ||||
|                 'v0.1.2-beta', | ||||
|             CURRENT_RELEASE_TAG, | ||||
|             CURRENT_RELEASE_TAG, | ||||
|             '')); | ||||
|       } | ||||
|         }); | ||||
|       appsProvider.deleteSavedAPKs(); | ||||
|       appsProvider.checkUpdates(); | ||||
|     } | ||||
|  | ||||
|     return DynamicColorBuilder( | ||||
|         builder: (ColorScheme? lightDynamic, ColorScheme? darkDynamic) { | ||||
|       ColorScheme lightColorScheme; | ||||
|       ColorScheme darkColorScheme; | ||||
|       if (lightDynamic != null && | ||||
| @@ -124,7 +123,6 @@ class MyApp extends StatelessWidget { | ||||
|         darkColorScheme = ColorScheme.fromSeed( | ||||
|             seedColor: defaultThemeColour, brightness: Brightness.dark); | ||||
|       } | ||||
|  | ||||
|       return MaterialApp( | ||||
|           title: 'Obtainium', | ||||
|           theme: ThemeData( | ||||
|   | ||||
| @@ -14,7 +14,6 @@ class _AppsPageState extends State<AppsPage> { | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     var appsProvider = context.watch<AppsProvider>(); | ||||
|     appsProvider.checkUpdates(); | ||||
|     var existingUpdateAppIds = appsProvider.getExistingUpdates(); | ||||
|  | ||||
|     return Scaffold( | ||||
|   | ||||
| @@ -66,6 +66,44 @@ class _SettingsPageState extends State<SettingsPage> { | ||||
|                           settingsProvider.colour = value; | ||||
|                         } | ||||
|                       }), | ||||
|                   const SizedBox( | ||||
|                     height: 16, | ||||
|                   ), | ||||
|                   DropdownButtonFormField( | ||||
|                       decoration: const InputDecoration( | ||||
|                           labelText: 'Background Update Checking Interval'), | ||||
|                       value: settingsProvider.updateInterval, | ||||
|                       items: const [ | ||||
|                         DropdownMenuItem( | ||||
|                           value: 15, | ||||
|                           child: Text('15 Minutes'), | ||||
|                         ), | ||||
|                         DropdownMenuItem( | ||||
|                           value: 30, | ||||
|                           child: Text('30 Minutes'), | ||||
|                         ), | ||||
|                         DropdownMenuItem( | ||||
|                           value: 60, | ||||
|                           child: Text('1 Hour'), | ||||
|                         ), | ||||
|                         DropdownMenuItem( | ||||
|                           value: 360, | ||||
|                           child: Text('6 Hours'), | ||||
|                         ), | ||||
|                         DropdownMenuItem( | ||||
|                           value: 720, | ||||
|                           child: Text('12 Hours'), | ||||
|                         ), | ||||
|                         DropdownMenuItem( | ||||
|                           value: 1440, | ||||
|                           child: Text('1 Day'), | ||||
|                         ), | ||||
|                       ], | ||||
|                       onChanged: (value) { | ||||
|                         if (value != null) { | ||||
|                           settingsProvider.updateInterval = value; | ||||
|                         } | ||||
|                       }), | ||||
|                   const Spacer(), | ||||
|                   Row( | ||||
|                     mainAxisAlignment: MainAxisAlignment.end, | ||||
|   | ||||
| @@ -37,6 +37,15 @@ class SettingsProvider with ChangeNotifier { | ||||
|     notifyListeners(); | ||||
|   } | ||||
|  | ||||
|   int get updateInterval { | ||||
|     return prefs?.getInt('updateInterval') ?? 1440; | ||||
|   } | ||||
|  | ||||
|   set updateInterval(int min) { | ||||
|     prefs?.setInt('updateInterval', min < 15 ? 15 : min); | ||||
|     notifyListeners(); | ||||
|   } | ||||
|  | ||||
|   checkAndFlipFirstRun() { | ||||
|     bool result = prefs?.getBool('firstRun') ?? true; | ||||
|     if (result) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user