Added BG update check interval + bugfixes

This commit is contained in:
Imran Remtulla
2022-08-26 17:15:16 -04:00
parent 2aca9d680b
commit 9459c96d48
4 changed files with 80 additions and 36 deletions

View File

@@ -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(

View File

@@ -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(

View File

@@ -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,

View File

@@ -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) {