diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 5bc134ec2b..fac5405035 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -143,6 +143,21 @@
android:scheme="mapswithme"/>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/src/com/mapswithme/maps/DownloadResourcesLegacyActivity.java b/android/src/com/mapswithme/maps/DownloadResourcesLegacyActivity.java
index 4cd257c83e..42f0e9d59b 100644
--- a/android/src/com/mapswithme/maps/DownloadResourcesLegacyActivity.java
+++ b/android/src/com/mapswithme/maps/DownloadResourcesLegacyActivity.java
@@ -101,7 +101,8 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
new Ge0IntentProcessor(),
new MapsWithMeIntentProcessor(),
new GoogleMapsIntentProcessor(),
- new LeadUrlIntentProcessor(),
+ new OldLeadUrlIntentProcessor(),
+ new DeepLinkIntentProcessor(),
new OpenCountryTaskProcessor(),
new KmzKmlProcessor(),
new ShowOnMapProcessor(),
@@ -625,7 +626,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
}
}
- private class LeadUrlIntentProcessor implements IntentProcessor
+ private class OldLeadUrlIntentProcessor implements IntentProcessor
{
@Override
public boolean isSupported(Intent intent)
@@ -649,7 +650,48 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
final String url = intent.getData().toString();
LOGGER.i(TAG, "URL = " + url);
mMapTaskToForward = new OpenUrlTask(url);
- org.alohalytics.Statistics.logEvent("LeadUrlIntentProcessor::process", url);
+ org.alohalytics.Statistics.logEvent("OldLeadUrlIntentProcessor::process", url);
+ return true;
+ }
+ }
+
+ private class DeepLinkIntentProcessor implements IntentProcessor
+ {
+ private static final String SCHEME_HTTP = "http";
+ private static final String SCHEME_HTTPS = "https";
+ private static final String HOST = "dlink.maps.me";
+ private static final String SCHEME_CORE = "mapsme";
+
+ @Override
+ public boolean isSupported(Intent intent)
+ {
+ final Uri data = intent.getData();
+
+ if (data == null)
+ return false;
+
+ String scheme = intent.getScheme();
+ String host = data.getHost();
+ if (TextUtils.isEmpty(scheme) || TextUtils.isEmpty(host))
+ return false;
+
+ return (scheme.equals(SCHEME_HTTP) || scheme.equals(SCHEME_HTTPS)) && HOST.equals(host);
+ }
+
+ @Override
+ public boolean process(Intent intent)
+ {
+ String url = intent.getData().toString();
+ LOGGER.i(TAG, "HTTP deeplink = " + url);
+ // Transform deeplink to the core expected format,
+ // i.e http(s)://host/path?query -> mapsme://path?query.
+ url = url.replace(SCHEME_HTTPS, SCHEME_CORE)
+ .replace(SCHEME_HTTP, SCHEME_CORE)
+ .replace(HOST, "");
+
+ LOGGER.i(TAG, "MAPSME URL = " + url);
+ mMapTaskToForward = new OpenUrlTask(url);
+ org.alohalytics.Statistics.logEvent(this.getClass().getSimpleName() + "::process", url);
return true;
}
}
diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java
index 54a9bb0d4d..da46274982 100644
--- a/android/src/com/mapswithme/maps/MwmActivity.java
+++ b/android/src/com/mapswithme/maps/MwmActivity.java
@@ -1525,6 +1525,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
return true;
case ParsedUrlMwmRequest.RESULT_SEARCH:
final ParsedSearchRequest request = Framework.nativeGetParsedSearchRequest();
+ SearchActivity.start(target, request.mQuery, request.mLocale, request.mIsSearchOnMap, null);
return true;
case ParsedUrlMwmRequest.RESULT_LEAD:
return true;
diff --git a/android/src/com/mapswithme/maps/search/SearchActivity.java b/android/src/com/mapswithme/maps/search/SearchActivity.java
index de3ec43937..ebbab0e43a 100644
--- a/android/src/com/mapswithme/maps/search/SearchActivity.java
+++ b/android/src/com/mapswithme/maps/search/SearchActivity.java
@@ -18,13 +18,23 @@ import com.mapswithme.util.ThemeUtils;
public class SearchActivity extends BaseMwmFragmentActivity implements CustomNavigateUpListener
{
public static final String EXTRA_QUERY = "search_query";
+ public static final String EXTRA_LOCALE = "locale";
+ public static final String EXTRA_SEARCH_ON_MAP = "search_on_map";
public static final String EXTRA_HOTELS_FILTER = "hotels_filter";
public static void start(@NonNull Activity activity, @Nullable String query,
@Nullable HotelsFilter filter)
+ {
+ start(activity, query, null /* locale */, false /* isSearchOnMap */, filter);
+ }
+
+ public static void start(@NonNull Activity activity, @Nullable String query, @Nullable String locale,
+ boolean isSearchOnMap, @Nullable HotelsFilter filter)
{
final Intent i = new Intent(activity, SearchActivity.class);
i.putExtra(EXTRA_QUERY, query);
+ i.putExtra(EXTRA_LOCALE, locale);
+ i.putExtra(EXTRA_SEARCH_ON_MAP, isSearchOnMap);
i.putExtra(EXTRA_HOTELS_FILTER, filter);
activity.startActivity(i);
activity.overridePendingTransition(R.anim.search_fade_in, R.anim.search_fade_out);
diff --git a/android/src/com/mapswithme/maps/search/SearchEngine.java b/android/src/com/mapswithme/maps/search/SearchEngine.java
index 727b349806..85f199bd27 100644
--- a/android/src/com/mapswithme/maps/search/SearchEngine.java
+++ b/android/src/com/mapswithme/maps/search/SearchEngine.java
@@ -109,14 +109,21 @@ public enum SearchEngine implements NativeSearchListener,
return false;
}
- public static void searchInteractive(String query, long timestamp, boolean isMapAndTable, @Nullable HotelsFilter hotelsFilter)
+ public static void searchInteractive(@NonNull String query, @NonNull String locale, long timestamp,
+ boolean isMapAndTable, @Nullable HotelsFilter hotelsFilter)
{
try
{
- nativeRunInteractiveSearch(query.getBytes("utf-8"), Language.getKeyboardLocale(), timestamp, isMapAndTable, hotelsFilter);
+ nativeRunInteractiveSearch(query.getBytes("utf-8"), locale, timestamp, isMapAndTable, hotelsFilter);
} catch (UnsupportedEncodingException ignored) { }
}
+ public static void searchInteractive(@NonNull String query, long timestamp, boolean isMapAndTable,
+ @Nullable HotelsFilter hotelsFilter)
+ {
+ searchInteractive(query, Language.getKeyboardLocale(), timestamp, isMapAndTable, hotelsFilter);
+ }
+
public static void searchMaps(String query, long timestamp)
{
try
diff --git a/android/src/com/mapswithme/maps/search/SearchFragment.java b/android/src/com/mapswithme/maps/search/SearchFragment.java
index 419f71b909..4b945a58fe 100644
--- a/android/src/com/mapswithme/maps/search/SearchFragment.java
+++ b/android/src/com/mapswithme/maps/search/SearchFragment.java
@@ -179,6 +179,9 @@ public class SearchFragment extends BaseMwmFragment
private boolean mSearchRunning;
private String mInitialQuery;
@Nullable
+ private String mInitialLocale;
+ private boolean mInitialSearchOnMap = false;
+ @Nullable
private HotelsFilter mInitialHotelsFilter;
private final LocationListener mLocationListener = new LocationListener.Simple()
@@ -379,6 +382,9 @@ public class SearchFragment extends BaseMwmFragment
mToolbarController.deactivate();
}
});
+
+ if (mInitialSearchOnMap)
+ showAllResultsOnMap();
}
@Override
@@ -432,6 +438,8 @@ public class SearchFragment extends BaseMwmFragment
return;
mInitialQuery = arguments.getString(SearchActivity.EXTRA_QUERY);
+ mInitialLocale = arguments.getString(SearchActivity.EXTRA_LOCALE);
+ mInitialSearchOnMap = arguments.getBoolean(SearchActivity.EXTRA_SEARCH_ON_MAP);
mInitialHotelsFilter = arguments.getParcelable(SearchActivity.EXTRA_HOTELS_FILTER);
}
@@ -502,7 +510,9 @@ public class SearchFragment extends BaseMwmFragment
hotelsFilter = mFilterController.getFilter();
SearchEngine.searchInteractive(
- query, mLastQueryTimestamp, false /* isMapAndTable */, hotelsFilter);
+ query, !TextUtils.isEmpty(mInitialLocale)
+ ? mInitialLocale : com.mapswithme.util.Language.getKeyboardLocale(),
+ mLastQueryTimestamp, false /* isMapAndTable */, hotelsFilter);
SearchEngine.showAllResults(query);
Utils.navigateToParent(getActivity());