Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'android/jni/com/mapswithme/maps/Framework.cpp')
-rw-r--r--android/jni/com/mapswithme/maps/Framework.cpp1039
1 files changed, 504 insertions, 535 deletions
diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp
index 14515c25aa..985e57ad4c 100644
--- a/android/jni/com/mapswithme/maps/Framework.cpp
+++ b/android/jni/com/mapswithme/maps/Framework.cpp
@@ -1,9 +1,7 @@
#include "Framework.hpp"
-#include "VideoTimer.hpp"
#include "MapStorage.hpp"
#include "../core/jni_helper.hpp"
-#include "../core/render_context.hpp"
#include "../country/country_helper.hpp"
@@ -12,10 +10,7 @@
#include "map/information_display.hpp"
#include "map/user_mark.hpp"
-#include "gui/controller.hpp"
-
-#include "graphics/opengl/framebuffer.hpp"
-#include "graphics/opengl/opengl.hpp"
+#include "drape_frontend/visual_params.hpp"
#include "coding/file_container.hpp"
#include "coding/file_name_utils.hpp"
@@ -61,681 +56,655 @@ namespace
namespace android
{
- void Framework::CallRepaint() {}
-
- Framework::Framework()
- : m_mask(0),
- m_isCleanSingleClick(false),
- m_doLoadState(true),
- m_lastCompass(0.0),
- m_wasLongClick(false),
- m_densityDpi(0),
- m_screenWidth(0),
- m_screenHeight(0),
- m_currentSlotID(0)
- {
- ASSERT_EQUAL ( g_framework, 0, () );
- g_framework = this;
- m_videoTimer = new VideoTimer(bind(&Framework::CallRepaint, this));
- m_activeMapsConnectionID = m_work.GetCountryTree().GetActiveMapLayout().AddListener(this);
- }
-
- Framework::~Framework()
- {
- m_work.GetCountryTree().GetActiveMapLayout().RemoveListener(m_activeMapsConnectionID);
- delete m_videoTimer;
- }
+enum MultiTouchAction
+{
+ MULTITOUCH_UP = 0x00000001,
+ MULTITOUCH_DOWN = 0x00000002,
+ MULTITOUCH_MOVE = 0x00000003,
+ MULTITOUCH_CANCEL = 0x00000004,
+ MULTITOUCH_POINTER_MASK = 0x0000ff00,
+ MULTITOUCH_POINTER_SHIFT = 0x00000008,
+ MULTITOUCH_ACTION_MASK = 0x000000ff,
+ MULTITOUCH_FORCE_32BITS = 0x7fffffff
+};
+
+void ShowAllSearchResultsImpl()
+{
+ frm()->ShowAllSearchResults();
+}
- void Framework::OnLocationError(int errorCode)
- {
- m_work.OnLocationError(static_cast<location::TLocationError>(errorCode));
- }
+Framework::Framework()
+ : m_mask(0),
+ m_isCleanSingleClick(false),
+ m_doLoadState(true),
+ m_lastCompass(0.0),
+ m_wasLongClick(false)
+{
+ ASSERT_EQUAL ( g_framework, 0, () );
+ g_framework = this;
+ m_activeMapsConnectionID = m_work.GetCountryTree().GetActiveMapLayout().AddListener(this);
+}
- void Framework::OnLocationUpdated(location::GpsInfo const & info)
- {
- Platform::RunOnGuiThreadImpl(bind(&::Framework::OnLocationUpdate, ref(m_work), info));
- }
+Framework::~Framework()
+{
+ m_work.GetCountryTree().GetActiveMapLayout().RemoveListener(m_activeMapsConnectionID);
+}
- void Framework::OnCompassUpdated(location::CompassInfo const & info, bool force)
- {
- static double const COMPASS_THRESHOLD = my::DegToRad(1.0);
+void Framework::OnLocationError(int errorCode)
+{
+ m_work.OnLocationError(static_cast<location::TLocationError>(errorCode));
+}
- /// @todo Do not emit compass bearing too often while we are passing it through nv-queue.
- /// Need to make more experiments in future.
- if (force || fabs(ang::GetShortestDistance(m_lastCompass, info.m_bearing)) >= COMPASS_THRESHOLD)
- {
- m_lastCompass = info.m_bearing;
- Platform::RunOnGuiThreadImpl(bind(&::Framework::OnCompassUpdate, ref(m_work), info));
- }
- }
+void Framework::OnLocationUpdated(location::GpsInfo const & info)
+{
+ Platform::RunOnGuiThreadImpl(bind(&::Framework::OnLocationUpdate, ref(m_work), info));
+}
- void Framework::UpdateCompassSensor(int ind, float * arr)
- {
- m_sensors[ind].Next(arr);
- }
+void Framework::OnCompassUpdated(location::CompassInfo const & info)
+{
+ static double const COMPASS_THRASHOLD = my::DegToRad(1.0);
- void Framework::DeleteRenderPolicy()
+ /// @todo Do not emit compass bearing too often while we are passing it through nv-queue.
+ /// Need to make more experiments in future.
+ if (fabs(ang::GetShortestDistance(m_lastCompass, info.m_bearing)) >= COMPASS_THRASHOLD)
{
- m_work.SaveState();
- LOG(LINFO, ("Clearing current render policy."));
- m_work.SetRenderPolicy(nullptr);
- m_work.EnterBackground();
+ m_lastCompass = info.m_bearing;
+ Platform::RunOnGuiThreadImpl(bind(&::Framework::OnCompassUpdate, ref(m_work), info));
}
+}
- void Framework::SetBestDensity(int densityDpi, RenderPolicy::Params & params)
- {
- typedef pair<int, graphics::EDensity> P;
- P dens[] = {
- P(120, graphics::EDensityLDPI),
- P(160, graphics::EDensityMDPI),
- P(240, graphics::EDensityHDPI),
- P(320, graphics::EDensityXHDPI),
- P(480, graphics::EDensityXXHDPI)
- };
+void Framework::UpdateCompassSensor(int ind, float * arr)
+{
+ m_sensors[ind].Next(arr);
+}
- int prevRange = numeric_limits<int>::max();
- int bestRangeIndex = 0;
- for (int i = 0; i < ARRAY_SIZE(dens); i++)
+float Framework::GetBestDensity(int densityDpi)
+{
+ typedef pair<int, float> P;
+ P dens[] = {
+ P(120, 0.75f),
+ P(160, 1.0f),
+ P(240, 1.5f),
+ P(320, 2.0f),
+ P(480, 3.0f)
+ };
+
+ int prevRange = numeric_limits<int>::max();
+ int bestRangeIndex = 0;
+ for (int i = 0; i < ARRAY_SIZE(dens); i++)
+ {
+ int currRange = abs(densityDpi - dens[i].first);
+ if (currRange <= prevRange)
{
- int currRange = abs(densityDpi - dens[i].first);
- if (currRange <= prevRange)
- {
- // it is better, take index
- bestRangeIndex = i;
- prevRange = currRange;
- }
- else
- break;
+ // it is better, take index
+ bestRangeIndex = i;
+ prevRange = currRange;
}
-
- params.m_density = dens[bestRangeIndex].second;
- params.m_exactDensityDPI = densityDpi;
+ else
+ break;
}
- bool Framework::InitRenderPolicyImpl(int densityDpi, int screenWidth, int screenHeight)
- {
- graphics::ResourceManager::Params rmParams;
+ return dens[bestRangeIndex].second;
+}
- rmParams.m_videoMemoryLimit = 30 * 1024 * 1024;
- rmParams.m_texFormat = graphics::Data4Bpp;
- rmParams.m_exactDensityDPI = densityDpi;
+bool Framework::CreateDrapeEngine(JNIEnv * env, jobject jSurface, int densityDpi)
+{
+ m_contextFactory.Reset(new AndroidOGLContextFactory(env, jSurface));
+ if (!m_contextFactory->IsValid())
+ return false;
- RenderPolicy::Params rpParams;
+ float visualScale = GetBestDensity(densityDpi);
+ m_work.CreateDrapeEngine(m_contextFactory.GetRefPointer(), visualScale, m_contextFactory->GetWidth(), m_contextFactory->GetHeight());
+ m_work.SetUpdatesEnabled(true);
+ m_work.EnterForeground();
- rpParams.m_videoTimer = m_videoTimer;
- rpParams.m_useDefaultFB = true;
- rpParams.m_rmParams = rmParams;
- rpParams.m_primaryRC = make_shared<android::RenderContext>();
+ return true;
+}
- SetBestDensity(densityDpi, rpParams);
+void Framework::DeleteDrapeEngine()
+{
+ m_work.DestroyDrapeEngine();
+}
- rpParams.m_skinName = "basic.skn";
- LOG(LINFO, ("Using", graphics::convert(rpParams.m_density), "resources"));
+void Framework::Resize(int w, int h)
+{
+ m_contextFactory->UpdateSurfaceSize();
+ m_work.OnSize(w, h);
+}
- rpParams.m_screenWidth = screenWidth;
- rpParams.m_screenHeight = screenHeight;
+void Framework::SetMapStyle(MapStyle mapStyle)
+{
+ //@TODO UVR
+}
- try
- {
- m_work.SetRenderPolicy(CreateRenderPolicy(rpParams));
- m_work.InitGuiSubsystem();
- }
- catch (graphics::gl::platform_unsupported const & e)
- {
- LOG(LINFO, ("This android platform is unsupported, reason:", e.what()));
- return false;
- }
+Storage & Framework::Storage()
+{
+ return m_work.Storage();
+}
- return true;
- }
+void Framework::ShowCountry(TIndex const & idx, bool zoomToDownloadButton)
+{
+ m_doLoadState = false;
- bool Framework::InitRenderPolicy(int densityDpi, int screenWidth, int screenHeight)
+ if (zoomToDownloadButton)
{
- if (!InitRenderPolicyImpl(densityDpi, screenWidth, screenHeight))
- return false;
-
- if (m_doLoadState)
- LoadState();
- else
- m_doLoadState = true;
-
- m_work.SetUpdatesEnabled(true);
- m_work.EnterForeground();
-
- m_densityDpi = densityDpi;
- m_screenWidth = screenWidth;
- m_screenHeight = screenHeight;
-
- return true;
+ m2::RectD const rect = m_work.GetCountryBounds(idx);
+ double const lon = MercatorBounds::XToLon(rect.Center().x);
+ double const lat = MercatorBounds::YToLat(rect.Center().y);
+ m_work.ShowRect(lat, lon, 10);
}
+ else
+ m_work.ShowCountry(idx);
+}
- void Framework::SetMapStyle(MapStyle mapStyle)
- {
- if (m_work.GetMapStyle() == mapStyle)
- return;
-
- bool const hasRenderPolicy = (nullptr != m_work.GetRenderPolicy());
-
- if (hasRenderPolicy)
- {
- // Drop old render policy.
- m_work.SetRenderPolicy(nullptr);
-
- m_work.SetMapStyle(mapStyle);
-
- // Construct new render policy.
- if (!InitRenderPolicyImpl(m_densityDpi, m_screenWidth, m_screenHeight))
- return;
-
- m_work.SetUpdatesEnabled(true);
- }
- else
- {
- // Just set the flag, a new render policy will be initialized with this flag.
- m_work.SetMapStyle(mapStyle);
- }
- }
+TStatus Framework::GetCountryStatus(TIndex const & idx) const
+{
+ return m_work.GetCountryStatus(idx);
+}
- MapStyle Framework::GetMapStyle() const
+void Framework::Move(int mode, double x, double y)
+{
+ DragEvent e(x, y);
+ switch (mode)
{
- return m_work.GetMapStyle();
+ case 0: m_work.StartDrag(e); break;
+ case 1: m_work.DoDrag(e); break;
+ case 2: m_work.StopDrag(e); break;
}
+}
- Storage & Framework::Storage()
+void Framework::Zoom(int mode, double x1, double y1, double x2, double y2)
+{
+ ScaleEvent e(x1, y1, x2, y2);
+ switch (mode)
{
- return m_work.Storage();
+ case 0: m_work.StartScale(e); break;
+ case 1: m_work.DoScale(e); break;
+ case 2: m_work.StopScale(e); break;
}
+}
- CountryStatusDisplay * Framework::GetCountryStatusDisplay()
- {
- return m_work.GetCountryStatusDisplay();
- }
+void Framework::StartTouchTask(double x, double y, unsigned ms)
+{
+ KillTouchTask();
+ m_deferredTask.reset(new DeferredTask(
+ bind(&android::Framework::OnProcessTouchTask, this, x, y, ms), milliseconds(ms)));
+}
- void Framework::ShowCountry(TIndex const & idx, bool zoomToDownloadButton)
- {
- m_doLoadState = false;
+void Framework::KillTouchTask() { m_deferredTask.reset(); }
- if (zoomToDownloadButton)
- {
- m2::RectD const rect = m_work.GetCountryBounds(idx);
- double const lon = MercatorBounds::XToLon(rect.Center().x);
- double const lat = MercatorBounds::YToLat(rect.Center().y);
- m_work.ShowRect(lat, lon, 10);
- }
- else
- m_work.ShowCountry(idx);
- }
+/// @param[in] mask Active pointers bits : 0x0 - no, 0x1 - (x1, y1), 0x2 - (x2, y2), 0x3 - (x1, y1)(x2, y2).
+void Framework::Touch(int action, int mask, double x1, double y1, double x2, double y2)
+{
+ MultiTouchAction eventType = static_cast<MultiTouchAction>(action);
- TStatus Framework::GetCountryStatus(TIndex const & idx) const
+ // Check if we touch is canceled or we get coordinates NOT from the first pointer.
+ if ((mask != 0x1) || (eventType == MULTITOUCH_CANCEL))
{
- return m_work.GetCountryStatus(idx);
- }
+ ///@TODO UVR
+ //if (mask == 0x1)
+ // m_work.GetGuiController()->OnTapCancelled(m2::PointD(x1, y1));
- void Framework::Resize(int w, int h)
- {
- m_work.OnSize(w, h);
+ m_isCleanSingleClick = false;
+ KillTouchTask();
}
-
- void Framework::DrawFrame()
+ else
{
- if (m_work.NeedRedraw())
- {
- m_work.SetNeedRedraw(false);
+ ASSERT_EQUAL(mask, 0x1, ());
- shared_ptr<PaintEvent> paintEvent(new PaintEvent(m_work.GetRenderPolicy()->GetDrawer().get()));
+ if (eventType == MULTITOUCH_DOWN)
+ {
+ KillTouchTask();
- m_work.BeginPaint(paintEvent);
- m_work.DoPaint(paintEvent);
+ m_wasLongClick = false;
+ m_isCleanSingleClick = true;
+ m_lastX1 = x1;
+ m_lastY1 = y1;
- NVEventSwapBuffersEGL();
+ ///@TODO UVR
+ //if (m_work.GetGuiController()->OnTapStarted(m2::PointD(x1, y1)))
+ // return;
- m_work.EndPaint(paintEvent);
+ StartTouchTask(x1, y1, LONG_TOUCH_MS);
}
- }
- void Framework::Move(int mode, double x, double y)
- {
- DragEvent e(x, y);
- switch (mode)
+ if (eventType == MULTITOUCH_MOVE)
{
- case 0: m_work.StartDrag(e); break;
- case 1: m_work.DoDrag(e); break;
- case 2: m_work.StopDrag(e); break;
+ double const minDist = df::VisualParams::Instance().GetVisualScale() * 10.0;
+ if ((fabs(x1 - m_lastX1) > minDist) || (fabs(y1 - m_lastY1) > minDist))
+ {
+ m_isCleanSingleClick = false;
+ KillTouchTask();
+ }
+
+ ///@TODO UVR
+ //if (m_work.GetGuiController()->OnTapMoved(m2::PointD(x1, y1)))
+ // return;
}
- }
- void Framework::Zoom(int mode, double x1, double y1, double x2, double y2)
- {
- ScaleEvent e(x1, y1, x2, y2);
- switch (mode)
+ if (eventType == MULTITOUCH_UP)
{
- case 0: m_work.StartScale(e); break;
- case 1: m_work.DoScale(e); break;
- case 2: m_work.StopScale(e); break;
- }
- }
+ KillTouchTask();
- void Framework::StartTouchTask(double x, double y, unsigned ms)
- {
- KillTouchTask();
- m_deferredTask.reset(new DeferredTask(
- bind(&android::Framework::OnProcessTouchTask, this, x, y, ms), milliseconds(ms)));
- }
+ ///@TODO UVR
+ //if (m_work.GetGuiController()->OnTapEnded(m2::PointD(x1, y1)))
+ // return;
- void Framework::KillTouchTask() { m_deferredTask.reset(); }
+ if (!m_wasLongClick && m_isCleanSingleClick)
+ {
+ if (m_doubleClickTimer.ElapsedSeconds() <= DOUBLE_TOUCH_S)
+ {
+ // performing double-click
+ m_work.ScaleToPoint(ScaleToPointEvent(x1, y1, 1.5));
+ }
+ else
+ {
+ // starting single touch task
+ StartTouchTask(x1, y1, SHORT_TOUCH_MS);
- /// @param[in] mask Active pointers bits : 0x0 - no, 0x1 - (x1, y1), 0x2 - (x2, y2), 0x3 - (x1, y1)(x2, y2).
- void Framework::Touch(int action, int mask, double x1, double y1, double x2, double y2)
- {
- NVMultiTouchEventType eventType = static_cast<NVMultiTouchEventType>(action);
+ // starting double click
+ m_doubleClickTimer.Reset();
+ }
+ }
+ else
+ m_wasLongClick = false;
+ }
+ }
- // Check if we touch is canceled or we get coordinates NOT from the first pointer.
- if ((mask != 0x1) || (eventType == NV_MULTITOUCH_CANCEL))
+ // general case processing
+ if (m_mask != mask)
+ {
+ if (m_mask == 0x0)
{
if (mask == 0x1)
- m_work.GetGuiController()->OnTapCancelled(m2::PointD(x1, y1));
+ m_work.StartDrag(DragEvent(x1, y1));
- m_isCleanSingleClick = false;
- KillTouchTask();
+ if (mask == 0x2)
+ m_work.StartDrag(DragEvent(x2, y2));
+
+ if (mask == 0x3)
+ m_work.StartScale(ScaleEvent(x1, y1, x2, y2));
}
- else
+
+ if (m_mask == 0x1)
{
- ASSERT_EQUAL(mask, 0x1, ());
+ m_work.StopDrag(DragEvent(x1, y1));
- if (eventType == NV_MULTITOUCH_DOWN)
+ if (mask == 0x0)
{
- KillTouchTask();
+ if ((eventType != MULTITOUCH_UP) && (eventType != MULTITOUCH_CANCEL))
+ LOG(LWARNING, ("should be MULTITOUCH_UP or MULTITOUCH_CANCEL"));
+ }
- m_wasLongClick = false;
- m_isCleanSingleClick = true;
- m_lastX1 = x1;
- m_lastY1 = y1;
+ if (m_mask == 0x2)
+ m_work.StartDrag(DragEvent(x2, y2));
- if (m_work.GetGuiController()->OnTapStarted(m2::PointD(x1, y1)))
- return;
+ if (mask == 0x3)
+ m_work.StartScale(ScaleEvent(x1, y1, x2, y2));
+ }
- StartTouchTask(x1, y1, LONG_TOUCH_MS);
- }
+ if (m_mask == 0x2)
+ {
+ m_work.StopDrag(DragEvent(x2, y2));
- if (eventType == NV_MULTITOUCH_MOVE)
+ if (mask == 0x0)
{
- double const minDist = m_work.GetVisualScale() * 10.0;
- if ((fabs(x1 - m_lastX1) > minDist) || (fabs(y1 - m_lastY1) > minDist))
- {
- m_isCleanSingleClick = false;
- KillTouchTask();
- }
-
- if (m_work.GetGuiController()->OnTapMoved(m2::PointD(x1, y1)))
- return;
+ if ((eventType != MULTITOUCH_UP) && (eventType != MULTITOUCH_CANCEL))
+ LOG(LWARNING, ("should be MULTITOUCH_UP or MULTITOUCH_CANCEL"));
}
- if (eventType == NV_MULTITOUCH_UP)
- {
- KillTouchTask();
-
- if (m_work.GetGuiController()->OnTapEnded(m2::PointD(x1, y1)))
- return;
+ if (mask == 0x1)
+ m_work.StartDrag(DragEvent(x1, y1));
- if (!m_wasLongClick && m_isCleanSingleClick)
- {
- if (m_doubleClickTimer.ElapsedSeconds() <= DOUBLE_TOUCH_S)
- {
- // performing double-click
- m_work.ScaleToPoint(ScaleToPointEvent(x1, y1, 1.5));
- }
- else
- {
- // starting single touch task
- StartTouchTask(x1, y1, SHORT_TOUCH_MS);
-
- // starting double click
- m_doubleClickTimer.Reset();
- }
- }
- else
- m_wasLongClick = false;
- }
+ if (mask == 0x3)
+ m_work.StartScale(ScaleEvent(x1, y1, x2, y2));
}
- // general case processing
- if (m_mask != mask)
+ if (m_mask == 0x3)
{
- if (m_mask == 0x0)
+ m_work.StopScale(ScaleEvent(m_x1, m_y1, m_x2, m_y2));
+
+ if (eventType == MULTITOUCH_MOVE)
{
if (mask == 0x1)
m_work.StartDrag(DragEvent(x1, y1));
if (mask == 0x2)
m_work.StartDrag(DragEvent(x2, y2));
-
- if (mask == 0x3)
- m_work.StartScale(ScaleEvent(x1, y1, x2, y2));
}
+ else
+ mask = 0;
+ }
+ }
+ else
+ {
+ if (eventType == MULTITOUCH_MOVE)
+ {
+ if (m_mask == 0x1)
+ m_work.DoDrag(DragEvent(x1, y1));
+ if (m_mask == 0x2)
+ m_work.DoDrag(DragEvent(x2, y2));
+ if (m_mask == 0x3)
+ m_work.DoScale(ScaleEvent(x1, y1, x2, y2));
+ }
+ if ((eventType == MULTITOUCH_CANCEL) || (eventType == MULTITOUCH_UP))
+ {
if (m_mask == 0x1)
- {
m_work.StopDrag(DragEvent(x1, y1));
-
- if (mask == 0x0)
- {
- if ((eventType != NV_MULTITOUCH_UP) && (eventType != NV_MULTITOUCH_CANCEL))
- LOG(LWARNING, ("should be NV_MULTITOUCH_UP or NV_MULTITOUCH_CANCEL"));
- }
-
- if (m_mask == 0x2)
- m_work.StartDrag(DragEvent(x2, y2));
-
- if (mask == 0x3)
- m_work.StartScale(ScaleEvent(x1, y1, x2, y2));
- }
-
if (m_mask == 0x2)
- {
m_work.StopDrag(DragEvent(x2, y2));
+ if (m_mask == 0x3)
+ m_work.StopScale(ScaleEvent(m_x1, m_y1, m_x2, m_y2));
+ mask = 0;
+ }
+ }
- if (mask == 0x0)
- {
- if ((eventType != NV_MULTITOUCH_UP) && (eventType != NV_MULTITOUCH_CANCEL))
- LOG(LWARNING, ("should be NV_MULTITOUCH_UP or NV_MULTITOUCH_CANCEL"));
- }
+ m_x1 = x1;
+ m_y1 = y1;
+ m_x2 = x2;
+ m_y2 = y2;
+ m_mask = mask;
+}
- if (mask == 0x1)
- m_work.StartDrag(DragEvent(x1, y1));
+void Framework::ShowSearchResult(search::Result const & r)
+{
+ m_doLoadState = false;
+ m_work.ShowSearchResult(r);
+}
- if (mask == 0x3)
- m_work.StartScale(ScaleEvent(x1, y1, x2, y2));
- }
+void Framework::ShowAllSearchResults()
+{
+ m_doLoadState = false;
+ Platform::RunOnGuiThreadImpl(bind(&ShowAllSearchResultsImpl));
+}
- if (m_mask == 0x3)
- {
- m_work.StopScale(ScaleEvent(m_x1, m_y1, m_x2, m_y2));
+bool Framework::Search(search::SearchParams const & params)
+{
+ m_searchQuery = params.m_query;
+ return m_work.Search(params);
+}
- if (eventType == NV_MULTITOUCH_MOVE)
- {
- if (mask == 0x1)
- m_work.StartDrag(DragEvent(x1, y1));
+void Framework::LoadState()
+{
+ if (!m_work.LoadState())
+ m_work.ShowAll();
+}
- if (mask == 0x2)
- m_work.StartDrag(DragEvent(x2, y2));
- }
- else
- mask = 0;
- }
- }
- else
- {
- if (eventType == NV_MULTITOUCH_MOVE)
- {
- if (m_mask == 0x1)
- m_work.DoDrag(DragEvent(x1, y1));
- if (m_mask == 0x2)
- m_work.DoDrag(DragEvent(x2, y2));
- if (m_mask == 0x3)
- m_work.DoScale(ScaleEvent(x1, y1, x2, y2));
- }
+void Framework::SaveState()
+{
+ m_work.SaveState();
+}
- if ((eventType == NV_MULTITOUCH_CANCEL) || (eventType == NV_MULTITOUCH_UP))
- {
- if (m_mask == 0x1)
- m_work.StopDrag(DragEvent(x1, y1));
- if (m_mask == 0x2)
- m_work.StopDrag(DragEvent(x2, y2));
- if (m_mask == 0x3)
- m_work.StopScale(ScaleEvent(m_x1, m_y1, m_x2, m_y2));
- mask = 0;
- }
- }
+void Framework::Invalidate()
+{
+ ///@TODO UVR
+ //m_work.Invalidate();
+}
- m_x1 = x1;
- m_y1 = y1;
- m_x2 = x2;
- m_y2 = y2;
- m_mask = mask;
- }
+void Framework::SetupMeasurementSystem()
+{
+ m_work.SetupMeasurementSystem();
+}
- void Framework::LoadState()
- {
- if (!m_work.LoadState())
- m_work.ShowAll();
- }
+void Framework::AddLocalMaps()
+{
+ m_work.RegisterAllMaps();
+}
- void Framework::SaveState()
- {
- m_work.SaveState();
- }
+void Framework::RemoveLocalMaps()
+{
+ m_work.DeregisterAllMaps();
+}
- void Framework::Invalidate()
- {
- m_work.Invalidate();
- }
+void Framework::GetMapsWithoutSearch(vector<string> & out) const
+{
+ // Actually, this routing is obsolete and comes from ancient times
+ // when mwm was without search index.
+ if (!Settings::IsFirstLaunchForDate(150101))
+ return;
- void Framework::SetupMeasurementSystem()
- {
- m_work.SetupMeasurementSystem();
- }
+ ASSERT(out.empty(), ());
- void Framework::AddLocalMaps()
- {
- m_work.RegisterAllMaps();
- }
+ ::Platform const & pl = GetPlatform();
- void Framework::RemoveLocalMaps()
- {
- m_work.DeregisterAllMaps();
- }
+ vector<LocalCountryFile> localFiles;
+ platform::FindAllLocalMaps(localFiles);
- TIndex Framework::GetCountryIndex(double lat, double lon) const
+ for (LocalCountryFile const & localFile : localFiles)
{
- return m_work.GetCountryIndex(MercatorBounds::FromLatLon(lat, lon));
+ CountryFile const countryFile = localFile.GetCountryFile();
+ // skip World and WorldCoast
+ if (countryFile.GetNameWithoutExt() == WORLD_FILE_NAME ||
+ countryFile.GetNameWithoutExt() == WORLD_COASTS_FILE_NAME)
+ {
+ continue;
+ }
+ try
+ {
+ FilesContainerR cont(platform::GetCountryReader(localFile, MapOptions::Map));
+ if (!cont.IsExist(SEARCH_INDEX_FILE_TAG))
+ out.push_back(countryFile.GetNameWithoutExt());
+ }
+ catch (RootException const & ex)
+ {
+ // sdcard can contain dummy _*.mwm files. Suppress these errors.
+ LOG(LWARNING, ("Bad mwm file:", countryFile.GetNameWithoutExt(), "Error:", ex.Msg()));
+ }
}
+}
- string Framework::GetCountryCode(double lat, double lon) const
- {
- return m_work.GetCountryCode(MercatorBounds::FromLatLon(lat, lon));
- }
+TIndex Framework::GetCountryIndex(double lat, double lon) const
+{
+ return m_work.GetCountryIndex(MercatorBounds::FromLatLon(lat, lon));
+}
- string Framework::GetCountryNameIfAbsent(m2::PointD const & pt) const
- {
- TIndex const idx = m_work.GetCountryIndex(pt);
- TStatus const status = m_work.GetCountryStatus(idx);
- if (status != TStatus::EOnDisk && status != TStatus::EOnDiskOutOfDate)
- return m_work.GetCountryName(idx);
- else
- return string();
- }
+string Framework::GetCountryCode(double lat, double lon) const
+{
+ return m_work.GetCountryCode(MercatorBounds::FromLatLon(lat, lon));
+}
- m2::PointD Framework::GetViewportCenter() const
- {
- return m_work.GetViewportCenter();
- }
+string Framework::GetCountryNameIfAbsent(m2::PointD const & pt) const
+{
+ TIndex const idx = m_work.GetCountryIndex(pt);
+ TStatus const status = m_work.GetCountryStatus(idx);
+ if (status != TStatus::EOnDisk && status != TStatus::EOnDiskOutOfDate)
+ return m_work.GetCountryName(idx);
+ else
+ return string();
+}
- void Framework::AddString(string const & name, string const & value)
- {
- m_work.AddString(name, value);
- }
+m2::PointD Framework::GetViewportCenter() const
+{
+ return m_work.GetViewportCenter();
+}
- void Framework::Scale(double k)
- {
- m_work.Scale(k);
- }
+void Framework::AddString(string const & name, string const & value)
+{
+ m_work.AddString(name, value);
+}
- ::Framework * Framework::NativeFramework()
- {
- return &m_work;
- }
+void Framework::Scale(double k)
+{
+ m_work.Scale(k);
+}
- void Framework::OnProcessTouchTask(double x, double y, unsigned ms)
- {
- m_wasLongClick = (ms == LONG_TOUCH_MS);
- GetPinClickManager().OnShowMark(m_work.GetUserMark(m2::PointD(x, y), m_wasLongClick));
- }
+::Framework * Framework::NativeFramework()
+{
+ return &m_work;
+}
- BookmarkAndCategory Framework::AddBookmark(size_t cat, m2::PointD const & pt, BookmarkData & bm)
- {
- return BookmarkAndCategory(cat, m_work.AddBookmark(cat, pt, bm));
- }
+void Framework::OnProcessTouchTask(double x, double y, unsigned ms)
+{
+ m_wasLongClick = (ms == LONG_TOUCH_MS);
+ GetPinClickManager().OnShowMark(m_work.GetUserMark(m2::PointD(x, y), m_wasLongClick));
+}
- void Framework::ReplaceBookmark(BookmarkAndCategory const & ind, BookmarkData & bm)
- {
- m_work.ReplaceBookmark(ind.first, ind.second, bm);
- }
+BookmarkAndCategory Framework::AddBookmark(size_t cat, m2::PointD const & pt, BookmarkData & bm)
+{
+ return BookmarkAndCategory(cat, m_work.AddBookmark(cat, pt, bm));
+}
- size_t Framework::ChangeBookmarkCategory(BookmarkAndCategory const & ind, size_t newCat)
- {
- BookmarkCategory * pOld = m_work.GetBmCategory(ind.first);
- Bookmark const * oldBm = pOld->GetBookmark(ind.second);
- m2::PointD pt = oldBm->GetOrg();
- BookmarkData bm(oldBm->GetName(), oldBm->GetType(), oldBm->GetDescription(),
- oldBm->GetScale(), oldBm->GetTimeStamp());
+void Framework::ReplaceBookmark(BookmarkAndCategory const & ind, BookmarkData & bm)
+{
+ m_work.ReplaceBookmark(ind.first, ind.second, bm);
+}
- pOld->DeleteBookmark(ind.second);
- pOld->SaveToKMLFile();
+size_t Framework::ChangeBookmarkCategory(BookmarkAndCategory const & ind, size_t newCat)
+{
+ BookmarkCategory * pOld = m_work.GetBmCategory(ind.first);
+ Bookmark const * oldBm = pOld->GetBookmark(ind.second);
+ m2::PointD pt = oldBm->GetOrg();
+ BookmarkData bm(oldBm->GetName(), oldBm->GetType(), oldBm->GetDescription(),
+ oldBm->GetScale(), oldBm->GetTimeStamp());
- return AddBookmark(newCat, pt, bm).second;
- }
+ pOld->DeleteBookmark(ind.second);
+ pOld->SaveToKMLFile();
- bool Framework::ShowMapForURL(string const & url)
- {
- /// @todo this is weird hack, we should reconsider Android lifecycle handling design
- m_doLoadState = false;
+ return AddBookmark(newCat, pt, bm).second;
+}
- return m_work.ShowMapForURL(url);
- }
+bool Framework::ShowMapForURL(string const & url)
+{
+ /// @todo this is weird hack, we should reconsider Android lifecycle handling design
+ m_doLoadState = false;
- void Framework::DeactivatePopup()
- {
- GetPinClickManager().RemovePin();
- }
+ return m_work.ShowMapForURL(url);
+}
- string Framework::GetOutdatedCountriesString()
- {
- vector<Country const *> countries;
- Storage().GetOutdatedCountries(countries);
+void Framework::DeactivatePopup()
+{
+ GetPinClickManager().RemovePin();
+}
- string res;
- for (size_t i = 0; i < countries.size(); ++i)
- {
- res += countries[i]->Name();
- if (i < countries.size() - 1)
- res += ", ";
- }
- return res;
- }
+string Framework::GetOutdatedCountriesString()
+{
+ vector<Country const *> countries;
+ Storage().GetOutdatedCountries(countries);
- void Framework::ShowTrack(int category, int track)
+ string res;
+ for (size_t i = 0; i < countries.size(); ++i)
{
- Track const * nTrack = NativeFramework()->GetBmCategory(category)->GetTrack(track);
- m_doLoadState = false;
- NativeFramework()->ShowTrack(*nTrack);
+ res += countries[i]->Name();
+ if (i < countries.size() - 1)
+ res += ", ";
}
+ return res;
+}
- void Framework::SetCountryTreeListener(shared_ptr<jobject> objPtr)
- {
- m_javaCountryListener = objPtr;
- m_work.GetCountryTree().SetListener(this);
- }
+void Framework::ShowTrack(int category, int track)
+{
+ Track const * nTrack = NativeFramework()->GetBmCategory(category)->GetTrack(track);
+ m_doLoadState = false;
+ NativeFramework()->ShowTrack(*nTrack);
+}
- void Framework::ResetCountryTreeListener()
- {
- m_work.GetCountryTree().ResetListener();
- m_javaCountryListener.reset();
- }
+void Framework::SetCountryTreeListener(shared_ptr<jobject> objPtr)
+{
+ m_javaCountryListener = objPtr;
+ m_work.GetCountryTree().SetListener(this);
+}
- int Framework::AddActiveMapsListener(shared_ptr<jobject> obj)
- {
- m_javaActiveMapListeners[m_currentSlotID] = obj;
- return m_currentSlotID++;
- }
+void Framework::ResetCountryTreeListener()
+{
+ m_work.GetCountryTree().ResetListener();
+ m_javaCountryListener.reset();
+}
- void Framework::RemoveActiveMapsListener(int slotID)
- {
- m_javaActiveMapListeners.erase(slotID);
- }
- //////////////////////////////////////////////////////////////////////////////////////////
- void Framework::ItemStatusChanged(int childPosition)
- {
- if (m_javaCountryListener == NULL)
- return;
+int Framework::AddActiveMapsListener(shared_ptr<jobject> obj)
+{
+ m_javaActiveMapListeners[m_currentSlotID] = obj;
+ return m_currentSlotID++;
+}
- JNIEnv * env = jni::GetEnv();
- jmethodID const methodID = jni::GetJavaMethodID(env,
- *m_javaCountryListener,
- "onItemStatusChanged",
- "(I)V");
- ASSERT ( methodID, () );
+void Framework::RemoveActiveMapsListener(int slotID)
+{
+ m_javaActiveMapListeners.erase(slotID);
+}
- env->CallVoidMethod(*m_javaCountryListener, methodID, childPosition);
- }
+//////////////////////////////////////////////////////////////////////////////////////////
+void Framework::ItemStatusChanged(int childPosition)
+{
+ if (m_javaCountryListener == NULL)
+ return;
- void Framework::ItemProgressChanged(int childPosition, LocalAndRemoteSizeT const & sizes)
- {
- if (m_javaCountryListener == NULL)
- return;
+ JNIEnv * env = jni::GetEnv();
+ static jmethodID const methodID = jni::GetJavaMethodID(env,
+ *m_javaCountryListener,
+ "onItemStatusChanged",
+ "(I)V");
+ ASSERT ( methodID, () );
- JNIEnv * env = jni::GetEnv();
- jmethodID const methodID = jni::GetJavaMethodID(env,
- *m_javaCountryListener,
- "onItemProgressChanged",
- "(I[J)V");
- ASSERT ( methodID, () );
+ env->CallVoidMethod(*m_javaCountryListener, methodID, childPosition);
+}
- env->CallVoidMethod(*m_javaCountryListener, methodID, childPosition, storage_utils::ToArray(env, sizes));
- }
+void Framework::ItemProgressChanged(int childPosition, LocalAndRemoteSizeT const & sizes)
+{
+ if (m_javaCountryListener == NULL)
+ return;
- void Framework::CountryGroupChanged(ActiveMapsLayout::TGroup const & oldGroup, int oldPosition,
- ActiveMapsLayout::TGroup const & newGroup, int newPosition)
+ JNIEnv * env = jni::GetEnv();
+ static jmethodID const methodID = jni::GetJavaMethodID(env,
+ *m_javaCountryListener,
+ "onItemProgressChanged",
+ "(I[J)V");
+ ASSERT ( methodID, () );
+
+ env->CallVoidMethod(*m_javaCountryListener, methodID, childPosition, storage_utils::ToArray(env, sizes));
+}
+
+void Framework::CountryGroupChanged(ActiveMapsLayout::TGroup const & oldGroup, int oldPosition,
+ ActiveMapsLayout::TGroup const & newGroup, int newPosition)
+{
+ JNIEnv * env = jni::GetEnv();
+ for (TListenerMap::const_iterator it = m_javaActiveMapListeners.begin(); it != m_javaActiveMapListeners.end(); ++it)
{
- JNIEnv * env = jni::GetEnv();
- for (TListenerMap::const_iterator it = m_javaActiveMapListeners.begin(); it != m_javaActiveMapListeners.end(); ++it)
- {
- jmethodID const methodID = jni::GetJavaMethodID(env, *(it->second), "onCountryGroupChanged", "(IIII)V");
- ASSERT ( methodID, () );
+ jmethodID const methodID = jni::GetJavaMethodID(env, *(it->second), "onCountryGroupChanged", "(IIII)V");
+ ASSERT ( methodID, () );
- env->CallVoidMethod(*(it->second), methodID, oldGroup, oldPosition, newGroup, newPosition);
- }
+ env->CallVoidMethod(*(it->second), methodID, oldGroup, oldPosition, newGroup, newPosition);
}
+}
- void Framework::CountryStatusChanged(ActiveMapsLayout::TGroup const & group, int position,
- TStatus const & oldStatus, TStatus const & newStatus)
+void Framework::CountryStatusChanged(ActiveMapsLayout::TGroup const & group, int position,
+ TStatus const & oldStatus, TStatus const & newStatus)
+{
+ JNIEnv * env = jni::GetEnv();
+ for (TListenerMap::const_iterator it = m_javaActiveMapListeners.begin(); it != m_javaActiveMapListeners.end(); ++it)
{
- JNIEnv * env = jni::GetEnv();
- for (TListenerMap::const_iterator it = m_javaActiveMapListeners.begin(); it != m_javaActiveMapListeners.end(); ++it)
- {
- jmethodID const methodID = jni::GetJavaMethodID(env, *(it->second), "onCountryStatusChanged", "(IIII)V");
- ASSERT ( methodID, () );
+ jmethodID const methodID = jni::GetJavaMethodID(env, *(it->second), "onCountryStatusChanged", "(IIII)V");
+ ASSERT ( methodID, () );
- env->CallVoidMethod(*(it->second), methodID, group, position,
- static_cast<jint>(oldStatus), static_cast<jint>(newStatus));
- }
+ env->CallVoidMethod(*(it->second), methodID, group, position,
+ static_cast<jint>(oldStatus), static_cast<jint>(newStatus));
}
+}
- void Framework::CountryOptionsChanged(ActiveMapsLayout::TGroup const & group, int position,
- MapOptions const & oldOpt, MapOptions const & newOpt)
+void Framework::CountryOptionsChanged(ActiveMapsLayout::TGroup const & group, int position,
+ MapOptions const & oldOpt, MapOptions const & newOpt)
+{
+ JNIEnv * env = jni::GetEnv();
+ for (TListenerMap::const_iterator it = m_javaActiveMapListeners.begin(); it != m_javaActiveMapListeners.end(); ++it)
{
- JNIEnv * env = jni::GetEnv();
- for (TListenerMap::const_iterator it = m_javaActiveMapListeners.begin(); it != m_javaActiveMapListeners.end(); ++it)
- {
- jmethodID const methodID = jni::GetJavaMethodID(env, *(it->second), "onCountryOptionsChanged", "(IIII)V");
- ASSERT ( methodID, () );
+ jmethodID const methodID = jni::GetJavaMethodID(env, *(it->second), "onCountryOptionsChanged", "(IIII)V");
+ ASSERT ( methodID, () );
- env->CallVoidMethod(*(it->second), methodID, group, position,
- static_cast<jint>(oldOpt), static_cast<jint>(newOpt));
- }
+ env->CallVoidMethod(*(it->second), methodID, group, position,
+ static_cast<jint>(oldOpt), static_cast<jint>(newOpt));
}
+}
- void Framework::DownloadingProgressUpdate(ActiveMapsLayout::TGroup const & group, int position,
- LocalAndRemoteSizeT const & progress)
+void Framework::DownloadingProgressUpdate(ActiveMapsLayout::TGroup const & group, int position,
+ LocalAndRemoteSizeT const & progress)
+{
+ JNIEnv * env = jni::GetEnv();
+ for (TListenerMap::const_iterator it = m_javaActiveMapListeners.begin(); it != m_javaActiveMapListeners.end(); ++it)
{
- JNIEnv * env = jni::GetEnv();
- for (TListenerMap::const_iterator it = m_javaActiveMapListeners.begin(); it != m_javaActiveMapListeners.end(); ++it)
- {
- jmethodID const methodID = jni::GetJavaMethodID(env, *(it->second), "onCountryProgressChanged", "(II[J)V");
- ASSERT ( methodID, () );
+ jmethodID const methodID = jni::GetJavaMethodID(env, *(it->second), "onCountryProgressChanged", "(II[J)V");
+ ASSERT ( methodID, () );
- env->CallVoidMethod(*(it->second), methodID, group, position, storage_utils::ToArray(env, progress));
- }
+ env->CallVoidMethod(*(it->second), methodID, group, position, storage_utils::ToArray(env, progress));
}
// Fills mapobject's metadata from UserMark