@@ -5,6 +5,7 @@ import 'dart:ui';
55
66import 'package:app_links/app_links.dart' ;
77import 'package:flutter/material.dart' ;
8+ import 'package:flutter/services.dart' ;
89import 'package:flutter_foreground_task/flutter_foreground_task.dart' ;
910import 'package:get/get.dart' ;
1011import 'package:launch_at_startup/launch_at_startup.dart' ;
@@ -69,6 +70,7 @@ class PendingUpdateTask {
6970
7071class AppController extends GetxController with WindowListener , TrayListener {
7172 static StartConfig ? _defaultStartConfig;
73+ static const _nativeChannel = MethodChannel ('gopeed.com/libgopeed' );
7274
7375 /// Command line --hidden flag passed from main.dart
7476 final bool hiddenFromArgs;
@@ -79,6 +81,7 @@ class AppController extends GetxController with WindowListener, TrayListener {
7981 final startConfig = StartConfig ().obs;
8082 final runningPort = 0. obs;
8183 final downloaderConfig = DownloaderConfig ().obs;
84+ var androidDialogMode = false ;
8285
8386 /// The task that is pending URL update via listen mode.
8487 /// Stored here in AppController to persist across page navigations.
@@ -124,9 +127,11 @@ class AppController extends GetxController with WindowListener, TrayListener {
124127 void onClose () {
125128 _linkSubscription? .cancel ();
126129 trayManager.removeListener (this );
127- HostRpcService .instance.stop ();
128- WebViewRpcService .instance.stop ();
129- LibgopeedBoot .instance.stop ();
130+ if (! androidDialogMode) {
131+ HostRpcService .instance.stop ();
132+ WebViewRpcService .instance.stop ();
133+ LibgopeedBoot .instance.stop ();
134+ }
130135 }
131136
132137 @override
@@ -182,6 +187,7 @@ class AppController extends GetxController with WindowListener, TrayListener {
182187 // For web, just show window
183188 return ;
184189 }
190+ androidDialogMode = await _isAndroidDialogMode ();
185191
186192 // Handle deep link
187193 _appLinks = AppLinks ();
@@ -241,6 +247,18 @@ class AppController extends GetxController with WindowListener, TrayListener {
241247 }
242248 }
243249
250+ Future <bool > _isAndroidDialogMode () async {
251+ if (! Util .isAndroid ()) {
252+ return false ;
253+ }
254+ try {
255+ return await _nativeChannel.invokeMethod <bool >('isDialogMode' ) ?? false ;
256+ } catch (e) {
257+ logger.w ("get android dialog mode fail" , e);
258+ return false ;
259+ }
260+ }
261+
244262 Future <void > _initWindows () async {
245263 if (! Util .isDesktop ()) {
246264 return ;
@@ -440,9 +458,7 @@ class AppController extends GetxController with WindowListener, TrayListener {
440458 } else {
441459 path = (await toFile (uri.toString ())).path;
442460 }
443- Get .rootDelegate.offAndToNamed (Routes .REDIRECT ,
444- arguments: RedirectArgs (Routes .CREATE ,
445- arguments: CreateTask (req: Request (url: path))));
461+ _handleToCreate0 (CreateTask (req: Request (url: path)));
446462 }
447463
448464 String runningAddress () {
@@ -697,8 +713,10 @@ class AppController extends GetxController with WindowListener, TrayListener {
697713 }
698714
699715 _handleToCreate0 (CreateTask createTaskParams) {
716+ final targetRoute =
717+ androidDialogMode ? Routes .QUICK_CREATE : Routes .CREATE ;
700718 Get .rootDelegate.offAndToNamed (Routes .REDIRECT ,
701- arguments: RedirectArgs (Routes . CREATE , arguments: createTaskParams));
719+ arguments: RedirectArgs (targetRoute , arguments: createTaskParams));
702720 }
703721
704722 _handleToExtension (String params) {
0 commit comments