diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f0ba1b93..4279abba 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -268,6 +268,7 @@ jobs:
gomobile init
gomobile bind -tags nosqlite -ldflags="-w -s" -o ui/flutter/android/app/libs/libgopeed.aar -target=android -androidapi 19 -javapkg=com.gopeed github.com/monkeyWie/gopeed/bind/mobile
cd ui/flutter
+ echo $APK_KEYSTORE | base64 -d > android/app/upload-keystore.jks
flutter build apk
mkdir dist
cp build/app/outputs/flutter-apk/app-release.apk dist/Gopeed-$VERSION-android.apk
diff --git a/ui/flutter/android/app/build.gradle b/ui/flutter/android/app/build.gradle
index 9fd7e9fe..8e1a322d 100644
--- a/ui/flutter/android/app/build.gradle
+++ b/ui/flutter/android/app/build.gradle
@@ -53,11 +53,22 @@ android {
versionName flutterVersionName
}
+ signingConfigs {
+ release {
+ keyAlias "upload"
+ keyPassword System.getenv("APK_KEY_PASSWORD")
+ storeFile file("upload-keystore.jks")
+ storePassword System.getenv("APK_STORE_PASSWORD")
+ }
+ }
+
buildTypes {
release {
- // TODO: Add your own signing config for the release build.
- // Signing with the debug keys for now, so `flutter run --release` works.
- signingConfig signingConfigs.debug
+ if (signingConfigs.release.keyPassword != null) {
+ signingConfig signingConfigs.release
+ } else {
+ signingConfig signingConfigs.debug
+ }
}
}
diff --git a/ui/flutter/android/app/src/debug/AndroidManifest.xml b/ui/flutter/android/app/src/debug/AndroidManifest.xml
index 5492f719..21e7544e 100644
--- a/ui/flutter/android/app/src/debug/AndroidManifest.xml
+++ b/ui/flutter/android/app/src/debug/AndroidManifest.xml
@@ -4,9 +4,5 @@
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
-
-
-
-
diff --git a/ui/flutter/android/app/src/main/AndroidManifest.xml b/ui/flutter/android/app/src/main/AndroidManifest.xml
index 9fcb0b2c..731921e2 100644
--- a/ui/flutter/android/app/src/main/AndroidManifest.xml
+++ b/ui/flutter/android/app/src/main/AndroidManifest.xml
@@ -2,11 +2,8 @@
package="com.gopeed">
-
-
diff --git a/ui/flutter/android/app/src/profile/AndroidManifest.xml b/ui/flutter/android/app/src/profile/AndroidManifest.xml
index 5492f719..21e7544e 100644
--- a/ui/flutter/android/app/src/profile/AndroidManifest.xml
+++ b/ui/flutter/android/app/src/profile/AndroidManifest.xml
@@ -4,9 +4,5 @@
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
-
-
-
-
diff --git a/ui/flutter/lib/pages/app/app_controller.dart b/ui/flutter/lib/pages/app/app_controller.dart
index 63cae985..c8941e09 100644
--- a/ui/flutter/lib/pages/app/app_controller.dart
+++ b/ui/flutter/lib/pages/app/app_controller.dart
@@ -1,7 +1,6 @@
import 'dart:convert';
import 'dart:ui' as ui;
-import 'package:external_path/external_path.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:path_provider/path_provider.dart';
@@ -157,23 +156,16 @@ class AppController extends GetxController {
extra.bt.trackerSubscribeUrls.addAll(allTrackerSubscribeUrls);
}
- if (Util.isAndroid()) {
- config.downloadDir =
- '${await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS)}/com.gopeed';
+ if (Util.isDesktop()) {
+ config.downloadDir = (await getDownloadsDirectory())?.path ?? "./";
+ } else if (Util.isAndroid()) {
+ config.downloadDir = (await getExternalStorageDirectory())?.path ??
+ (await getApplicationDocumentsDirectory()).path;
return;
- }
- if (Util.isIOS()) {
- config.downloadDir = 'Documents';
- return;
- }
-
- if (config.downloadDir.isEmpty) {
- if (Util.isWeb()) {
- config.downloadDir = './';
- }
- if (Util.isDesktop()) {
- config.downloadDir = (await getDownloadsDirectory())?.path ?? "./";
- }
+ } else if (Util.isIOS()) {
+ config.downloadDir = (await getApplicationDocumentsDirectory()).path;
+ } else {
+ config.downloadDir = './';
}
}
diff --git a/ui/flutter/lib/pages/app/app_view.dart b/ui/flutter/lib/pages/app/app_view.dart
index d51edc21..1b95421e 100644
--- a/ui/flutter/lib/pages/app/app_view.dart
+++ b/ui/flutter/lib/pages/app/app_view.dart
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
+import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:get/get.dart';
import '../../i18n/messages.dart';
@@ -20,6 +21,12 @@ class AppView extends GetView {
translations: messages,
locale: toLocale(config.extra.locale),
fallbackLocale: fallbackLocale,
+ localizationsDelegates: const [
+ GlobalMaterialLocalizations.delegate,
+ GlobalWidgetsLocalizations.delegate,
+ GlobalCupertinoLocalizations.delegate,
+ ],
+ supportedLocales: messages.keys.keys.map((e) => toLocale(e)).toList(),
getPages: Routes.routes,
);
}
diff --git a/ui/flutter/lib/pages/create/create_view.dart b/ui/flutter/lib/pages/create/create_view.dart
index 2f56532b..1c183307 100644
--- a/ui/flutter/lib/pages/create/create_view.dart
+++ b/ui/flutter/lib/pages/create/create_view.dart
@@ -1,7 +1,6 @@
import 'package:desktop_drop/desktop_drop.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:permission_handler/permission_handler.dart';
import 'package:rounded_loading_button/rounded_loading_button.dart';
import '../../api/api.dart';
@@ -171,13 +170,15 @@ class CreateView extends GetView {
try {
if (createFormKey.currentState!.validate()) {
downloadController.start();
- if (Util.isAndroid()) {
- if (!await Permission.storage.request().isGranted) {
- Get.snackbar('error'.tr,
- 'create.error.noStoragePermission'.tr);
- return;
- }
- }
+
+ // if (Util.isAndroid()) {
+ // if (!await Permission.storage.request().isGranted) {
+ // Get.snackbar('error'.tr,
+ // 'create.error.noStoragePermission'.tr);
+ // return;
+ // }
+ // }
+
await createTask(CreateTask(
res: res,
opts: Options(
diff --git a/ui/flutter/lib/pages/task/task_view.dart b/ui/flutter/lib/pages/task/task_view.dart
index a8c12d4d..2f757481 100644
--- a/ui/flutter/lib/pages/task/task_view.dart
+++ b/ui/flutter/lib/pages/task/task_view.dart
@@ -30,13 +30,14 @@ class Item extends StatelessWidget {
),
Row(
children: [
- Expanded(
+ SizedBox(
+ width: 180,
child: Text(
- "${isDone() ? "" : "${Util.fmtByte(task.progress.downloaded)} / "}${Util.fmtByte(task.size)}",
- style: context.textTheme.bodyText1
- ?.copyWith(color: Get.theme.disabledColor),
- ).padding(left: 18)),
- Expanded(
+ "${isDone() ? "" : "${Util.fmtByte(task.progress.downloaded)} / "}${Util.fmtByte(task.size)}",
+ style: context.textTheme.bodyText1
+ ?.copyWith(color: Get.theme.disabledColor),
+ ).padding(left: 18)),
+ Flexible(
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
diff --git a/ui/flutter/pubspec.lock b/ui/flutter/pubspec.lock
index 1d2add2c..ee1bf4ff 100644
--- a/ui/flutter/pubspec.lock
+++ b/ui/flutter/pubspec.lock
@@ -197,13 +197,6 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.0.6"
- external_path:
- dependency: "direct main"
- description:
- name: external_path
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "1.0.3"
fake_async:
dependency: transitive
description:
@@ -309,6 +302,11 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.1"
+ flutter_localizations:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -564,41 +562,6 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.3"
- permission_handler:
- dependency: "direct main"
- description:
- name: permission_handler
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "10.1.0"
- permission_handler_android:
- dependency: transitive
- description:
- name: permission_handler_android
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "10.1.0"
- permission_handler_apple:
- dependency: transitive
- description:
- name: permission_handler_apple
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "9.0.6"
- permission_handler_platform_interface:
- dependency: transitive
- description:
- name: permission_handler_platform_interface
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "3.9.0"
- permission_handler_windows:
- dependency: transitive
- description:
- name: permission_handler_windows
- url: "https://pub.flutter-io.cn"
- source: hosted
- version: "0.1.1"
petitparser:
dependency: transitive
description:
diff --git a/ui/flutter/pubspec.yaml b/ui/flutter/pubspec.yaml
index 03989c60..8cddc9d8 100644
--- a/ui/flutter/pubspec.yaml
+++ b/ui/flutter/pubspec.yaml
@@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-version: 1.2.2+1
+version: 1.2.3+1
environment:
sdk: ">=2.17.6 <3.0.0"
@@ -29,6 +29,8 @@ environment:
dependencies:
flutter:
sdk: flutter
+ flutter_localizations:
+ sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
@@ -46,8 +48,6 @@ dependencies:
rounded_loading_button: ^2.1.0
url_launcher: ^6.1.6
shared_preferences: ^2.0.15
- permission_handler: ^10.1.0
- external_path: ^1.0.3
logger: ^1.1.0
desktop_drop: ^0.3.3
intl: ^0.17.0