//go:build android // +build android package main import ( "context" "os" "forge.cadoles.com/arcad/arcast/pkg/browser/gioui" "forge.cadoles.com/arcad/arcast/pkg/server" "gioui.org/app" "gioui.org/io/system" "gioui.org/layout" "gioui.org/op" "github.com/gioui-plugins/gio-plugins/plugin" "github.com/gioui-plugins/gio-plugins/webviewer/webview" "github.com/pkg/errors" "gitlab.com/wpetit/goweb/logger" // Android permissions _ "net" _ "gioui.org/app/permission/networkstate" _ "gioui.org/app/permission/storage" _ "gioui.org/app/permission/wakelock" ) func main() { ctx := context.Background() webview.SetDebug(true) window := app.NewWindow( app.Fullscreen.Option(), ) browser := gioui.NewBrowser(window) go func() { ops := new(op.Ops) for { evt := window.NextEvent() plugin.Install(window, evt) switch evt := evt.(type) { case system.DestroyEvent: os.Exit(0) return case system.FrameEvent: gtx := layout.NewContext(ops, evt) browser.Layout(gtx) evt.Frame(gtx.Ops) } } }() go func() { for { ctx, cancel := context.WithCancel(ctx) defer cancel() server := server.New(browser) if err := server.Start(); err != nil { logger.Fatal(ctx, "could not start server", logger.CapturedE(errors.WithStack(err))) } defer func() { if err := server.Stop(); err != nil { logger.Error(ctx, "could not stop server", logger.CapturedE(errors.WithStack(err))) } }() if err := server.Wait(); err != nil { logger.Error(ctx, "could not wait for server", logger.CapturedE(errors.WithStack(err))) } } }() app.Main() }