forked from organicmaps/organicmaps
[android] Refactored old local-ref definitions.
This commit is contained in:
parent
a2630cde5c
commit
bd02659bc6
5 changed files with 62 additions and 90 deletions
|
@ -15,22 +15,18 @@ extern "C"
|
|||
if (items.empty())
|
||||
return;
|
||||
|
||||
static jclass const pairClass = static_cast<jclass>(env->NewGlobalRef(env->FindClass("android/util/Pair")));
|
||||
static jmethodID const pairCtor = env->GetMethodID(pairClass, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;)V");
|
||||
static jmethodID const listAddMethod = env->GetMethodID(env->GetObjectClass(result), "add", "(Ljava/lang/Object;)Z");
|
||||
static jclass const pairClass = jni::GetGlobalClassRef(env, "android/util/Pair");
|
||||
static jmethodID const pairCtor = jni::GetConstructorID(env, pairClass, "(Ljava/lang/Object;Ljava/lang/Object;)V");
|
||||
static jmethodID const listAddMethod = jni::GetMethodID(env, result, "add", "(Ljava/lang/Object;)Z");
|
||||
|
||||
for (TSearchRequest const & item : items)
|
||||
{
|
||||
jstring locale = jni::ToJavaString(env, item.first.c_str());
|
||||
jstring query = jni::ToJavaString(env, item.second.c_str());
|
||||
jobject pair = env->NewObject(pairClass, pairCtor, locale, query);
|
||||
ASSERT(pair, (jni::DescribeException()));
|
||||
jni::TScopedLocalRef locale(env, jni::ToJavaString(env, item.first.c_str()));
|
||||
jni::TScopedLocalRef query(env, jni::ToJavaString(env, item.second.c_str()));
|
||||
jni::TScopedLocalRef pair(env, env->NewObject(pairClass, pairCtor, locale.get(), query.get()));
|
||||
ASSERT(pair.get(), (jni::DescribeException()));
|
||||
|
||||
env->CallBooleanMethod(result, listAddMethod, pair);
|
||||
|
||||
env->DeleteLocalRef(locale);
|
||||
env->DeleteLocalRef(query);
|
||||
env->DeleteLocalRef(pair);
|
||||
env->CallBooleanMethod(result, listAddMethod, pair.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -105,8 +105,8 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkCategory_nativeGetTrack(
|
|||
|
||||
ASSERT(nTrack, ("Track must not be null with index:)", bmkId));
|
||||
|
||||
string formattedLenght;
|
||||
MeasurementUtils::FormatDistance(nTrack->GetLengthMeters(), formattedLenght);
|
||||
string formattedLength;
|
||||
MeasurementUtils::FormatDistance(nTrack->GetLengthMeters(), formattedLength);
|
||||
|
||||
dp::Color nColor = nTrack->GetColor(0);
|
||||
|
||||
|
@ -117,6 +117,6 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkCategory_nativeGetTrack(
|
|||
|
||||
return env->NewObject(trackClazz, cId,
|
||||
bmkId, id, jni::ToJavaString(env, nTrack->GetName()),
|
||||
jni::ToJavaString(env, formattedLenght), androidColor);
|
||||
jni::ToJavaString(env, formattedLength), androidColor);
|
||||
}
|
||||
} // extern "C"
|
||||
|
|
|
@ -227,7 +227,6 @@ Java_com_mapswithme_maps_editor_Editor_nativeHasWifi(JNIEnv *, jclass)
|
|||
return g_editableMapObject.GetMetadata().Get(feature::Metadata::FMD_INTERNET) == "wlan";
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_com_mapswithme_maps_editor_Editor_nativeHasSomethingToUpload(JNIEnv * env, jclass clazz)
|
||||
{
|
||||
|
|
|
@ -68,9 +68,8 @@ jobjectArray JavaTimespans(JNIEnv * env, vector<Timespan> const & spans)
|
|||
jobjectArray const result = env->NewObjectArray(size, g_clazzTimespan, 0);
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
jobject const jSpan = JavaTimespan(env, spans[i]);
|
||||
env->SetObjectArrayElement(result, i, jSpan);
|
||||
env->DeleteLocalRef(jSpan);
|
||||
jni::TScopedLocalRef jSpan(env, JavaTimespan(env, spans[i]));
|
||||
env->SetObjectArrayElement(result, i, jSpan.get());
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -109,9 +108,8 @@ jobjectArray JavaTimetables(JNIEnv * env, TimeTableSet & tts)
|
|||
jobjectArray const result = env->NewObjectArray(size, g_clazzTimetable, 0);
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
jobject const jTable = JavaTimetable(env, tts.Get(i));
|
||||
env->SetObjectArrayElement(result, i, jTable);
|
||||
env->DeleteLocalRef(jTable);
|
||||
jni::TScopedLocalRef jTable(env, JavaTimetable(env, tts.Get(i)));
|
||||
env->SetObjectArrayElement(result, i, jTable.get());
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -149,12 +147,9 @@ TimeTable NativeTimetable(JNIEnv * env, jobject jTimetable)
|
|||
size = env->GetArrayLength(jClosedSpans);
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
jobject const jSpan = env->GetObjectArrayElement(jClosedSpans, i);
|
||||
if (jSpan)
|
||||
{
|
||||
tt.AddExcludeTime(NativeTimespan(env, jSpan));
|
||||
env->DeleteLocalRef(jSpan);
|
||||
}
|
||||
jni::TScopedLocalRef jSpan(env, env->GetObjectArrayElement(jClosedSpans, i));
|
||||
if (jSpan.get())
|
||||
tt.AddExcludeTime(NativeTimespan(env, jSpan.get()));
|
||||
}
|
||||
return tt;
|
||||
}
|
||||
|
@ -168,9 +163,8 @@ TimeTableSet NativeTimetableSet(JNIEnv * env, jobjectArray jTimetables)
|
|||
|
||||
for (int i = 1; i < size; i++)
|
||||
{
|
||||
jobject const timetable = env->GetObjectArrayElement(jTimetables, i);
|
||||
tts.Append(NativeTimetable(env, timetable));
|
||||
env->DeleteLocalRef(timetable);
|
||||
jni::TScopedLocalRef timetable(env, env->GetObjectArrayElement(jTimetables, i));
|
||||
tts.Append(NativeTimetable(env, timetable.get()));
|
||||
}
|
||||
|
||||
return tts;
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
#include "platform/http_thread_callback.hpp"
|
||||
|
||||
#include "Platform.hpp"
|
||||
#include "../core/jni_helper.hpp"
|
||||
|
||||
#include "Platform.hpp"
|
||||
#include "platform/http_thread_callback.hpp"
|
||||
|
||||
class HttpThread
|
||||
{
|
||||
|
@ -17,64 +16,48 @@ public:
|
|||
int64_t expectedFileSize,
|
||||
string const & pb)
|
||||
{
|
||||
/// should create java object here.
|
||||
JNIEnv * env = jni::GetEnv();
|
||||
ASSERT ( env, () );
|
||||
|
||||
jclass klass = env->FindClass("com/mapswithme/maps/downloader/ChunkTask");
|
||||
ASSERT ( klass, () );
|
||||
|
||||
static jmethodID initMethodId = env->GetMethodID(klass, "<init>", "(JLjava/lang/String;JJJ[BLjava/lang/String;)V");
|
||||
ASSERT ( initMethodId, () );
|
||||
static jclass const klass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/downloader/ChunkTask");
|
||||
// public ChunkTask(long httpCallbackID, String url, long beg, long end,
|
||||
// long expectedFileSize, byte[] postBody, String userAgent)
|
||||
static jmethodID const initMethodId = jni::GetConstructorID(env, klass, "(JLjava/lang/String;JJJ[BLjava/lang/String;)V");
|
||||
static jmethodID const startMethodId = env->GetMethodID(klass, "start", "()V");
|
||||
|
||||
// User id is always the same, so do not waste time on every chunk call
|
||||
static string uniqueUserId = GetPlatform().UniqueClientId();
|
||||
static string const uniqueUserId = GetPlatform().UniqueClientId();
|
||||
|
||||
jbyteArray postBody = 0;
|
||||
jni::TScopedLocalByteArrayRef postBody(env, nullptr);
|
||||
size_t const postBodySize = pb.size();
|
||||
if (postBodySize)
|
||||
{
|
||||
postBody = env->NewByteArray(postBodySize);
|
||||
env->SetByteArrayRegion(postBody, 0, postBodySize, reinterpret_cast<jbyte const *>(pb.c_str()));
|
||||
postBody.reset(env->NewByteArray(postBodySize));
|
||||
env->SetByteArrayRegion(postBody.get(), 0, postBodySize, reinterpret_cast<jbyte const *>(pb.c_str()));
|
||||
}
|
||||
|
||||
jstring jUrl = env->NewStringUTF(url.c_str());
|
||||
jstring jUserId = env->NewStringUTF(uniqueUserId.c_str());
|
||||
jobject const localSelf = env->NewObject(klass,
|
||||
initMethodId,
|
||||
reinterpret_cast<jlong>(&cb),
|
||||
jUrl,
|
||||
static_cast<jlong>(beg),
|
||||
static_cast<jlong>(end),
|
||||
static_cast<jlong>(expectedFileSize),
|
||||
postBody,
|
||||
jUserId);
|
||||
m_self = env->NewGlobalRef(localSelf);
|
||||
ASSERT ( m_self, () );
|
||||
|
||||
env->DeleteLocalRef(localSelf);
|
||||
env->DeleteLocalRef(postBody);
|
||||
env->DeleteLocalRef(jUrl);
|
||||
env->DeleteLocalRef(jUserId);
|
||||
|
||||
static jmethodID startMethodId = env->GetMethodID(klass, "start", "()V");
|
||||
ASSERT ( startMethodId, () );
|
||||
|
||||
env->DeleteLocalRef(klass);
|
||||
jni::TScopedLocalRef jUrl(env, jni::ToJavaString(env, url.c_str()));
|
||||
jni::TScopedLocalRef jUserId(env, jni::ToJavaString(env, uniqueUserId.c_str()));
|
||||
jni::TScopedLocalRef localSelf(env, env->NewObject(klass,
|
||||
initMethodId,
|
||||
reinterpret_cast<jlong>(&cb),
|
||||
jUrl.get(),
|
||||
static_cast<jlong>(beg),
|
||||
static_cast<jlong>(end),
|
||||
static_cast<jlong>(expectedFileSize),
|
||||
postBody.get(),
|
||||
jUserId.get()));
|
||||
m_self = env->NewGlobalRef(localSelf.get());
|
||||
ASSERT(m_self, ());
|
||||
|
||||
env->CallVoidMethod(m_self, startMethodId);
|
||||
jni::DumpDalvikReferenceTables();
|
||||
}
|
||||
|
||||
~HttpThread()
|
||||
{
|
||||
JNIEnv * env = jni::GetEnv();
|
||||
ASSERT ( env, () );
|
||||
|
||||
jmethodID methodId = jni::GetMethodID(env, m_self, "cancel", "(Z)Z");
|
||||
ASSERT ( methodId, () );
|
||||
|
||||
env->CallBooleanMethod(m_self, methodId, false);
|
||||
|
||||
env->DeleteGlobalRef(m_self);
|
||||
}
|
||||
};
|
||||
|
@ -100,22 +83,22 @@ namespace downloader
|
|||
|
||||
extern "C"
|
||||
{
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_com_mapswithme_maps_downloader_ChunkTask_nativeOnWrite(JNIEnv * env, jclass clazz, jlong httpCallbackID, jlong beg, jbyteArray data, jlong size)
|
||||
{
|
||||
downloader::IHttpThreadCallback * cb = reinterpret_cast<downloader::IHttpThreadCallback*>(httpCallbackID);
|
||||
jbyte * buf = env->GetByteArrayElements(data, 0);
|
||||
ASSERT ( buf, () );
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_com_mapswithme_maps_downloader_ChunkTask_nativeOnWrite(JNIEnv * env, jclass clazz, jlong httpCallbackID, jlong beg, jbyteArray data, jlong size)
|
||||
{
|
||||
downloader::IHttpThreadCallback * cb = reinterpret_cast<downloader::IHttpThreadCallback*>(httpCallbackID);
|
||||
jbyte * buf = env->GetByteArrayElements(data, 0);
|
||||
ASSERT(buf, ());
|
||||
|
||||
bool const ret = cb->OnWrite(beg, buf, size);
|
||||
env->ReleaseByteArrayElements(data, buf, 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_mapswithme_maps_downloader_ChunkTask_nativeOnFinish(JNIEnv * env, jclass clazz, jlong httpCallbackID, jlong httpCode, jlong beg, jlong end)
|
||||
{
|
||||
downloader::IHttpThreadCallback * cb = reinterpret_cast<downloader::IHttpThreadCallback*>(httpCallbackID);
|
||||
cb->OnFinish(httpCode, beg, end);
|
||||
}
|
||||
bool const ret = cb->OnWrite(beg, buf, size);
|
||||
env->ReleaseByteArrayElements(data, buf, 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_mapswithme_maps_downloader_ChunkTask_nativeOnFinish(JNIEnv * env, jclass clazz, jlong httpCallbackID, jlong httpCode, jlong beg, jlong end)
|
||||
{
|
||||
downloader::IHttpThreadCallback * cb = reinterpret_cast<downloader::IHttpThreadCallback*>(httpCallbackID);
|
||||
cb->OnFinish(httpCode, beg, end);
|
||||
}
|
||||
} // extern "C"
|
||||
|
|
Loading…
Add table
Reference in a new issue