From 3d53ff8e95acb52a08262ac206c231550fe1c90a Mon Sep 17 00:00:00 2001 From: Joe Julian Date: Tue, 31 Mar 2026 22:34:36 -0700 Subject: [PATCH] Add KeePassGO branding assets --- APK.md | 6 ++- Makefile | 1 + README.md | 4 +- assets/assets.go | 23 ++++++++ assets/keepassgo-icon.png | Bin 0 -> 14679 bytes assets/keepassgo-icon.svg | 18 +++++++ assets/keepassgo-logo-horizontal.png | Bin 0 -> 40875 bytes assets/keepassgo-logo-horizontal.svg | 22 ++++++++ assets/keepassgo-splash-light.svg | 75 +++++++++++++++++++++++++++ assets/keepassgo-splash-square.png | Bin 0 -> 48112 bytes assets/keepassgo-splash-square.svg | 41 +++++++++++++++ buildapk/config.go | 12 +++++ buildapk/config_test.go | 6 +++ main.go | 19 ++++--- ui_branding.go | 46 ++++++++++++++++ 15 files changed, 262 insertions(+), 11 deletions(-) create mode 100644 assets/assets.go create mode 100644 assets/keepassgo-icon.png create mode 100644 assets/keepassgo-icon.svg create mode 100644 assets/keepassgo-logo-horizontal.png create mode 100644 assets/keepassgo-logo-horizontal.svg create mode 100644 assets/keepassgo-splash-light.svg create mode 100644 assets/keepassgo-splash-square.png create mode 100644 assets/keepassgo-splash-square.svg create mode 100644 ui_branding.go diff --git a/APK.md b/APK.md index d9c7d0a..5fbb7d6 100644 --- a/APK.md +++ b/APK.md @@ -29,6 +29,11 @@ The repo tracks `gogio` as a Go tool, so the build runs through: ```sh go tool gogio -target android ... +``` + +The Android build uses the branded icon asset at: + +- `assets/keepassgo-icon.png` Note: @@ -41,4 +46,3 @@ Note: rendered correctly with `gioui.org v0.8.0` on the same emulator and SDK/JDK pipeline. KeePassGO is pinned to the working Gio line until that regression is understood upstream. -``` diff --git a/Makefile b/Makefile index 0aaa63c..0e133f1 100644 --- a/Makefile +++ b/Makefile @@ -28,4 +28,5 @@ apk: -version $(APK_VERSION) \ -minsdk $(ANDROID_MIN_SDK) \ -targetsdk $(ANDROID_TARGET_SDK) \ + -icon assets/keepassgo-icon.png \ . diff --git a/README.md b/README.md index e7a3a16..ebfce1f 100644 --- a/README.md +++ b/README.md @@ -58,13 +58,13 @@ go test ./... Install: ```bash -go install gioui.org/cmd/gogio@latest +go get -tool gioui.org/cmd/gogio@latest ``` Package: ```bash -gogio -target android . +go tool gogio -target android -icon assets/keepassgo-icon.png . ``` You will need the Android SDK and NDK installed and configured for real device or release packaging. diff --git a/assets/assets.go b/assets/assets.go new file mode 100644 index 0000000..30fcb3d --- /dev/null +++ b/assets/assets.go @@ -0,0 +1,23 @@ +package assets + +import ( + "bytes" + "embed" + "image" + "image/png" +) + +//go:embed *.png *.svg +var files embed.FS + +func MustPNG(name string) image.Image { + data, err := files.ReadFile(name) + if err != nil { + panic(err) + } + img, err := png.Decode(bytes.NewReader(data)) + if err != nil { + panic(err) + } + return img +} diff --git a/assets/keepassgo-icon.png b/assets/keepassgo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b3e98e308fff3273571139bd1eda62adeb82b7 GIT binary patch literal 14679 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 + KeePassGO icon + Vault-shaped mark with lock, layered record lines, and navigation accent. + + + + + + + + + + + + + + + diff --git a/assets/keepassgo-logo-horizontal.png b/assets/keepassgo-logo-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..ff22b6e69ca9ea53a5eb6c5815d965272f399b41 GIT binary patch literal 40875 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 Ni>8+6iqF6v{0||NxIF*> literal 0 HcmV?d00001 diff --git a/assets/keepassgo-logo-horizontal.svg b/assets/keepassgo-logo-horizontal.svg new file mode 100644 index 0000000..25ec1be --- /dev/null +++ b/assets/keepassgo-logo-horizontal.svg @@ -0,0 +1,22 @@ + + KeePassGO horizontal logo + KeePassGO symbol with wordmark for light-theme desktop UI. + + + + + + + + + + + + + + + + + + KeePassGO + diff --git a/assets/keepassgo-splash-light.svg b/assets/keepassgo-splash-light.svg new file mode 100644 index 0000000..c56b8d2 --- /dev/null +++ b/assets/keepassgo-splash-light.svg @@ -0,0 +1,75 @@ + + KeePassGO splash screen + Light-theme desktop splash screen with structured panels and the KeePassGO logo. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + KeePassGO + KeePass-compatible password manager + + + + + + diff --git a/assets/keepassgo-splash-square.png b/assets/keepassgo-splash-square.png new file mode 100644 index 0000000000000000000000000000000000000000..4000819b1884264bff768e055ac998cec8f0f5ad GIT binary patch literal 48112 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 literal 0 HcmV?d00001 diff --git a/assets/keepassgo-splash-square.svg b/assets/keepassgo-splash-square.svg new file mode 100644 index 0000000..e855192 --- /dev/null +++ b/assets/keepassgo-splash-square.svg @@ -0,0 +1,41 @@ + + KeePassGO square splash preview + Square crop of the KeePassGO splash system. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + KeePassGO + KeePass-compatible password manager + diff --git a/buildapk/config.go b/buildapk/config.go index 100d750..84cd13e 100644 --- a/buildapk/config.go +++ b/buildapk/config.go @@ -15,6 +15,7 @@ const ( DefaultVersion = "0.1.0.1" DefaultMinSDK = "28" DefaultTargetSDK = "35" + DefaultIconPath = "assets/keepassgo-icon.png" ) type Config struct { @@ -26,6 +27,7 @@ type Config struct { Version string MinSDK string TargetSDK string + IconPath string } func DefaultConfig() Config { @@ -38,6 +40,7 @@ func DefaultConfig() Config { Version: DefaultVersion, MinSDK: DefaultMinSDK, TargetSDK: DefaultTargetSDK, + IconPath: DefaultIconPath, } } @@ -50,6 +53,7 @@ func (c Config) GogioArgs() []string { "-version", c.Version, "-minsdk", c.MinSDK, "-targetsdk", c.TargetSDK, + "-icon", c.IconPath, ".", } } @@ -73,6 +77,9 @@ func (c Config) Validate() error { if !isDir(filepath.Join(c.SDKRoot, "build-tools")) { return fmt.Errorf("Android build-tools are missing") } + if !isFile(c.IconPath) { + return fmt.Errorf("Android icon asset is missing: %s", c.IconPath) + } return nil } @@ -88,3 +95,8 @@ func isExecutable(path string) bool { } return info.Mode()&0o111 != 0 } + +func isFile(path string) bool { + info, err := os.Stat(path) + return err == nil && !info.IsDir() +} diff --git a/buildapk/config_test.go b/buildapk/config_test.go index c6be37f..91c2fd4 100644 --- a/buildapk/config_test.go +++ b/buildapk/config_test.go @@ -19,6 +19,7 @@ func TestDefaultConfigGogioArgs(t *testing.T) { "-version", DefaultVersion, "-minsdk", DefaultMinSDK, "-targetsdk", DefaultTargetSDK, + "-icon", DefaultIconPath, ".", } @@ -53,6 +54,11 @@ func TestValidateAcceptsCompleteAndroidToolchainLayout(t *testing.T) { Version: DefaultVersion, MinSDK: DefaultMinSDK, TargetSDK: DefaultTargetSDK, + IconPath: filepath.Join(root, "icon.png"), + } + + if err := os.WriteFile(cfg.IconPath, []byte("png"), 0o644); err != nil { + t.Fatalf("WriteFile(%q) error = %v", cfg.IconPath, err) } if err := cfg.Validate(); err != nil { diff --git a/main.go b/main.go index 9741d21..466c47b 100644 --- a/main.go +++ b/main.go @@ -29,6 +29,7 @@ import ( "git.julianfamily.org/keepassgo/apiapproval" "git.julianfamily.org/keepassgo/apiaudit" "git.julianfamily.org/keepassgo/apitokens" + keepassassets "git.julianfamily.org/keepassgo/assets" "git.julianfamily.org/keepassgo/appstate" "git.julianfamily.org/keepassgo/clipboard" "git.julianfamily.org/keepassgo/passwords" @@ -130,6 +131,8 @@ const ( type ui struct { mode string theme *material.Theme + logoHorizontal paint.ImageOp + splashSquare paint.ImageOp search widget.Editor vaultPath widget.Editor saveAsPath widget.Editor @@ -342,8 +345,10 @@ func newUIWithState(mode string, sess appstate.CurrentSession, paths statePaths) th.Palette.ContrastFg = color.NRGBA{R: 255, G: 252, B: 247, A: 255} u := &ui{ - mode: mode, - theme: th, + mode: mode, + theme: th, + logoHorizontal: paint.NewImageOp(keepassassets.MustPNG("keepassgo-logo-horizontal.png")), + splashSquare: paint.NewImageOp(keepassassets.MustPNG("keepassgo-splash-square.png")), search: widget.Editor{ SingleLine: true, Submit: false, @@ -2040,6 +2045,8 @@ func (u *ui) lifecycleScreen(gtx layout.Context) layout.Dimensions { } return panel(gtx, func(gtx layout.Context) layout.Dimensions { rows := []layout.Widget{ + u.lifecycleBranding, + layout.Spacer{Height: unit.Dp(8)}.Layout, u.lifecycleControls, } return material.List(u.theme, &u.lifecycleList).Layout(gtx, len(rows), func(gtx layout.Context, i int) layout.Dimensions { @@ -2367,9 +2374,7 @@ func (u *ui) header(gtx layout.Context) layout.Dimensions { return compactCard(gtx, func(gtx layout.Context) layout.Dimensions { return layout.Flex{Alignment: layout.Middle}.Layout(gtx, layout.Flexed(1, func(gtx layout.Context) layout.Dimensions { - lbl := material.Label(u.theme, unit.Sp(20), productName) - lbl.Color = accentColor - return lbl.Layout(gtx) + return u.brandMark(gtx, 132, 42) }), layout.Rigid(u.headerActions), ) @@ -2381,9 +2386,7 @@ func (u *ui) header(gtx layout.Context) layout.Dimensions { return card(gtx, func(gtx layout.Context) layout.Dimensions { return layout.Flex{Alignment: layout.Middle}.Layout(gtx, layout.Flexed(1, func(gtx layout.Context) layout.Dimensions { - lbl := material.Label(u.theme, unit.Sp(24), productName) - lbl.Color = accentColor - return lbl.Layout(gtx) + return u.brandMark(gtx, 196, 56) }), layout.Rigid(u.headerActions), ) diff --git a/ui_branding.go b/ui_branding.go new file mode 100644 index 0000000..90c9c13 --- /dev/null +++ b/ui_branding.go @@ -0,0 +1,46 @@ +package main + +import ( + "image" + + "gioui.org/layout" + "gioui.org/op/paint" + "gioui.org/unit" + "gioui.org/widget" +) + +func (u *ui) lifecycleBranding(gtx layout.Context) layout.Dimensions { + if u.mode != "phone" { + return layout.Dimensions{} + } + return layout.Center.Layout(gtx, func(gtx layout.Context) layout.Dimensions { + return u.brandImage(gtx, u.splashSquare, 132, 132) + }) +} + +func (u *ui) brandMark(gtx layout.Context, widthDP, heightDP float32) layout.Dimensions { + if u.mode == "phone" { + return u.brandImage(gtx, u.splashSquare, widthDP, heightDP) + } + return u.brandImage(gtx, u.logoHorizontal, widthDP, heightDP) +} + +func (u *ui) brandImage(gtx layout.Context, src paint.ImageOp, widthDP, heightDP float32) layout.Dimensions { + width := gtx.Dp(unit.Dp(widthDP)) + height := gtx.Dp(unit.Dp(heightDP)) + if width > gtx.Constraints.Max.X { + width = gtx.Constraints.Max.X + } + if height > gtx.Constraints.Max.Y && gtx.Constraints.Max.Y > 0 { + height = gtx.Constraints.Max.Y + } + img := widget.Image{ + Src: src, + Fit: widget.Contain, + Position: layout.W, + Scale: 1.0 / gtx.Metric.PxPerDp, + } + gtx.Constraints.Min = image.Point{} + gtx.Constraints.Max = image.Pt(width, height) + return img.Layout(gtx) +}