Changed update download method

This commit is contained in:
Juan Gilsanz Polo 2022-10-30 12:45:42 +01:00
parent d332f19684
commit a1709d0960
8 changed files with 24 additions and 249 deletions

View file

@ -40,9 +40,6 @@ This is an unofficial application. The AdGuard Home team and the development of
- [bottom sheet](https://pub.dev/packages/bottom_sheet)
- [percent indicator](https://pub.dev/packages/percent_indicator)
- [store checker](https://pub.dev/packages/store_checker)
- [fl downloader](https://pub.dev/packages/fl_downloader)
- [install plugin v2](https://pub.dev/packages/install_plugin_v2)
- [permission handler](https://pub.dev/packages/permission_handler)
<br>

View file

@ -9,5 +9,4 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="33" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
</manifest>

View file

@ -1,11 +1,16 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.jgeek00.adguard_home_manager">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="33" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:node="remove" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove"
tools:ignore="ProtectedPermissions" />
<application
android:label="AdGuard Home Manager"
android:name="${applicationName}"

View file

@ -9,5 +9,4 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="33" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
</manifest>

View file

@ -1,25 +1,20 @@
// ignore_for_file: use_build_context_synchronously, depend_on_referenced_packages
import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:animations/animations.dart';
import 'package:install_plugin_v2/install_plugin_v2.dart';
import 'package:permission_handler_platform_interface/permission_handler_platform_interface.dart';
import 'package:flutter_web_browser/flutter_web_browser.dart';
import 'package:provider/provider.dart';
import 'package:store_checker/store_checker.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/widgets/bottom_nav_bar.dart';
import 'package:adguard_home_manager/widgets/update_modal.dart';
import 'package:adguard_home_manager/widgets/download_modal.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/models/github_release.dart';
import 'package:adguard_home_manager/constants/package_name.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/models/app_screen.dart';
import 'package:adguard_home_manager/config/app_screens.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
@ -39,8 +34,6 @@ class Base extends StatefulWidget {
class _BaseState extends State<Base> with WidgetsBindingObserver {
int selectedScreen = 0;
final PermissionHandlerPlatform permissionHandler = PermissionHandlerPlatform.instance;
bool updateExists(String appVersion, String gitHubVersion) {
final List<int> appVersionSplit = List<int>.from(appVersion.split('.').map((e) => int.parse(e)));
final List<int> gitHubVersionSplit = List<int>.from(gitHubVersion.split('.').map((e) => int.parse(e)));
@ -64,7 +57,7 @@ class _BaseState extends State<Base> with WidgetsBindingObserver {
if (installationSource != Source.IS_INSTALLED_FROM_PLAY_STORE) {
final result = await checkAppUpdatesGitHub();
if (result['result'] == 'success') {
if (updateExists(widget.appConfigProvider.getAppInfo!.version, result['body'].tagName)) {
if (true) {
return result['body'];
}
}
@ -72,42 +65,21 @@ class _BaseState extends State<Base> with WidgetsBindingObserver {
return null;
}
Future<bool> managePermission() async {
try {
final status = await permissionHandler.checkPermissionStatus(Permission.storage);
if (status == PermissionStatus.granted) {
return true;
}
else {
final Map<Permission, PermissionStatus> request = await permissionHandler.requestPermissions([Permission.storage]);
if (request[Permission.storage] == PermissionStatus.granted) {
return false;
}
else {
return true;
}
}
} catch (e) {
return false;
}
}
void installApk(String path) async {
final granted = await managePermission();
if (granted == true) {
path = path.replaceFirst(r'file://', '');
final file = File(path);
final exists = await file.exists();
if (exists) {
InstallPlugin.installApk(
path, PackageName.packageName
void download(String link, String version) async {
FlutterWebBrowser.openWebPage(
url: link,
customTabsOptions: const CustomTabsOptions(
instantAppsEnabled: true,
showTitle: true,
urlBarHidingEnabled: false,
),
safariVCOptions: const SafariViewControllerOptions(
barCollapsingEnabled: true,
dismissButtonStyle: SafariViewControllerDismissButtonStyle.close,
modalPresentationCapturesStatusBarAppearance: true,
)
);
}
}
}
@override
void initState() {
@ -116,29 +88,6 @@ class _BaseState extends State<Base> with WidgetsBindingObserver {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
void download(String link, String version) async {
final granted = await managePermission();
if (granted == true) {
showDialog(
context: context,
builder: (context) => DownloadModal(
url: link,
version: version,
onFinish: installApk,
),
barrierDismissible: false
);
}
else {
showSnacbkar(
context: context,
appConfigProvider: widget.appConfigProvider,
label: AppLocalizations.of(context)!.permissionNotGranted,
color: Colors.red
);
}
}
final result = await checkInstallationSource();
if (result != null && widget.appConfigProvider.doNotRememberVersion != result.tagName) {

View file

@ -1,121 +0,0 @@
import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:percent_indicator/percent_indicator.dart';
import 'package:fl_downloader/fl_downloader.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class DownloadModal extends StatefulWidget {
final String url;
final String version;
final void Function(String) onFinish;
const DownloadModal({
Key? key,
required this.url,
required this.version,
required this.onFinish,
}) : super(key: key);
@override
State<DownloadModal> createState() => _DownloadModalState();
}
class _DownloadModalState extends State<DownloadModal> {
int progress = 0;
String? status;
late StreamSubscription progressStream;
void removeOldInstallers() {
final downloads = Directory('/storage/emulated/0/Download').listSync();
final installers = downloads.where((file) => file.path.contains('adguard-home-manager'));
for (FileSystemEntity installer in installers) {
if (installer.existsSync()) {
installer.deleteSync();
}
}
}
@override
void initState() {
removeOldInstallers();
FlDownloader.initialize();
progressStream = FlDownloader.progressStream.listen((event) {
if (event.status == DownloadStatus.successful) {
setState(() => progress = event.progress);
Navigator.pop(context);
widget.onFinish(event.filePath!);
}
else if (event.status == DownloadStatus.running) {
print(event.progress);
setState(() {
progress = event.progress;
status = null;
});
}
else if (event.status == DownloadStatus.paused) {
setState(() => status == "Paused");
}
else if (event.status == DownloadStatus.pending) {
setState(() => status == "Pending");
}
else if (event.status == DownloadStatus.failed) {
setState(() => status == "Failed");
}
else if (event.status == DownloadStatus.canceling) {
setState(() => status == "Canceling");
}
});
FlDownloader.download(widget.url, fileName: 'adguard-home-manager_v${widget.version}.apk');
super.initState();
}
@override
void dispose() {
super.dispose();
progressStream.cancel();
}
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text("${AppLocalizations.of(context)!.downloadingUpdate}..."),
titlePadding: const EdgeInsets.only(
left: 24, right: 24, top: 24, bottom: 10,
),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
LinearPercentIndicator(
animation: true,
lineHeight: 4,
animationDuration: 500,
curve: Curves.easeOut,
percent: progress/100,
animateFromLastPercent: true,
barRadius: const Radius.circular(5),
progressColor: Theme.of(context).primaryColor,
backgroundColor: Theme.of(context).primaryColor.withOpacity(0.15),
),
const SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsets.only(right: 8),
child: Text(
status != null
? status!
: "$progress% ${AppLocalizations.of(context)!.completed}"),
)
],
)
],
),
);
}
}

View file

@ -197,13 +197,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.55.2"
fl_downloader:
dependency: "direct main"
description:
name: fl_downloader
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
flutter:
dependency: "direct main"
description: flutter
@ -294,13 +287,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.2.0"
install_plugin_v2:
dependency: "direct main"
description:
name: install_plugin_v2
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
intl:
dependency: "direct main"
description:
@ -427,41 +413,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.2"
permission_handler:
dependency: "direct main"
description:
name: permission_handler
url: "https://pub.dartlang.org"
source: hosted
version: "10.2.0"
permission_handler_android:
dependency: "direct main"
description:
name: permission_handler_android
url: "https://pub.dartlang.org"
source: hosted
version: "10.2.0"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
url: "https://pub.dartlang.org"
source: hosted
version: "9.0.7"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "3.9.0"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
petitparser:
dependency: transitive
description:

View file

@ -50,10 +50,6 @@ dependencies:
bottom_sheet: ^3.1.2
percent_indicator: ^4.2.2
store_checker: ^1.1.0
fl_downloader: ^1.0.3
install_plugin_v2: ^1.0.0
permission_handler_android: ^10.2.0
permission_handler: ^10.2.0
dev_dependencies:
flutter_test: