Merge pull request #4859 from dignow/fix/toolbar_os_password

Fix/toolbar os password
This commit is contained in:
RustDesk 2023-07-04 23:16:43 +08:00 committed by GitHub
commit 65924cb134
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 18 deletions

View File

@ -943,16 +943,20 @@ showSetOSPassword(
SessionID sessionId, SessionID sessionId,
bool login, bool login,
OverlayDialogManager dialogManager, OverlayDialogManager dialogManager,
String? osPassword,
Function()? closeCallback,
) async { ) async {
final controller = TextEditingController(); final controller = TextEditingController();
var password = osPassword ??= await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? '';
await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ??
'';
var autoLogin = var autoLogin =
await bind.sessionGetOption(sessionId: sessionId, arg: 'auto-login') != await bind.sessionGetOption(sessionId: sessionId, arg: 'auto-login') !=
''; '';
controller.text = password; controller.text = osPassword;
dialogManager.show((setState, close, context) { dialogManager.show((setState, close, context) {
closeWithCallback([dynamic]) {
close();
if (closeCallback != null) closeCallback();
}
submit() { submit() {
var text = controller.text.trim(); var text = controller.text.trim();
bind.sessionPeerOption( bind.sessionPeerOption(
@ -964,7 +968,7 @@ showSetOSPassword(
if (text != '' && login) { if (text != '' && login) {
bind.sessionInputOsPassword(sessionId: sessionId, value: text); bind.sessionInputOsPassword(sessionId: sessionId, value: text);
} }
close(); closeWithCallback();
} }
return CustomAlertDialog( return CustomAlertDialog(
@ -998,7 +1002,7 @@ showSetOSPassword(
dialogButton( dialogButton(
"Cancel", "Cancel",
icon: Icon(Icons.close_rounded), icon: Icon(Icons.close_rounded),
onPressed: close, onPressed: closeWithCallback,
isOutline: true, isOutline: true,
), ),
dialogButton( dialogButton(
@ -1008,7 +1012,7 @@ showSetOSPassword(
), ),
], ],
onSubmit: submit, onSubmit: submit,
onCancel: close, onCancel: closeWithCallback,
); );
}); });
} }

View File

@ -11,6 +11,8 @@ import 'package:flutter_hbb/models/model.dart';
import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/models/platform_model.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
bool isEditOsPassword = false;
class TTextMenu { class TTextMenu {
final Widget child; final Widget child;
final VoidCallback onPressed; final VoidCallback onPressed;
@ -44,6 +46,28 @@ class TToggleMenu {
{required this.child, required this.value, required this.onChanged}); {required this.child, required this.value, required this.onChanged});
} }
handleOsPasswordEditIcon(
SessionID sessionId, OverlayDialogManager dialogManager) {
isEditOsPassword = true;
showSetOSPassword(sessionId, false, dialogManager, null, () => isEditOsPassword = false);
}
handleOsPasswordAction(
SessionID sessionId, OverlayDialogManager dialogManager) async {
if (isEditOsPassword) {
isEditOsPassword = false;
return;
}
final password =
await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ??
'';
if (password.isEmpty) {
showSetOSPassword(sessionId, true, dialogManager, password, () => isEditOsPassword = false);
} else {
bind.sessionInputOsPassword(sessionId: sessionId, value: password);
}
}
List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) { List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
final ffiModel = ffi.ffiModel; final ffiModel = ffi.ffiModel;
final pi = ffiModel.pi; final pi = ffiModel.pi;
@ -63,17 +87,26 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
// osAccount / osPassword // osAccount / osPassword
v.add( v.add(
TTextMenu( TTextMenu(
child: Row(children: [ child: Row(children: [
Text(translate(pi.is_headless ? 'OS Account' : 'OS Password')), Text(translate(pi.is_headless ? 'OS Account' : 'OS Password')),
Offstage( Offstage(
offstage: isDesktop, offstage: isDesktop,
child: child: Icon(Icons.edit, color: MyTheme.accent).marginOnly(left: 12),
Icon(Icons.edit, color: MyTheme.accent).marginOnly(left: 12)) )
]), ]),
trailingIcon: Transform.scale(scale: 0.8, child: Icon(Icons.edit)), trailingIcon: Transform.scale(
onPressed: () => pi.is_headless scale: 0.8,
? showSetOSAccount(sessionId, ffi.dialogManager) child: InkWell(
: showSetOSPassword(sessionId, false, ffi.dialogManager)), onTap: () => pi.is_headless
? showSetOSAccount(sessionId, ffi.dialogManager)
: handleOsPasswordEditIcon(sessionId, ffi.dialogManager),
child: Icon(Icons.edit),
),
),
onPressed: () => pi.is_headless
? showSetOSAccount(sessionId, ffi.dialogManager)
: handleOsPasswordAction(sessionId, ffi.dialogManager),
),
); );
// paste // paste
if (isMobile && perms['keyboard'] != false && perms['clipboard'] != false) { if (isMobile && perms['keyboard'] != false && perms['clipboard'] != false) {