62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
|
//go:build !ci && android
|
||
|
// +build !ci,android
|
||
|
|
||
|
package app
|
||
|
|
||
|
/*
|
||
|
#cgo LDFLAGS: -landroid -llog
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
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")
|
||
|
}
|