//go:build !ci && android // +build !ci,android package app /* #cgo LDFLAGS: -landroid -llog #include void openURL(uintptr_t java_vm, uintptr_t jni_env, uintptr_t ctx, char *url); void sendNotification(uintptr_t java_vm, uintptr_t jni_env, uintptr_t ctx, char *title, char *content); */ import "C" import ( "log" "net/url" "os" "path/filepath" "unsafe" "fyne.io/fyne/v2" "fyne.io/fyne/v2/internal/driver/mobile/app" ) func (a *fyneApp) OpenURL(url *url.URL) error { urlStr := C.CString(url.String()) defer C.free(unsafe.Pointer(urlStr)) app.RunOnJVM(func(vm, env, ctx uintptr) error { C.openURL(C.uintptr_t(vm), C.uintptr_t(env), C.uintptr_t(ctx), urlStr) return nil }) return nil } func (a *fyneApp) SendNotification(n *fyne.Notification) { titleStr := C.CString(n.Title) defer C.free(unsafe.Pointer(titleStr)) contentStr := C.CString(n.Content) defer C.free(unsafe.Pointer(contentStr)) app.RunOnJVM(func(vm, env, ctx uintptr) error { C.sendNotification(C.uintptr_t(vm), C.uintptr_t(env), C.uintptr_t(ctx), titleStr, contentStr) return nil }) } func defaultVariant() fyne.ThemeVariant { return systemTheme } func rootConfigDir() string { filesDir := os.Getenv("FILESDIR") if filesDir == "" { log.Println("FILESDIR env was not set by android native code") return "/data/data" // probably won't work, but we can't make a better guess } return filepath.Join(filesDir, "fyne") }