forked from organicmaps/organicmaps
Removed Dontload-workaround in Android, added drape tasks
This commit is contained in:
parent
cc9aa209a0
commit
84627f5b73
6 changed files with 56 additions and 35 deletions
|
@ -103,8 +103,10 @@ extern "C"
|
|||
JNIEXPORT void JNICALL
|
||||
Java_com_mapswithme_country_ActiveCountryTree_showOnMap(JNIEnv * env, jclass clazz, jint group, jint position)
|
||||
{
|
||||
GetMapLayout().ShowMap(ToGroup(group), position);
|
||||
g_framework->DontLoadState();
|
||||
g_framework->PostDrapeTask([group, position]()
|
||||
{
|
||||
GetMapLayout().ShowMap(ToGroup(group), position);
|
||||
});
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
|
|
|
@ -92,8 +92,10 @@ extern "C"
|
|||
JNIEXPORT void JNICALL
|
||||
Java_com_mapswithme_country_CountryTree_showLeafOnMap(JNIEnv * env, jclass clazz, jint position)
|
||||
{
|
||||
GetTree().ShowLeafOnMap(position);
|
||||
g_framework->DontLoadState();
|
||||
g_framework->PostDrapeTask([position]()
|
||||
{
|
||||
GetTree().ShowLeafOnMap(position);
|
||||
});
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
|
|
|
@ -60,8 +60,7 @@ enum MultiTouchAction
|
|||
};
|
||||
|
||||
Framework::Framework()
|
||||
: m_doLoadState(true)
|
||||
, m_lastCompass(0.0)
|
||||
: m_lastCompass(0.0)
|
||||
, m_currentMode(location::MODE_UNKNOWN_POSITION)
|
||||
{
|
||||
ASSERT_EQUAL ( g_framework, 0, () );
|
||||
|
@ -166,6 +165,15 @@ bool Framework::CreateDrapeEngine(JNIEnv * env, jobject jSurface, int densityDpi
|
|||
m_work.CreateDrapeEngine(make_ref(m_contextFactory), move(p));
|
||||
m_work.EnterForeground();
|
||||
|
||||
// load initial state of the map or execute drape tasks which set up custom state
|
||||
{
|
||||
lock_guard<mutex> lock(m_drapeQueueMutex);
|
||||
if (m_drapeTasksQueue.empty())
|
||||
LoadState();
|
||||
else
|
||||
ExecuteDrapeTasks();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -230,8 +238,6 @@ Storage & Framework::Storage()
|
|||
|
||||
void Framework::ShowCountry(TIndex const & idx, bool zoomToDownloadButton)
|
||||
{
|
||||
m_doLoadState = false;
|
||||
|
||||
if (zoomToDownloadButton)
|
||||
{
|
||||
m2::RectD const rect = m_work.GetCountryBounds(idx);
|
||||
|
@ -282,13 +288,11 @@ void Framework::Touch(int action, Finger const & f1, Finger const & f2, uint8_t
|
|||
|
||||
void Framework::ShowSearchResult(search::Result const & r)
|
||||
{
|
||||
m_doLoadState = false;
|
||||
m_work.ShowSearchResult(r);
|
||||
}
|
||||
|
||||
void Framework::ShowAllSearchResults()
|
||||
{
|
||||
m_doLoadState = false;
|
||||
m_work.ShowAllSearchResults();
|
||||
}
|
||||
|
||||
|
@ -412,9 +416,6 @@ size_t Framework::ChangeBookmarkCategory(BookmarkAndCategory const & ind, size_t
|
|||
|
||||
bool Framework::ShowMapForURL(string const & url)
|
||||
{
|
||||
/// @todo this is weird hack, we should reconsider Android lifecycle handling design
|
||||
m_doLoadState = false;
|
||||
|
||||
return m_work.ShowMapForURL(url);
|
||||
}
|
||||
|
||||
|
@ -441,7 +442,6 @@ string Framework::GetOutdatedCountriesString()
|
|||
void Framework::ShowTrack(int category, int track)
|
||||
{
|
||||
Track const * nTrack = NativeFramework()->GetBmCategory(category)->GetTrack(track);
|
||||
m_doLoadState = false;
|
||||
NativeFramework()->ShowTrack(*nTrack);
|
||||
}
|
||||
|
||||
|
@ -592,6 +592,24 @@ void Framework::InjectMetadata(JNIEnv * env, jclass const clazz, jobject const m
|
|||
}
|
||||
}
|
||||
|
||||
void Framework::PostDrapeTask(TDrapeTask const & task)
|
||||
{
|
||||
ASSERT(task != nullptr, ());
|
||||
lock_guard<mutex> lock(m_drapeQueueMutex);
|
||||
if (IsDrapeEngineCreated())
|
||||
task();
|
||||
else
|
||||
m_drapeTasksQueue.push_back(task);
|
||||
}
|
||||
|
||||
void Framework::ExecuteDrapeTasks()
|
||||
{
|
||||
for (size_t i = 0; i < m_drapeTasksQueue.size(); ++i)
|
||||
m_drapeTasksQueue[i]();
|
||||
|
||||
m_drapeTasksQueue.clear();
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
|
||||
template <class T>
|
||||
|
|
|
@ -16,12 +16,12 @@
|
|||
|
||||
#include "geometry/avg_vector.hpp"
|
||||
|
||||
#include "base/deferred_task.hpp"
|
||||
#include "base/timer.hpp"
|
||||
|
||||
#include "indexer/map_style.hpp"
|
||||
|
||||
#include "std/map.hpp"
|
||||
#include "std/mutex.hpp"
|
||||
#include "std/shared_ptr.hpp"
|
||||
#include "std/unique_ptr.hpp"
|
||||
#include "std/cstdint.hpp"
|
||||
|
@ -38,25 +38,16 @@ namespace android
|
|||
unique_ptr<gui::Skin> m_skin;
|
||||
|
||||
typedef shared_ptr<jobject> TJobject;
|
||||
|
||||
TJobject m_javaCountryListener;
|
||||
typedef map<int, TJobject> TListenerMap;
|
||||
TListenerMap m_javaActiveMapListeners;
|
||||
int m_currentSlotID;
|
||||
|
||||
int m_activeMapsConnectionID;
|
||||
bool m_doLoadState;
|
||||
|
||||
math::LowPassVector<float, 3> m_sensors[2];
|
||||
double m_lastCompass;
|
||||
|
||||
unique_ptr<DeferredTask> m_deferredTask;
|
||||
bool m_wasLongClick;
|
||||
|
||||
int m_densityDpi;
|
||||
int m_screenWidth;
|
||||
int m_screenHeight;
|
||||
|
||||
string m_searchQuery;
|
||||
|
||||
float GetBestDensity(int densityDpi);
|
||||
|
@ -72,8 +63,6 @@ namespace android
|
|||
|
||||
storage::Storage & Storage();
|
||||
|
||||
void DontLoadState() { m_doLoadState = false; }
|
||||
|
||||
void ShowCountry(storage::TIndex const & idx, bool zoomToDownloadButton);
|
||||
storage::TStatus GetCountryStatus(storage::TIndex const & idx) const;
|
||||
|
||||
|
@ -171,6 +160,10 @@ namespace android
|
|||
// Fills mapobject's metadata from UserMark
|
||||
void InjectMetadata(JNIEnv * env, jclass clazz, jobject const mapObject, UserMark const * userMark);
|
||||
|
||||
using TDrapeTask = function<void()>;
|
||||
// Posts a task which must be executed when Drape Engine is alive
|
||||
void PostDrapeTask(TDrapeTask const & task);
|
||||
|
||||
public:
|
||||
virtual void ItemStatusChanged(int childPosition);
|
||||
virtual void ItemProgressChanged(int childPosition, storage::LocalAndRemoteSizeT const & sizes);
|
||||
|
@ -184,6 +177,12 @@ namespace android
|
|||
MapOptions const & newOpt);
|
||||
virtual void DownloadingProgressUpdate(storage::ActiveMapsLayout::TGroup const & group, int position,
|
||||
storage::LocalAndRemoteSizeT const & progress);
|
||||
|
||||
private:
|
||||
vector<TDrapeTask> m_drapeTasksQueue;
|
||||
mutex m_drapeQueueMutex;
|
||||
|
||||
void ExecuteDrapeTasks();
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -201,18 +201,21 @@ extern "C"
|
|||
Java_com_mapswithme_maps_search_SearchEngine_nativeShowResult(JNIEnv * env, jclass clazz, jint index)
|
||||
{
|
||||
lock_guard<mutex> guard(g_resultsMutex);
|
||||
g_framework->DontLoadState();
|
||||
|
||||
Result const & result = g_results.GetResult(index);
|
||||
g_framework->NativeFramework()->ShowSearchResult(result);
|
||||
g_framework->PostDrapeTask([result]()
|
||||
{
|
||||
g_framework->NativeFramework()->ShowSearchResult(result);
|
||||
});
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_mapswithme_maps_search_SearchEngine_nativeShowAllResults(JNIEnv * env, jclass clazz)
|
||||
{
|
||||
lock_guard<mutex> guard(g_resultsMutex);
|
||||
g_framework->DontLoadState();
|
||||
g_framework->NativeFramework()->ShowAllSearchResults(g_results);
|
||||
g_framework->PostDrapeTask([results = g_results]()
|
||||
{
|
||||
g_framework->NativeFramework()->ShowAllSearchResults(results);
|
||||
});
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
|
|
|
@ -632,11 +632,8 @@ void Framework::SaveState()
|
|||
void Framework::LoadState()
|
||||
{
|
||||
m2::AnyRectD rect;
|
||||
if (Settings::Get("ScreenClipRect", rect) &&
|
||||
df::GetWorldRect().IsRectInside(rect.GetGlobalRect()))
|
||||
{
|
||||
if (Settings::Get("ScreenClipRect", rect) && df::GetWorldRect().IsRectInside(rect.GetGlobalRect()))
|
||||
CallDrapeFunction(bind(&df::DrapeEngine::SetModelViewAnyRect, _1, rect, false));
|
||||
}
|
||||
else
|
||||
ShowAll();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue