mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-22 17:19:42 +02: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