diff --git a/main.go b/main.go index d99a1f6..142fbb1 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "slices" "strings" "time" @@ -413,6 +414,17 @@ func resolveFlagOrEnv(flagValue, envName, fallback string) string { return fallback } +func defaultModeForRuntime(goos string) string { + if strings.EqualFold(strings.TrimSpace(goos), "android") { + return "phone" + } + return "desktop" +} + +func shouldUsePreviewWindowSize(mode, goos string) bool { + return !strings.EqualFold(strings.TrimSpace(goos), "android") +} + func (u *ui) selectedAttachmentItems() []attachmentItem { item, ok := u.selectedEntry() if !ok || len(item.Attachments) == 0 { @@ -2903,7 +2915,7 @@ func main() { stateDir := flag.String("state-dir", "", "directory for KeePassGO state such as recent-vault history and default save targets") flag.Parse() - resolvedMode := resolveFlagOrEnv(*mode, "KEEPASSGO_MODE", "desktop") + resolvedMode := resolveFlagOrEnv(*mode, "KEEPASSGO_MODE", defaultModeForRuntime(runtime.GOOS)) resolvedStateDir := resolveFlagOrEnv(*stateDir, "KEEPASSGO_STATE_DIR", "") width := unit.Dp(1180) @@ -2916,14 +2928,17 @@ func main() { go func() { w := new(app.Window) - w.Option( - app.Title(productName), - app.Size(width, height), - ) + options := []app.Option{app.Title(productName)} + if shouldUsePreviewWindowSize(resolvedMode, runtime.GOOS) { + options = append(options, app.Size(width, height)) + } + w.Option(options...) if err := run(w, strings.ToLower(resolvedMode), defaultStatePaths(resolvedStateDir)); err != nil { panic(err) } - os.Exit(0) + if !strings.EqualFold(runtime.GOOS, "android") { + os.Exit(0) + } }() app.Main() } diff --git a/main_test.go b/main_test.go index 79d25cd..e6783b2 100644 --- a/main_test.go +++ b/main_test.go @@ -2348,6 +2348,31 @@ func TestResolveFlagOrEnvPrefersFlagThenEnvThenFallback(t *testing.T) { } } +func TestDefaultModeForRuntimeUsesPhoneOnAndroid(t *testing.T) { + t.Parallel() + + if got := defaultModeForRuntime("android"); got != "phone" { + t.Fatalf("defaultModeForRuntime(android) = %q, want %q", got, "phone") + } + if got := defaultModeForRuntime("linux"); got != "desktop" { + t.Fatalf("defaultModeForRuntime(linux) = %q, want %q", got, "desktop") + } +} + +func TestShouldUsePreviewWindowSizeSkipsAndroid(t *testing.T) { + t.Parallel() + + if got := shouldUsePreviewWindowSize("desktop", "android"); got { + t.Fatal("shouldUsePreviewWindowSize(desktop, android) = true, want false") + } + if got := shouldUsePreviewWindowSize("phone", "android"); got { + t.Fatal("shouldUsePreviewWindowSize(phone, android) = true, want false") + } + if got := shouldUsePreviewWindowSize("desktop", "linux"); !got { + t.Fatal("shouldUsePreviewWindowSize(desktop, linux) = false, want true") + } +} + func TestEnterOnLocalLifecycleScreenDefaultsToOpenVault(t *testing.T) { t.Parallel()