JSValueRef GetTOPForJava_android_view_Gravity(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
{
    JNI_ENV_ENTER
    jclass  javaClass = (*env)->FindClass(env, "android/view/Gravity");
    if (javaClass == NULL) return HyperloopMakeException(ctx, "Class not found: android.view.Gravity", exception);

    jfieldID fieldId = (*env)->GetStaticFieldID(env, javaClass, "TOP", "I");
    if (fieldId == NULL) return HyperloopMakeException(ctx, "Field not found: android.view.Gravity.TOP", exception);
    
    jint TOP = (*env)->GetStaticIntField(env, javaClass, fieldId);
    (*env)->DeleteLocalRef(env, javaClass);
    JNI_ENV_EXIT
    
    return JSValueMakeNumber(ctx, (int)TOP);
}
예제 #2
0
EXPORTAPI JSValueRef Hyperloop_Binary_IsEqual(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) {
    if (argumentCount < 2)
    {
        *exception = HyperloopMakeException(ctx, "Wrong arguments passed to IsEqual");
        return JSValueMakeUndefined(ctx);
    }

    auto isObject_a = JSValueIsObject(ctx, arguments[0]);
    auto isObject_b = JSValueIsObject(ctx, arguments[1]);

    if (isObject_a && isObject_b)
    {
        auto obj_a = HyperloopJSValueToVoidPointer(ctx, arguments[0], exception);
        auto obj_b = HyperloopJSValueToVoidPointer(ctx, arguments[1], exception);

        // nullptr means both objects are not a native object
        if (obj_a == nullptr && obj_b == nullptr) {
            return JSValueMakeBoolean(ctx, JSValueIsStrictEqual(ctx, arguments[0], arguments[1]));
        }

        return JSValueMakeBoolean(ctx, (obj_a == obj_b));
    }
    else if (!isObject_a && !isObject_b) {
        return JSValueMakeBoolean(ctx, JSValueIsStrictEqual(ctx, arguments[0], arguments[1]));
    }

    return JSValueMakeBoolean(ctx, false);
}
JSValueRef equalsConstructorForJava_java_lang_String(JSContextRef ctx, JSObjectRef function, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
    JSPrivateObject* p = (JSPrivateObject*)JSObjectGetPrivate(object);
    if (p && p->object && argumentCount > 0) {
        JSPrivateObject* arg0 = (JSPrivateObject*)JSObjectGetPrivate(JSValueToObject(ctx, arguments[0], NULL));
        if (arg0 == NULL || arg0->object == NULL) return JSValueMakeBoolean(ctx, false);
        JNI_ENV_ENTER
        jclass  javaClass = (*env)->FindClass(env, "java/lang/String");
        if (javaClass == NULL) return HyperloopMakeException(ctx, "Class not found: java.lang.String", exception);

        jmethodID methodId = (*env)->GetMethodID(env, javaClass, "equals", "(Ljava/lang/Object;)Z");
        if (methodId == NULL) return HyperloopMakeException(ctx, "Method not found: java.lang.String#equals", exception);
        
        jboolean result = (*env)->CallBooleanMethod(env, p->object, methodId, arg0->object);
        CHECK_JAVAEXCEPTION
        JNI_ENV_EXIT
        return result == JNI_TRUE ? JSValueMakeBoolean(ctx, true) : JSValueMakeBoolean(ctx, false);
    }
JSValueRef getActionForJava_android_view_MotionEvent(JSContextRef ctx, JSObjectRef function, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
    JSPrivateObject* p = (JSPrivateObject*)JSObjectGetPrivate(object);
    if (p && p->object) {
        JNI_ENV_ENTER
        jclass  javaClass = (*env)->FindClass(env, "android/view/MotionEvent");
        if (javaClass == NULL) return HyperloopMakeException(ctx, "Class not found: android.view.MotionEvent", exception);
        
        jmethodID methodId = (*env)->GetMethodID(env, javaClass, "getAction", "()I");
        if (methodId == NULL) return HyperloopMakeException(ctx, "Method not found: android.view.MotionEvent#getAction", exception);
        (*env)->DeleteLocalRef(env, javaClass);
        
        jint result = (*env)->CallIntMethod(env, p->object, methodId);
        CHECK_JAVAEXCEPTION
        JNI_ENV_EXIT
        
        return JSValueMakeNumber(ctx, (int)result);
    }
예제 #5
0
/**
 * invoke a function callback
 */
EXPORTAPI JSValueRef HyperloopInvokeFunctionCallback (JSContextRef ctx, void * callbackPointer, size_t argumentCount, const JSValueRef arguments[], JSValueRef *exception)
{
    JSValueRef callback = *(JSValueRef*)callbackPointer;
    if (!JSValueIsObject(ctx, callback) || !JSObjectIsFunction(ctx, JSValueToObject(ctx,callback,exception))) {
        *exception = HyperloopMakeException(ctx,"Function callback is not a JS function object");
        return JSValueMakeUndefined(ctx);
    }
    JSObjectRef callbackObj = JSValueToObject(ctx,callback,exception);
    return JSObjectCallAsFunction(HyperloopGlobalContext(), callbackObj, NULL, argumentCount, arguments, exception);
}
JSValueRef setMarginsForJava_android_widget_FrameLayout_LayoutParams(JSContextRef ctx, JSObjectRef function, JSObjectRef object, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
    JSPrivateObject* p = (JSPrivateObject*)JSObjectGetPrivate(object);
    if (p && p->object && argumentCount >= 4) {
        int arg0 = JSValueToNumber(ctx, arguments[0], exception);
        int arg1 = JSValueToNumber(ctx, arguments[1], exception);
        int arg2 = JSValueToNumber(ctx, arguments[2], exception);
        int arg3 = JSValueToNumber(ctx, arguments[3], exception);
        JNI_ENV_ENTER
        jclass  javaClass = (*env)->FindClass(env, "android/widget/FrameLayout$LayoutParams");
        if (javaClass == NULL) return HyperloopMakeException(ctx, "Class not found: android.widget.FrameLayout$LayoutParams", exception);
        
        jmethodID methodId = (*env)->GetMethodID(env, javaClass, "setMargins", "(IIII)V");
        if (methodId == NULL) return HyperloopMakeException(ctx, "Method not found: android.widget.FrameLayout$LayoutParams#setMargins", exception);
        
        (*env)->DeleteLocalRef(env, javaClass);
        (*env)->CallVoidMethod(env, p->object, methodId, arg0, arg1, arg2, arg3);
        JNI_ENV_EXIT
    }