clipboard_android.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //go:build android
  2. // +build android
  3. package mobile
  4. /*
  5. #cgo LDFLAGS: -landroid -llog -lEGL -lGLESv2
  6. #include <stdlib.h>
  7. char *getClipboardContent(uintptr_t java_vm, uintptr_t jni_env, uintptr_t ctx);
  8. void setClipboardContent(uintptr_t java_vm, uintptr_t jni_env, uintptr_t ctx, char *content);
  9. */
  10. import "C"
  11. import (
  12. "unsafe"
  13. "fyne.io/fyne/v2/internal/driver/mobile/app"
  14. )
  15. // Content returns the clipboard content for Android
  16. func (c *mobileClipboard) Content() string {
  17. content := ""
  18. app.RunOnJVM(func(vm, env, ctx uintptr) error {
  19. chars := C.getClipboardContent(C.uintptr_t(vm), C.uintptr_t(env), C.uintptr_t(ctx))
  20. if chars == nil {
  21. return nil
  22. }
  23. content = C.GoString(chars)
  24. C.free(unsafe.Pointer(chars))
  25. return nil
  26. })
  27. return content
  28. }
  29. // SetContent sets the clipboard content for Android
  30. func (c *mobileClipboard) SetContent(content string) {
  31. contentStr := C.CString(content)
  32. defer C.free(unsafe.Pointer(contentStr))
  33. app.RunOnJVM(func(vm, env, ctx uintptr) error {
  34. C.setClipboardContent(C.uintptr_t(vm), C.uintptr_t(env), C.uintptr_t(ctx), contentStr)
  35. return nil
  36. })
  37. }