diff --git a/lib/services/apps_provider.dart b/lib/services/apps_provider.dart index 1631e62..9850e5a 100644 --- a/lib/services/apps_provider.dart +++ b/lib/services/apps_provider.dart @@ -12,6 +12,8 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:obtainium/services/source_service.dart'; import 'package:http/http.dart'; import 'package:install_plugin_v2/install_plugin_v2.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:fluttertoast/fluttertoast.dart'; class AppInMemory { late App app; @@ -117,6 +119,16 @@ class AppsProvider with ChangeNotifier { // Unfortunately this 'await' does not actually wait for the APK to finish installing // So we only know that the install prompt was shown, but the user could still cancel w/o us knowing // This also does not use the 'session-based' installer API, so background/silent updates are impossible + while (!(await Permission.requestInstallPackages.isGranted)) { + // Explicit request as InstallPlugin request sometimes bugged + Fluttertoast.showToast( + msg: 'Please allow Obtainium to install Apps', + toastLength: Toast.LENGTH_LONG); + if ((await Permission.requestInstallPackages.request()) == + PermissionStatus.granted) { + break; + } + } await InstallPlugin.installApk(downloadFile.path, 'dev.imranr.obtainium'); apps[appId]!.app.installedVersion = apps[appId]!.app.latestVersion; diff --git a/pubspec.lock b/pubspec.lock index 1a79137..075eebf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -177,6 +177,13 @@ packages: description: flutter source: sdk version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + url: "https://pub.dartlang.org" + source: hosted + version: "8.0.9" html: dependency: "direct main" description: @@ -317,6 +324,41 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + url: "https://pub.dartlang.org" + source: hosted + version: "10.0.0" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + url: "https://pub.dartlang.org" + source: hosted + version: "10.0.0" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.4" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.7.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" petitparser: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 233ce1a..548e860 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,6 +48,8 @@ dependencies: html: ^0.15.0 shared_preferences: ^2.0.15 url_launcher: ^6.1.5 + permission_handler: ^10.0.0 + fluttertoast: ^8.0.9 dev_dependencies: