[Quick search] fixes
This commit is contained in:
parent
f10fb0125b
commit
3e3f6ad3bd
9 changed files with 93 additions and 36 deletions
|
@ -1,14 +1,4 @@
|
|||
package net.osmand.search;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import net.osmand.Collator;
|
||||
import net.osmand.OsmAndCollator;
|
||||
|
@ -35,6 +25,17 @@ import net.osmand.util.MapUtils;
|
|||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class SearchUICore {
|
||||
|
||||
private static final int TIMEOUT_BETWEEN_CHARS = 200;
|
||||
|
@ -44,6 +45,7 @@ public class SearchUICore {
|
|||
|
||||
private ThreadPoolExecutor singleThreadedExecutor;
|
||||
private LinkedBlockingQueue<Runnable> taskQueue;
|
||||
private Runnable onSearchStart = null;
|
||||
private Runnable onResultsComplete = null;
|
||||
private AtomicInteger requestNumber = new AtomicInteger();
|
||||
private int totalLimit = -1; // -1 unlimited - not used
|
||||
|
@ -276,7 +278,11 @@ public class SearchUICore {
|
|||
public SearchPhrase getPhrase() {
|
||||
return phrase;
|
||||
}
|
||||
|
||||
|
||||
public void setOnSearchStart(Runnable onSearchStart) {
|
||||
this.onSearchStart = onSearchStart;
|
||||
}
|
||||
|
||||
public void setOnResultsComplete(Runnable onResultsComplete) {
|
||||
this.onResultsComplete = onResultsComplete;
|
||||
}
|
||||
|
@ -325,6 +331,9 @@ public class SearchUICore {
|
|||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
if (onSearchStart != null) {
|
||||
onSearchStart.run();
|
||||
}
|
||||
SearchResultMatcher rm = new SearchResultMatcher(matcher, request, requestNumber, totalLimit);
|
||||
if(TIMEOUT_BETWEEN_CHARS > 0) {
|
||||
Thread.sleep(TIMEOUT_BETWEEN_CHARS);
|
||||
|
|
|
@ -99,6 +99,7 @@ import net.osmand.plus.views.OsmandMapLayer;
|
|||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
import net.osmand.plus.views.corenative.NativeCoreContext;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController.TopToolbarControllerType;
|
||||
import net.osmand.render.RenderingRulesStorage;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
|
@ -1414,6 +1415,11 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
return mapInfoLayer.hasTopToolbar();
|
||||
}
|
||||
|
||||
public TopToolbarController getTopToolbarController(TopToolbarControllerType type) {
|
||||
MapInfoLayer mapInfoLayer = getMapLayers().getMapInfoLayer();
|
||||
return mapInfoLayer.getTopToolbarController(type);
|
||||
}
|
||||
|
||||
public void showTopToolbar(TopToolbarController controller) {
|
||||
MapInfoLayer mapInfoLayer = getMapLayers().getMapInfoLayer();
|
||||
mapInfoLayer.addTopToolbarController(controller);
|
||||
|
|
|
@ -32,6 +32,7 @@ import net.osmand.plus.activities.MapActivity;
|
|||
import net.osmand.plus.dashboard.DashboardOnMap;
|
||||
import net.osmand.plus.dialogs.DirectionsDialogs;
|
||||
import net.osmand.plus.helpers.GpxUiHelper;
|
||||
import net.osmand.plus.mapcontextmenu.MenuController.ContextMenuToolbarController;
|
||||
import net.osmand.plus.mapcontextmenu.MenuController.MenuState;
|
||||
import net.osmand.plus.mapcontextmenu.MenuController.MenuType;
|
||||
import net.osmand.plus.mapcontextmenu.MenuController.TitleButtonController;
|
||||
|
@ -45,6 +46,9 @@ import net.osmand.plus.mapcontextmenu.other.ShareMenu;
|
|||
import net.osmand.plus.routing.RoutingHelper;
|
||||
import net.osmand.plus.views.ContextMenuLayer;
|
||||
import net.osmand.plus.views.OsmandMapLayer;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController.TopToolbarControllerType;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
@ -560,6 +564,14 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
|||
}
|
||||
}
|
||||
|
||||
public void closeActiveToolbar() {
|
||||
TopToolbarController toolbarController = mapActivity.getTopToolbarController(TopToolbarControllerType.CONTEXT_MENU);
|
||||
if (toolbarController != null && toolbarController instanceof ContextMenuToolbarController) {
|
||||
MenuController menuController = ((ContextMenuToolbarController) toolbarController).getMenuController();
|
||||
closeToolbar(menuController);
|
||||
}
|
||||
}
|
||||
|
||||
public void closeToolbar(MenuController menuController) {
|
||||
if (this.menuController.getClass() == menuController.getClass()) {
|
||||
close();
|
||||
|
|
|
@ -592,4 +592,17 @@ public abstract class MenuController extends BaseMenuController {
|
|||
return rm.getIndexFileNames().containsKey(regionName) || rm.getIndexFileNames().containsKey(roadsRegionName);
|
||||
}
|
||||
|
||||
public static class ContextMenuToolbarController extends TopToolbarController {
|
||||
|
||||
private MenuController menuController;
|
||||
|
||||
public ContextMenuToolbarController(MenuController menuController) {
|
||||
super(TopToolbarControllerType.CONTEXT_MENU);
|
||||
this.menuController = menuController;
|
||||
}
|
||||
|
||||
public MenuController getMenuController() {
|
||||
return menuController;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -29,7 +29,7 @@ public class TransportRouteController extends MenuController {
|
|||
final TransportStopRoute transportRoute) {
|
||||
super(new MenuBuilder(app), pointDescription, mapActivity);
|
||||
this.transportRoute = transportRoute;
|
||||
toolbarController = new TransportRouteToolbarController();
|
||||
toolbarController = new ContextMenuToolbarController(this);
|
||||
toolbarController.setTitle(getNameStr());
|
||||
toolbarController.setOnBackButtonClickListener(new OnClickListener() {
|
||||
@Override
|
||||
|
@ -194,11 +194,4 @@ public class TransportRouteController extends MenuController {
|
|||
TransportStopsLayer stopsLayer = getMapActivity().getMapLayers().getTransportStopsLayer();
|
||||
stopsLayer.setRoute(null);
|
||||
}
|
||||
|
||||
public static class TransportRouteToolbarController extends TopToolbarController {
|
||||
|
||||
public TransportRouteToolbarController() {
|
||||
super(TopToolbarControllerType.CONTEXT_MENU);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ import android.widget.TextView;
|
|||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.Location;
|
||||
import net.osmand.ResultMatcher;
|
||||
import net.osmand.data.City;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.osm.AbstractPoiType;
|
||||
|
@ -120,6 +121,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
private Float heading = null;
|
||||
private boolean useMapCenter;
|
||||
private boolean paused;
|
||||
private boolean cancelPrev;
|
||||
private boolean searching;
|
||||
private boolean hidden;
|
||||
private boolean foundPartialLocation;
|
||||
|
@ -237,6 +239,8 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
}
|
||||
app.getPoiFilters().clearSelectedPoiFilters();
|
||||
app.getPoiFilters().addSelectedPoiFilter(filter);
|
||||
|
||||
mapActivity.getContextMenu().closeActiveToolbar();
|
||||
showToolbar();
|
||||
getMapActivity().refreshMap();
|
||||
hide();
|
||||
|
@ -251,7 +255,11 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
searchResult.location.getLatitude(), searchResult.location.getLongitude(),
|
||||
searchResult.preferredZoom, pointDescription, true, searchResult.object);
|
||||
|
||||
showToolbar();
|
||||
if (searchResult.object != null && searchResult.object instanceof City) {
|
||||
hideToolbar();
|
||||
} else {
|
||||
showToolbar();
|
||||
}
|
||||
MapActivity.launchMapActivityMoveToTop(getActivity());
|
||||
reloadHistory();
|
||||
hide();
|
||||
|
@ -559,6 +567,12 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
new LatLon(searchLatLon.getLatitude(), searchLatLon.getLongitude()));
|
||||
settings = settings.setLang(locale, false);
|
||||
searchUICore.updateSettings(settings);
|
||||
searchUICore.setOnSearchStart(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
cancelPrev = false;
|
||||
}
|
||||
});
|
||||
searchUICore.setOnResultsComplete(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
@ -566,7 +580,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
@Override
|
||||
public void run() {
|
||||
searching = false;
|
||||
if (!paused) {
|
||||
if (!paused && !cancelPrev) {
|
||||
hideProgressBar();
|
||||
if (searchUICore.isSearchMoreAvailable(searchUICore.getPhrase())) {
|
||||
addMoreButton();
|
||||
|
@ -828,6 +842,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
updateToolbarButton();
|
||||
interruptedSearch = false;
|
||||
searching = true;
|
||||
cancelPrev = true;
|
||||
|
||||
if (app.isApplicationInitializing() && text.length() > 0) {
|
||||
app.getAppInitializer().addListener(new AppInitializeListener() {
|
||||
|
@ -853,7 +868,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
|
||||
@Override
|
||||
public boolean publish(SearchResult object) {
|
||||
if (paused) {
|
||||
if (paused || cancelPrev) {
|
||||
if (results.size() > 0) {
|
||||
getResultCollection().addSearchResults(results, true, true);
|
||||
}
|
||||
|
@ -897,13 +912,15 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return paused;
|
||||
return paused || cancelPrev;
|
||||
}
|
||||
});
|
||||
|
||||
if (!searchMore) {
|
||||
setResultCollection(null);
|
||||
updateSearchResult(null, false);
|
||||
if (!updateResult) {
|
||||
updateSearchResult(null, false);
|
||||
}
|
||||
}
|
||||
if (updateResult) {
|
||||
updateSearchResult(c, false);
|
||||
|
@ -925,7 +942,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
app.runInUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!paused) {
|
||||
if (!paused && !cancelPrev) {
|
||||
boolean append = getResultCollection() != null;
|
||||
if (append) {
|
||||
getResultCollection().addSearchResults(apiResults, false, true);
|
||||
|
@ -946,7 +963,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
app.runInUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!paused) {
|
||||
if (!paused && !cancelPrev) {
|
||||
if (getResultCollection() != null) {
|
||||
SearchResultCollection resCollection =
|
||||
getResultCollection().combineWithCollection(regionResultCollection, false, true);
|
||||
|
@ -986,7 +1003,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
}
|
||||
});
|
||||
|
||||
if (!paused && mainSearchFragment != null) {
|
||||
if (!paused && !cancelPrev && mainSearchFragment != null) {
|
||||
mainSearchFragment.addListItem(moreListItem);
|
||||
}
|
||||
}
|
||||
|
@ -1077,7 +1094,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
}
|
||||
|
||||
private void updateLocationUI(LatLon latLon, Float heading) {
|
||||
if (latLon != null && !paused) {
|
||||
if (latLon != null && !paused && !cancelPrev) {
|
||||
if (mainSearchFragment != null && searchView.getVisibility() == View.VISIBLE) {
|
||||
mainSearchFragment.updateLocation(latLon, heading);
|
||||
} else if (historySearchFragment != null && viewPager.getCurrentItem() == 0) {
|
||||
|
@ -1089,7 +1106,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
}
|
||||
|
||||
private void updateUseMapCenterUI() {
|
||||
if (!paused) {
|
||||
if (!paused && !cancelPrev) {
|
||||
if (mainSearchFragment != null) {
|
||||
mainSearchFragment.getListAdapter().setUseMapCenter(useMapCenter);
|
||||
}
|
||||
|
|
|
@ -222,13 +222,6 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
|
|||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
if (pointDescription != null) {
|
||||
dialogFragment.showToolbar(pointDescription.getName());
|
||||
} else {
|
||||
dialogFragment.showToolbar();
|
||||
}
|
||||
*/
|
||||
dialogFragment.hideToolbar();
|
||||
dialogFragment.hide();
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ import net.osmand.plus.R;
|
|||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController.TopToolbarControllerType;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarView;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopTextView;
|
||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
||||
|
@ -113,6 +114,10 @@ public class MapInfoLayer extends OsmandMapLayer {
|
|||
return topToolbarView.getTopController() != null;
|
||||
}
|
||||
|
||||
public TopToolbarController getTopToolbarController(TopToolbarControllerType type) {
|
||||
return topToolbarView.getController(type);
|
||||
}
|
||||
|
||||
public void registerAllControls(){
|
||||
RouteInfoWidgetsFactory ric = new RouteInfoWidgetsFactory();
|
||||
MapInfoWidgetsFactory mic = new MapInfoWidgetsFactory();
|
||||
|
|
|
@ -355,6 +355,15 @@ public class MapInfoWidgetsFactory {
|
|||
}
|
||||
}
|
||||
|
||||
public TopToolbarController getController(TopToolbarControllerType type) {
|
||||
for (TopToolbarController controller : controllers) {
|
||||
if (controller.getType() == type) {
|
||||
return controller;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void addController(TopToolbarController controller) {
|
||||
for (Iterator ctrlIter = controllers.iterator(); ctrlIter.hasNext(); ) {
|
||||
TopToolbarController ctrl = (TopToolbarController) ctrlIter.next();
|
||||
|
|
Loading…
Reference in a new issue