summaryrefslogtreecommitdiff
path: root/platform/android/src/offline/offline_region_definition.cpp
blob: 66a9bdf99dcad0a4c1c440b1fbd05c1ddf0d88a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "offline_region_definition.hpp"

#include "../geometry/lat_lng_bounds.hpp"

namespace mbgl {
namespace android {

// OfflineRegionDefinition //

jni::Class<OfflineRegionDefinition> OfflineRegionDefinition::javaClass;

void OfflineRegionDefinition::registerNative(jni::JNIEnv& env) {
    javaClass = *jni::Class<OfflineRegionDefinition>::Find(env).NewGlobalRef(env).release();
}

// OfflineTilePyramidRegionDefinition //

jni::Object<OfflineTilePyramidRegionDefinition> OfflineTilePyramidRegionDefinition::New(jni::JNIEnv& env, mbgl::OfflineTilePyramidRegionDefinition definition) {

    //Convert objects
    auto styleURL = jni::Make<jni::String>(env, definition.styleURL);
    auto bounds = LatLngBounds::New(env, definition.bounds);

    static auto constructor = javaClass.GetConstructor<jni::String, jni::Object<LatLngBounds>, jni::jdouble, jni::jdouble, jni::jfloat>(env);
    auto jdefinition = javaClass.New(env, constructor, styleURL, bounds, definition.minZoom, definition.maxZoom, definition.pixelRatio);

    //Delete References
    jni::DeleteLocalRef(env, styleURL);
    jni::DeleteLocalRef(env, bounds);

    return jdefinition;
}

mbgl::OfflineTilePyramidRegionDefinition OfflineTilePyramidRegionDefinition::getDefinition(jni::JNIEnv& env, jni::Object<OfflineTilePyramidRegionDefinition> jDefinition) {
    // Field references
    static auto styleURLF = javaClass.GetField<jni::String>(env, "styleURL");
    static auto boundsF = javaClass.GetField<jni::Object<LatLngBounds>>(env, "bounds");
    static auto minZoomF = javaClass.GetField<jni::jdouble>(env, "minZoom");
    static auto maxZoomF = javaClass.GetField<jni::jdouble>(env, "maxZoom");
    static auto pixelRatioF = javaClass.GetField<jni::jfloat>(env, "pixelRatio");

    // Get objects
    auto jStyleURL = jDefinition.Get(env, styleURLF);
    auto jBounds = jDefinition.Get(env, boundsF);

    // Create definition
    mbgl::OfflineTilePyramidRegionDefinition definition(
        jni::Make<std::string>(env, jStyleURL),
        LatLngBounds::getLatLngBounds(env, jBounds),
        jDefinition.Get(env, minZoomF),
        jDefinition.Get(env, maxZoomF),
        jDefinition.Get(env, pixelRatioF)
    );

    // Delete references
    jni::DeleteLocalRef(env, jStyleURL);
    jni::DeleteLocalRef(env, jBounds);

    return definition;
}

jni::Class<OfflineTilePyramidRegionDefinition> OfflineTilePyramidRegionDefinition::javaClass;

void OfflineTilePyramidRegionDefinition::registerNative(jni::JNIEnv& env) {
    javaClass = *jni::Class<OfflineTilePyramidRegionDefinition>::Find(env).NewGlobalRef(env).release();
}

} // namespace android
} // namespace mbgl