From e2382a146591ba7e973f6e1c70cc69d12ca289be Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 14 Nov 2023 17:35:16 +0800 Subject: [PATCH] refact, mobile, privacy mode menu Signed-off-by: fufesou --- flutter/lib/common/widgets/toolbar.dart | 28 ++++++----------------- flutter/lib/mobile/pages/remote_page.dart | 24 ++++++++++++++++++- flutter/lib/mobile/widgets/dialog.dart | 27 ++++++++++++++++++++++ 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/flutter/lib/common/widgets/toolbar.dart b/flutter/lib/common/widgets/toolbar.dart index 2d0e4bee3..4c739468c 100644 --- a/flutter/lib/common/widgets/toolbar.dart +++ b/flutter/lib/common/widgets/toolbar.dart @@ -481,15 +481,6 @@ Future> toolbarDisplayToggle( }, child: Text(translate('Lock after session end')))); } - // privacy mode - if (!isDesktop && ffiModel.keyboard && pi.features.privacyMode) { - final privacyModeState = PrivacyModeState.find(id); - final privacyModeList = - toolbarPrivacyMode(privacyModeState, context, id, ffi); - if (privacyModeList.isNotEmpty) { - v.addAll(privacyModeList); - } - } // swap key if (ffiModel.keyboard && ((Platform.isMacOS && pi.platform != kPeerPlatformMacOS) || @@ -612,19 +603,14 @@ List toolbarPrivacyMode( final implKey = (e as List)[0] as String; final implName = (e)[1] as String; return TToggleMenu( - child: Text(isDesktop - ? translate(implName) - : '${translate('Privacy mode')} - ${translate(implName)}'), + child: Text(translate(implName)), value: privacyModeState.value == implKey, - onChanged: - (privacyModeState.isEmpty || privacyModeState.value == implKey) - ? (value) { - if (value == null) return; - togglePrivacyModeTime = DateTime.now(); - bind.sessionTogglePrivacyMode( - sessionId: sessionId, implKey: implKey); - } - : null); + onChanged: (value) { + if (value == null) return; + togglePrivacyModeTime = DateTime.now(); + bind.sessionTogglePrivacyMode( + sessionId: sessionId, implKey: implKey); + }); }).toList(); } } diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index 6afb58eac..05bf433fe 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -21,6 +21,7 @@ import '../../models/input_model.dart'; import '../../models/model.dart'; import '../../models/platform_model.dart'; import '../../utils/image.dart'; +import '../widgets/dialog.dart'; final initText = '1' * 1024; @@ -807,6 +808,16 @@ void showOptions( List displayToggles = await toolbarDisplayToggle(context, id, gFFI); + List privacyModeList = []; + // privacy mode + final privacyModeState = PrivacyModeState.find(id); + if (gFFI.ffiModel.keyboard && gFFI.ffiModel.pi.features.privacyMode) { + privacyModeList = toolbarPrivacyMode(privacyModeState, context, id, gFFI); + if (privacyModeList.length == 1) { + displayToggles.add(privacyModeList[0]); + } + } + dialogManager.show((setState, close, context) { var viewStyle = (viewStyleRadios.isNotEmpty ? viewStyleRadios[0].groupValue : '').obs; @@ -849,10 +860,21 @@ void showOptions( title: e.value.child))) .toList(); + Widget privacyModeWidget = Offstage(); + if (privacyModeList.length > 1) { + privacyModeWidget = ListTile( + contentPadding: EdgeInsets.zero, + visualDensity: VisualDensity.compact, + title: Text(translate('Privacy mode')), + onTap: () => setPrivacyModeDialog( + dialogManager, privacyModeList, privacyModeState), + ); + } + return CustomAlertDialog( content: Column( mainAxisSize: MainAxisSize.min, - children: displays + radios + toggles), + children: displays + radios + toggles + [privacyModeWidget]), ); }, clickMaskDismiss: true, backDismiss: true); } diff --git a/flutter/lib/mobile/widgets/dialog.dart b/flutter/lib/mobile/widgets/dialog.dart index 3e745ecce..649e6d226 100644 --- a/flutter/lib/mobile/widgets/dialog.dart +++ b/flutter/lib/mobile/widgets/dialog.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common/widgets/setting_widgets.dart'; +import 'package:flutter_hbb/common/widgets/toolbar.dart'; import 'package:get/get.dart'; import '../../common.dart'; @@ -259,6 +260,32 @@ void showServerSettingsWithValue( }); } +void setPrivacyModeDialog( + OverlayDialogManager dialogManager, + List privacyModeList, + RxString privacyModeState, +) async { + dialogManager.dismissAll(); + dialogManager.show((setState, close, context) { + return CustomAlertDialog( + title: Text(translate('Privacy mode')), + content: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: privacyModeList + .map((value) => CheckboxListTile( + contentPadding: EdgeInsets.zero, + visualDensity: VisualDensity.compact, + title: value.child, + value: value.value, + onChanged: (privacyModeState.isEmpty || value.value) + ? value.onChanged + : null, + )) + .toList()), + ); + }, backDismiss: true, clickMaskDismiss: true); +} + Future validateAsync(String value) async { value = value.trim(); if (value.isEmpty) {