diff --git a/android/app/build.gradle b/android/app/build.gradle index e0ad489..0bd8618 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -74,7 +74,7 @@ android { } debug { applicationIdSuffix '.debug' - versionNameSuffix ' DEBUG' + versionNameSuffix '-debug' } } diff --git a/android/app/src/main/java/r/r/refreezer/MainActivity.java b/android/app/src/main/java/r/r/refreezer/MainActivity.java index b0377cf..e0ac7cb 100644 --- a/android/app/src/main/java/r/r/refreezer/MainActivity.java +++ b/android/app/src/main/java/r/r/refreezer/MainActivity.java @@ -219,18 +219,7 @@ public class MainActivity extends AudioServiceActivity { result.success(null); return; } - // Check if can request package install permission - if (call.method.equals("checkInstallPackagesPermission")) { - result.success(canRequestPackageInstalls()); - return; - } - // Request package install permission - if (call.method.equals("requestInstallPackagesPermission")) { - requestInstallPackagesPermission(); - result.success(true); - return; - } - + result.error("0", "Not implemented!", "Not implemented!"); })); @@ -249,19 +238,6 @@ public class MainActivity extends AudioServiceActivity { })); } - private boolean canRequestPackageInstalls() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - return getPackageManager().canRequestPackageInstalls(); - } - return true; - } - - private void requestInstallPackagesPermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - startActivity(new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:" + getPackageName()))); - } - } - //Start/Bind/Reconnect to download service private void connectService() { if (serviceBound) diff --git a/lib/languages/en_us.dart b/lib/languages/en_us.dart index 2bdda4b..caead08 100644 --- a/lib/languages/en_us.dart +++ b/lib/languages/en_us.dart @@ -444,5 +444,9 @@ const language_en_us = { // 0.7.13 'Download failed!': 'Download failed!', + + // 0.7.14 + 'Permission denied, download canceled!': + 'Permission denied, download canceled!', } }; diff --git a/lib/ui/updater.dart b/lib/ui/updater.dart index 4a4ca92..ed1ec0c 100644 --- a/lib/ui/updater.dart +++ b/lib/ui/updater.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:fluttertoast/fluttertoast.dart'; @@ -13,6 +12,7 @@ import 'package:open_filex/open_filex.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; +import 'package:permission_handler/permission_handler.dart'; import '../api/cache.dart'; import '../api/download.dart'; @@ -29,7 +29,6 @@ class UpdaterScreen extends StatefulWidget { } class _UpdaterScreenState extends State { - static const MethodChannel _platform = MethodChannel('r.r.refreezer/native'); bool _loading = true; bool _error = false; ReFreezerLatest? _latestRelease; @@ -38,27 +37,22 @@ class _UpdaterScreenState extends State { double _progress = 0.0; bool _buttonEnabled = true; - static Future _checkInstallPackagesPermission() async { - try { - return await _platform.invokeMethod('checkInstallPackagesPermission'); - } catch (e) { - Logger.root.severe('Failed to check install packages permission', e); - return false; - } - } - - static Future _requestInstallPackagesPermission() async { - try { - await _platform.invokeMethod('requestInstallPackagesPermission'); - } catch (e) { - Logger.root.severe('Failed to request install packages permission', e); + Future _hasInstallPackagesPermission() async { + if (await Permission.requestInstallPackages.isDenied) { + final status = await Permission.requestInstallPackages.request(); + if (status.isGranted) { + return true; + } else { + return false; + } } + return true; } Future _load() async { - // Load current version (convert DEBUG mode to SemVer) + // Load current version PackageInfo info = await PackageInfo.fromPlatform(); - String versionString = info.version.replaceFirst(' DEBUG', '-debug'); + String versionString = info.version; // Parse the version string setState(() { @@ -91,8 +85,16 @@ class _UpdaterScreenState extends State { } Future _download() async { - if (!await _checkInstallPackagesPermission()) { - await _requestInstallPackagesPermission(); + if (!await _hasInstallPackagesPermission()) { + Fluttertoast.showToast( + msg: 'Permission denied, download canceled!'.i18n, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM); + setState(() { + _progress = 0.0; + _buttonEnabled = true; + }); + return; } try { @@ -203,10 +205,6 @@ class _UpdaterScreenState extends State { const FreezerDivider(), Padding( padding: const EdgeInsets.fromLTRB(16, 4, 16, 8), - /*child: Text( - _latestRelease?.changelog ?? '', - style: const TextStyle(fontSize: 16.0), - ),*/ child: Container( constraints: const BoxConstraints( maxHeight: 350 // Screen Title height, ... @@ -354,9 +352,9 @@ class ReFreezerLatest { AndroidNotificationDetails androidNotificationDetails = AndroidNotificationDetails( - 'freezerupdates', - 'Freezer Updates'.i18n, - channelDescription: 'Freezer Updates'.i18n, + 'refreezerupdates', + 'ReFreezer Updates'.i18n, + channelDescription: 'ReFreezer Updates'.i18n, importance: Importance.high, priority: Priority.high, );