diff --git a/main.go b/main.go index f3a91e0..67daca1 100644 --- a/main.go +++ b/main.go @@ -2803,27 +2803,35 @@ func (u *ui) layout(gtx layout.Context) layout.Dimensions { } for u.settingsDensityDense.Clicked(gtx) { u.settingsDraft.Accessibility.DisplayDensity = displayDensityDense + _ = u.applySecuritySettingsLive() } for u.settingsDensityComfortable.Clicked(gtx) { u.settingsDraft.Accessibility.DisplayDensity = displayDensityComfortable + _ = u.applySecuritySettingsLive() } for u.settingsContrastStandard.Clicked(gtx) { u.settingsDraft.Accessibility.Contrast = contrastStandard + _ = u.applySecuritySettingsLive() } for u.settingsContrastHigh.Clicked(gtx) { u.settingsDraft.Accessibility.Contrast = contrastHigh + _ = u.applySecuritySettingsLive() } for u.settingsReducedMotionOff.Clicked(gtx) { u.settingsDraft.Accessibility.ReducedMotion = false + _ = u.applySecuritySettingsLive() } for u.settingsReducedMotionOn.Clicked(gtx) { u.settingsDraft.Accessibility.ReducedMotion = true + _ = u.applySecuritySettingsLive() } for u.settingsKeyboardFocusStandard.Clicked(gtx) { u.settingsDraft.Accessibility.KeyboardFocus = keyboardFocusStandard + _ = u.applySecuritySettingsLive() } for u.settingsKeyboardFocusProminent.Clicked(gtx) { u.settingsDraft.Accessibility.KeyboardFocus = keyboardFocusProminent + _ = u.applySecuritySettingsLive() } for u.unlockVault.Clicked(gtx) { u.startUnlockAction() @@ -2890,24 +2898,31 @@ func (u *ui) layout(gtx layout.Context) layout.Dimensions { } for u.showSettingsSyncLocal.Clicked(gtx) { u.settingsDraft.Sync.SourceDefault = syncSourceLocal + _ = u.applySecuritySettingsLive() } for u.showSettingsSyncRemote.Clicked(gtx) { u.settingsDraft.Sync.SourceDefault = syncSourceRemote + _ = u.applySecuritySettingsLive() } for u.showSettingsSyncPull.Clicked(gtx) { u.settingsDraft.Sync.DirectionDefault = syncDirectionPull + _ = u.applySecuritySettingsLive() } for u.showSettingsSyncPush.Clicked(gtx) { u.settingsDraft.Sync.DirectionDefault = syncDirectionPush + _ = u.applySecuritySettingsLive() } for u.showAutofillApprovalAsk.Clicked(gtx) { u.autofillFirstFillApprovalMode = autofillFirstFillApprovalAsk + u.saveUIPreferences() } for u.showAutofillApprovalAllow.Clicked(gtx) { u.autofillFirstFillApprovalMode = autofillFirstFillApprovalAllow + u.saveUIPreferences() } for u.showAutofillApprovalBlock.Clicked(gtx) { u.autofillFirstFillApprovalMode = autofillFirstFillApprovalBlock + u.saveUIPreferences() } for u.allowApproval.Clicked(gtx) { u.runAction("allow API request", func() error { @@ -3143,6 +3158,23 @@ func (u *ui) layout(gtx layout.Context) layout.Dimensions { u.state.StatusMessage = "" u.statusExpiresAt = time.Time{} } + if u.securityDialogOpen { + if _, changed := u.securityCipher.Update(gtx); changed { + _ = u.applySecuritySettingsLive() + } + if _, changed := u.securityKDF.Update(gtx); changed { + _ = u.applySecuritySettingsLive() + } + if _, changed := u.autofillBrowserAllowlist.Update(gtx); changed { + u.saveUIPreferences() + } + if _, changed := u.autofillAppAllowlist.Update(gtx); changed { + u.saveUIPreferences() + } + if _, changed := u.autofillPackageRules.Update(gtx); changed { + u.saveUIPreferences() + } + } for u.togglePassword.Clicked(gtx) { u.showPassword = !u.showPassword } @@ -3598,8 +3630,10 @@ func (u *ui) securityDialogContent(gtx layout.Context) layout.Dimensions { labeledEditorHelp(u.theme, "App and package allowlist", "One Android package name or trusted app identifier per line.", &u.autofillAppAllowlist, false), layout.Spacer{Height: unit.Dp(8)}.Layout, labeledEditorHelp(u.theme, "Package rules", "One rule per line, for example `com.android.chrome=hostname` or `org.keepassgo.browser=view-id`.", &u.autofillPackageRules, false), - layout.Spacer{Height: unit.Dp(12)}.Layout, func(gtx layout.Context) layout.Dimensions { + if u.mode == "phone" { + return layout.Dimensions{} + } return layout.Flex{Spacing: layout.SpaceStart}.Layout(gtx, layout.Rigid(func(gtx layout.Context) layout.Dimensions { return tonedButton(gtx, u.theme, &u.closeSecuritySettings, "Close") @@ -3909,7 +3943,8 @@ func (u *ui) header(gtx layout.Context) layout.Dimensions { } return layout.Flex{Axis: layout.Vertical}.Layout(gtx, layout.Rigid(func(gtx layout.Context) layout.Dimensions { - return layout.E.Layout(gtx, u.headerActions) + gtx.Constraints.Min.X = gtx.Constraints.Max.X + return u.headerActions(gtx) }), layout.Rigid(func(gtx layout.Context) layout.Dimensions { if !u.mainMenuOpen { diff --git a/ui_preferences.go b/ui_preferences.go index e823d09..e1715ca 100644 --- a/ui_preferences.go +++ b/ui_preferences.go @@ -118,6 +118,14 @@ func (u *ui) loadSettingsDraft() { } func (u *ui) saveSecuritySettingsAction() error { + if err := u.applySecuritySettingsLive(); err != nil { + return err + } + u.securityDialogOpen = false + return nil +} + +func (u *ui) applySecuritySettingsLive() error { settings := vault.SecuritySettings{ Cipher: strings.TrimSpace(u.securityCipher.Text()), KDF: strings.TrimSpace(u.securityKDF.Text()), @@ -135,7 +143,6 @@ func (u *ui) saveSecuritySettingsAction() error { u.applyAccessibilityPreferences(u.settingsDraft.Accessibility) u.saveSettings() u.saveUIPreferences() - u.securityDialogOpen = false return nil }