diff --git a/android/build.gradle b/android/build.gradle index 249165164c..47890036d0 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -24,6 +24,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/lib/core/logging/super_logging.dart b/lib/core/logging/super_logging.dart index 095e888f2f..7b62d0a705 100644 --- a/lib/core/logging/super_logging.dart +++ b/lib/core/logging/super_logging.dart @@ -310,7 +310,7 @@ class SuperLogging { if (_preferences.containsKey(keyShouldReportErrors)) { return _preferences.getBool(keyShouldReportErrors)!; } else { - return false; + return kDebugMode; } } diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index e5ac80b1ca..7a29ce4677 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -253,6 +253,10 @@ "privacy": "Privacy", "terms": "Terms", "checkForUpdates": "Check for updates", + "downloadUpdate": "Download", + "criticalUpdateAvailable": "Critical update available", + "updateAvailable": "Update available", + "update": "Update", "checking": "Checking...", "youAreOnTheLatestVersion": "You are on the latest version", "warning": "Warning", diff --git a/lib/ui/settings/app_update_dialog.dart b/lib/ui/settings/app_update_dialog.dart index c6286b1647..eba357285b 100644 --- a/lib/ui/settings/app_update_dialog.dart +++ b/lib/ui/settings/app_update_dialog.dart @@ -1,12 +1,15 @@ - +import 'dart:io'; import 'package:ente_auth/core/configuration.dart'; import 'package:ente_auth/core/network.dart'; import 'package:ente_auth/ente_theme_data.dart'; +import 'package:ente_auth/l10n/l10n.dart'; import 'package:ente_auth/services/update_service.dart'; +import 'package:ente_auth/theme/ente_theme.dart'; import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:open_filex/open_filex.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class AppUpdateDialog extends StatefulWidget { final LatestVersionInfo? latestVersionInfo; @@ -20,6 +23,7 @@ class AppUpdateDialog extends StatefulWidget { class _AppUpdateDialogState extends State { @override Widget build(BuildContext context) { + final enteTextTheme = getEnteTextTheme(context); final List changelog = []; for (final log in widget.latestVersionInfo!.changelog) { changelog.add( @@ -41,18 +45,19 @@ class _AppUpdateDialogState extends State { Text( widget.latestVersionInfo!.name!, style: const TextStyle( - fontSize: 20, + fontSize: 14, fontWeight: FontWeight.bold, ), ), const Padding(padding: EdgeInsets.all(8)), - const Text( - "Changelog", - style: TextStyle( - fontSize: 18, + if (changelog.isNotEmpty) + const Text( + "Changelog", + style: TextStyle( + fontSize: 18, + ), ), - ), - const Padding(padding: EdgeInsets.all(4)), + if (changelog.isNotEmpty) const Padding(padding: EdgeInsets.all(4)), Column( crossAxisAlignment: CrossAxisAlignment.start, children: changelog, @@ -69,18 +74,12 @@ class _AppUpdateDialogState extends State { }, ), ), - onPressed: () async { - Navigator.pop(context); - showDialog( - context: context, - builder: (BuildContext context) { - return ApkDownloaderDialog(widget.latestVersionInfo); - }, - barrierDismissible: false, - ); - }, - child: const Text( - "Update", + onPressed: () => launchUrlString( + widget.latestVersionInfo!.url!, + mode: LaunchMode.externalApplication, + ), + child: Text( + context.l10n.downloadUpdate, ), ), ), @@ -91,8 +90,24 @@ class _AppUpdateDialogState extends State { return WillPopScope( onWillPop: () async => !shouldForceUpdate, child: AlertDialog( - title: Text( - shouldForceUpdate ? "Critical update available" : "Update available", + title: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon( + Icons.auto_awesome_outlined, + size: 24, + color: getEnteColorScheme(context).strokeMuted, + ), + const SizedBox( + height: 16, + ), + Text( + shouldForceUpdate + ? context.l10n.criticalUpdateAvailable + : context.l10n.updateAvailable, + style: enteTextTheme.h3Bold, + ), + ], ), content: content, ), @@ -147,15 +162,17 @@ class _ApkDownloaderDialogState extends State { Future _downloadApk() async { try { - await Network.instance.getDio().download( - widget.versionInfo!.url!, - _saveUrl, - onReceiveProgress: (count, _) { - setState(() { - _downloadProgress = count / widget.versionInfo!.size!; - }); - }, - ); + if (!File(_saveUrl!).existsSync()) { + await Network.instance.getDio().download( + widget.versionInfo!.url!, + _saveUrl, + onReceiveProgress: (count, _) { + setState(() { + _downloadProgress = count / widget.versionInfo!.size!; + }); + }, + ); + } Navigator.of(context, rootNavigator: true).pop('dialog'); OpenFilex.open(_saveUrl); } catch (e) {