/*
 * Copyright 2021 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include <android/log.h>
#include <jni.h>

#define REGISTER_NATIVES(class_name)                     \
extern int register_jetski_##class_name(JNIEnv*);    \
if (auto rc = register_jetski_##class_name(env)) {   \
    __android_log_print(ANDROID_LOG_ERROR, "JetSki", \
        "Failed to load natives: " #class_name);         \
    return rc;                                           \
}


JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
    JNIEnv* env;
    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
        return JNI_ERR;
    }

    REGISTER_NATIVES(Canvas)
    REGISTER_NATIVES(ColorFilter)
    REGISTER_NATIVES(ComposeColorFilter)
    REGISTER_NATIVES(Font)
    REGISTER_NATIVES(FontChain)
    REGISTER_NATIVES(HSLAMatrixColorFilter)
    REGISTER_NATIVES(Image)
    REGISTER_NATIVES(ImageFilter)
    REGISTER_NATIVES(LinearGradient)
    REGISTER_NATIVES(Matrix)
    REGISTER_NATIVES(MatrixColorFilter)
    REGISTER_NATIVES(Paint)
    REGISTER_NATIVES(Path)
    REGISTER_NATIVES(PathBuilder)
    REGISTER_NATIVES(RadialGradient)
    REGISTER_NATIVES(RuntimeShaderBuilder)
    REGISTER_NATIVES(Shader)
    REGISTER_NATIVES(SkottieAnimation)
    REGISTER_NATIVES(Surface)
    REGISTER_NATIVES(SweepGradient)
    REGISTER_NATIVES(Text)
    REGISTER_NATIVES(TwoPointConicalGradient)

    return JNI_VERSION_1_6;
}
