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); }
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); }
/** * 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 }