diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 365ce3dd5..5cd54a0a8 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -17,6 +17,8 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:window_manager/window_manager.dart'; import 'common/widgets/overlay.dart'; +import 'mobile/pages/file_manager_page.dart'; +import 'mobile/pages/remote_page.dart'; import 'models/model.dart'; import 'models/platform_model.dart'; @@ -1071,14 +1073,38 @@ void connect(BuildContext context, String id, assert(!(isFileTransfer && isTcpTunneling && isRDP), "more than one connect type"); - FocusScopeNode currentFocus = FocusScope.of(context); - if (isFileTransfer) { - await rustDeskWinManager.newFileTransfer(id); - } else if (isTcpTunneling || isRDP) { - await rustDeskWinManager.newPortForward(id, isRDP); + if (isDesktop) { + if (isFileTransfer) { + await rustDeskWinManager.newFileTransfer(id); + } else if (isTcpTunneling || isRDP) { + await rustDeskWinManager.newPortForward(id, isRDP); + } else { + await rustDeskWinManager.newRemoteDesktop(id); + } } else { - await rustDeskWinManager.newRemoteDesktop(id); + if (isFileTransfer) { + if (!await PermissionManager.check("file")) { + if (!await PermissionManager.request("file")) { + return; + } + } + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => FileManagerPage(id: id), + ), + ); + } else { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => RemotePage(id: id), + ), + ); + } } + + FocusScopeNode currentFocus = FocusScope.of(context); if (!currentFocus.hasPrimaryFocus) { currentFocus.unfocus(); } diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index bf0c93de5..7eae2aa5f 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -77,8 +77,11 @@ class _PeerCardState extends State<_PeerCard> subtitle: Text('${peer.username}@${peer.hostname}'), title: Text(peer.alias.isEmpty ? formatID(peer.id) : peer.alias), leading: Container( + decoration: BoxDecoration( + color: str2color('${peer.id}${peer.platform}', 0x7f), + borderRadius: BorderRadius.circular(4), + ), padding: const EdgeInsets.all(6), - color: str2color('${peer.id}${peer.platform}', 0x7f), child: getPlatformImage(peer.platform)), trailing: InkWell( child: const Padding( @@ -458,7 +461,7 @@ abstract class BasePeerCard extends StatelessWidget { } await bind.mainSetPeerOption(id: id, key: option, value: value); }, - dismissOnClicked: true, + dismissOnClicked: false, ); } @@ -543,7 +546,6 @@ abstract class BasePeerCard extends StatelessWidget { if (favs.remove(id)) { await bind.mainStoreFav(favs: favs); await reloadFunc(); - // Get.forceAppUpdate(); // TODO use inner model / state } }(); }, @@ -624,15 +626,13 @@ class RecentPeerCard extends BasePeerCard { final List> menuItems = [ _connectAction(context, peer), _transferFileAction(context, peer.id), - _tcpTunnelingAction(context, peer.id), ]; - MenuEntryBase? rdpAction; - if (peer.platform == 'Windows') { - rdpAction = _rdpAction(context, peer.id); + if (isDesktop) { + menuItems.add(_tcpTunnelingAction(context, peer.id)); } menuItems.add(await _forceAlwaysRelayAction(peer.id)); - if (rdpAction != null) { - menuItems.add(rdpAction); + if (peer.platform == 'Windows') { + menuItems.add(_rdpAction(context, peer.id)); } menuItems.add(_wolAction(peer.id)); menuItems.add(MenuEntryDivider()); @@ -656,15 +656,13 @@ class FavoritePeerCard extends BasePeerCard { final List> menuItems = [ _connectAction(context, peer), _transferFileAction(context, peer.id), - _tcpTunnelingAction(context, peer.id), ]; - MenuEntryBase? rdpAction; - if (peer.platform == 'Windows') { - rdpAction = _rdpAction(context, peer.id); + if (isDesktop) { + menuItems.add(_tcpTunnelingAction(context, peer.id)); } menuItems.add(await _forceAlwaysRelayAction(peer.id)); - if (rdpAction != null) { - menuItems.add(rdpAction); + if (peer.platform == 'Windows') { + menuItems.add(_rdpAction(context, peer.id)); } menuItems.add(_wolAction(peer.id)); menuItems.add(MenuEntryDivider()); @@ -690,15 +688,13 @@ class DiscoveredPeerCard extends BasePeerCard { final List> menuItems = [ _connectAction(context, peer), _transferFileAction(context, peer.id), - _tcpTunnelingAction(context, peer.id), ]; - MenuEntryBase? rdpAction; - if (peer.platform == 'Windows') { - rdpAction = _rdpAction(context, peer.id); + if (isDesktop) { + menuItems.add(_tcpTunnelingAction(context, peer.id)); } menuItems.add(await _forceAlwaysRelayAction(peer.id)); - if (rdpAction != null) { - menuItems.add(rdpAction); + if (peer.platform == 'Windows') { + menuItems.add(_rdpAction(context, peer.id)); } menuItems.add(_wolAction(peer.id)); menuItems.add(MenuEntryDivider()); @@ -721,15 +717,13 @@ class AddressBookPeerCard extends BasePeerCard { final List> menuItems = [ _connectAction(context, peer), _transferFileAction(context, peer.id), - _tcpTunnelingAction(context, peer.id), ]; - MenuEntryBase? rdpAction; - if (peer.platform == 'Windows') { - rdpAction = _rdpAction(context, peer.id); + if (isDesktop) { + menuItems.add(_tcpTunnelingAction(context, peer.id)); } menuItems.add(await _forceAlwaysRelayAction(peer.id)); - if (rdpAction != null) { - menuItems.add(rdpAction); + if (peer.platform == 'Windows') { + menuItems.add(_rdpAction(context, peer.id)); } menuItems.add(_wolAction(peer.id)); menuItems.add(MenuEntryDivider()); diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 2a1fe9909..3ed3dc11d 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -113,7 +113,7 @@ class _PeerTabPageState extends State color: _tabIndex.value == t.key ? MyTheme.color(context).bg : null, - borderRadius: BorderRadius.circular(2), + borderRadius: BorderRadius.circular(isDesktop ? 2 : 6), ), child: Align( alignment: Alignment.center, diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index 0778bec4e..6156223b5 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common/formatter/id_formatter.dart'; -import 'package:flutter_hbb/mobile/pages/file_manager_page.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -15,7 +14,6 @@ import '../../consts.dart'; import '../../models/model.dart'; import '../../models/platform_model.dart'; import 'home_page.dart'; -import 'remote_page.dart'; import 'scan_page.dart'; import 'settings_page.dart'; @@ -97,38 +95,7 @@ class _ConnectionPageState extends State { /// Connects to the selected peer. void onConnect() { var id = _idController.id; - connect(id); - } - - /// Connect to a peer with [id]. - /// If [isFileTransfer], starts a session only for file transfer. - void connect(String id, {bool isFileTransfer = false}) async { - if (id == '') return; - id = id.replaceAll(' ', ''); - if (isFileTransfer) { - if (!await PermissionManager.check("file")) { - if (!await PermissionManager.request("file")) { - return; - } - } - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => FileManagerPage(id: id), - ), - ); - } else { - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => RemotePage(id: id), - ), - ); - } - FocusScopeNode currentFocus = FocusScope.of(context); - if (!currentFocus.hasPrimaryFocus) { - currentFocus.unfocus(); - } + connect(context, id); } /// UI for software update.