Extract app UI platform glue
This commit is contained in:
@@ -1,7 +0,0 @@
|
|||||||
//go:build !android
|
|
||||||
|
|
||||||
package appui
|
|
||||||
|
|
||||||
func newPlatformVaultSharer(goos string) vaultSharer {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -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
|
||||||
+5
-5
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user