mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-06-07 09:52:49 +08:00
refact, mobile, privacy mode menu
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
90ac8b7b0b
commit
e2382a1465
@ -481,15 +481,6 @@ Future<List<TToggleMenu>> toolbarDisplayToggle(
|
|||||||
},
|
},
|
||||||
child: Text(translate('Lock after session end'))));
|
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
|
// swap key
|
||||||
if (ffiModel.keyboard &&
|
if (ffiModel.keyboard &&
|
||||||
((Platform.isMacOS && pi.platform != kPeerPlatformMacOS) ||
|
((Platform.isMacOS && pi.platform != kPeerPlatformMacOS) ||
|
||||||
@ -612,19 +603,14 @@ List<TToggleMenu> toolbarPrivacyMode(
|
|||||||
final implKey = (e as List<dynamic>)[0] as String;
|
final implKey = (e as List<dynamic>)[0] as String;
|
||||||
final implName = (e)[1] as String;
|
final implName = (e)[1] as String;
|
||||||
return TToggleMenu(
|
return TToggleMenu(
|
||||||
child: Text(isDesktop
|
child: Text(translate(implName)),
|
||||||
? translate(implName)
|
|
||||||
: '${translate('Privacy mode')} - ${translate(implName)}'),
|
|
||||||
value: privacyModeState.value == implKey,
|
value: privacyModeState.value == implKey,
|
||||||
onChanged:
|
onChanged: (value) {
|
||||||
(privacyModeState.isEmpty || privacyModeState.value == implKey)
|
if (value == null) return;
|
||||||
? (value) {
|
togglePrivacyModeTime = DateTime.now();
|
||||||
if (value == null) return;
|
bind.sessionTogglePrivacyMode(
|
||||||
togglePrivacyModeTime = DateTime.now();
|
sessionId: sessionId, implKey: implKey);
|
||||||
bind.sessionTogglePrivacyMode(
|
});
|
||||||
sessionId: sessionId, implKey: implKey);
|
|
||||||
}
|
|
||||||
: null);
|
|
||||||
}).toList();
|
}).toList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import '../../models/input_model.dart';
|
|||||||
import '../../models/model.dart';
|
import '../../models/model.dart';
|
||||||
import '../../models/platform_model.dart';
|
import '../../models/platform_model.dart';
|
||||||
import '../../utils/image.dart';
|
import '../../utils/image.dart';
|
||||||
|
import '../widgets/dialog.dart';
|
||||||
|
|
||||||
final initText = '1' * 1024;
|
final initText = '1' * 1024;
|
||||||
|
|
||||||
@ -807,6 +808,16 @@ void showOptions(
|
|||||||
List<TToggleMenu> displayToggles =
|
List<TToggleMenu> displayToggles =
|
||||||
await toolbarDisplayToggle(context, id, gFFI);
|
await toolbarDisplayToggle(context, id, gFFI);
|
||||||
|
|
||||||
|
List<TToggleMenu> 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) {
|
dialogManager.show((setState, close, context) {
|
||||||
var viewStyle =
|
var viewStyle =
|
||||||
(viewStyleRadios.isNotEmpty ? viewStyleRadios[0].groupValue : '').obs;
|
(viewStyleRadios.isNotEmpty ? viewStyleRadios[0].groupValue : '').obs;
|
||||||
@ -849,10 +860,21 @@ void showOptions(
|
|||||||
title: e.value.child)))
|
title: e.value.child)))
|
||||||
.toList();
|
.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(
|
return CustomAlertDialog(
|
||||||
content: Column(
|
content: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: displays + radios + toggles),
|
children: displays + radios + toggles + [privacyModeWidget]),
|
||||||
);
|
);
|
||||||
}, clickMaskDismiss: true, backDismiss: true);
|
}, clickMaskDismiss: true, backDismiss: true);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hbb/common/widgets/setting_widgets.dart';
|
import 'package:flutter_hbb/common/widgets/setting_widgets.dart';
|
||||||
|
import 'package:flutter_hbb/common/widgets/toolbar.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../../common.dart';
|
import '../../common.dart';
|
||||||
@ -259,6 +260,32 @@ void showServerSettingsWithValue(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setPrivacyModeDialog(
|
||||||
|
OverlayDialogManager dialogManager,
|
||||||
|
List<TToggleMenu> 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<String?> validateAsync(String value) async {
|
Future<String?> validateAsync(String value) async {
|
||||||
value = value.trim();
|
value = value.trim();
|
||||||
if (value.isEmpty) {
|
if (value.isEmpty) {
|
||||||
|
Loading…
Reference in New Issue
Block a user