app_mobile_and.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //go:build !ci && android
  2. // +build !ci,android
  3. package app
  4. /*
  5. #cgo LDFLAGS: -landroid -llog
  6. #include <stdlib.h>
  7. void openURL(uintptr_t java_vm, uintptr_t jni_env, uintptr_t ctx, char *url);
  8. void sendNotification(uintptr_t java_vm, uintptr_t jni_env, uintptr_t ctx, char *title, char *content);
  9. */
  10. import "C"
  11. import (
  12. "log"
  13. "net/url"
  14. "os"
  15. "path/filepath"
  16. "unsafe"
  17. "fyne.io/fyne/v2"
  18. "fyne.io/fyne/v2/internal/driver/mobile/app"
  19. )
  20. func (a *fyneApp) OpenURL(url *url.URL) error {
  21. urlStr := C.CString(url.String())
  22. defer C.free(unsafe.Pointer(urlStr))
  23. app.RunOnJVM(func(vm, env, ctx uintptr) error {
  24. C.openURL(C.uintptr_t(vm), C.uintptr_t(env), C.uintptr_t(ctx), urlStr)
  25. return nil
  26. })
  27. return nil
  28. }
  29. func (a *fyneApp) SendNotification(n *fyne.Notification) {
  30. titleStr := C.CString(n.Title)
  31. defer C.free(unsafe.Pointer(titleStr))
  32. contentStr := C.CString(n.Content)
  33. defer C.free(unsafe.Pointer(contentStr))
  34. app.RunOnJVM(func(vm, env, ctx uintptr) error {
  35. C.sendNotification(C.uintptr_t(vm), C.uintptr_t(env), C.uintptr_t(ctx), titleStr, contentStr)
  36. return nil
  37. })
  38. }
  39. func defaultVariant() fyne.ThemeVariant {
  40. return systemTheme
  41. }
  42. func rootConfigDir() string {
  43. filesDir := os.Getenv("FILESDIR")
  44. if filesDir == "" {
  45. log.Println("FILESDIR env was not set by android native code")
  46. return "/data/data" // probably won't work, but we can't make a better guess
  47. }
  48. return filepath.Join(filesDir, "fyne")
  49. }