blob: d397ca4869a1ac114958f1f799a498b938d494ec [file] [log] [blame]
// Copyright 2016 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build android
package plugins
import (
"unsafe"
idiscovery "v.io/x/ref/lib/discovery"
jutil "v.io/x/jni/util"
)
// #include "jni.h"
import "C"
var (
contextSign = jutil.ClassSign("io.v.v23.context.VContext")
adInfoSign = jutil.ClassSign("io.v.x.ref.lib.discovery.AdInfo")
scanHandlerSign = jutil.ClassSign("io.v.impl.google.lib.discovery.Plugin$ScanHandler")
jAdInfoClass jutil.Class // io.v.x.ref.lib.discovery.AdInfo
jNativeScanHandlerClass jutil.Class // io.v.android.impl.google.discovery.plugins.NativeScanHandler
)
func Init(env jutil.Env, jCtx jutil.Object) error {
var err error
jAdInfoClass, err = jutil.JFindClass(env, "io/v/x/ref/lib/discovery/AdInfo")
if err != nil {
return err
}
jNativeScanHandlerClass, err = jutil.JFindClass(env, "io/v/android/impl/google/discovery/plugins/NativeScanHandler")
if err != nil {
return err
}
return initPluginFactories(env, jCtx)
}
//export Java_io_v_android_impl_google_discovery_plugins_NativeScanHandler_nativeHandleUpdate
func Java_io_v_android_impl_google_discovery_plugins_NativeScanHandler_nativeHandleUpdate(jenv *C.JNIEnv, _ C.jobject, chPtr C.jlong, jAdInfoObj C.jobject) {
env := jutil.Env(uintptr(unsafe.Pointer(jenv)))
ch := (*(*chan<- *idiscovery.AdInfo)(jutil.NativePtr(chPtr)))
jAdInfo := jutil.Object(uintptr(unsafe.Pointer(jAdInfoObj)))
var adInfo idiscovery.AdInfo
if err := jutil.GoVomCopy(env, jAdInfo, jAdInfoClass, &adInfo); err != nil {
jutil.JThrowV(env, err)
return
}
ch <- &adInfo
}
//export Java_io_v_android_impl_google_discovery_plugins_NativeScanHandler_nativeFinalize
func Java_io_v_android_impl_google_discovery_plugins_NativeScanHandler_nativeFinalize(jenv *C.JNIEnv, _ C.jobject, chPtr C.jlong) {
jutil.GoUnref(jutil.NativePtr(chPtr))
}