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/material.dart'; | ||||||
| import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||||
| import 'package:flutter_local_notifications/flutter_local_notifications.dart'; |  | ||||||
| import 'package:obtainium/pages/home.dart'; | import 'package:obtainium/pages/home.dart'; | ||||||
| import 'package:obtainium/services/apps_provider.dart'; | import 'package:obtainium/services/apps_provider.dart'; | ||||||
| import 'package:obtainium/services/settings_provider.dart'; | import 'package:obtainium/services/settings_provider.dart'; | ||||||
| import 'package:obtainium/services/source_service.dart'; | import 'package:obtainium/services/source_service.dart'; | ||||||
|  | import 'package:permission_handler/permission_handler.dart'; | ||||||
| import 'package:provider/provider.dart'; | import 'package:provider/provider.dart'; | ||||||
| import 'package:workmanager/workmanager.dart'; | import 'package:workmanager/workmanager.dart'; | ||||||
| import 'package:dynamic_color/dynamic_color.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') | @pragma('vm:entry-point') | ||||||
| void backgroundUpdateCheck() { | void bgTaskCallback() { | ||||||
|   Workmanager().executeTask((task, inputData) async { |   Workmanager().executeTask((task, taskName) async { | ||||||
|     var appsProvider = AppsProvider(bg: true); |     var appsProvider = AppsProvider(bg: true); | ||||||
|     await appsProvider.notify( |     await appsProvider.notify( | ||||||
|         4, |         4, | ||||||
| @@ -62,14 +65,8 @@ void main() async { | |||||||
|   ); |   ); | ||||||
|   SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); |   SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); | ||||||
|   Workmanager().initialize( |   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( |   runApp(MultiProvider( | ||||||
|     providers: [ |     providers: [ | ||||||
|       ChangeNotifierProvider(create: (context) => AppsProvider()), |       ChangeNotifierProvider(create: (context) => AppsProvider()), | ||||||
| @@ -86,32 +83,34 @@ class MyApp extends StatelessWidget { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|  |     SettingsProvider settingsProvider = context.watch<SettingsProvider>(); | ||||||
|  |     AppsProvider appsProvider = context.read<AppsProvider>(); | ||||||
|  |     if (settingsProvider.prefs == null) { | ||||||
|  |       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) { | ||||||
|  |         Permission.notification.request(); | ||||||
|  |         appsProvider.saveApp(App( | ||||||
|  |             'imranr98_obtainium_github', | ||||||
|  |             'https://github.com/ImranR98/Obtainium', | ||||||
|  |             'ImranR98', | ||||||
|  |             'Obtainium', | ||||||
|  |             CURRENT_RELEASE_TAG, | ||||||
|  |             CURRENT_RELEASE_TAG, | ||||||
|  |             '')); | ||||||
|  |       } | ||||||
|  |       appsProvider.deleteSavedAPKs(); | ||||||
|  |       appsProvider.checkUpdates(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return DynamicColorBuilder( |     return DynamicColorBuilder( | ||||||
|         builder: (ColorScheme? lightDynamic, ColorScheme? darkDynamic) { |         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>(); |  | ||||||
|       if (settingsProvider.prefs == null) { |  | ||||||
|         settingsProvider.initializeSettings().then((_) { |  | ||||||
|           bool isFirstRun = settingsProvider.checkAndFlipFirstRun(); |  | ||||||
|           if (isFirstRun) { |  | ||||||
|             appsProvider.downloaderNotifications |  | ||||||
|                 .resolvePlatformSpecificImplementation< |  | ||||||
|                     AndroidFlutterLocalNotificationsPlugin>()! |  | ||||||
|                 .requestPermission(); |  | ||||||
|             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', |  | ||||||
|                 '')); |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       ColorScheme lightColorScheme; |       ColorScheme lightColorScheme; | ||||||
|       ColorScheme darkColorScheme; |       ColorScheme darkColorScheme; | ||||||
|       if (lightDynamic != null && |       if (lightDynamic != null && | ||||||
| @@ -124,7 +123,6 @@ class MyApp extends StatelessWidget { | |||||||
|         darkColorScheme = ColorScheme.fromSeed( |         darkColorScheme = ColorScheme.fromSeed( | ||||||
|             seedColor: defaultThemeColour, brightness: Brightness.dark); |             seedColor: defaultThemeColour, brightness: Brightness.dark); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       return MaterialApp( |       return MaterialApp( | ||||||
|           title: 'Obtainium', |           title: 'Obtainium', | ||||||
|           theme: ThemeData( |           theme: ThemeData( | ||||||
|   | |||||||
| @@ -14,7 +14,6 @@ class _AppsPageState extends State<AppsPage> { | |||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     var appsProvider = context.watch<AppsProvider>(); |     var appsProvider = context.watch<AppsProvider>(); | ||||||
|     appsProvider.checkUpdates(); |  | ||||||
|     var existingUpdateAppIds = appsProvider.getExistingUpdates(); |     var existingUpdateAppIds = appsProvider.getExistingUpdates(); | ||||||
|  |  | ||||||
|     return Scaffold( |     return Scaffold( | ||||||
|   | |||||||
| @@ -66,6 +66,44 @@ class _SettingsPageState extends State<SettingsPage> { | |||||||
|                           settingsProvider.colour = value; |                           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(), |                   const Spacer(), | ||||||
|                   Row( |                   Row( | ||||||
|                     mainAxisAlignment: MainAxisAlignment.end, |                     mainAxisAlignment: MainAxisAlignment.end, | ||||||
|   | |||||||
| @@ -37,6 +37,15 @@ class SettingsProvider with ChangeNotifier { | |||||||
|     notifyListeners(); |     notifyListeners(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   int get updateInterval { | ||||||
|  |     return prefs?.getInt('updateInterval') ?? 1440; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   set updateInterval(int min) { | ||||||
|  |     prefs?.setInt('updateInterval', min < 15 ? 15 : min); | ||||||
|  |     notifyListeners(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   checkAndFlipFirstRun() { |   checkAndFlipFirstRun() { | ||||||
|     bool result = prefs?.getBool('firstRun') ?? true; |     bool result = prefs?.getBool('firstRun') ?? true; | ||||||
|     if (result) { |     if (result) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user