diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 992e9aef67..5b0dc6c653 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -444,6 +444,14 @@ namespace android m_work.ShowSearchResult(r); } + void Framework::CleanSearchLayerOnMap() + { + NativeFramework()->GetBalloonManager().RemovePin(); + NativeFramework()->GetBalloonManager().Dismiss(); + NativeFramework()->GetBookmarkManager().AdditionalPoiLayerClear(); + NativeFramework()->Invalidate(); + } + bool Framework::Search(search::SearchParams const & params) { m_searchQuery = params.m_query; @@ -885,20 +893,25 @@ extern "C" } JNIEXPORT void Java_com_mapswithme_maps_Framework_injectData(JNIEnv * env, jclass clazz, jobject jsearchResult, jlong index) - { - Bookmark * b = g_framework->NativeFramework()-> - GetBookmarkManager().AdditionalPoiLayerGetBookmark(static_cast(index)); + { + Bookmark * b = g_framework->NativeFramework()-> + GetBookmarkManager().AdditionalPoiLayerGetBookmark(static_cast(index)); - static jclass javaClazz = env->GetObjectClass(jsearchResult); + static jclass javaClazz = env->GetObjectClass(jsearchResult); - static jfieldID nameId = env->GetFieldID(javaClazz, "mName", "Ljava/lang/String;"); - env->SetObjectField(jsearchResult, nameId, jni::ToJavaString(env, b->GetName())); + static jfieldID nameId = env->GetFieldID(javaClazz, "mName", "Ljava/lang/String;"); + env->SetObjectField(jsearchResult, nameId, jni::ToJavaString(env, b->GetName())); - static jfieldID latId = env->GetFieldID(javaClazz, "mLat", "D"); - env->SetDoubleField(jsearchResult, latId, static_cast(b->GetOrg().y)); + static jfieldID latId = env->GetFieldID(javaClazz, "mLat", "D"); + env->SetDoubleField(jsearchResult, latId, static_cast(b->GetOrg().y)); - static jfieldID lonId = env->GetFieldID(javaClazz, "mLon", "D"); - env->SetDoubleField(jsearchResult, latId, static_cast(b->GetOrg().x)); - } + static jfieldID lonId = env->GetFieldID(javaClazz, "mLon", "D"); + env->SetDoubleField(jsearchResult, latId, static_cast(b->GetOrg().x)); + } + + JNIEXPORT void Java_com_mapswithme_maps_Framework_cleanSearchLayerOnMap(JNIEnv * env, jclass clazz) + { + g_framework->CleanSearchLayerOnMap(); + } } diff --git a/android/jni/com/mapswithme/maps/Framework.hpp b/android/jni/com/mapswithme/maps/Framework.hpp index 78064e72a6..92f977b2b3 100644 --- a/android/jni/com/mapswithme/maps/Framework.hpp +++ b/android/jni/com/mapswithme/maps/Framework.hpp @@ -95,6 +95,7 @@ namespace android bool Search(search::SearchParams const & params); string GetLastSearchQuery() { return m_searchQuery; } void ClearLastSearchQuery() { m_searchQuery.clear(); } + void CleanSearchLayerOnMap(); void LoadState(); void SaveState(); diff --git a/android/src/com/mapswithme/maps/Framework.java b/android/src/com/mapswithme/maps/Framework.java index 421225ec7e..0137dd5292 100644 --- a/android/src/com/mapswithme/maps/Framework.java +++ b/android/src/com/mapswithme/maps/Framework.java @@ -127,8 +127,10 @@ public class Framework private native static void nativeClearApiPoints(); + // this class is just bridge between Java and C++ worlds, we must not create it private Framework() {} public native static void injectData(SearchResult searchResult, long index); + public native static void cleanSearchLayerOnMap(); } diff --git a/android/src/com/mapswithme/maps/search/SearchController.java b/android/src/com/mapswithme/maps/search/SearchController.java index 01c361def0..9f4d1df720 100644 --- a/android/src/com/mapswithme/maps/search/SearchController.java +++ b/android/src/com/mapswithme/maps/search/SearchController.java @@ -5,6 +5,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; +import com.mapswithme.maps.Framework; import com.mapswithme.maps.MWMActivity; import com.mapswithme.maps.R; import com.mapswithme.maps.SearchActivity; @@ -68,13 +69,12 @@ public class SearchController implements OnClickListener final int id = v.getId(); if (R.id.search_text_query == id) { - // @todo Start search activity here final String query = mSearchQueryTV.getText().toString(); SearchActivity.startForSearch(mMapActivity, query); } else if (R.id.search_image_clear == id) { - // @todo Clear search layer + Framework.cleanSearchLayerOnMap(); mSearchQueryTV.setText(null); UiUtils.hide(mClearView); } diff --git a/map/balloon_manager.cpp b/map/balloon_manager.cpp index 836e0b75b5..4ab322ae29 100644 --- a/map/balloon_manager.cpp +++ b/map/balloon_manager.cpp @@ -109,12 +109,23 @@ void PinClickManager::DrawPin(const shared_ptr & e) InformationDisplay & informationDisplay = m_f.GetInformationDisplay(); m2::AnyRectD const & glbRect = navigator.Screen().GlobalRect(); - // @todo changed pin picture + // @todo change pin picture if (glbRect.IsPointInside(m_pinGlobalLocation)) informationDisplay.drawPlacemark(e->drawer(), "api_pin", navigator.GtoP(m_pinGlobalLocation)); } } +void PinClickManager::RemovePin() +{ + m_hasPin = false; + m_f.Invalidate(); +} + +void PinClickManager::Dismiss() +{ + OnDismiss(); +} + void PinClickManager::ClearListeners() { m_poiListener.clear(); diff --git a/map/balloon_manager.hpp b/map/balloon_manager.hpp index 6f121082b3..dd90b52da3 100644 --- a/map/balloon_manager.hpp +++ b/map/balloon_manager.hpp @@ -42,6 +42,8 @@ public: void Hide(); void DrawPin(shared_ptr const & e); + void RemovePin(); + void Dismiss(); private: