diff --git a/.github/workflows/release-beta.yaml b/.github/workflows/release-beta.yaml
new file mode 100644
index 0000000..b3cd1eb
--- /dev/null
+++ b/.github/workflows/release-beta.yaml
@@ -0,0 +1,102 @@
+name: Compile and release beta build
+
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: "Version (beta)"
+ required: true
+ default: "1.0.0-beta.1"
+ number:
+ description: "Build number"
+ required: true
+ default: "1"
+jobs:
+ build-android:
+ name: Build Android .apk and .aab
+ runs-on: ubuntu-latest
+ env:
+ ANDROID_AAB_RELEASE_PATH: build/app/outputs/bundle/release
+ ANDROID_APK_RELEASE_PATH: build/app/outputs/apk/release
+ steps:
+ - uses: actions/checkout@v3
+ - name: Decode android/app/keystore.jks
+ run: echo "${{ secrets.KEYSTORE_JKS }}" | base64 --decode > android/app/keystore.jks
+ - name: Decode android/key.properties
+ run: echo "${{ secrets.KEY_PROPERTIES }}" | base64 --decode > android/key.properties
+ - name: Decode .env
+ run: echo "${{ secrets.ENV }}" | base64 --decode > .env
+ - name: Update version in YAML
+ run: sed -i 's/99.99.99+99/${{ github.event.inputs.version }}+${{ github.event.inputs.number }}/g' pubspec.yaml
+ - name: Update KeyStore password in gradle properties
+ run: sed -i 's/#{KEYSTORE_PASS}#/${{ secrets.KEYSTORE_PASS }}/g' android/key.properties
+ - name: Update KeyStore key password in gradle properties
+ run: sed -i 's/#{KEYSTORE_KEY_PASS}#/${{ secrets.KEYSTORE_KEY_PASS }}/g' android/key.properties
+ - uses: actions/setup-java@v3
+ with:
+ distribution: 'zulu'
+ java-version: '18.x'
+ - uses: subosito/flutter-action@v2
+ with:
+ channel: "stable"
+ - run: flutter clean
+ - run: flutter pub get
+ - run: flutter build apk --release
+ - run: flutter build appbundle --release
+ - name: Rename apk
+ run: mv $ANDROID_APK_RELEASE_PATH/app-release.apk $ANDROID_APK_RELEASE_PATH/AdGuardHomeManager_${{ github.event.inputs.version }}_Android.apk
+ - name: Rename aab
+ run: mv $ANDROID_AAB_RELEASE_PATH/app-release.aab $ANDROID_AAB_RELEASE_PATH/AdGuardHomeManager_${{ github.event.inputs.version }}_Android.aab
+ - name: Copy apk to project root
+ run: cp $ANDROID_APK_RELEASE_PATH/AdGuardHomeManager_${{ github.event.inputs.version }}_Android.apk AdGuardHomeManager_${{ github.event.inputs.version }}_Android.apk
+ - name: Copy aab to project root
+ run: cp $ANDROID_AAB_RELEASE_PATH/AdGuardHomeManager_${{ github.event.inputs.version }}_Android.aab AdGuardHomeManager_${{ github.event.inputs.version }}_Android.aab
+ - name: Upload artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: android
+ path: |
+ AdGuardHomeManager_${{ github.event.inputs.version }}_Android.aab
+ AdGuardHomeManager_${{ github.event.inputs.version }}_Android.apk
+ release-builds-github:
+ name: Release beta build to GitHub
+ runs-on: ubuntu-latest
+ needs: [build-android]
+ steps:
+ - uses: actions/checkout@v3
+ - name: Create builds directory
+ run: mkdir releases
+ - name: Download Android artifacts
+ uses: actions/download-artifact@v3
+ with:
+ name: android
+ path: releases/
+ - name: Release to GitHub
+ uses: ncipollo/release-action@v1
+ with:
+ artifacts: "releases/*"
+ token: ${{ secrets.GH_TOKEN }}
+ tag: '${{ github.event.inputs.version }}_(${{ github.event.inputs.number }})'
+ name: v${{ github.event.inputs.version }}
+ draft: true
+ prerelease: true
+ commit: ${{ github.sha }}
+ release-build-google-play:
+ name: Release Android beta build to the Google Play Store
+ runs-on: ubuntu-latest
+ needs: [build-android]
+ steps:
+ - uses: actions/checkout@v3
+ - name: Download Android artifacts
+ uses: actions/download-artifact@v3
+ with:
+ name: android
+ - name: Release app to Google Play
+ uses: r0adkll/upload-google-play@v1
+ with:
+ serviceAccountJsonPlainText: ${{ secrets.PLAYSTORE_ACCOUNT_KEY }}
+ packageName: com.jgeek00.adguard_home_manager
+ releaseFiles: AdGuardHomeManager_${{ github.event.inputs.version }}_Android.aab
+ track: beta
+ status: draft
+ releaseName: ${{ github.event.inputs.version }}
\ No newline at end of file
diff --git a/.github/workflows/release.yaml b/.github/workflows/release-stable.yaml
similarity index 100%
rename from .github/workflows/release.yaml
rename to .github/workflows/release-stable.yaml
diff --git a/lib/base.dart b/lib/base.dart
index 5c6289b..b2b593b 100644
--- a/lib/base.dart
+++ b/lib/base.dart
@@ -1,15 +1,11 @@
// ignore_for_file: use_build_context_synchronously, depend_on_referenced_packages
-import 'dart:async';
-import 'dart:io';
-
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:animations/animations.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:provider/provider.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
-import 'package:store_checker/store_checker.dart';
import 'package:flutter/services.dart';
import 'package:adguard_home_manager/widgets/bottom_nav_bar.dart';
@@ -18,21 +14,14 @@ import 'package:adguard_home_manager/widgets/update_modal.dart';
import 'package:adguard_home_manager/widgets/navigation_rail.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
-import 'package:adguard_home_manager/functions/compare_versions.dart';
-import 'package:adguard_home_manager/models/github_release.dart';
+import 'package:adguard_home_manager/functions/check_app_updates.dart';
import 'package:adguard_home_manager/functions/open_url.dart';
-import 'package:adguard_home_manager/services/http_requests.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';
class Base extends StatefulWidget {
- final AppConfigProvider appConfigProvider;
-
- const Base({
- Key? key,
- required this.appConfigProvider,
- }) : super(key: key);
+ const Base({Key? key}) : super(key: key);
@override
State createState() => _BaseState();
@@ -41,35 +30,6 @@ class Base extends StatefulWidget {
class _BaseState extends State with WidgetsBindingObserver {
int selectedScreen = 0;
- Future checkInstallationSource() async {
- final result = await checkAppUpdatesGitHub();
- if (result['result'] == 'success') {
- final update = gitHubUpdateExists(widget.appConfigProvider.getAppInfo!.version, result['body'].tagName);
- if (update == true) {
- widget.appConfigProvider.setAppUpdatesAvailable(result['body']);
- if (Platform.isAndroid) {
- if (
- widget.appConfigProvider.installationSource == Source.IS_INSTALLED_FROM_LOCAL_SOURCE ||
- widget.appConfigProvider.installationSource == Source.IS_INSTALLED_FROM_PLAY_PACKAGE_INSTALLER ||
- widget.appConfigProvider.installationSource == Source.UNKNOWN
- ) {
- return result['body'];
- }
- else {
- return null;
- }
- }
- else if (Platform.isIOS) {
- return null;
- }
- else {
- return result['body'];
- }
- }
- }
- return null;
- }
-
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
@@ -77,9 +37,15 @@ class _BaseState extends State with WidgetsBindingObserver {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
- final result = await checkInstallationSource();
+ final appConfigProvider = Provider.of(context, listen: false);
+ final result = await checkAppUpdates(
+ currentBuildNumber: appConfigProvider.getAppInfo!.buildNumber,
+ installationSource: appConfigProvider.installationSource,
+ setUpdateAvailable: appConfigProvider.setAppUpdatesAvailable,
+ isBeta: appConfigProvider.getAppInfo!.version.contains('beta'),
+ );
- if (result != null && widget.appConfigProvider.doNotRememberVersion != result.tagName) {
+ if (result != null && appConfigProvider.doNotRememberVersion != result.tagName) {
await showDialog(
context: context,
builder: (context) => UpdateModal(
diff --git a/lib/constants/urls.dart b/lib/constants/urls.dart
index c8b1afa..cd92b8c 100644
--- a/lib/constants/urls.dart
+++ b/lib/constants/urls.dart
@@ -2,6 +2,6 @@ class Urls {
static const String playStore = "https://play.google.com/store/apps/details?id=com.jgeek00.adguard_home_manager";
static const String gitHub = "https://github.com/JGeek00/adguard-home-manager";
static const String customRuleDocs = "https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters";
- static const String checkLatestReleaseUrl = "https://api.github.com/repos/JGeek00/adguard-home-manager/releases/latest";
+ static const String getReleasesGitHub = "https://api.github.com/repos/JGeek00/adguard-home-manager/releases";
static const String adGuardHomeReleasesTags = "https://api.github.com/repos/AdGuardTeam/AdGuardHome/releases/tags";
}
\ No newline at end of file
diff --git a/lib/functions/app_update_download_link.dart b/lib/functions/app_update_download_link.dart
index 76c1a2d..48c798a 100644
--- a/lib/functions/app_update_download_link.dart
+++ b/lib/functions/app_update_download_link.dart
@@ -3,19 +3,23 @@ import 'dart:io';
import 'package:adguard_home_manager/models/github_release.dart';
String? getAppUpdateDownloadLink(GitHubRelease gitHubRelease) {
- if (Platform.isAndroid) {
- return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('apk')).browserDownloadUrl;
- }
- else if (Platform.isMacOS) {
- return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('macOS')).browserDownloadUrl; // macOS package is a zip
- }
- else if (Platform.isWindows) {
- return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('exe')).browserDownloadUrl;
- }
- else if (Platform.isLinux) {
- return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('deb')).browserDownloadUrl;
- }
- else {
+ try {
+ if (Platform.isAndroid) {
+ return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('apk')).browserDownloadUrl;
+ }
+ else if (Platform.isMacOS) {
+ return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('macOS')).browserDownloadUrl;
+ }
+ else if (Platform.isWindows) {
+ return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('exe')).browserDownloadUrl;
+ }
+ else if (Platform.isLinux) {
+ return gitHubRelease.assets.firstWhere((item) => item.browserDownloadUrl.contains('deb')).browserDownloadUrl;
+ }
+ else {
+ return null;
+ }
+ } catch (e) {
return null;
}
}
\ No newline at end of file
diff --git a/lib/functions/block_unblock_domain.dart b/lib/functions/block_unblock_domain.dart
deleted file mode 100644
index cc2c8ed..0000000
--- a/lib/functions/block_unblock_domain.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// ignore_for_file: use_build_context_synchronously
-
-import 'package:flutter/material.dart';
-import 'package:provider/provider.dart';
-import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-
-import 'package:adguard_home_manager/classes/process_modal.dart';
-import 'package:adguard_home_manager/models/filtering_status.dart';
-import 'package:adguard_home_manager/providers/app_config_provider.dart';
-import 'package:adguard_home_manager/providers/servers_provider.dart';
-import 'package:adguard_home_manager/services/http_requests.dart';
-
-Future