Added search feature to aidl api
This commit is contained in:
parent
c8bee8f39b
commit
2f6d331c42
10 changed files with 384 additions and 6 deletions
|
@ -401,6 +401,10 @@ public class SearchUICore {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void search(final String text, final boolean delayedExecution, final ResultMatcher<SearchResult> matcher) {
|
public void search(final String text, final boolean delayedExecution, final ResultMatcher<SearchResult> matcher) {
|
||||||
|
search(text, delayedExecution, matcher, searchSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void search(final String text, final boolean delayedExecution, final ResultMatcher<SearchResult> matcher, final SearchSettings searchSettings) {
|
||||||
final int request = requestNumber.incrementAndGet();
|
final int request = requestNumber.incrementAndGet();
|
||||||
final SearchPhrase phrase = this.phrase.generateNewPhrase(text, searchSettings);
|
final SearchPhrase phrase = this.phrase.generateNewPhrase(text, searchSettings);
|
||||||
this.phrase = phrase;
|
this.phrase = phrase;
|
||||||
|
|
7
OsmAnd/src/net/osmand/aidl/IOsmAndAidlCallback.aidl
Normal file
7
OsmAnd/src/net/osmand/aidl/IOsmAndAidlCallback.aidl
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
package net.osmand.aidl;
|
||||||
|
|
||||||
|
import net.osmand.aidl.search.SearchResult;
|
||||||
|
|
||||||
|
interface IOsmAndAidlCallback {
|
||||||
|
void onSearchComplete(in List<SearchResult> resultSet);
|
||||||
|
}
|
|
@ -61,6 +61,11 @@ import net.osmand.aidl.navigation.StopNavigationParams;
|
||||||
import net.osmand.aidl.navigation.MuteNavigationParams;
|
import net.osmand.aidl.navigation.MuteNavigationParams;
|
||||||
import net.osmand.aidl.navigation.UnmuteNavigationParams;
|
import net.osmand.aidl.navigation.UnmuteNavigationParams;
|
||||||
|
|
||||||
|
import net.osmand.aidl.IOsmAndAidlCallback;
|
||||||
|
|
||||||
|
import net.osmand.aidl.search.SearchResult;
|
||||||
|
import net.osmand.aidl.search.SearchParams;
|
||||||
|
|
||||||
// NOTE: Add new methods at the end of file!!!
|
// NOTE: Add new methods at the end of file!!!
|
||||||
|
|
||||||
interface IOsmAndAidlInterface {
|
interface IOsmAndAidlInterface {
|
||||||
|
@ -121,4 +126,6 @@ interface IOsmAndAidlInterface {
|
||||||
boolean stopNavigation(in StopNavigationParams params);
|
boolean stopNavigation(in StopNavigationParams params);
|
||||||
boolean muteNavigation(in MuteNavigationParams params);
|
boolean muteNavigation(in MuteNavigationParams params);
|
||||||
boolean unmuteNavigation(in UnmuteNavigationParams params);
|
boolean unmuteNavigation(in UnmuteNavigationParams params);
|
||||||
|
|
||||||
|
boolean search(in SearchParams params, IOsmAndAidlCallback callback);
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package net.osmand.aidl;
|
package net.osmand.aidl;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -28,9 +29,11 @@ import net.osmand.aidl.maplayer.AMapLayer;
|
||||||
import net.osmand.aidl.maplayer.point.AMapPoint;
|
import net.osmand.aidl.maplayer.point.AMapPoint;
|
||||||
import net.osmand.aidl.mapmarker.AMapMarker;
|
import net.osmand.aidl.mapmarker.AMapMarker;
|
||||||
import net.osmand.aidl.mapwidget.AMapWidget;
|
import net.osmand.aidl.mapwidget.AMapWidget;
|
||||||
|
import net.osmand.aidl.search.SearchResult;
|
||||||
import net.osmand.data.FavouritePoint;
|
import net.osmand.data.FavouritePoint;
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.PointDescription;
|
import net.osmand.data.PointDescription;
|
||||||
|
import net.osmand.plus.AppInitializer;
|
||||||
import net.osmand.plus.ApplicationMode;
|
import net.osmand.plus.ApplicationMode;
|
||||||
import net.osmand.plus.ContextMenuAdapter;
|
import net.osmand.plus.ContextMenuAdapter;
|
||||||
import net.osmand.plus.ContextMenuItem;
|
import net.osmand.plus.ContextMenuItem;
|
||||||
|
@ -58,6 +61,9 @@ import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.views.mapwidgets.MapWidgetRegistry.MapWidgetRegInfo;
|
import net.osmand.plus.views.mapwidgets.MapWidgetRegistry.MapWidgetRegInfo;
|
||||||
import net.osmand.plus.views.mapwidgets.TextInfoWidget;
|
import net.osmand.plus.views.mapwidgets.TextInfoWidget;
|
||||||
|
import net.osmand.search.SearchUICore;
|
||||||
|
import net.osmand.search.SearchUICore.SearchResultCollection;
|
||||||
|
import net.osmand.search.core.SearchSettings;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
@ -81,6 +87,15 @@ import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import static net.osmand.search.core.ObjectType.CITY;
|
||||||
|
import static net.osmand.search.core.ObjectType.HOUSE;
|
||||||
|
import static net.osmand.search.core.ObjectType.POI;
|
||||||
|
import static net.osmand.search.core.ObjectType.POSTCODE;
|
||||||
|
import static net.osmand.search.core.ObjectType.STREET;
|
||||||
|
import static net.osmand.search.core.ObjectType.STREET_INTERSECTION;
|
||||||
|
import static net.osmand.search.core.ObjectType.VILLAGE;
|
||||||
|
import static net.osmand.search.core.SearchCoreFactory.MAX_DEFAULT_SEARCH_RADIUS;
|
||||||
|
|
||||||
|
|
||||||
public class OsmandAidlApi {
|
public class OsmandAidlApi {
|
||||||
private static final Log LOG = PlatformUtil.getLog(OsmandAidlApi.class);
|
private static final Log LOG = PlatformUtil.getLog(OsmandAidlApi.class);
|
||||||
|
@ -140,7 +155,7 @@ public class OsmandAidlApi {
|
||||||
private Map<String, TextInfoWidget> widgetControls = new ConcurrentHashMap<>();
|
private Map<String, TextInfoWidget> widgetControls = new ConcurrentHashMap<>();
|
||||||
private Map<String, AMapLayer> layers = new ConcurrentHashMap<>();
|
private Map<String, AMapLayer> layers = new ConcurrentHashMap<>();
|
||||||
private Map<String, OsmandMapLayer> mapLayers = new ConcurrentHashMap<>();
|
private Map<String, OsmandMapLayer> mapLayers = new ConcurrentHashMap<>();
|
||||||
private Map<String, BroadcastReceiver> receivers = new TreeMap<String, BroadcastReceiver>();
|
private Map<String, BroadcastReceiver> receivers = new TreeMap<>();
|
||||||
|
|
||||||
|
|
||||||
public OsmandAidlApi(OsmandApplication app) {
|
public OsmandAidlApi(OsmandApplication app) {
|
||||||
|
@ -178,7 +193,7 @@ public class OsmandAidlApi {
|
||||||
LOG.error(e.getMessage(), e);
|
LOG.error(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
receivers = new TreeMap<String, BroadcastReceiver>();
|
receivers = new TreeMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerRefreshMapReceiver(final MapActivity mapActivity) {
|
private void registerRefreshMapReceiver(final MapActivity mapActivity) {
|
||||||
|
@ -972,6 +987,7 @@ public class OsmandAidlApi {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("StaticFieldLeak")
|
||||||
private void finishGpxImport(boolean destinationExists, File destination, String color, boolean show) {
|
private void finishGpxImport(boolean destinationExists, File destination, String color, boolean show) {
|
||||||
int col = ConfigureMapMenu.GpxAppearanceAdapter.parseTrackColor(
|
int col = ConfigureMapMenu.GpxAppearanceAdapter.parseTrackColor(
|
||||||
app.getRendererRegistry().getCurrentSelectedRenderer(), color);
|
app.getRendererRegistry().getCurrentSelectedRenderer(), color);
|
||||||
|
@ -1113,6 +1129,7 @@ public class OsmandAidlApi {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("StaticFieldLeak")
|
||||||
boolean showGpx(String fileName) {
|
boolean showGpx(String fileName) {
|
||||||
if (!Algorithms.isEmpty(fileName)) {
|
if (!Algorithms.isEmpty(fileName)) {
|
||||||
File f = app.getAppPath(IndexConstants.GPX_INDEX_DIR + fileName);
|
File f = app.getAppPath(IndexConstants.GPX_INDEX_DIR + fileName);
|
||||||
|
@ -1310,6 +1327,63 @@ public class OsmandAidlApi {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean search(final String searchQuery, final double latitude, final double longitude,
|
||||||
|
final int radiusLevel, final int totalLimit, final SearchCompleteCallback callback) {
|
||||||
|
if (Algorithms.isEmpty(searchQuery) || latitude == 0 || longitude == 0 || callback == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (app.isApplicationInitializing()) {
|
||||||
|
app.getAppInitializer().addListener(new AppInitializer.AppInitializeListener() {
|
||||||
|
@Override
|
||||||
|
public void onProgress(AppInitializer init, AppInitializer.InitEvents event) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFinish(AppInitializer init) {
|
||||||
|
runSearch(searchQuery, latitude, longitude, radiusLevel, totalLimit, callback);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
runSearch(searchQuery, latitude, longitude, radiusLevel, totalLimit, callback);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runSearch(String searchQuery, double latitude, double longitude, int radiusLevel, int totalLimit, final SearchCompleteCallback callback) {
|
||||||
|
final SearchUICore core = app.getSearchUICore().getCore();
|
||||||
|
core.setOnResultsComplete(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
List<SearchResult> resultSet = new ArrayList<>();
|
||||||
|
SearchResultCollection resultCollection = core.getCurrentSearchResult();
|
||||||
|
for (net.osmand.search.core.SearchResult r : resultCollection.getCurrentSearchResults()) {
|
||||||
|
SearchResult result = new SearchResult(r.location.getLatitude(), r.location.getLongitude(), r.localeName, r.alternateName, new ArrayList<>(r.otherNames));
|
||||||
|
resultSet.add(result);
|
||||||
|
}
|
||||||
|
callback.onSearchComplete(resultSet);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (radiusLevel < 1) {
|
||||||
|
radiusLevel = 1;
|
||||||
|
} else if (radiusLevel > MAX_DEFAULT_SEARCH_RADIUS) {
|
||||||
|
radiusLevel = MAX_DEFAULT_SEARCH_RADIUS;
|
||||||
|
}
|
||||||
|
if (totalLimit <= 0) {
|
||||||
|
totalLimit = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchSettings searchSettings = new SearchSettings(core.getSearchSettings())
|
||||||
|
.setSearchTypes(CITY, VILLAGE, POSTCODE, STREET, HOUSE, STREET_INTERSECTION, POI)
|
||||||
|
.setRadiusLevel(radiusLevel)
|
||||||
|
.setEmptyQueryAllowed(false)
|
||||||
|
.setSortByName(false)
|
||||||
|
.setOriginalLocation(new LatLon(latitude, longitude))
|
||||||
|
.setTotalLimit(totalLimit);
|
||||||
|
|
||||||
|
core.search(searchQuery, false, null, searchSettings);
|
||||||
|
}
|
||||||
|
|
||||||
boolean setNavDrawerItems(String appPackage, List<net.osmand.aidl.navdrawer.NavDrawerItem> items) {
|
boolean setNavDrawerItems(String appPackage, List<net.osmand.aidl.navdrawer.NavDrawerItem> items) {
|
||||||
if (!TextUtils.isEmpty(appPackage) && items != null) {
|
if (!TextUtils.isEmpty(appPackage) && items != null) {
|
||||||
if (items.isEmpty()) {
|
if (items.isEmpty()) {
|
||||||
|
@ -1448,4 +1522,8 @@ public class OsmandAidlApi {
|
||||||
this.flags = flags;
|
this.flags = flags;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface SearchCompleteCallback {
|
||||||
|
void onSearchComplete(List<SearchResult> resultSet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,17 @@ package net.osmand.aidl;
|
||||||
|
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.HandlerThread;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.Looper;
|
||||||
|
import android.os.Message;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.aidl.OsmandAidlApi.SearchCompleteCallback;
|
||||||
import net.osmand.aidl.calculateroute.CalculateRouteParams;
|
import net.osmand.aidl.calculateroute.CalculateRouteParams;
|
||||||
import net.osmand.aidl.favorite.AddFavoriteParams;
|
import net.osmand.aidl.favorite.AddFavoriteParams;
|
||||||
import net.osmand.aidl.favorite.RemoveFavoriteParams;
|
import net.osmand.aidl.favorite.RemoveFavoriteParams;
|
||||||
|
@ -46,17 +53,28 @@ import net.osmand.aidl.note.StartAudioRecordingParams;
|
||||||
import net.osmand.aidl.note.StartVideoRecordingParams;
|
import net.osmand.aidl.note.StartVideoRecordingParams;
|
||||||
import net.osmand.aidl.note.StopRecordingParams;
|
import net.osmand.aidl.note.StopRecordingParams;
|
||||||
import net.osmand.aidl.note.TakePhotoNoteParams;
|
import net.osmand.aidl.note.TakePhotoNoteParams;
|
||||||
|
import net.osmand.aidl.search.SearchParams;
|
||||||
|
import net.osmand.aidl.search.SearchResult;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class OsmandAidlService extends Service {
|
public class OsmandAidlService extends Service {
|
||||||
|
|
||||||
private static final Log LOG = PlatformUtil.getLog(OsmandAidlService.class);
|
private static final Log LOG = PlatformUtil.getLog(OsmandAidlService.class);
|
||||||
|
|
||||||
|
private static final int MSG_RUN_SEARCH = 53;
|
||||||
|
private static final String DATA_KEY_RESULT_SET = "resultSet";
|
||||||
|
|
||||||
|
private ArrayList<IOsmAndAidlCallback> mRemoteCallbacks;
|
||||||
|
private ServiceHandler mHandler = null;
|
||||||
|
HandlerThread mHandlerThread = new HandlerThread("OsmAndAidlServiceThread");
|
||||||
|
|
||||||
OsmandApplication getApp() {
|
OsmandApplication getApp() {
|
||||||
return (OsmandApplication) getApplication();
|
return (OsmandApplication) getApplication();
|
||||||
}
|
}
|
||||||
|
@ -68,15 +86,25 @@ public class OsmandAidlService extends Service {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBinder onBind(Intent intent) {
|
public IBinder onBind(Intent intent) {
|
||||||
|
// Handler Thread handling all call back methods
|
||||||
|
mHandlerThread.start();
|
||||||
|
mHandler = new ServiceHandler(mHandlerThread.getLooper());
|
||||||
|
|
||||||
// Return the interface
|
// Return the interface
|
||||||
return mBinder;
|
return mBinder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
|
||||||
|
mRemoteCallbacks = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
private final IOsmAndAidlInterface.Stub mBinder = new IOsmAndAidlInterface.Stub() {
|
private final IOsmAndAidlInterface.Stub mBinder = new IOsmAndAidlInterface.Stub() {
|
||||||
|
|
||||||
private void handleException(Exception e) {
|
private void handleException(Exception e) {
|
||||||
LOG.error("AIDL e.getMessage()", e);
|
LOG.error("AIDL e.getMessage()", e);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -523,5 +551,77 @@ public class OsmandAidlService extends Service {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
@Override
|
||||||
|
public boolean search(SearchParams params, final IOsmAndAidlCallback callback) throws RemoteException {
|
||||||
|
try {
|
||||||
|
return params != null && getApi("search").search(params.getSearchQuery(),
|
||||||
|
params.getLatutude(), params.getLongitude(), params.getRadiusLevel(), params.getTotalLimit(), new SearchCompleteCallback() {
|
||||||
|
@Override
|
||||||
|
public void onSearchComplete(List<SearchResult> resultSet) {
|
||||||
|
Bundle data = new Bundle();
|
||||||
|
if (resultSet.size() > 0) {
|
||||||
|
data.putParcelableArrayList(DATA_KEY_RESULT_SET, new ArrayList<>(resultSet));
|
||||||
|
}
|
||||||
|
sendMsgToHandler(callback, MSG_RUN_SEARCH, data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (Exception e) {
|
||||||
|
handleException(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create handler message to be sent
|
||||||
|
*/
|
||||||
|
void sendMsgToHandler(IOsmAndAidlCallback callback, int flag, Bundle data) {
|
||||||
|
|
||||||
|
mRemoteCallbacks.add(callback);
|
||||||
|
|
||||||
|
Message message = mHandler.obtainMessage();
|
||||||
|
message.arg1 = mRemoteCallbacks.size() - 1;
|
||||||
|
message.setData(data);
|
||||||
|
|
||||||
|
message.what = flag;
|
||||||
|
mHandler.sendMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler class sending result in callback to respective
|
||||||
|
* application
|
||||||
|
*/
|
||||||
|
private class ServiceHandler extends Handler {
|
||||||
|
int callbackIndex = 0;
|
||||||
|
|
||||||
|
ServiceHandler(Looper looper) {
|
||||||
|
super(looper);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleMessage(Message msg) {
|
||||||
|
callbackIndex = msg.arg1;
|
||||||
|
|
||||||
|
switch (msg.what) {
|
||||||
|
|
||||||
|
case MSG_RUN_SEARCH:
|
||||||
|
|
||||||
|
Bundle data = msg.getData();
|
||||||
|
List<SearchResult> resultSet;
|
||||||
|
if (data.containsKey(DATA_KEY_RESULT_SET)) {
|
||||||
|
resultSet = data.getParcelableArrayList(DATA_KEY_RESULT_SET);
|
||||||
|
} else {
|
||||||
|
resultSet = Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
mRemoteCallbacks.get(callbackIndex).onSearchComplete(resultSet);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
LOG.error("AIDL e.getMessage()", e);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
3
OsmAnd/src/net/osmand/aidl/search/SearchParams.aidl
Normal file
3
OsmAnd/src/net/osmand/aidl/search/SearchParams.aidl
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
package net.osmand.aidl.search;
|
||||||
|
|
||||||
|
parcelable SearchParams;
|
79
OsmAnd/src/net/osmand/aidl/search/SearchParams.java
Normal file
79
OsmAnd/src/net/osmand/aidl/search/SearchParams.java
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
package net.osmand.aidl.search;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
public class SearchParams implements Parcelable {
|
||||||
|
|
||||||
|
private String searchQuery;
|
||||||
|
private double latutude;
|
||||||
|
private double longitude;
|
||||||
|
private int radiusLevel = 1;
|
||||||
|
private int totalLimit = -1;
|
||||||
|
|
||||||
|
public SearchParams(String searchQuery, double latutude, double longitude, int radiusLevel, int totalLimit) {
|
||||||
|
this.searchQuery = searchQuery;
|
||||||
|
this.latutude = latutude;
|
||||||
|
this.longitude = longitude;
|
||||||
|
this.radiusLevel = radiusLevel;
|
||||||
|
this.totalLimit = totalLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SearchParams(Parcel in) {
|
||||||
|
readFromParcel(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<SearchParams> CREATOR = new Creator<SearchParams>() {
|
||||||
|
@Override
|
||||||
|
public SearchParams createFromParcel(Parcel in) {
|
||||||
|
return new SearchParams(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SearchParams[] newArray(int size) {
|
||||||
|
return new SearchParams[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public String getSearchQuery() {
|
||||||
|
return searchQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLatutude() {
|
||||||
|
return latutude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLongitude() {
|
||||||
|
return longitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRadiusLevel() {
|
||||||
|
return radiusLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTotalLimit() {
|
||||||
|
return totalLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel out, int flags) {
|
||||||
|
out.writeString(searchQuery);
|
||||||
|
out.writeDouble(latutude);
|
||||||
|
out.writeDouble(longitude);
|
||||||
|
out.writeInt(radiusLevel);
|
||||||
|
out.writeInt(totalLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readFromParcel(Parcel in) {
|
||||||
|
searchQuery = in.readString();
|
||||||
|
latutude = in.readDouble();
|
||||||
|
longitude = in.readDouble();
|
||||||
|
radiusLevel = in.readInt();
|
||||||
|
totalLimit = in.readInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
3
OsmAnd/src/net/osmand/aidl/search/SearchResult.aidl
Normal file
3
OsmAnd/src/net/osmand/aidl/search/SearchResult.aidl
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
package net.osmand.aidl.search;
|
||||||
|
|
||||||
|
parcelable SearchResult;
|
85
OsmAnd/src/net/osmand/aidl/search/SearchResult.java
Normal file
85
OsmAnd/src/net/osmand/aidl/search/SearchResult.java
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
package net.osmand.aidl.search;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SearchResult implements Parcelable {
|
||||||
|
|
||||||
|
private double latitude;
|
||||||
|
private double longitude;
|
||||||
|
|
||||||
|
private String localeName;
|
||||||
|
private String alternateName;
|
||||||
|
private List<String> otherNames = new ArrayList<>();
|
||||||
|
|
||||||
|
public SearchResult(double latitude, double longitude, String localeName, String alternateName, List<String> otherNames) {
|
||||||
|
this.latitude = latitude;
|
||||||
|
this.longitude = longitude;
|
||||||
|
this.localeName = localeName;
|
||||||
|
this.alternateName = alternateName;
|
||||||
|
if (otherNames != null) {
|
||||||
|
this.otherNames = otherNames;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public SearchResult(Parcel in) {
|
||||||
|
readFromParcel(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<SearchResult> CREATOR = new Creator<SearchResult>() {
|
||||||
|
@Override
|
||||||
|
public SearchResult createFromParcel(Parcel in) {
|
||||||
|
return new SearchResult(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SearchResult[] newArray(int size) {
|
||||||
|
return new SearchResult[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public double getLatitude() {
|
||||||
|
return latitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLongitude() {
|
||||||
|
return longitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLocaleName() {
|
||||||
|
return localeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAlternateName() {
|
||||||
|
return alternateName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getOtherNames() {
|
||||||
|
return otherNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel out, int flags) {
|
||||||
|
out.writeDouble(latitude);
|
||||||
|
out.writeDouble(longitude);
|
||||||
|
out.writeString(localeName);
|
||||||
|
out.writeString(alternateName);
|
||||||
|
out.writeStringList(otherNames);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readFromParcel(Parcel in) {
|
||||||
|
latitude = in.readDouble();
|
||||||
|
longitude = in.readDouble();
|
||||||
|
localeName = in.readString();
|
||||||
|
alternateName = in.readString();
|
||||||
|
in.readStringList(otherNames);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -91,6 +91,7 @@ public class ExternalApiHelper {
|
||||||
public static final String PARAM_START_LON = "start_lon";
|
public static final String PARAM_START_LON = "start_lon";
|
||||||
public static final String PARAM_DEST_LAT = "dest_lat";
|
public static final String PARAM_DEST_LAT = "dest_lat";
|
||||||
public static final String PARAM_DEST_LON = "dest_lon";
|
public static final String PARAM_DEST_LON = "dest_lon";
|
||||||
|
public static final String PARAM_DEST_SEARCH_QUERY = "dest_search_query";
|
||||||
public static final String PARAM_PROFILE = "profile";
|
public static final String PARAM_PROFILE = "profile";
|
||||||
|
|
||||||
public static final String PARAM_VERSION = "version";
|
public static final String PARAM_VERSION = "version";
|
||||||
|
@ -251,9 +252,20 @@ public class ExternalApiHelper {
|
||||||
startDesc = null;
|
startDesc = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
double destLat = Double.parseDouble(uri.getQueryParameter(PARAM_DEST_LAT));
|
String destSearchQuery = uri.getQueryParameter(PARAM_DEST_SEARCH_QUERY);
|
||||||
double destLon = Double.parseDouble(uri.getQueryParameter(PARAM_DEST_LON));
|
String destLatStr = uri.getQueryParameter(PARAM_DEST_LAT);
|
||||||
final LatLon dest = new LatLon(destLat, destLon);
|
String destLonStr = uri.getQueryParameter(PARAM_DEST_LON);
|
||||||
|
final LatLon dest;
|
||||||
|
if (!Algorithms.isEmpty(destLatStr) && !Algorithms.isEmpty(destLonStr)) {
|
||||||
|
double destLat = Double.parseDouble(destLatStr);
|
||||||
|
double destLon = Double.parseDouble(destLonStr);
|
||||||
|
dest = new LatLon(destLat, destLon);
|
||||||
|
} else {
|
||||||
|
dest = null;
|
||||||
|
}
|
||||||
|
if (!Algorithms.isEmpty(destSearchQuery)) {
|
||||||
|
|
||||||
|
}
|
||||||
final PointDescription destDesc = new PointDescription(PointDescription.POINT_TYPE_LOCATION, destName);
|
final PointDescription destDesc = new PointDescription(PointDescription.POINT_TYPE_LOCATION, destName);
|
||||||
|
|
||||||
boolean force = uri.getBooleanQueryParameter(PARAM_FORCE, false);
|
boolean force = uri.getBooleanQueryParameter(PARAM_FORCE, false);
|
||||||
|
|
Loading…
Reference in a new issue