forked from organicmaps/organicmaps
[android] android part of adaptation
This commit is contained in:
parent
bacc53e24b
commit
bd1c2ce569
7 changed files with 150 additions and 98 deletions
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include "../../../../../map/framework.hpp"
|
||||
#include "../../../../../map/measurement_utils.hpp"
|
||||
#include "../../../../../map/user_mark.hpp"
|
||||
|
||||
#include "../../../../../gui/controller.hpp"
|
||||
|
||||
|
@ -444,7 +445,7 @@ namespace android
|
|||
::Framework * f = NativeFramework();
|
||||
|
||||
// Call ClearXXX first, then RemovePin (Framework::Invalidate is called inside).
|
||||
f->GetBookmarkManager().AdditionalPoiLayerClear();
|
||||
f->GetBookmarkManager().UserMarksClear(UserMarkContainer::SEARCH_MARK);
|
||||
f->GetBalloonManager().RemovePin();
|
||||
f->GetBalloonManager().Dismiss();
|
||||
f->Invalidate();
|
||||
|
@ -570,12 +571,12 @@ namespace android
|
|||
GetPinClickManager().OnClick(m2::PointD(x, y), m_wasLongClick);
|
||||
}
|
||||
|
||||
BookmarkAndCategory Framework::AddBookmark(size_t cat, Bookmark & bm)
|
||||
BookmarkAndCategory Framework::AddBookmark(size_t cat, m2::PointD const & pt, BookmarkCustomData & bm)
|
||||
{
|
||||
return BookmarkAndCategory(cat, m_work.AddBookmark(cat, bm));
|
||||
return BookmarkAndCategory(cat, m_work.AddBookmark(cat, pt, bm));
|
||||
}
|
||||
|
||||
void Framework::ReplaceBookmark(BookmarkAndCategory const & ind, Bookmark & bm)
|
||||
void Framework::ReplaceBookmark(BookmarkAndCategory const & ind, BookmarkCustomData & bm)
|
||||
{
|
||||
m_work.ReplaceBookmark(ind.first, ind.second, bm);
|
||||
}
|
||||
|
@ -583,13 +584,14 @@ namespace android
|
|||
size_t Framework::ChangeBookmarkCategory(BookmarkAndCategory const & ind, size_t newCat)
|
||||
{
|
||||
BookmarkCategory * pOld = m_work.GetBmCategory(ind.first);
|
||||
|
||||
Bookmark bmk(*(pOld->GetBookmark(ind.second)));
|
||||
Bookmark const * oldBm = pOld->GetBookmark(ind.second);
|
||||
m2::PointD pt = oldBm->GetOrg();
|
||||
BookmarkCustomData bm(static_cast<BookmarkCustomData const &>(oldBm->GetCustomData()));
|
||||
|
||||
pOld->DeleteBookmark(ind.second);
|
||||
pOld->SaveToKMLFile();
|
||||
|
||||
return AddBookmark(newCat, bmk).second;
|
||||
return AddBookmark(newCat, pt, bm).second;
|
||||
}
|
||||
|
||||
bool Framework::IsDownloadingActive()
|
||||
|
@ -607,6 +609,7 @@ namespace android
|
|||
|
||||
void Framework::DeactivatePopup()
|
||||
{
|
||||
GetPinClickManager().RemovePin();
|
||||
GetPinClickManager().Hide();
|
||||
}
|
||||
|
||||
|
@ -634,6 +637,13 @@ namespace android
|
|||
|
||||
}
|
||||
|
||||
template <class T>
|
||||
T const & CastData(UserCustomData const & data)
|
||||
{
|
||||
return static_cast<T const &>(data);
|
||||
}
|
||||
|
||||
|
||||
//============ GLUE CODE for com.mapswithme.maps.Framework class =============//
|
||||
/* ____
|
||||
* _ |||| _
|
||||
|
@ -646,7 +656,7 @@ namespace android
|
|||
extern "C"
|
||||
{
|
||||
// API
|
||||
void CallOnApiPointActivatedListener(shared_ptr<jobject> obj, url_scheme::ApiPoint const & apiPoint)
|
||||
void CallOnApiPointActivatedListener(shared_ptr<jobject> obj, ApiCustomData const & data, double lat, double lon)
|
||||
{
|
||||
JNIEnv * jniEnv = jni::GetEnv();
|
||||
const jmethodID methodID = jni::GetJavaMethodID(jniEnv,
|
||||
|
@ -654,22 +664,23 @@ extern "C"
|
|||
"onApiPointActivated",
|
||||
"(DDLjava/lang/String;Ljava/lang/String;)V");
|
||||
|
||||
jstring j_name = jni::ToJavaString(jniEnv, apiPoint.m_name);
|
||||
jstring j_id = jni::ToJavaString(jniEnv, apiPoint.m_id);
|
||||
jniEnv->CallVoidMethod(*obj.get(), methodID, apiPoint.m_lat, apiPoint.m_lon, j_name, j_id);
|
||||
jstring j_name = jni::ToJavaString(jniEnv, data.GetName());
|
||||
jstring j_id = jni::ToJavaString(jniEnv, data.GetID());
|
||||
|
||||
jniEnv->CallVoidMethod(*obj.get(), methodID, lat, lon, j_name, j_id);
|
||||
}
|
||||
|
||||
// Additional layer
|
||||
void CallOnAdditionalLayerActivatedListener(shared_ptr<jobject> obj, size_t index)
|
||||
{
|
||||
JNIEnv * jniEnv = jni::GetEnv();
|
||||
const jmethodID methodID = jni::GetJavaMethodID(jniEnv,
|
||||
*obj.get(),
|
||||
"onAdditionalLayerActivated",
|
||||
"(J)V");
|
||||
void CallOnAdditionalLayerActivatedListener(shared_ptr<jobject> obj, size_t index)
|
||||
{
|
||||
JNIEnv * jniEnv = jni::GetEnv();
|
||||
const jmethodID methodID = jni::GetJavaMethodID(jniEnv,
|
||||
*obj.get(),
|
||||
"onAdditionalLayerActivated",
|
||||
"(J)V");
|
||||
|
||||
jniEnv->CallVoidMethod(*obj.get(), methodID, static_cast<jlong>(index));
|
||||
}
|
||||
jniEnv->CallVoidMethod(*obj.get(), methodID, static_cast<jlong>(index));
|
||||
}
|
||||
|
||||
// POI
|
||||
void CallOnPoiActivatedListener(shared_ptr<jobject> obj, m2::PointD const & globalPoint, search::AddressInfo const & addrInfo)
|
||||
|
@ -684,7 +695,7 @@ extern "C"
|
|||
|
||||
const char * signature = "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;DD)V";
|
||||
const jmethodID methodId = jni::GetJavaMethodID(jniEnv, *obj.get(),
|
||||
"onPoiActivated", signature);
|
||||
"onPoiActivated", signature);
|
||||
jniEnv->CallVoidMethod(*obj.get(), methodId, j_name, j_type, j_address, lat, lon);
|
||||
}
|
||||
|
||||
|
@ -697,13 +708,71 @@ extern "C"
|
|||
jniEnv->CallVoidMethod(*obj.get(), methodId, bmkAndCat.first, bmkAndCat.second);
|
||||
}
|
||||
|
||||
// My Position
|
||||
void CallOnMyPositionActivatedListener(shared_ptr<jobject> obj, double lat, double lon)
|
||||
void CallOnUserMarkActivated(shared_ptr<jobject> obj, UserMark const * mark)
|
||||
{
|
||||
JNIEnv * jniEnv = jni::GetEnv();
|
||||
const jmethodID methodId = jni::GetJavaMethodID(jniEnv, *obj.get(),
|
||||
"onMyPositionActivated", "(DD)V");
|
||||
jniEnv->CallVoidMethod(*obj.get(), methodId, lat, lon);
|
||||
::Framework * fm = g_framework->NativeFramework();
|
||||
UserCustomData const & data = mark->GetCustomData();
|
||||
switch (data.GetType())
|
||||
{
|
||||
case UserCustomData::API:
|
||||
{
|
||||
double lat, lon;
|
||||
mark->GetLatLon(lat, lon);
|
||||
CallOnApiPointActivatedListener(obj, CastData<ApiCustomData>(data), lat, lon);
|
||||
}
|
||||
break;
|
||||
case UserCustomData::BOOKMARK:
|
||||
{
|
||||
BookmarkAndCategory bmAndCat = MakeEmptyBookmarkAndCategory();
|
||||
for (size_t i = 0; i < fm->GetBmCategoriesCount(); ++i)
|
||||
{
|
||||
if (fm->GetBmCategory(i) == mark->GetContainer())
|
||||
{
|
||||
bmAndCat.first = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT(bmAndCat.first != MakeEmptyBookmarkAndCategory().first, ());
|
||||
|
||||
BookmarkCategory const * cat = fm->GetBmCategory(bmAndCat.first);
|
||||
for (size_t i = 0; i < cat->GetBookmarksCount(); ++i)
|
||||
{
|
||||
if (cat->GetBookmark(i) == mark)
|
||||
{
|
||||
bmAndCat.second = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT(IsValid(bmAndCat), ());
|
||||
CallOnBookmarkActivatedListener(obj, bmAndCat);
|
||||
}
|
||||
break;
|
||||
case UserCustomData::POI:
|
||||
{
|
||||
search::AddressInfo info;
|
||||
fm->GetAddressInfoForGlobalPoint(mark->GetOrg(), info);
|
||||
CallOnPoiActivatedListener(obj, mark->GetOrg(), info);
|
||||
}
|
||||
break;
|
||||
case UserCustomData::SEARCH:
|
||||
{
|
||||
UserMarkContainer::Controller & c = fm->GetBookmarkManager().UserMarksGetController(UserMarkContainer::SEARCH_MARK);
|
||||
size_t index = (size_t)-1;
|
||||
for (size_t i = 0; i < c.GetUserMarkCount(); ++i)
|
||||
{
|
||||
if (c.GetUserMark(i) == mark)
|
||||
{
|
||||
index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ASSERT(index != (size_t) -1, ());
|
||||
CallOnAdditionalLayerActivatedListener(obj, index);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Dismiss information box
|
||||
|
@ -730,7 +799,7 @@ extern "C"
|
|||
JNIEXPORT void JNICALL
|
||||
Java_com_mapswithme_maps_Framework_nativeClearApiPoints(JNIEnv * env, jclass clazz)
|
||||
{
|
||||
g_framework->NativeFramework()->ClearMapApiPoints();
|
||||
g_framework->NativeFramework()->GetBookmarkManager().UserMarksClear(UserMarkContainer::API_MARK);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
|
@ -739,11 +808,7 @@ extern "C"
|
|||
PinClickManager & manager = g_framework->GetPinClickManager();
|
||||
shared_ptr<jobject> obj = jni::make_global_ref(l);
|
||||
|
||||
manager.ConnectApiListener(bind(&CallOnApiPointActivatedListener, obj, _1));
|
||||
manager.ConnectPoiListener(bind(&CallOnPoiActivatedListener, obj, _1, _2));
|
||||
manager.ConnectBookmarkListener(bind(&CallOnBookmarkActivatedListener, obj, _1));
|
||||
manager.ConnectPositionListener(bind(&CallOnMyPositionActivatedListener, obj, _1, _2));
|
||||
manager.ConnectAdditionalListener(bind(&CallOnAdditionalLayerActivatedListener, obj, _1));
|
||||
manager.ConnectUserMarkListener(bind(&CallOnUserMarkActivated, obj, _1));
|
||||
manager.ConnectDismissListener(bind(&CallOnDismissListener, obj));
|
||||
}
|
||||
|
||||
|
@ -896,24 +961,26 @@ extern "C"
|
|||
Java_com_mapswithme_maps_Framework_injectData(JNIEnv * env, jclass clazz, jobject jsearchResult, jlong index)
|
||||
{
|
||||
const size_t nIndex = static_cast<size_t>(index);
|
||||
ASSERT_LESS(nIndex , g_framework->NativeFramework()->AdditionalLayerNumberOfPoi(), ("Invalid index", nIndex));
|
||||
|
||||
Bookmark * b = g_framework->NativeFramework()->
|
||||
GetBookmarkManager().AdditionalPoiLayerGetBookmark(nIndex);
|
||||
BookmarkManager & m = g_framework->NativeFramework()->GetBookmarkManager();
|
||||
UserMarkContainer::Controller & c = m.UserMarksGetController(UserMarkContainer::SEARCH_MARK);
|
||||
ASSERT_LESS(nIndex , c.GetUserMarkCount(), ("Invalid index", nIndex));
|
||||
UserMark const * mark = c.GetUserMark(nIndex);
|
||||
SearchCustomData const & data = CastData<SearchCustomData>(mark->GetCustomData());
|
||||
|
||||
const jclass javaClazz = env->GetObjectClass(jsearchResult);
|
||||
|
||||
const jfieldID nameId = env->GetFieldID(javaClazz, "mName", "Ljava/lang/String;");
|
||||
env->SetObjectField(jsearchResult, nameId, jni::ToJavaString(env, b->GetName()));
|
||||
env->SetObjectField(jsearchResult, nameId, jni::ToJavaString(env, data.GetName()));
|
||||
|
||||
const jfieldID typeId = env->GetFieldID(javaClazz, "mTypeName", "Ljava/lang/String;");
|
||||
env->SetObjectField(jsearchResult, typeId, jni::ToJavaString(env, b->GetDescription()));
|
||||
env->SetObjectField(jsearchResult, typeId, jni::ToJavaString(env, data.GetTypeName()));
|
||||
|
||||
const jfieldID latId = env->GetFieldID(javaClazz, "mLat", "D");
|
||||
env->SetDoubleField(jsearchResult, latId, MercatorBounds::YToLat(b->GetOrg().y));
|
||||
env->SetDoubleField(jsearchResult, latId, MercatorBounds::YToLat(mark->GetOrg().y));
|
||||
|
||||
const jfieldID lonId = env->GetFieldID(javaClazz, "mLon", "D");
|
||||
env->SetDoubleField(jsearchResult, lonId, MercatorBounds::XToLon(b->GetOrg().x));
|
||||
env->SetDoubleField(jsearchResult, lonId, MercatorBounds::XToLon(mark->GetOrg().x));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
|
|
|
@ -118,8 +118,8 @@ namespace android
|
|||
|
||||
void Scale(double k);
|
||||
|
||||
BookmarkAndCategory AddBookmark(size_t category, Bookmark & bm);
|
||||
void ReplaceBookmark(BookmarkAndCategory const & ind, Bookmark & bm);
|
||||
BookmarkAndCategory AddBookmark(size_t category, m2::PointD const & pt, BookmarkCustomData & bm);
|
||||
void ReplaceBookmark(BookmarkAndCategory const & ind, BookmarkCustomData & bm);
|
||||
size_t ChangeBookmarkCategory(BookmarkAndCategory const & ind, size_t newCat);
|
||||
|
||||
::Framework * NativeFramework();
|
||||
|
|
|
@ -48,7 +48,7 @@ extern "C"
|
|||
Bookmark const * p = getBookmark(cat, bmk);
|
||||
|
||||
// initialize new bookmark
|
||||
Bookmark bm(p->GetOrg(), jni::ToNativeString(env, name), jni::ToNativeString(env, type));
|
||||
BookmarkCustomData bm(jni::ToNativeString(env, name), jni::ToNativeString(env, type));
|
||||
if (descr != 0)
|
||||
bm.SetDescription(jni::ToNativeString(env, descr));
|
||||
else
|
||||
|
|
|
@ -94,8 +94,8 @@ extern "C"
|
|||
MercatorBounds::LatToY(lat));
|
||||
|
||||
::Framework * f = frm();
|
||||
Bookmark bmk(glbPoint, jni::ToNativeString(env, name), f->LastEditedBMType());
|
||||
return g_framework->AddBookmark(frm()->LastEditedBMCategory(), bmk).second;
|
||||
BookmarkCustomData bmk(jni::ToNativeString(env, name), f->LastEditedBMType());
|
||||
return g_framework->AddBookmark(frm()->LastEditedBMCategory(), glbPoint, bmk).second;
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
|
|
|
@ -19,55 +19,6 @@ PinClickManager::PinClickManager(Framework & f)
|
|||
: m_f(f)
|
||||
{}
|
||||
|
||||
//graphics::DisplayList * PinClickManager::GetSearchPinDL()
|
||||
//{
|
||||
// using namespace graphics;
|
||||
|
||||
// if (!m_searchPinDL)
|
||||
// {
|
||||
// Screen * cacheScreen = m_f.GetGuiController()->GetCacheScreen();
|
||||
// m_searchPinDL = cacheScreen->createDisplayList();
|
||||
|
||||
// cacheScreen->beginFrame();
|
||||
// cacheScreen->setDisplayList(m_searchPinDL);
|
||||
|
||||
// Icon::Info infoKey("search-result-active");
|
||||
// Resource const * res = cacheScreen->fromID(cacheScreen->findInfo(infoKey));
|
||||
// shared_ptr<gl::BaseTexture> texture = cacheScreen->pipeline(res->m_pipelineID).texture();
|
||||
|
||||
// m2::RectU texRect = res->m_texRect;
|
||||
// double halfSizeX = texRect.SizeX() / 2.0;
|
||||
// double halfSizeY = texRect.SizeY() / 2.0;
|
||||
|
||||
// m2::PointD coords[] =
|
||||
// {
|
||||
// m2::PointD(-halfSizeX, -halfSizeY),
|
||||
// m2::PointD(-halfSizeX, halfSizeY),
|
||||
// m2::PointD(halfSizeX, -halfSizeY),
|
||||
// m2::PointD(halfSizeX, halfSizeY)
|
||||
// };
|
||||
// m2::PointF normal(0.0, 0.0);
|
||||
|
||||
// m2::PointF texCoords[] =
|
||||
// {
|
||||
// texture->mapPixel(m2::PointF(texRect.minX(), texRect.minY())),
|
||||
// texture->mapPixel(m2::PointF(texRect.minX(), texRect.maxY())),
|
||||
// texture->mapPixel(m2::PointF(texRect.maxX(), texRect.minY())),
|
||||
// texture->mapPixel(m2::PointF(texRect.maxX(), texRect.maxY()))
|
||||
// };
|
||||
|
||||
// cacheScreen->addTexturedStripStrided(coords, sizeof(m2::PointD),
|
||||
// &normal, 0,
|
||||
// texCoords, sizeof(m2::PointF),
|
||||
// 4, graphics::activePinDepth, res->m_pipelineID);
|
||||
|
||||
// cacheScreen->setDisplayList(NULL);
|
||||
// cacheScreen->endFrame();
|
||||
// }
|
||||
|
||||
// return m_searchPinDL;
|
||||
//}
|
||||
|
||||
void PinClickManager::Hide()
|
||||
{
|
||||
m_f.Invalidate();
|
||||
|
|
|
@ -1506,8 +1506,7 @@ UserMark const * Framework::ActivateUserMark(m2::PointD const & pxPoint, bool is
|
|||
}
|
||||
}
|
||||
|
||||
if (mark)
|
||||
m_bmManager.ActivateMark(mark);
|
||||
m_bmManager.ActivateMark(mark);
|
||||
|
||||
return mark;
|
||||
}
|
||||
|
|
|
@ -205,7 +205,10 @@ void UserMarkContainer::Draw(PaintOverlayEvent const & e)
|
|||
graphics::Screen * screen = e.GetDrawer()->screen();
|
||||
ScreenBase modelView = e.GetModelView();
|
||||
if (m_activeMark != NULL)
|
||||
{
|
||||
LOG(LINFO, ("Scale for active mark = ", GetActiveMarkScale()));
|
||||
(void)DrawFunctor(GetActiveMarkScale(), modelView, GetActiveDL(), screen)(m_activeMark);
|
||||
}
|
||||
|
||||
DrawFunctor f(1.0, modelView, GetDL(), screen);
|
||||
for_each(m_userMarks.begin(), m_userMarks.end(), f);
|
||||
|
@ -344,11 +347,43 @@ graphics::DisplayList * UserMarkContainer::GetActiveDL()
|
|||
|
||||
graphics::DisplayList * UserMarkContainer::CreateDL(const string & symbolName)
|
||||
{
|
||||
using namespace graphics;
|
||||
|
||||
graphics::DisplayList * dl = m_cacheScreen->createDisplayList();
|
||||
m_cacheScreen->beginFrame();
|
||||
m_cacheScreen->setDisplayList(dl);
|
||||
m_cacheScreen->drawSymbol(m2::PointD(0.0, 0.0), symbolName, graphics::EPosCenter, m_layerDepth);
|
||||
m_cacheScreen->setDisplayList(0);
|
||||
|
||||
Icon::Info infoKey(symbolName);
|
||||
Resource const * res = m_cacheScreen->fromID(m_cacheScreen->findInfo(infoKey));
|
||||
shared_ptr<gl::BaseTexture> texture = m_cacheScreen->pipeline(res->m_pipelineID).texture();
|
||||
|
||||
m2::RectU texRect = res->m_texRect;
|
||||
double halfSizeX = texRect.SizeX() / 2.0;
|
||||
double halfSizeY = texRect.SizeY() / 2.0;
|
||||
|
||||
m2::PointD coords[] =
|
||||
{
|
||||
m2::PointD(-halfSizeX, -halfSizeY),
|
||||
m2::PointD(-halfSizeX, halfSizeY),
|
||||
m2::PointD(halfSizeX, -halfSizeY),
|
||||
m2::PointD(halfSizeX, halfSizeY)
|
||||
};
|
||||
m2::PointF normal(0.0, 0.0);
|
||||
|
||||
m2::PointF texCoords[] =
|
||||
{
|
||||
texture->mapPixel(m2::PointF(texRect.minX(), texRect.minY())),
|
||||
texture->mapPixel(m2::PointF(texRect.minX(), texRect.maxY())),
|
||||
texture->mapPixel(m2::PointF(texRect.maxX(), texRect.minY())),
|
||||
texture->mapPixel(m2::PointF(texRect.maxX(), texRect.maxY()))
|
||||
};
|
||||
|
||||
m_cacheScreen->addTexturedStripStrided(coords, sizeof(m2::PointD),
|
||||
&normal, 0,
|
||||
texCoords, sizeof(m2::PointF),
|
||||
4, m_layerDepth, res->m_pipelineID);
|
||||
|
||||
m_cacheScreen->setDisplayList(NULL);
|
||||
m_cacheScreen->endFrame();
|
||||
|
||||
return dl;
|
||||
|
|
Loading…
Add table
Reference in a new issue