Merge remote-tracking branch 'origin/master'

This commit is contained in:
Chumva 2018-05-25 18:53:25 +03:00
commit e5291a8a41
6 changed files with 81 additions and 45 deletions

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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;

View file

@ -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);
}

View file

@ -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() {

View file

@ -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);