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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#include "Framework.hpp"
#include "MapStorage.hpp"
#include "../country/country_helper.hpp"
#include "../core/jni_helper.hpp"
#include "../platform/Platform.hpp"
#include "storage/index.hpp"
#include "base/logging.hpp"
#include "platform/file_logging.hpp"
extern "C"
{
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_MapFragment_nativeOnLocationError(JNIEnv * env, jobject thiz,
int errorCode)
{
g_framework->OnLocationError(errorCode);
}
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_MapFragment_nativeLocationUpdated(JNIEnv * env, jobject thiz,
jlong time, jdouble lat, jdouble lon,
jfloat accuracy, jdouble altitude, jfloat speed, jfloat bearing)
{
location::GpsInfo info;
info.m_source = location::EAndroidNative;
info.m_timestamp = static_cast<double>(time) / 1000.0;
info.m_latitude = lat;
info.m_longitude = lon;
if (accuracy > 0.0)
info.m_horizontalAccuracy = accuracy;
if (altitude != 0.0)
{
info.m_altitude = altitude;
info.m_verticalAccuracy = accuracy;
}
if (bearing > 0.0)
info.m_bearing = bearing;
if (speed > 0.0)
info.m_speed = speed;
LOG_MEMORY_INFO();
g_framework->OnLocationUpdated(info);
}
// Fixed optimization bug for x86 (reproduced on Asus ME302C).
#pragma clang push_options
#pragma clang optimize off
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_MapFragment_nativeCompassUpdated(JNIEnv * env, jobject thiz,
jdouble magneticNorth, jdouble trueNorth, jboolean force)
{
location::CompassInfo info;
info.m_bearing = (trueNorth >= 0.0) ? trueNorth : magneticNorth;
g_framework->OnCompassUpdated(info, force);
}
#pragma clang pop_options
JNIEXPORT jfloatArray JNICALL
Java_com_mapswithme_maps_location_LocationHelper_nativeUpdateCompassSensor(
JNIEnv * env, jobject thiz, jint ind, jfloatArray arr)
{
int const count = 3;
// get Java array
jfloat buffer[3];
env->GetFloatArrayRegion(arr, 0, count, buffer);
// get the result
g_framework->UpdateCompassSensor(ind, buffer);
// pass result back to Java
jfloatArray ret = (jfloatArray)env->NewFloatArray(count);
env->SetFloatArrayRegion(ret, 0, count, buffer);
return ret;
}
void CallOnDownloadCountryClicked(shared_ptr<jobject> const & obj,
storage::TIndex const & idx,
int options,
jmethodID methodID)
{
JNIEnv * env = jni::GetEnv();
env->CallVoidMethod(*obj.get(), methodID, idx.m_group, idx.m_country, idx.m_region, options);
}
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_MapFragment_nativeConnectDownloadButton(JNIEnv * env, jobject thiz)
{
///@TODO UVR
//CountryStatusDisplay * display = g_framework->GetCountryStatusDisplay();
//jmethodID methodID = jni::GetJavaMethodID(env, thiz, "OnDownloadCountryClicked", "(IIII)V");
//display->SetDownloadCountryListener(bind(&CallOnDownloadCountryClicked,
// jni::make_global_ref(thiz),
// _1,
// _2,
// methodID));
}
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_MapFragment_nativeDownloadCountry(JNIEnv * env, jobject thiz, jobject idx, jint options)
{
storage::TIndex index = storage::ToNative(idx);
storage::ActiveMapsLayout & layout = storage_utils::GetMapLayout();
if (options == -1)
layout.RetryDownloading(index);
else
layout.DownloadMap(index, storage_utils::ToOptions(options));
}
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_MapFragment_nativeScale(JNIEnv * env, jobject thiz, jdouble k)
{
g_framework->Scale(static_cast<double>(k));
}
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_MapFragment_showMapForUrl(JNIEnv * env, jobject thiz, jstring url)
{
return g_framework->ShowMapForURL(jni::ToNativeString(env, url));
}
} // extern "C"
|