Autosave Android settings and refine header

This commit is contained in:
Joe Julian
2026-04-03 07:23:31 -07:00
parent e2addfc288
commit b3db70db91
2 changed files with 45 additions and 3 deletions
+37 -2
View File
@@ -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 {
+8 -1
View File
@@ -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
}