Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
dignow 2023-07-04 20:26:43 +08:00
parent b75edd9710
commit 437b5f2ca3
2 changed files with 50 additions and 33 deletions

View File

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

View File

@ -46,6 +46,28 @@ class TToggleMenu {
{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) {
final ffiModel = ffi.ffiModel;
final pi = ffiModel.pi;
@ -65,36 +87,26 @@ List<TTextMenu> toolbarControls(BuildContext context, String id, FFI ffi) {
// osAccount / osPassword
v.add(
TTextMenu(
child: Row(children: [
Text(translate(pi.is_headless ? 'OS Account' : 'OS Password')),
Offstage(
offstage: isDesktop,
child: InkWell(
onTap: () =>
showSetOSPassword(sessionId, false, ffi.dialogManager, null),
child:
Icon(Icons.edit, color: MyTheme.accent).marginOnly(left: 12),
),
)
]),
trailingIcon: Transform.scale(scale: 0.8, child: Icon(Icons.edit)),
onPressed: () => pi.is_headless
? showSetOSAccount(sessionId, ffi.dialogManager)
: () async {
if (isEditOsPassword) {
isEditOsPassword = false;
return;
}
final password = await bind.sessionGetOption(
sessionId: sessionId, arg: 'os-password') ??
'';
if (password.isEmpty) {
showSetOSPassword(sessionId, true, ffi.dialogManager, password);
} else {
bind.sessionInputOsPassword(
sessionId: sessionId, value: password);
}
}),
child: Row(children: [
Text(translate(pi.is_headless ? 'OS Account' : 'OS Password')),
Offstage(
offstage: isDesktop,
child: Icon(Icons.edit, color: MyTheme.accent).marginOnly(left: 12),
)
]),
trailingIcon: Transform.scale(
scale: 0.8,
child: InkWell(
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
if (isMobile && perms['keyboard'] != false && perms['clipboard'] != false) {