From 2628098fcac9e969c13b70ca2c4e5b1744d17b7a Mon Sep 17 00:00:00 2001 From: Dmitry Kunin Date: Mon, 24 Feb 2014 14:26:40 +0300 Subject: [PATCH] Show correct info box for search result. --- android/jni/com/mapswithme/maps/Framework.cpp | 5 +++- .../src/com/mapswithme/maps/MWMActivity.java | 28 ++++++++++++++++++- .../com/mapswithme/maps/SearchActivity.java | 10 ++++--- map/framework.cpp | 1 + 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 80123881d9..c35f324bce 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -910,8 +910,11 @@ extern "C" JNIEXPORT void Java_com_mapswithme_maps_Framework_injectData(JNIEnv * env, jclass clazz, jobject jsearchResult, jlong index) { + const size_t nIndex = static_cast(index); + ASSERT_LESS(nIndex , g_framework->NativeFramework()->AdditionalLayerNumberOfPoi(), ("Invalid index", nIndex)); + Bookmark * b = g_framework->NativeFramework()-> - GetBookmarkManager().AdditionalPoiLayerGetBookmark(static_cast(index)); + GetBookmarkManager().AdditionalPoiLayerGetBookmark(nIndex); static jclass javaClazz = env->GetObjectClass(jsearchResult); diff --git a/android/src/com/mapswithme/maps/MWMActivity.java b/android/src/com/mapswithme/maps/MWMActivity.java index 7773d9b116..919561eebf 100644 --- a/android/src/com/mapswithme/maps/MWMActivity.java +++ b/android/src/com/mapswithme/maps/MWMActivity.java @@ -784,10 +784,23 @@ public class MWMActivity extends NvEventQueueActivity protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - addTask(intent); + if (intent != null) + { + if (intent.hasExtra(EXTRA_TASK)) + addTask(intent); + else if (intent.hasExtra(EXTRA_SEARCH_RES_SINGLE)) + { + final boolean singleResult = intent.getBooleanExtra(EXTRA_SEARCH_RES_SINGLE, false); + if (singleResult) + onAdditionalLayerActivated(0); + else + onDismiss(); + } + } } private final static String EXTRA_CONSUMED = "mwm.extra.intent.processed"; + private void addTask(Intent intent) { if (intent != null @@ -807,6 +820,7 @@ public class MWMActivity extends NvEventQueueActivity } } + @Override protected void onStop() { @@ -1483,4 +1497,16 @@ public class MWMActivity extends NvEventQueueActivity { UiUtils.hideIf(isVisible, findViewById(R.id.map_buttons_bottom_ref)); } + + // Need it for search + private static final String EXTRA_SEARCH_RES_SINGLE = "search_res_index"; + + public static void startWithSearchResult(Context context, boolean single) + { + final Intent mapIntent = new Intent(context, MWMActivity.class); + mapIntent.putExtra(EXTRA_SEARCH_RES_SINGLE, single); + context.startActivity(mapIntent); + // Next we need to handle intent + } + } diff --git a/android/src/com/mapswithme/maps/SearchActivity.java b/android/src/com/mapswithme/maps/SearchActivity.java index 8d9953e806..632c7fd479 100644 --- a/android/src/com/mapswithme/maps/SearchActivity.java +++ b/android/src/com/mapswithme/maps/SearchActivity.java @@ -634,7 +634,7 @@ public class SearchActivity extends MapsWithMeBaseListActivity implements Locati final String suggestion = getSA().onItemClick(position); if (suggestion == null) { - presentResult(v); + presentResult(v, position); } else { @@ -643,18 +643,20 @@ public class SearchActivity extends MapsWithMeBaseListActivity implements Locati } } - private void presentResult(View v) + private void presentResult(View v, int position) { if (MWMApplication.get().isProVersion()) { finish(); - // TODO why does not getResult always return correct value? + // GetResult not always returns correct values? final SearchAdapter.ViewHolder vh = (SearchAdapter.ViewHolder) v.getTag(); SearchController.get().setQuery(vh.m_name.getText().toString()); + + MWMActivity.startWithSearchResult(this, position != 0); } else { - // TODO ask to buy pro + // Should we add something more attractive? Utils.toastShortcut(this, R.string.search_available_in_pro_version); } } diff --git a/map/framework.cpp b/map/framework.cpp index fde1620dd9..cc93c37955 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1286,6 +1286,7 @@ void Framework::ShowAllSearchResults() for (size_t i = 0; i < searchRes.GetCount(); ++i) { + // @todo add type for each search result pin search::Result const & tmpRes = searchRes.GetResult(i); m_bmManager.AdditionalPoiLayerAddPoi(Bookmark(tmpRes.GetFeatureCenter(), tmpRes.GetString(), "api_pin"));