Extract app UI platform glue

This commit is contained in:
Joe Julian
2026-04-09 06:50:16 -07:00
parent b593b1e6a7
commit c3a9c0fddb
6 changed files with 26 additions and 25 deletions
-7
View File
@@ -1,7 +0,0 @@
//go:build !android
package appui
func newPlatformVaultSharer(goos string) vaultSharer {
return nil
}
+5 -8
View File
@@ -36,6 +36,7 @@ import (
"git.julianfamily.org/keepassgo/internal/apiaudit" "git.julianfamily.org/keepassgo/internal/apiaudit"
"git.julianfamily.org/keepassgo/internal/apitokens" "git.julianfamily.org/keepassgo/internal/apitokens"
"git.julianfamily.org/keepassgo/internal/appstate" "git.julianfamily.org/keepassgo/internal/appstate"
"git.julianfamily.org/keepassgo/internal/appui/platform"
keepassassets "git.julianfamily.org/keepassgo/internal/assets" keepassassets "git.julianfamily.org/keepassgo/internal/assets"
"git.julianfamily.org/keepassgo/internal/autofillcache" "git.julianfamily.org/keepassgo/internal/autofillcache"
"git.julianfamily.org/keepassgo/internal/clipboard" "git.julianfamily.org/keepassgo/internal/clipboard"
@@ -466,7 +467,7 @@ type ui struct {
settingsIcon *widget.Icon settingsIcon *widget.Icon
menuIcon *widget.Icon menuIcon *widget.Icon
clipboardWriter clipboard.Writer clipboardWriter clipboard.Writer
vaultSharer vaultSharer vaultSharer platform.VaultSharer
loadingMessage string loadingMessage string
loadingActionLabel string loadingActionLabel string
lifecycleMode string lifecycleMode string
@@ -546,10 +547,6 @@ type backgroundActionResult struct {
id int id int
} }
type vaultSharer interface {
ShareVault(path, title string) error
}
var ( var (
bgColor = color.NRGBA{R: 242, G: 239, B: 233, A: 255} bgColor = color.NRGBA{R: 242, G: 239, B: 233, A: 255}
panelColor = color.NRGBA{R: 250, G: 248, B: 244, A: 255} panelColor = color.NRGBA{R: 250, G: 248, B: 244, A: 255}
@@ -691,7 +688,7 @@ func newUIWithState(mode string, sess appstate.CurrentSession, paths statePaths)
syncDefaultDirection: syncDirectionPull, syncDefaultDirection: syncDirectionPull,
apiPolicyGroupScope: true, apiPolicyGroupScope: true,
autofillNoticePreference: autofillNoticeAll, autofillNoticePreference: autofillNoticeAll,
vaultSharer: newPlatformVaultSharer(runtime.GOOS), vaultSharer: platform.NewVaultSharer(runtime.GOOS),
backgroundResults: make(chan backgroundActionResult, 8), backgroundResults: make(chan backgroundActionResult, 8),
phoneGroupBrowserExpanded: true, phoneGroupBrowserExpanded: true,
} }
@@ -6980,7 +6977,7 @@ func run(w *app.Window, mode string, paths statePaths, grpcAddr string) error {
ui := newUIWithSession(mode, manager, paths) ui := newUIWithSession(mode, manager, paths)
ui.fileExplorer = explorer.NewExplorer(w) ui.fileExplorer = explorer.NewExplorer(w)
ui.invalidate = w.Invalidate ui.invalidate = w.Invalidate
ui.clipboardWriter = newPlatformClipboardWriter(runtime.GOOS, w.Invalidate) ui.clipboardWriter = platform.NewClipboardWriter(runtime.GOOS, w.Invalidate)
host, err := api.StartHost(grpcAddr, manager, passwords.DefaultProfiles(), ui.clipboardWriter, func() bool { return ui.state.Dirty }) host, err := api.StartHost(grpcAddr, manager, passwords.DefaultProfiles(), ui.clipboardWriter, func() bool { return ui.state.Dirty })
if err != nil { if err != nil {
ui.state.ErrorMessage = fmt.Sprintf("start gRPC API: %v", err) ui.state.ErrorMessage = fmt.Sprintf("start gRPC API: %v", err)
@@ -7001,7 +6998,7 @@ func run(w *app.Window, mode string, paths statePaths, grpcAddr string) error {
gtx := app.NewContext(&ops, e) gtx := app.NewContext(&ops, e)
ui.processBackgroundActions() ui.processBackgroundActions()
ui.layout(gtx) ui.layout(gtx)
processClipboardWrites(gtx, ui.clipboardWriter) platform.ProcessClipboardWrites(gtx, ui.clipboardWriter)
e.Frame(gtx.Ops) e.Frame(gtx.Ops)
} }
} }
@@ -1,6 +1,6 @@
//go:build android //go:build android
package appui package platform
/* /*
#cgo CFLAGS: -Werror #cgo CFLAGS: -Werror
@@ -71,7 +71,7 @@ func gioJavaVM() *C.JavaVM
//go:linkname gioRunInJVM gioui.org/app.runInJVM //go:linkname gioRunInJVM gioui.org/app.runInJVM
func gioRunInJVM(jvm *C.JavaVM, f func(env *C.JNIEnv)) func gioRunInJVM(jvm *C.JavaVM, f func(env *C.JNIEnv))
func newPlatformVaultSharer(goos string) vaultSharer { func NewVaultSharer(goos string) VaultSharer {
return androidVaultSharer{} return androidVaultSharer{}
} }
@@ -0,0 +1,7 @@
//go:build !android
package platform
func NewVaultSharer(goos string) VaultSharer {
return nil
}
@@ -1,4 +1,4 @@
package appui package platform
import ( import (
"io" "io"
@@ -11,20 +11,24 @@ import (
appclipboard "git.julianfamily.org/keepassgo/internal/clipboard" appclipboard "git.julianfamily.org/keepassgo/internal/clipboard"
) )
type VaultSharer interface {
ShareVault(path, title string) error
}
type clipboardCommandWriter struct { type clipboardCommandWriter struct {
mu sync.Mutex mu sync.Mutex
pending []string pending []string
invalidate func() invalidate func()
} }
func newPlatformClipboardWriter(goos string, invalidate func()) appclipboard.Writer { func NewClipboardWriter(goos string, invalidate func()) appclipboard.Writer {
if strings.EqualFold(goos, "android") { if strings.EqualFold(goos, "android") {
return &clipboardCommandWriter{invalidate: invalidate} return &clipboardCommandWriter{invalidate: invalidate}
} }
return nil return nil
} }
func processClipboardWrites(gtx layout.Context, writer appclipboard.Writer) { func ProcessClipboardWrites(gtx layout.Context, writer appclipboard.Writer) {
commandWriter, ok := writer.(*clipboardCommandWriter) commandWriter, ok := writer.(*clipboardCommandWriter)
if !ok { if !ok {
return return
@@ -1,4 +1,4 @@
package appui package platform
import ( import (
"slices" "slices"
@@ -8,17 +8,17 @@ import (
func TestNewPlatformClipboardWriterUsesCommandWriterOnAndroid(t *testing.T) { func TestNewPlatformClipboardWriterUsesCommandWriterOnAndroid(t *testing.T) {
t.Parallel() t.Parallel()
writer := newPlatformClipboardWriter("android", nil) writer := NewClipboardWriter("android", nil)
if _, ok := writer.(*clipboardCommandWriter); !ok { if _, ok := writer.(*clipboardCommandWriter); !ok {
t.Fatalf("newPlatformClipboardWriter(android) = %T, want *clipboardCommandWriter", writer) t.Fatalf("NewClipboardWriter(android) = %T, want *clipboardCommandWriter", writer)
} }
} }
func TestNewPlatformClipboardWriterUsesSystemClipboardOffAndroid(t *testing.T) { func TestNewPlatformClipboardWriterUsesSystemClipboardOffAndroid(t *testing.T) {
t.Parallel() t.Parallel()
if writer := newPlatformClipboardWriter("linux", nil); writer != nil { if writer := NewClipboardWriter("linux", nil); writer != nil {
t.Fatalf("newPlatformClipboardWriter(linux) = %T, want nil", writer) t.Fatalf("NewClipboardWriter(linux) = %T, want nil", writer)
} }
} }