Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
e5291a8a41
6 changed files with 81 additions and 45 deletions
|
@ -684,7 +684,8 @@ public class OsmAndLocationProvider implements SensorEventListener {
|
|||
|
||||
private void scheduleCheckIfGpsLost(final net.osmand.Location location) {
|
||||
final RoutingHelper routingHelper = app.getRoutingHelper();
|
||||
if (location != null) {
|
||||
if (location != null && routingHelper.isFollowingMode() && routingHelper.getLeftDistance() > 0
|
||||
&& simulatePosition == null) {
|
||||
final long fixTime = location.getTime();
|
||||
app.runMessageInUIThreadAndCancelPrevious(LOST_LOCATION_MSG_ID, new Runnable() {
|
||||
|
||||
|
@ -696,31 +697,30 @@ public class OsmAndLocationProvider implements SensorEventListener {
|
|||
return;
|
||||
}
|
||||
gpsSignalLost = true;
|
||||
if (routingHelper.isFollowingMode() && routingHelper.getLeftDistance() > 0) {
|
||||
if (routingHelper.isFollowingMode() && routingHelper.getLeftDistance() > 0
|
||||
&& simulatePosition == null) {
|
||||
routingHelper.getVoiceRouter().gpsLocationLost();
|
||||
setLocation(null);
|
||||
}
|
||||
setLocation(null);
|
||||
}
|
||||
}, LOST_LOCATION_CHECK_DELAY);
|
||||
if (routingHelper.isFollowingMode() && routingHelper.getLeftDistance() > 0 && simulatePosition == null) {
|
||||
app.runMessageInUIThreadAndCancelPrevious(START_SIMULATE_LOCATION_MSG_ID, new Runnable() {
|
||||
app.runMessageInUIThreadAndCancelPrevious(START_SIMULATE_LOCATION_MSG_ID, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
net.osmand.Location lastKnown = getLastKnownLocation();
|
||||
if (lastKnown != null && lastKnown.getTime() > fixTime) {
|
||||
// false positive case, still strange how we got here with removeMessages
|
||||
return;
|
||||
}
|
||||
List<RouteSegmentResult> tunnel = routingHelper.getUpcomingTunnel(1000);
|
||||
if(tunnel != null) {
|
||||
simulatePosition = new SimulationProvider();
|
||||
simulatePosition.startSimulation(tunnel, location);
|
||||
simulatePositionImpl();
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
net.osmand.Location lastKnown = getLastKnownLocation();
|
||||
if (lastKnown != null && lastKnown.getTime() > fixTime) {
|
||||
// false positive case, still strange how we got here with removeMessages
|
||||
return;
|
||||
}
|
||||
}, START_LOCATION_SIMULATION_DELAY);
|
||||
}
|
||||
List<RouteSegmentResult> tunnel = routingHelper.getUpcomingTunnel(1000);
|
||||
if(tunnel != null) {
|
||||
simulatePosition = new SimulationProvider();
|
||||
simulatePosition.startSimulation(tunnel, location);
|
||||
simulatePositionImpl();
|
||||
}
|
||||
}
|
||||
}, START_LOCATION_SIMULATION_DELAY);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,8 +19,7 @@ public class OsmandActionBarActivity extends OsmandInAppPurchaseActivity {
|
|||
|
||||
//should be called after set content view
|
||||
protected void setupHomeButton(){
|
||||
Drawable back = ((OsmandApplication)getApplication()).getUIUtilities().getIcon(R.drawable.ic_arrow_back);
|
||||
back.setColorFilter(ContextCompat.getColor(this, R.color.color_white), PorterDuff.Mode.MULTIPLY);
|
||||
Drawable back = ((OsmandApplication)getApplication()).getUIUtilities().getIcon(R.drawable.ic_arrow_back, R.color.color_white);
|
||||
final ActionBar supportActionBar = getSupportActionBar();
|
||||
if (supportActionBar != null) {
|
||||
supportActionBar.setHomeButtonEnabled(true);
|
||||
|
|
|
@ -13,6 +13,7 @@ import android.net.Uri;
|
|||
import android.os.AsyncTask;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.graphics.drawable.DrawableCompat;
|
||||
import android.support.v7.view.ContextThemeWrapper;
|
||||
import android.text.ClipboardManager;
|
||||
import android.text.TextUtils;
|
||||
|
@ -752,7 +753,10 @@ public class MenuBuilder {
|
|||
public Drawable getRowIcon(Context ctx, String fileName) {
|
||||
Drawable d = RenderingIcons.getBigIcon(ctx, fileName);
|
||||
if (d != null) {
|
||||
d.setColorFilter(app.getResources().getColor(light ? R.color.ctx_menu_bottom_view_icon_light : R.color.ctx_menu_bottom_view_icon_dark), PorterDuff.Mode.SRC_IN);
|
||||
d = DrawableCompat.wrap(d);
|
||||
d.mutate();
|
||||
d.setColorFilter(app.getResources().getColor(light
|
||||
? R.color.ctx_menu_bottom_view_icon_light : R.color.ctx_menu_bottom_view_icon_dark), PorterDuff.Mode.SRC_IN);
|
||||
return d;
|
||||
} else {
|
||||
return null;
|
||||
|
|
|
@ -25,6 +25,7 @@ import net.osmand.data.Amenity;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.osm.AbstractPoiType;
|
||||
import net.osmand.osm.MapPoiTypes;
|
||||
import net.osmand.osm.PoiCategory;
|
||||
import net.osmand.osm.PoiType;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
|
@ -49,6 +50,7 @@ import java.util.Calendar;
|
|||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -344,6 +346,7 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
|
||||
Map<String, List<PoiType>> poiAdditionalCategories = new HashMap<>();
|
||||
AmenityInfoRow cuisineRow = null;
|
||||
List<PoiType> collectedPoiTypes = new ArrayList<>();
|
||||
|
||||
for (Map.Entry<String, String> e : amenity.getAdditionalInfo().entrySet()) {
|
||||
int iconId = 0;
|
||||
|
@ -362,14 +365,15 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
boolean isWiki = false;
|
||||
boolean isText = false;
|
||||
boolean isDescription = false;
|
||||
boolean needLinks = !("population".equals(key)
|
||||
|| "height".equals(key));
|
||||
boolean needLinks = !("population".equals(key) || "height".equals(key));
|
||||
boolean isPhoneNumber = false;
|
||||
boolean isUrl = false;
|
||||
boolean isCuisine = false;
|
||||
int poiTypeOrder = 0;
|
||||
String poiTypeKeyName = "";
|
||||
|
||||
PoiType poiType = amenity.getType().getPoiTypeByKeyName(key);
|
||||
|
||||
AbstractPoiType pt = poiTypes.getAnyPoiAdditionalTypeByKey(key);
|
||||
if (pt == null && !Algorithms.isEmpty(vl) && vl.length() < 50) {
|
||||
pt = poiTypes.getAnyPoiAdditionalTypeByKey(key + "_" + vl);
|
||||
|
@ -501,6 +505,8 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
if (icon == null && isText && iconId == 0) {
|
||||
iconId = R.drawable.ic_action_note_dark;
|
||||
}
|
||||
} else if (poiType != null) {
|
||||
collectedPoiTypes.add(poiType);
|
||||
} else {
|
||||
textPrefix = Algorithms.capitalizeFirstLetterAndLowercase(e.getKey());
|
||||
vl = amenity.unzipContent(e.getValue());
|
||||
|
@ -524,12 +530,10 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
}
|
||||
if (isDescription) {
|
||||
descriptions.add(row);
|
||||
} else {
|
||||
if (!isCuisine) {
|
||||
infoRows.add(row);
|
||||
} else {
|
||||
cuisineRow = row;
|
||||
}
|
||||
} else if (isCuisine) {
|
||||
cuisineRow = row;
|
||||
} else if (poiType == null) {
|
||||
infoRows.add(row);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -568,12 +572,27 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
sb.append(pt.getTranslation());
|
||||
}
|
||||
boolean cuisineOrDish = categoryName.equals(Amenity.CUISINE) || categoryName.equals(Amenity.DISH);
|
||||
CollapsableView collapsableView = getPoiAdditionalCollapsableView(view.getContext(), true, categoryTypes, cuisineOrDish ? cuisineRow : null);
|
||||
CollapsableView collapsableView = getPoiTypeCollapsableView(view.getContext(), true, categoryTypes, true, cuisineOrDish ? cuisineRow : null);
|
||||
infoRows.add(new AmenityInfoRow(poiAdditionalCategoryName, icon, pType.getPoiAdditionalCategoryTranslation(), sb.toString(), true, collapsableView,
|
||||
0, false, false, false, pType.getOrder(), pType.getKeyName(), false, false, false, 1));
|
||||
}
|
||||
}
|
||||
|
||||
if (collectedPoiTypes.size() > 0) {
|
||||
CollapsableView collapsableView = getPoiTypeCollapsableView(view.getContext(), true, collectedPoiTypes, false, null);
|
||||
PoiCategory poiCategory = amenity.getType();
|
||||
Drawable icon = getRowIcon(view.getContext(), poiCategory.getIconKeyName());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (PoiType pt : collectedPoiTypes) {
|
||||
if (sb.length() > 0) {
|
||||
sb.append(" • ");
|
||||
}
|
||||
sb.append(pt.getTranslation());
|
||||
}
|
||||
infoRows.add(new AmenityInfoRow(poiCategory.getKeyName(), icon, poiCategory.getTranslation(), sb.toString(), true, collapsableView,
|
||||
0, false, false, false, 40, poiCategory.getKeyName(), false, false, false, 1));
|
||||
}
|
||||
|
||||
Collections.sort(infoRows, new Comparator<AmenityInfoRow>() {
|
||||
@Override
|
||||
public int compare(AmenityInfoRow row1, AmenityInfoRow row2) {
|
||||
|
@ -664,9 +683,9 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
return params;
|
||||
}
|
||||
|
||||
private CollapsableView getPoiAdditionalCollapsableView(
|
||||
final Context context, boolean collapsed,
|
||||
@NonNull final List<PoiType> categoryTypes, AmenityInfoRow textCuisineRow) {
|
||||
private CollapsableView getPoiTypeCollapsableView(final Context context, boolean collapsed,
|
||||
@NonNull final List<PoiType> categoryTypes,
|
||||
final boolean poiAdditional, AmenityInfoRow textRow) {
|
||||
|
||||
final List<TextViewEx> buttons = new ArrayList<>();
|
||||
|
||||
|
@ -684,9 +703,15 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
PoiUIFilter filter = app.getPoiFilters().getFilterById(PoiUIFilter.STD_PREFIX + amenity.getType().getKeyName());
|
||||
if (filter != null) {
|
||||
filter.clearFilter();
|
||||
filter.setTypeToAccept(amenity.getType(), true);
|
||||
filter.updateTypesToAccept(pt);
|
||||
filter.setFilterByName(pt.getKeyName().replace('_', ':').toLowerCase());
|
||||
if (poiAdditional) {
|
||||
filter.setTypeToAccept(amenity.getType(), true);
|
||||
filter.updateTypesToAccept(pt);
|
||||
filter.setFilterByName(pt.getKeyName().replace('_', ':').toLowerCase());
|
||||
} else {
|
||||
LinkedHashSet<String> accept = new LinkedHashSet<>();
|
||||
accept.add(pt.getKeyName());
|
||||
filter.selectSubTypesToAccept(amenity.getType(), accept);
|
||||
}
|
||||
getMapActivity().showQuickSearch(filter);
|
||||
}
|
||||
}
|
||||
|
@ -699,9 +724,9 @@ public class AmenityMenuBuilder extends MenuBuilder {
|
|||
view.addView(button);
|
||||
}
|
||||
|
||||
if (textCuisineRow != null) {
|
||||
if (textRow != null) {
|
||||
TextViewEx button = buildButtonInCollapsableView(context, true, false, false);
|
||||
String name = textCuisineRow.textPrefix + ": " + textCuisineRow.text.toLowerCase();
|
||||
String name = textRow.textPrefix + ": " + textRow.text.toLowerCase();
|
||||
button.setText(name);
|
||||
view.addView(button);
|
||||
}
|
||||
|
|
|
@ -109,8 +109,7 @@ public class QuickActionListFragment extends BaseOsmAndFragment implements Quick
|
|||
|
||||
private void setUpToolbar(View view) {
|
||||
Toolbar toolbar = (Toolbar) view.findViewById(R.id.custom_toolbar);
|
||||
Drawable back = getMyApplication().getUIUtilities().getIcon(R.drawable.ic_arrow_back);
|
||||
back.setColorFilter(ContextCompat.getColor(getContext(), R.color.color_white), PorterDuff.Mode.MULTIPLY);
|
||||
Drawable back = getMyApplication().getUIUtilities().getIcon(R.drawable.ic_arrow_back, R.color.color_white);
|
||||
toolbar.setNavigationIcon(back);
|
||||
toolbar.setNavigationContentDescription(R.string.access_shared_string_navigate_up);
|
||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
|
|
|
@ -373,7 +373,10 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
|||
if (mainLayer != null) {
|
||||
animatedDraggingThread.stopAnimating();
|
||||
currentViewport.setZoomAndAnimation(zoom, 0, 0);
|
||||
currentViewport.setRotate(zoom > LOWEST_ZOOM_TO_ROTATE ? rotate : 0);
|
||||
if (zoom <= LOWEST_ZOOM_TO_ROTATE) {
|
||||
rotate = 0;
|
||||
}
|
||||
currentViewport.setRotate(rotate);
|
||||
refreshMap();
|
||||
}
|
||||
}
|
||||
|
@ -383,7 +386,10 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
|||
animatedDraggingThread.stopAnimating();
|
||||
currentViewport.setZoomAndAnimation(zoom, 0);
|
||||
currentViewport.setMapDensity(mapDensity);
|
||||
currentViewport.setRotate(zoom > LOWEST_ZOOM_TO_ROTATE ? rotate : 0);
|
||||
if (zoom <= LOWEST_ZOOM_TO_ROTATE) {
|
||||
rotate = 0;
|
||||
}
|
||||
currentViewport.setRotate(rotate);
|
||||
refreshMap();
|
||||
}
|
||||
}
|
||||
|
@ -899,7 +905,10 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
|||
protected void zoomToAnimate(int zoom, double zoomToAnimate, boolean notify) {
|
||||
if (mainLayer != null && getMaxZoom() >= zoom && getMinZoom() <= zoom) {
|
||||
currentViewport.setZoomAndAnimation(zoom, zoomToAnimate);
|
||||
currentViewport.setRotate(zoom > LOWEST_ZOOM_TO_ROTATE ? rotate : 0);
|
||||
if (zoom <= LOWEST_ZOOM_TO_ROTATE) {
|
||||
rotate = 0;
|
||||
}
|
||||
currentViewport.setRotate(rotate);
|
||||
refreshMap();
|
||||
if (notify && locationListener != null) {
|
||||
locationListener.locationChanged(getLatitude(), getLongitude(), this);
|
||||
|
|
Loading…
Reference in a new issue