mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-04-20 05:49:12 +00:00
Changed update download method
This commit is contained in:
parent
d332f19684
commit
a1709d0960
8 changed files with 24 additions and 249 deletions
|
@ -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>
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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}"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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}"),
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
49
pubspec.lock
49
pubspec.lock
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue